From ee9c9e6051e4bcbd02d7710473068d8ddab89cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pokorn=C3=BD?= Date: Mon, 15 Jun 2015 18:23:13 +0200 Subject: [PATCH 001/524] Spell/Script: Mirror Image fix - solves #14877 --- src/server/scripts/Pet/pet_mage.cpp | 182 +++++++++++++++++++++++++++- 1 file changed, 179 insertions(+), 3 deletions(-) diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 0d6353cfb8..0fd5a82d7e 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -24,11 +24,21 @@ #include "ScriptedCreature.h" #include "CombatAI.h" #include "Pet.h" +#include "PetAI.h" enum MageSpells { SPELL_MAGE_CLONE_ME = 45204, - SPELL_MAGE_MASTERS_THREAT_LIST = 58838 + SPELL_MAGE_MASTERS_THREAT_LIST = 58838, + SPELL_MAGE_FROST_BOLT = 59638, + SPELL_MAGE_FIRE_BLAST = 59637 +}; + +enum MirrorImageTimers +{ + TIMER_MIRROR_IMAGE_INIT = 0, + TIMER_MIRROR_IMAGE_FROST_BOLT = 4000, + TIMER_MIRROR_IMAGE_FIRE_BLAST = 6000 }; class npc_pet_mage_mirror_image : public CreatureScript @@ -40,20 +50,185 @@ class npc_pet_mage_mirror_image : public CreatureScript { npc_pet_mage_mirror_imageAI(Creature* creature) : CasterAI(creature) { } + void Init() + { + Unit* owner = me->GetCharmerOrOwner(); + + std::list targets; + Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f); + Trinity::UnitListSearcher searcher(me, targets, u_check); + me->VisitNearbyObject(40.0f, searcher); + + Unit* highestThreatUnit = NULL; + float highestThreat = 0.0f; + Unit* nearestPlayer = NULL; + for (std::list::const_iterator iter = targets.begin(); iter != targets.end(); ++iter) + { + // Consider only units without CC + if (!(*iter)->HasBreakableByDamageCrowdControlAura((*iter))) + { + // Take first found unit + if (!highestThreatUnit && (*iter)->GetTypeId() != TYPEID_PLAYER) + { + highestThreatUnit = (*iter); + continue; + } + if (!nearestPlayer && ((*iter)->GetTypeId() == TYPEID_PLAYER)) + { + nearestPlayer = (*iter); + continue; + } + // else compare best fit unit with current unit + ThreatContainer::StorageType triggers = (*iter)->getThreatManager().getThreatList(); + for (ThreatContainer::StorageType::const_iterator trig_citr = triggers.begin(); trig_citr != triggers.end(); ++trig_citr) + { + // Try to find threat referenced to owner + if ((*trig_citr)->getTarget() == owner) + { + // Check if best fit hostile unit hs lower threat than this current unit + if (highestThreat < (*trig_citr)->getThreat()) + { + // If so, update best fit unit + highestThreat = (*trig_citr)->getThreat(); + highestThreatUnit = (*iter); + break; + } + } + } + // In case no unit with threat was found so far, always check for nearest unit (only for players) + if ((*iter)->GetTypeId() == TYPEID_PLAYER) + { + // If this player is closer than the previous one, update it + if (me->GetDistance((*iter)->GetPosition()) < me->GetDistance(nearestPlayer->GetPosition())) + nearestPlayer = (*iter); + } + } + } + // Prioritize units with threat referenced to owner + if (highestThreat > 0.0f && highestThreatUnit) + me->Attack(highestThreatUnit, false); + + // If there is no such target, try to attack nearest hostile unit if such exists + else if (nearestPlayer) + me->Attack(nearestPlayer, false); + } + + bool IsInThreatList(Unit* target) + { + Unit* owner = me->GetCharmerOrOwner(); + + std::list targets; + Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f); + Trinity::UnitListSearcher searcher(me, targets, u_check); + me->VisitNearbyObject(40.0f, searcher); + + for (std::list::const_iterator iter = targets.begin(); iter != targets.end(); ++iter) + { + if ((*iter) == target) + { + // Consider only units without CC + if (!(*iter)->HasBreakableByDamageCrowdControlAura((*iter))) + { + ThreatContainer::StorageType triggers = (*iter)->getThreatManager().getThreatList(); + for (ThreatContainer::StorageType::const_iterator trig_citr = triggers.begin(); trig_citr != triggers.end(); ++trig_citr) + { + // Try to find threat referenced to owner + if ((*trig_citr)->getTarget() == owner) + return true; + } + } + } + } + return false; + } + void InitializeAI() override { CasterAI::InitializeAI(); Unit* owner = me->GetOwner(); if (!owner) return; - // Inherit Master's Threat List (not yet implemented) - owner->CastSpell((Unit*)NULL, SPELL_MAGE_MASTERS_THREAT_LIST, true); + // here mirror image casts on summoner spell (not present in client dbc) 49866 // here should be auras (not present in client dbc): 35657, 35658, 35659, 35660 selfcast by mirror images (stats related?) // Clone Me! owner->CastSpell(me, SPELL_MAGE_CLONE_ME, false); } + void EnterCombat(Unit* who) override + { + if (me->GetVictim() && !me->GetVictim()->HasBreakableByDamageCrowdControlAura(me)) + { + me->CastSpell(who, SPELL_MAGE_FIRE_BLAST, false); + events.ScheduleEvent(SPELL_MAGE_FROST_BOLT, TIMER_MIRROR_IMAGE_INIT); + events.ScheduleEvent(SPELL_MAGE_FIRE_BLAST, TIMER_MIRROR_IMAGE_FIRE_BLAST); + } + else + EnterEvadeMode(); + } + + void Reset() override + { + events.Reset(); + } + + void UpdateAI(uint32 diff) override + { + Unit* owner = me->GetCharmerOrOwner(); + Unit* target = owner->getAttackerForHelper(); + + events.Update(diff); + + // prevent CC interrupts by images + if (me->GetVictim() && me->EnsureVictim()->HasBreakableByDamageCrowdControlAura(me)) + { + me->InterruptNonMeleeSpells(false); + return; + } + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + if (!owner) + return; + + // assign target if image doesnt have any or the target is not actual + if (me->GetVictim() && me->GetVictim() != target || !me->GetVictim()) + { + Unit* ownerTarget = NULL; + if (Player* owner = me->GetCharmerOrOwner()->ToPlayer()) + ownerTarget = owner->GetSelectedUnit(); + + // recognize which victim will be choosen + if (ownerTarget && ownerTarget->GetTypeId() == TYPEID_PLAYER) + { + if (!ownerTarget->HasBreakableByDamageCrowdControlAura(ownerTarget)) + me->Attack(ownerTarget, false); + } + else if (ownerTarget && (ownerTarget->GetTypeId() != TYPEID_PLAYER) && IsInThreatList(ownerTarget)) + { + if (!ownerTarget->HasBreakableByDamageCrowdControlAura(ownerTarget)) + me->Attack(ownerTarget, false); + } + else + Init(); + } + + if (uint32 spellId = events.ExecuteEvent()) + { + if (spellId == SPELL_MAGE_FROST_BOLT) + { + events.ScheduleEvent(SPELL_MAGE_FROST_BOLT, TIMER_MIRROR_IMAGE_FROST_BOLT); + DoCastVictim(spellId); + } + else if (spellId == SPELL_MAGE_FIRE_BLAST) + { + DoCastVictim(spellId); + events.ScheduleEvent(SPELL_MAGE_FIRE_BLAST, TIMER_MIRROR_IMAGE_FIRE_BLAST); + } + } + } + // Do not reload Creature templates on evade mode enter - prevent visual lost void EnterEvadeMode() override { @@ -68,6 +243,7 @@ class npc_pet_mage_mirror_image : public CreatureScript me->GetMotionMaster()->Clear(false); me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, me->GetFollowAngle(), MOTION_SLOT_ACTIVE); } + Init(); } }; From 7414041af0d49f256994850cdb98593f9f5cfb09 Mon Sep 17 00:00:00 2001 From: robinsch Date: Tue, 7 Jul 2015 10:20:06 +0200 Subject: [PATCH 002/524] SmartAI: Added the possibility to despawn object with action 41 (SMART_ACTION_FORCE_DESPAWN) --- .../game/AI/SmartScripts/SmartScript.cpp | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 267c038faa..88cb351060 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1017,16 +1017,21 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { - if (!IsCreature(*itr)) - continue; - - if ((*itr)->ToUnit()->IsAlive() && IsSmart((*itr)->ToCreature())) + if (Creature* target = (*itr)->ToCreature()) { - ENSURE_AI(SmartAI, (*itr)->ToCreature()->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick - ENSURE_AI(SmartAI, (*itr)->ToCreature()->AI())->StartDespawn(); + if (target->IsAlive() && IsSmart(target)) + { + ENSURE_AI(SmartAI, target->AI())->SetDespawnTime(e.action.forceDespawn.delay + 1); // Next tick + ENSURE_AI(SmartAI, target->AI())->StartDespawn(); + } + else + target->DespawnOrUnsummon(e.action.forceDespawn.delay); + } + else if (GameObject* goTarget = (*itr)->ToGameObject()) + { + if (IsSmartGO(goTarget)) + goTarget->SetRespawnTime(e.action.forceDespawn.delay + 1); } - else - (*itr)->ToCreature()->DespawnOrUnsummon(e.action.forceDespawn.delay); } delete targets; From 6d080d0c44b943fe93ad93b07a99d481975f9d58 Mon Sep 17 00:00:00 2001 From: chaodhib Date: Tue, 1 Sep 2015 23:21:43 +0200 Subject: [PATCH 003/524] Core/Spells: Make players immune to the taunt aura. --- src/server/game/Entities/Player/Player.cpp | 11 +++++++++++ src/server/game/Entities/Player/Player.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 88d7dfa638..3e4e516edc 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2510,6 +2510,17 @@ void Player::RemoveFromWorld() } } +bool Player::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const +{ + // players are immune to taunt (the aura and the spell effect). + if (spellInfo->Effects[index].IsAura(SPELL_AURA_MOD_TAUNT)) + return true; + if (spellInfo->Effects[index].IsEffect(SPELL_EFFECT_ATTACK_ME)) + return true; + + return Unit::IsImmunedToSpellEffect(spellInfo, index); +} + void Player::RegenerateAll() { //if (m_regenTimer <= 500) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index a031840a1d..ef252e0243 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1118,6 +1118,8 @@ class Player : public Unit, public GridObject static bool BuildEnumData(PreparedQueryResult result, WorldPacket* data); + bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const override; // override Unit::IsImmunedToSpellEffect + void SetInWater(bool apply); bool IsInWater() const override { return m_isInWater; } From 946fdbc06b46ee3a357ebfff1128d9d9b38d83d0 Mon Sep 17 00:00:00 2001 From: treeston Date: Wed, 9 Sep 2015 18:47:50 +0200 Subject: [PATCH 004/524] Allow player-created temporary summons (quest "helper" NPCs summoned by item etc.) to contribute to the 50% player damage requirement. Fixes quests such as "Valduran the Stormborn" (12984) or "The Air Stands Still" (13125) which previously required the player to out-damage the "helper" NPC to get credit. --- 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 0978adc181..f6632dac4a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -721,7 +721,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam if (!victim->ToCreature()->hasLootRecipient()) victim->ToCreature()->SetLootRecipient(this); - if (IsControlledByPlayer()) + if (IsControlledByPlayer() || (ToTempSummon() && ToTempSummon()->GetSummoner() && ToTempSummon()->GetSummoner()->GetTypeId() == TYPEID_PLAYER)) victim->ToCreature()->LowerPlayerDamageReq(health < damage ? health : damage); } From e556676bf67a208cfe579c54a04ec121ae349981 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sat, 12 Sep 2015 10:51:34 +0200 Subject: [PATCH 005/524] DB/World: add VerifiedBuild field to creature/gameobject_questitem --- sql/updates/world/2015_09_12_00_world_335.sql | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 sql/updates/world/2015_09_12_00_world_335.sql diff --git a/sql/updates/world/2015_09_12_00_world_335.sql b/sql/updates/world/2015_09_12_00_world_335.sql new file mode 100644 index 0000000000..d76511a05f --- /dev/null +++ b/sql/updates/world/2015_09_12_00_world_335.sql @@ -0,0 +1,32 @@ + +-- `creature_questitem`.`VerifiedBuild` + +ALTER TABLE `creature_questitem` + ADD COLUMN `VerifiedBuild` SMALLINT(5) NOT NULL DEFAULT '0'; + +UPDATE `creature_questitem` SET `VerifiedBuild` = -12340 WHERE `CreatureEntry` = 38545; +UPDATE `creature_questitem` SET `VerifiedBuild` = 11159 WHERE `CreatureEntry` = 138; +UPDATE `creature_questitem` SET `VerifiedBuild` = 12340 WHERE `CreatureEntry` IN (3, 6, 30, 36, 38, 40, 43, 46, 48, 54, 60, 61, 66, 68, 69, 74, 78, 79, 80, 89, 92, 94, 95, 97, 98, 99, 100, 103, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 127, 128, 151, 152, 154, 157, 167, 171, 190, 193, 196, 197, 198, 199, 202, 203, 205, 206, 210, 212, 213, 215, 217, 218, 222, 223, 225, 226, 227, 228, 232, 233, 234, 235, 237, 238, 239, 240, 241, 244, 246, 247, 248, 250, 251, 252, 253, 255, 257, 258, 261, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 284, 285, 288, 289, 294, 295, 297, 299, 300, 302, 304, 305, 306, 307, 308, 311, 313, 314, 315, 325, 327, 328, 329, 330, 331, 332, 334, 335, 338, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 352, 353, 356, 358, 359, 372, 374, 375, 376, 377, 379, 381, 382, 383, 384, 385, 390, 391, 392, 395, 397, 412, 415, 416, 417, 422, 423, 424, 426, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 440, 441, 442, 445, 446, 448, 449, 450, 452, 453, 454, 456, 458, 459, 460, 461, 462, 464, 465, 466, 467, 468, 469, 471, 472, 473, 474, 475, 476, 478, 480, 481, 482, 483, 485, 486, 487, 488, 489, 490, 491, 494, 495, 499, 500, 501, 502, 503, 504, 505, 506, 507, 510, 511, 513, 514, 515, 517, 518, 519, 520, 521, 522, 523, 524, 525, 531, 533, 534, 539, 541, 543, 544, 545, 547, 548, 550, 565, 568, 569, 570, 572, 573, 574, 575, 576, 578, 579, 580, 582, 583, 584, 587, 588, 589, 590, 594, 595, 596, 597, 598, 599, 603, 604, 615, 616, 619, 620, 622, 623, 624, 625, 626, 628, 633, 634, 636, 639, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 656, 657, 658, 659, 660, 661, 663, 664, 667, 669, 670, 671, 672, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 694, 696, 697, 698, 699, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 721, 723, 724, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 750, 751, 752, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 775, 777, 780, 781, 782, 783, 784, 785, 786, 787, 789, 790, 791, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 818, 819, 820, 821, 822, 823, 824, 826, 827, 828, 829, 830, 831, 832, 833, 834, 836, 837, 840, 842, 843, 844, 846, 847, 848, 849, 850, 851, 853, 854, 855, 856, 857, 858, 859, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 873, 874, 875, 876, 877, 878, 879, 880, 881, 883, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 898, 900, 903, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 920, 921, 922, 923, 925, 926, 927, 928, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 954, 955, 956, 957, 958, 959, 960, 963, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 999, 1000, 1001, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1057, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1081, 1082, 1083, 1084, 1085, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1103, 1104, 1105, 1106, 1108, 1109, 1110, 1111, 1112, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1137, 1138, 1139, 1140, 1141, 1142, 1144, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1169, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1222, 1224, 1225, 1226, 1228, 1229, 1231, 1232, 1233, 1234, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1289, 1291, 1292, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1358, 1360, 1362, 1364, 1365, 1366, 1367, 1368, 1370, 1371, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1385, 1386, 1387, 1388, 1393, 1395, 1397, 1398, 1399, 1400, 1402, 1404, 1405, 1407, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1504, 1505, 1506, 1507, 1508, 1509, 1511, 1512, 1513, 1514, 1515, 1516, 1518, 1519, 1520, 1521, 1522, 1523, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1543, 1544, 1545, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1632, 1642, 1645, 1646, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1706, 1707, 1708, 1711, 1713, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1723, 1724, 1725, 1726, 1727, 1729, 1731, 1732, 1733, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1763, 1765, 1766, 1767, 1768, 1769, 1770, 1772, 1773, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1787, 1788, 1789, 1791, 1793, 1794, 1795, 1796, 1797, 1800, 1801, 1802, 1804, 1805, 1806, 1808, 1809, 1812, 1813, 1815, 1816, 1817, 1821, 1822, 1824, 1826, 1827, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 631, 1851, 1852, 1853, 1854, 1855, 1860, 1863, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1880, 1883, 1884, 1885, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1901, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1931, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1963, 1964, 1965, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1981, 1983, 1984, 1985, 1986, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2017, 2018, 2019, 2020, 2021, 2022, 2025, 2027, 2029, 2030, 2031, 2032, 2033, 2034, 2038, 2039, 2041, 2042, 2043, 2044, 2045, 2046, 2050, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2086, 2089, 2090, 2091, 2092, 2093, 2094, 2096, 2097, 2098, 2099, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2134, 2135, 2136, 2137, 2140, 2142, 2149, 2150, 2151, 2152, 2153, 2155, 2156, 2157, 2158, 2159, 2160, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2198, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2214, 2215, 2216, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2260, 2261, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2274, 2275, 2276, 2277, 2278, 2283, 2284, 2285, 2287, 2299, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2326, 2327, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2354, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2425, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2442, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2464, 2465, 2466, 2468, 2469, 2470, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2614, 2615, 2616, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2630, 2634, 2635, 2636, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2662, 2663, 2664, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2703, 2704, 2705, 2706, 2707, 2708, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2723, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2742, 2743, 2744, 2745, 2748, 2749, 2751, 2752, 2753, 2754, 2755, 2757, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2798, 2799, 2801, 2802, 2803, 2804, 2805, 2806, 2808, 2810, 2812, 2814, 2816, 2817, 2818, 2819, 2820, 2821, 2829, 2830, 2831, 2832, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2870, 2876, 2878, 2879, 2880, 2881, 2887, 2888, 2892, 2893, 2894, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2934, 2937, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3147, 3149, 3150, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3260, 3261, 3263, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3300, 3301, 3304, 3305, 3306, 3309, 3310, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3421, 3424, 3425, 3426, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3438, 3439, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3461, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3560, 3561, 3562, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3577, 3578, 3579, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3619, 3620, 3621, 3622, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3636, 3637, 3638, 3639, 3640, 3641, 3644, 3649, 3650, 3652, 3653, 3654, 3655, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3669, 3670, 3671, 3672, 3673, 3674, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3696, 3698, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3711, 3712, 3713, 3715, 3717, 3721, 3722, 3725, 3727, 3728, 3730, 3732, 3733, 3734, 3735, 3736, 3737, 3739, 3740, 3742, 3743, 3745, 3746, 3748, 3749, 3750, 3752, 3754, 3755, 3757, 3758, 3759, 3762, 3763, 3765, 3767, 3770, 3771, 3772, 3773, 3774, 3779, 3780, 3781, 3782, 3783, 3784, 3789, 3791, 3792, 3794, 3795, 3797, 3799, 3801, 3802, 3803, 3804, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3823, 3824, 3825, 3833, 3834, 3835, 3836, 3837, 3838, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3853, 3854, 3855, 3857, 3859, 3861, 3862, 3863, 3864, 3865, 3866, 3868, 3872, 3873, 3875, 3877, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3906, 3907, 3908, 3909, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3967, 3968, 3969, 3970, 3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3998, 3999, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4040, 4041, 4042, 4043, 4044, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4056, 4057, 4059, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4104, 4107, 4109, 4110, 4111, 4112, 4113, 4114, 4116, 4117, 4118, 4119, 4120, 4124, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4138, 4139, 4140, 4142, 4143, 4144, 4146, 4147, 4150, 4151, 4154, 4155, 4156, 4158, 4159, 4160, 4161, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4175, 4177, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4200, 4201, 4202, 4203, 4204, 4205, 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221, 4222, 4223, 4225, 4226, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4240, 4241, 4242, 4243, 4244, 4248, 4249, 4250, 4251, 4252, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4314, 4316, 4317, 4319, 4320, 4321, 4323, 4324, 4328, 4329, 4331, 4334, 4339, 4341, 4342, 4343, 4344, 4345, 4351, 4352, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4366, 4368, 4370, 4371, 4374, 4376, 4377, 4378, 4379, 4380, 4382, 4385, 4386, 4387, 4388, 4389, 4390, 4391, 4392, 4393, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4407, 4409, 4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4427, 4428, 4429, 4430, 4435, 4436, 4437, 4438, 4440, 4442, 4444, 4445, 4446, 4449, 23450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4472, 4474, 4475, 4476, 4479, 4480, 4481, 4483, 4484, 4485, 4486, 4488, 4489, 4490, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4525, 4526, 4528, 4530, 4531, 4532, 4534, 4535, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4623, 4624, 4625, 4627, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4692, 4693, 4694, 4695, 4696, 4697, 4699, 4700, 4701, 4702, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4752, 4753, 4772, 4773, 4775, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4791, 4792, 4794, 4795, 4798, 4799, 4802, 4803, 4805, 4807, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 4825, 4827, 4829, 4830, 4831, 4832, 4834, 4841, 4842, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4860, 4861, 4863, 4872, 4875, 4876, 4877, 4878, 4879, 4880, 4883, 4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4902, 4921, 4922, 4923, 4924, 4926, 4941, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4971, 4972, 4973, 4974, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4995, 4996, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5081, 5082, 5083, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5099, 5100, 5101, 5102, 5103, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 5128, 5129, 5130, 5132, 5133, 5134, 5135, 5137, 5138, 5139, 5140, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, 5165, 5166, 5167, 5169, 5170, 5171, 5172, 5173, 5174, 5175, 5177, 5178, 5184, 5185, 5186, 5188, 5189, 5190, 5191, 5193, 5194, 5195, 5196, 5197, 5198, 5199, 5200, 5202, 5204, 5224, 5225, 5226, 5228, 5229, 5232, 5234, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 5243, 5244, 5245, 5246, 5247, 5249, 5251, 5253, 5254, 5255, 5256, 5258, 5259, 5260, 5261, 5262, 5263, 5267, 5268, 5269, 5270, 5271, 5272, 5273, 5274, 5276, 5277, 5278, 5280, 5283, 5286, 5287, 5288, 5291, 5292, 5293, 5295, 5296, 5297, 5299, 5300, 5304, 5305, 5306, 5307, 5308, 5312, 5314, 5317, 5319, 5320, 5327, 5328, 5331, 5332, 5333, 5334, 5335, 5336, 5337, 5343, 5345, 5346, 5347, 5349, 5350, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5366, 5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5409, 5411, 5412, 5413, 5414, 5416, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5438, 5439, 5440, 5441, 5444, 5446, 5448, 5449, 5450, 5451, 5452, 5453, 5454, 5455, 5456, 5457, 5458, 5459, 5460, 5461, 5462, 5464, 5465, 5466, 5467, 5469, 5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 5479, 5480, 5481, 5482, 5483, 5484, 5485, 5489, 5490, 5491, 5492, 5493, 5494, 5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, 5523, 5543, 5546, 5547, 5564, 5565, 5566, 5567, 5568, 5569, 5570, 5591, 5592, 5593, 5594, 5595, 5597, 5598, 5599, 5600, 5601, 5602, 5603, 5605, 5606, 5607, 5608, 5609, 5610, 5611, 5612, 5613, 5614, 5615, 5616, 5617, 5618, 5620, 5622, 5623, 5624, 5634, 5635, 5636, 5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, 5669, 5670, 5671, 5672, 5674, 5675, 5676, 5677, 5679, 5680, 5681, 5682, 5683, 5685, 5686, 5687, 5688, 5689, 5690, 5691, 5692, 5693, 5694, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708, 5709, 5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 5720, 5721, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 5734, 5735, 5736, 5738, 5739, 5741, 5742, 5743, 5744, 5745, 5747, 5748, 5749, 5750, 5752, 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765, 5766, 5767, 5768, 5769, 5770, 5771, 5774, 5775, 5780, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5792, 5797, 5798, 5799, 5800, 5806, 5807, 5808, 5809, 5810, 5811, 5812, 5814, 5815, 5816, 5817, 5819, 5820, 5821, 5822, 5823, 5824, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 5833, 5834, 5835, 5836, 5837, 5838, 5839, 5840, 5841, 5842, 5843, 5844, 5846, 5847, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 5855, 5856, 5857, 5858, 5859, 5860, 5861, 5862, 5863, 5864, 5865, 5870, 5871, 5873, 5874, 5875, 5878, 5879, 5880, 5881, 5882, 5883, 5884, 5885, 5886, 5887, 5888, 5889, 5890, 5891, 5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5905, 5906, 5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 5927, 5929, 5930, 5931, 5932, 5933, 5934, 5935, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5950, 5951, 5952, 5953, 5955, 5957, 5958, 5974, 5975, 5976, 5977, 5978, 5979, 5981, 5982, 5984, 5985, 5988, 5990, 5991, 5992, 5993, 5994, 5996, 5997, 5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 6021, 6026, 6027, 6028, 6030, 6031, 6033, 6034, 6035, 6047, 6066, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6086, 6087, 6089, 6090, 6091, 6093, 6094, 6109, 6110, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 6118, 6119, 6120, 6121, 6122, 6123, 6124, 6125, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6166, 6167, 6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6193, 6194, 6195, 6196, 6198, 6199, 6200, 6201, 6202, 6206, 6207, 6208, 6209, 6210, 6211, 6212, 6213, 6215, 6218, 6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 6239, 6240, 6241, 6243, 6244, 6245, 6246, 6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 6266, 6267, 6268, 6271, 6272, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6297, 6298, 6299, 6300, 6301, 6306, 6328, 6329, 6347, 6348, 6349, 6350, 6351, 6352, 6366, 6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6382, 6386, 6387, 6388, 6389, 6390, 6391, 6392, 6393, 6394, 6395, 6407, 6408, 6410, 6411, 6412, 6426, 6427, 6446, 6466, 6467, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, 6499, 6500, 6501, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512, 6513, 6514, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6527, 6546, 6547, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 6555, 6556, 6557, 6559, 6560, 6566, 6567, 6568, 6569, 6570, 6574, 6575, 6576, 6577, 6578, 6579, 6581, 6582, 6583, 6584, 6585, 6586, 6606, 6607, 6626, 6646, 6647, 6648, 6649, 6650, 6651, 6652, 6653, 6667, 6668, 6669, 6670, 6706, 6707, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735, 6736, 6737, 6738, 6739, 6740, 6741, 6746, 6747, 6748, 6749, 6766, 6768, 6771, 6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6806, 6807, 6826, 6827, 6846, 6866, 6867, 6868, 6886, 6887, 6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913, 6927, 6928, 6929, 6930, 6932, 6946, 6966, 6986, 6987, 7007, 7009, 7010, 7011, 7012, 7015, 7016, 7017, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7055, 7056, 7057, 7067, 7068, 7069, 7070, 7071, 7072, 7073, 7074, 7075, 7076, 7077, 7078, 7079, 7086, 7087, 7088, 7089, 7091, 7092, 7093, 7097, 7098, 7099, 7100, 7101, 7104, 7105, 7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, 7114, 7115, 7118, 7120, 7125, 7126, 7132, 7135, 7136, 7137, 7138, 7139, 7149, 7153, 7154, 7155, 7156, 7157, 7158, 7161, 7166, 7167, 7168, 7170, 7172, 7175, 7206, 7207, 7208, 7209, 7226, 7228, 7229, 7230, 7231, 7232, 7233, 7234, 7235, 7246, 7247, 7266, 7267, 7268, 7269, 7271, 7272, 7273, 7274, 7275, 7276, 7286, 7287, 7288, 7290, 7291, 7292, 7293, 7294, 7295, 7296, 7297, 7298, 7307, 7308, 7309, 7310, 7311, 7312, 7313, 7315, 7316, 7317, 7318, 7319, 7320, 7321, 7322, 7323, 7324, 7325, 7327, 7328, 7329, 7332, 7333, 7334, 7335, 7337, 7340, 7341, 7342, 7343, 7344, 7345, 7346, 7347, 7348, 7349, 7351, 7352, 7353, 7354, 7355, 7356, 7357, 7358, 7360, 7361, 7363, 7364, 7365, 7366, 7367, 7368, 7369, 7370, 7371, 7372, 7376, 7379, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7389, 7390, 7391, 7392, 7394, 7395, 7396, 7397, 7398, 7399, 7400, 7401, 7402, 7403, 7404, 7405, 7406, 7407, 7408, 7409, 7410, 7411, 7412, 7413, 7414, 7415, 7416, 7423, 7424, 7425, 7427, 7428, 7429, 7430, 7431, 7432, 7433, 7434, 7435, 7436, 7437, 7438, 7439, 7440, 7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, 7451, 7452, 7453, 7454, 7455, 7456, 7457, 7458, 7459, 7460, 7461, 7462, 7463, 7464, 7465, 7466, 7467, 7468, 7469, 7483, 7484, 7485, 7486, 7487, 7489, 7505, 7506, 7523, 7524, 7527, 7543, 7544, 7545, 7549, 7550, 7553, 7555, 7560, 7562, 7564, 7565, 7566, 7567, 7568, 7569, 7572, 7583, 7584, 7603, 7604, 7605, 7606, 7607, 7608, 7623, 7643, 7664, 7665, 7666, 7667, 7668, 7669, 7670, 7671, 7683, 7684, 7686, 7687, 7690, 7704, 7706, 7707, 7708, 7714, 7724, 7725, 7726, 7727, 7728, 7729, 7730, 7731, 7732, 7733, 7734, 7735, 7736, 7737, 7738, 7739, 7740, 7744, 7749, 7750, 7763, 7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779, 7780, 7783, 7784, 7785, 7786, 7787, 7788, 7789, 7790, 7792, 7793, 7794, 7795, 7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803, 7804, 7805, 7806, 7807, 7808, 7809, 7823, 7824, 7825, 7826, 7843, 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7851, 7852, 7853, 7854, 7855, 7856, 7857, 7858, 7863, 7864, 7865, 7866, 7867, 7868, 7869, 7870, 7871, 7872, 7873, 7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881, 7882, 7883, 7884, 7885, 7886, 7895, 7897, 7899, 7900, 7901, 7902, 7903, 7904, 7907, 7915, 7916, 7917, 7918, 7936, 7937, 7939, 7940, 7941, 7942, 7943, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957, 7975, 7976, 7977, 7978, 7980, 7995, 7996, 7997, 7998, 7999, 8015, 8016, 8017, 8018, 8019, 8020, 8021, 8022, 8023, 8024, 8025, 8026, 8035, 8055, 8075, 8095, 8096, 8115, 8116, 8117, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128, 8129, 8130, 8131, 8136, 8137, 8138, 8139, 8140, 8141, 8142, 8143, 8144, 8145, 8146, 8147, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, 8158, 8159, 8160, 8161, 8176, 8177, 8178, 8179, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8207, 8208, 8210, 8211, 8212, 8213, 8214, 8215, 8216, 8217, 8218, 8219, 8236, 8256, 8257, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8296, 8297, 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310, 8311, 8317, 8318, 8319, 8320, 8324, 8336, 8337, 8338, 8356, 8357, 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8376, 8378, 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, 8408, 8409, 8416, 8417, 8418, 8419, 8420, 8421, 8436, 8437, 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8446, 8447, 8477, 8478, 8479, 8480, 8496, 8497, 8503, 8504, 8506, 8507, 8508, 8509, 8510, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8534, 8535, 8538, 8539, 8540, 8541, 8542, 8543, 8544, 8545, 8546, 8547, 8548, 8550, 8551, 8553, 8554, 8555, 8556, 8557, 8558, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8576, 8578, 8579, 8580, 8581, 8582, 8583, 8584, 8585, 8586, 8587, 8588, 8596, 8597, 8598, 8600, 8601, 8602, 8603, 8605, 8606, 8607, 8608, 8609, 8610, 8611, 8612, 8615, 8616, 8617, 8636, 8637, 8656, 8657, 8658, 8659, 8660, 8661, 8662, 8664, 8665, 8666, 8667, 8668, 8669, 8670, 8671, 8672, 8673, 8674, 8675, 8678, 8679, 8680, 8681, 8696, 8716, 8717, 8718, 8719, 8720, 8721, 8722, 8723, 8724, 8736, 8737, 8738, 8756, 8757, 8758, 8759, 8760, 8761, 8762, 8763, 8764, 8766, 8767, 8776, 8816, 8836, 8837, 8856, 8876, 8877, 8878, 8879, 8881, 8882, 8883, 8884, 8885, 8886, 8888, 8889, 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901, 8902, 8903, 8904, 8905, 8906, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916, 8917, 8920, 8921, 8922, 8923, 8924, 8925, 8926, 8927, 8928, 8929, 8931, 8932, 8933, 8934, 8937, 8956, 8957, 8958, 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8976, 8977, 8978, 8979, 8980, 8981, 8982, 8983, 8996, 8997, 9016, 9017, 9018, 9019, 9020, 9021, 9022, 9023, 9024, 9025, 9026, 9027, 9028, 9029, 9030, 9031, 9032, 9033, 9034, 9035, 9036, 9037, 9038, 9039, 9040, 9041, 9042, 9043, 9044, 9045, 9046, 9047, 9056, 9076, 9077, 9078, 9079, 9080, 9081, 9082, 9083, 9084, 9085, 9086, 9087, 9096, 9097, 9098, 9099, 9116, 9117, 9118, 9119, 9136, 9156, 9157, 9158, 9162, 9163, 9164, 9165, 9166, 9167, 9176, 9177, 9178, 9179, 9196, 9197, 9198, 9199, 9200, 9201, 9216, 9217, 9218, 9219, 9236, 9237, 9238, 9239, 9240, 9241, 9256, 9257, 9258, 9259, 9260, 9261, 9262, 9263, 9264, 9265, 9266, 9267, 9268, 9269, 9270, 9271, 9272, 9273, 9274, 9296, 9297, 9298, 9299, 9316, 9317, 9318, 9319, 9336, 9356, 9376, 9377, 9396, 9397, 9398, 9416, 9436, 9437, 9438, 9439, 9441, 9442, 9443, 9445, 9447, 9448, 9449, 9450, 9451, 9452, 9453, 9454, 9456, 9457, 9458, 9459, 9460, 9461, 9462, 9464, 9465, 9467, 9476, 9477, 9496, 9498, 9499, 9500, 9501, 9502, 9503, 9516, 9517, 9518, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9536, 9537, 9538, 9539, 9540, 9541, 9543, 9544, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9552, 9553, 9554, 9555, 9556, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9568, 9580, 9583, 9584, 9596, 9598, 9600, 9601, 9602, 9604, 9605, 9616, 9618, 9619, 9620, 9621, 9622, 9623, 9636, 9637, 9656, 9657, 9660, 9662, 9676, 9677, 9678, 9679, 9680, 9681, 9682, 9683, 9684, 9687, 9688, 9689, 9690, 9691, 9692, 9693, 9694, 9695, 9696, 9697, 9698, 9699, 9700, 9701, 9706, 9707, 9708, 9716, 9717, 9718, 9736, 9776, 9777, 9778, 9779, 9796, 9816, 9817, 9818, 9819, 9836, 9856, 9857, 9858, 9859, 9860, 9861, 9862, 9876, 9877, 9878, 9879, 9916, 9937, 9938, 9956, 9976, 9977, 9978, 9979, 9980, 9981, 9982, 9983, 9984, 9985, 9986, 9987, 9988, 9989, 9990, 9996, 9997, 9998, 9999, 10000, 10016, 10017, 10036, 10037, 10038, 10040, 10041, 10042, 10043, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10052, 10053, 10054, 10055, 10056, 10057, 10058, 10059, 10060, 10061, 10062, 10063, 10076, 10077, 10078, 10079, 10082, 10083, 10085, 10086, 10088, 10089, 10090, 10096, 10116, 10117, 10118, 10119, 10120, 10136, 10157, 10158, 10159, 10160, 10161, 10162, 10176, 10177, 10179, 10180, 10181, 10182, 10183, 10184, 10196, 10197, 10198, 10199, 10200, 10201, 10202, 10204, 10216, 10217, 10218, 10219, 10220, 10221, 10257, 10258, 10259, 10260, 10261, 10262, 10263, 10264, 10266, 10267, 10268, 10276, 10277, 10278, 10290, 10293, 10296, 10299, 10300, 10301, 10302, 10303, 10304, 10305, 10306, 10307, 10316, 10317, 10318, 10319, 10321, 10322, 10323, 10336, 10337, 10338, 10339, 10340, 10356, 10357, 10358, 10359, 10360, 10361, 10363, 10364, 10366, 10367, 10369, 10370, 10371, 10372, 10373, 10374, 10375, 10376, 10377, 10378, 10379, 10380, 10381, 10382, 10383, 10384, 10385, 10387, 10388, 10389, 10390, 10391, 10393, 10394, 10398, 10399, 10400, 10405, 10406, 10407, 10408, 10409, 10411, 10412, 10413, 10414, 10415, 10416, 10417, 10418, 10419, 10420, 10421, 10422, 10423, 10424, 10425, 10426, 10427, 10428, 10429, 10430, 10431, 10432, 10433, 10435, 10436, 10437, 10438, 10439, 10440, 10441, 10442, 10445, 10447, 10455, 10456, 10460, 10461, 10463, 10464, 10467, 10468, 10469, 10470, 10471, 10472, 10473, 10475, 10476, 10477, 10478, 10479, 10480, 10481, 10482, 10485, 10486, 10487, 10488, 10489, 10491, 10495, 10497, 10498, 10499, 10500, 10502, 10503, 10504, 10505, 10506, 10507, 10508, 10509, 10510, 10516, 10536, 10537, 10538, 10539, 10540, 10541, 10556, 10557, 10558, 10559, 10577, 10578, 10580, 10581, 10582, 10583, 10584, 10596, 10598, 10599, 10600, 10601, 10602, 10603, 10604, 10605, 10606, 10608, 10610, 10611, 10612, 10616, 10617, 10618, 10619, 10636, 10637, 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646, 10647, 10648, 10656, 10657, 10658, 10659, 10660, 10661, 10662, 10663, 10664, 10665, 10666, 10667, 10668, 10676, 10678, 10680, 10681, 10682, 10683, 10684, 10685, 10696, 10697, 10698, 10699, 10716, 10717, 10718, 10719, 10720, 10721, 10737, 10738, 10739, 10740, 10741, 10742, 10756, 10757, 10758, 10759, 10760, 10761, 10762, 10776, 10778, 10779, 10780, 10781, 10782, 10799, 10800, 10801, 10802, 10803, 10804, 10805, 10806, 10807, 10808, 10809, 10811, 10812, 10813, 10814, 10816, 10817, 10821, 10822, 10823, 10824, 10825, 10826, 10827, 10828, 10836, 10837, 10838, 10839, 10840, 10856, 10857, 10876, 10877, 10878, 10879, 10880, 10881, 10882, 10896, 10897, 10899, 10901, 10902, 10903, 10904, 10905, 10916, 10917, 10918, 10919, 10920, 10921, 10922, 10923, 10924, 10925, 10926, 10927, 10928, 10929, 10930, 10936, 10937, 10938, 10939, 10940, 10941, 10942, 10943, 10944, 10945, 10946, 10947, 10948, 10949, 10950, 10951, 10952, 10953, 10954, 10955, 10956, 10976, 10977, 10978, 10979, 10980, 10981, 10982, 10983, 10984, 10986, 10987, 10988, 10990, 10991, 10992, 10993, 10996, 10997, 11016, 11017, 11018, 11019, 11020, 11021, 11022, 11023, 11024, 11025, 11026, 11027, 11028, 11029, 11030, 11031, 11032, 11033, 11034, 11035, 11036, 11037, 11038, 11039, 11040, 11041, 11042, 11043, 11044, 11046, 11047, 11048, 11049, 11050, 11051, 11052, 11053, 11054, 11055, 11056, 11057, 11058, 11063, 11064, 11065, 11066, 11067, 11068, 11069, 11070, 11071, 11072, 11073, 11074, 11075, 11076, 11077, 11078, 11079, 11081, 11082, 11083, 11084, 11096, 11097, 11098, 11099, 11100, 11101, 11102, 11103, 11104, 11105, 11106, 11116, 11117, 11118, 11119, 11120, 11121, 11122, 11136, 11137, 11138, 11139, 11140, 11141, 11142, 11143, 11145, 11146, 11147, 11150, 11152, 11153, 11154, 11155, 11156, 11176, 11177, 11178, 11180, 11181, 11182, 11183, 11184, 11185, 11186, 11187, 11188, 11189, 11190, 11191, 11192, 11193, 11194, 11195, 11196, 11197, 11198, 11199, 11200, 11216, 11217, 11218, 11219, 11236, 11256, 11257, 11258, 11259, 11260, 11261, 11262, 11263, 11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11296, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, 11338, 11339, 11340, 11346, 11347, 11348, 11350, 11351, 11352, 11353, 11355, 11356, 11357, 11359, 11360, 11361, 11365, 11368, 11370, 11371, 11372, 11373, 11374, 11378, 11380, 11382, 11383, 11387, 11388, 11389, 11390, 11391, 11397, 11401, 11406, 11407, 11438, 11439, 11440, 11441, 11442, 11443, 11444, 11445, 11446, 11447, 11448, 11450, 11451, 11452, 11453, 11454, 11455, 11456, 11457, 11458, 11459, 11460, 11461, 11462, 11464, 11465, 11466, 11467, 11469, 11470, 11471, 11472, 11473, 11475, 11476, 11477, 11480, 11483, 11484, 11486, 11487, 11488, 11489, 11490, 11491, 11492, 11496, 11497, 11498, 11501, 11502, 11516, 11517, 11518, 11519, 11520, 11521, 11536, 11546, 11548, 11551, 11552, 11553, 11554, 11555, 11556, 11557, 11558, 11559, 11560, 11561, 11562, 11563, 11564, 11576, 11577, 11578, 11582, 11583, 11596, 11598, 11600, 11602, 11603, 11604, 11605, 11608, 11609, 11610, 11611, 11613, 11614, 11615, 11616, 11620, 11621, 11622, 24368, 11624, 11625, 11626, 11627, 11629, 11636, 11637, 11656, 11657, 11658, 11659, 11661, 11662, 11663, 11664, 11665, 11666, 11667, 11668, 11669, 11671, 11672, 11673, 11675, 11677, 11678, 11679, 11680, 11681, 11682, 11683, 11684, 11685, 11686, 11687, 11688, 11689, 11690, 11696, 11697, 11698, 11699, 11700, 11701, 11702, 11703, 11704, 11705, 11706, 11707, 11708, 11709, 11710, 11711, 11712, 11713, 11714, 11715, 11716, 11717, 11718, 11720, 11721, 11722, 11723, 11724, 11725, 11726, 11727, 11728, 11729, 11730, 11731, 11732, 11733, 11734, 11735, 11736, 11737, 11738, 11739, 11740, 11741, 11744, 11745, 11746, 11747, 11748, 11749, 11750, 11751, 11752, 11753, 11754, 11755, 11756, 11757, 11758, 11776, 11777, 11778, 11781, 11782, 11783, 11784, 11785, 11786, 11787, 11788, 11789, 11790, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11800, 11801, 11802, 11803, 11804, 11805, 11806, 11807, 11808, 11810, 11811, 11812, 11813, 11814, 11815, 11817, 11818, 11819, 11820, 11821, 11822, 11823, 11824, 11825, 11826, 11827, 11828, 11829, 11830, 11831, 11832, 11833, 11834, 11835, 11836, 11837, 11838, 11839, 11840, 11856, 11857, 11858, 11859, 11860, 11861, 11862, 11863, 11864, 11865, 11866, 11867, 11868, 11869, 11870, 11871, 11872, 11873, 11874, 11875, 11876, 11877, 11878, 11880, 11881, 11882, 11883, 11884, 11885, 11886, 11887, 11896, 11897, 11898, 11899, 11900, 11901, 11910, 11911, 11912, 11913, 11914, 11915, 11916, 11917, 11918, 11920, 11921, 11936, 11937, 11939, 11940, 11941, 11942, 11943, 11944, 11945, 11946, 11947, 11948, 11949, 11956, 11957, 11979, 11980, 11981, 11982, 11983, 11988, 11994, 11996, 11997, 11998, 12017, 12018, 12019, 12021, 12022, 12023, 12024, 12025, 12026, 12027, 12028, 12029, 12030, 12031, 12032, 12033, 12034, 12037, 12042, 12043, 12045, 12046, 12047, 12048, 12050, 12051, 12052, 12053, 12056, 12057, 12076, 12096, 12097, 12098, 12099, 12100, 12101, 12116, 12118, 12119, 12120, 12121, 12122, 12123, 12124, 12125, 12126, 12127, 12128, 12129, 12136, 12137, 12138, 12140, 12141, 12143, 12144, 12148, 12149, 12150, 12151, 12152, 12156, 12157, 12158, 12159, 12160, 12178, 12179, 12180, 12196, 12197, 12198, 12199, 12201, 12202, 12203, 12204, 12205, 12206, 12207, 12208, 12216, 12217, 12218, 12219, 12220, 12221, 12222, 12223, 12224, 12225, 12236, 12237, 12238, 12239, 12240, 12241, 12242, 12243, 12244, 12245, 12246, 12247, 12248, 12249, 12250, 12251, 12252, 12253, 12254, 12255, 12256, 12257, 12258, 12259, 12261, 12262, 12263, 12264, 12265, 12276, 12277, 12296, 12297, 12298, 12299, 12319, 12320, 12321, 12322, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12387, 12396, 12397, 12416, 12418, 12419, 12420, 12422, 12423, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12435, 12457, 12458, 12459, 12460, 12461, 12463, 12464, 12465, 12467, 12468, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12496, 12497, 12498, 12557, 12576, 12577, 12578, 12579, 12580, 12581, 12596, 12616, 12617, 12636, 12656, 12657, 12658, 12676, 12677, 12678, 12696, 12716, 12717, 12718, 12719, 12720, 12721, 12722, 12723, 12724, 12736, 12737, 12738, 12739, 12740, 12756, 12757, 12759, 12776, 12777, 12778, 12779, 12780, 12781, 12782, 12783, 12784, 12785, 12786, 12787, 12788, 12789, 12790, 12791, 12792, 12793, 12794, 12795, 12796, 12797, 12798, 12799, 12800, 12801, 12802, 12803, 12805, 12806, 12807, 12816, 12818, 12836, 12837, 12856, 12858, 12859, 12860, 12861, 12862, 12863, 12864, 12865, 12866, 12867, 12876, 12877, 12896, 12897, 12899, 12900, 12902, 12903, 12904, 12918, 12919, 12920, 12921, 12922, 12923, 12924, 12925, 12936, 12937, 12938, 12939, 12940, 12941, 12942, 12943, 12944, 12956, 12957, 12958, 12959, 12960, 12961, 12962, 12976, 12977, 12996, 12997, 12998, 12999, 13000, 13016, 13017, 13018, 13019, 13020, 13021, 13022, 13036, 13076, 13078, 13079, 13080, 13081, 13082, 13084, 13085, 13086, 13087, 13088, 13089, 13096, 13097, 13098, 13099, 13116, 13117, 13118, 13136, 13137, 13138, 13139, 13140, 13141, 13142, 13143, 13144, 13145, 13146, 13147, 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159, 13160, 13161, 13176, 13177, 13178, 13179, 13180, 13181, 13196, 13197, 13216, 13217, 13218, 13219, 13220, 13221, 13236, 13256, 13257, 13276, 13277, 13278, 13279, 13280, 13282, 13283, 13284, 13285, 13296, 13297, 13298, 13299, 13300, 13301, 13316, 13317, 13318, 13319, 13320, 13321, 13322, 13323, 13324, 13325, 13326, 13327, 13328, 13329, 13330, 13331, 13332, 13333, 13334, 13335, 13336, 13337, 13338, 13356, 13357, 13358, 13359, 13377, 13378, 13396, 13397, 13416, 13417, 13418, 13419, 13420, 13421, 13422, 13424, 13425, 13426, 13427, 13428, 13429, 13430, 13431, 13432, 13433, 13434, 13435, 13436, 13437, 13438, 13439, 13440, 13441, 13442, 13443, 13444, 13445, 13446, 13447, 13448, 13449, 13456, 13476, 13524, 13525, 13526, 13527, 13528, 13529, 13530, 13531, 13533, 13534, 13535, 13536, 13537, 13538, 13539, 13540, 13541, 13542, 13543, 13544, 13545, 13546, 13547, 13548, 13549, 13550, 13551, 13552, 13553, 13554, 13555, 13556, 13557, 13576, 13577, 13596, 13597, 13598, 13599, 13601, 13602, 13616, 13617, 13618, 13636, 13656, 13676, 13696, 13697, 13698, 13699, 13716, 13717, 13718, 13736, 13737, 13738, 13739, 13740, 13741, 13742, 13743, 13756, 13776, 13777, 13778, 13796, 13797, 13798, 13816, 13817, 13836, 13837, 13839, 13840, 13841, 13842, 13843, 13876, 13896, 13916, 13917, 13936, 13956, 13957, 13958, 13959, 13976, 13996, 14020, 14021, 14022, 14023, 14024, 14025, 14026, 14027, 14028, 14029, 14030, 14031, 14041, 14081, 14121, 14122, 14123, 14182, 14183, 14185, 14186, 14187, 14188, 14221, 14222, 14223, 14224, 14225, 14226, 14227, 14228, 14229, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14241, 14242, 14262, 14263, 14264, 14266, 14267, 14268, 14269, 14270, 14271, 14272, 14273, 14275, 14276, 14277, 14278, 14279, 14280, 14281, 14282, 14283, 14284, 14285, 14301, 14303, 14304, 14305, 14308, 14321, 14322, 14323, 14324, 14325, 14326, 14327, 14329, 14330, 14331, 14332, 14333, 14334, 14335, 14336, 14337, 14338, 14339, 14340, 14342, 14343, 14344, 14345, 14347, 14348, 14349, 14350, 14351, 14353, 14354, 14355, 14356, 14357, 14358, 14361, 14362, 14363, 14364, 14365, 14366, 14367, 14368, 14369, 14370, 14371, 14372, 14373, 14374, 14375, 14376, 14377, 14378, 14379, 14380, 14381, 14382, 14383, 14385, 14386, 14387, 14388, 14389, 14390, 14392, 14393, 14394, 14395, 14396, 14397, 14398, 14399, 14400, 14401, 14402, 14403, 14404, 14421, 14423, 14424, 14425, 14426, 14427, 14428, 14429, 14430, 14431, 14432, 14433, 14434, 14435, 14436, 14437, 14438, 14439, 14440, 14441, 14442, 14444, 14445, 14446, 14447, 14448, 14449, 14450, 14451, 14452, 14453, 14454, 14455, 14456, 14457, 14458, 14459, 14460, 14461, 14462, 14463, 14464, 14465, 14466, 14467, 14469, 14470, 14471, 14472, 14473, 14474, 14475, 14476, 14477, 14478, 14479, 14480, 14481, 14482, 14483, 14484, 14485, 14486, 14487, 14488, 14489, 14490, 14491, 14492, 14494, 14495, 14496, 14497, 14498, 14499, 14500, 14502, 14503, 14504, 14505, 14506, 14507, 14508, 14509, 14510, 14511, 14512, 14513, 14514, 14515, 14516, 14517, 14518, 14519, 14520, 14521, 14522, 14523, 14524, 14525, 14526, 14527, 14528, 14529, 14530, 14531, 14532, 14533, 14534, 14535, 14536, 14538, 14539, 14540, 14541, 14542, 14543, 14544, 14545, 14546, 14547, 14548, 14549, 14550, 14551, 14552, 14553, 14555, 14556, 14557, 14558, 14559, 14560, 14561, 14564, 14565, 14566, 14567, 14568, 14581, 14601, 14602, 14603, 14604, 14621, 14622, 14624, 14625, 14626, 14627, 14628, 14634, 14637, 14638, 14639, 14640, 14645, 14646, 14661, 14662, 14663, 14664, 14666, 14667, 14668, 14686, 14693, 14715, 14717, 14718, 14720, 14721, 14722, 14723, 14724, 14725, 14726, 14727, 14728, 14729, 14730, 14731, 14732, 14733, 14734, 14736, 14737, 14738, 14739, 14740, 14741, 14742, 14743, 14744, 14745, 14748, 14750, 14751, 14752, 14753, 14754, 14757, 14758, 14762, 14763, 14764, 14765, 14766, 14767, 14768, 14769, 14770, 14771, 14772, 14773, 14774, 14775, 14776, 14777, 14781, 14821, 14822, 14823, 14825, 14826, 14827, 14828, 14829, 14832, 14833, 14834, 14841, 14842, 14843, 14844, 14845, 14846, 14847, 14848, 14849, 14850, 14857, 14859, 14860, 14861, 14862, 14864, 14865, 14866, 14867, 14868, 14869, 14871, 14872, 14873, 14874, 14875, 14876, 14878, 14880, 14881, 14882, 14883, 14884, 14887, 14888, 14889, 14890, 14892, 14893, 14894, 14901, 14902, 14903, 14904, 14905, 14908, 14909, 14910, 14911, 14912, 14921, 14942, 14943, 14944, 14945, 14946, 14947, 14948, 14961, 14962, 14963, 14964, 14965, 14981, 14982, 14983, 14984, 14986, 14987, 14988, 14989, 14990, 14991, 14994, 15001, 15002, 15003, 15004, 15005, 15006, 15007, 15008, 15009, 15010, 15011, 15012, 15021, 15022, 15041, 15042, 15043, 15045, 15046, 15047, 15061, 15062, 15063, 15064, 15065, 15066, 15067, 15068, 15069, 15070, 15071, 15072, 15073, 15074, 15075, 15076, 15077, 15078, 15079, 15080, 15082, 15083, 15084, 15086, 15087, 15088, 15089, 15090, 15091, 15101, 15102, 15103, 15104, 15105, 15106, 15107, 15108, 15109, 15111, 15112, 15113, 15114, 15115, 15116, 15117, 15119, 15122, 15124, 15125, 15126, 15127, 15128, 15130, 15131, 15136, 15137, 15138, 15140, 15141, 15146, 15162, 15163, 15164, 15165, 15168, 15169, 15170, 15171, 15172, 15174, 15175, 15176, 15177, 15178, 15179, 15180, 15181, 15182, 15183, 15184, 15185, 15186, 15187, 15188, 15189, 15190, 15191, 15192, 15193, 15194, 15195, 15196, 15197, 15198, 15199, 15200, 15201, 15202, 15203, 15204, 15205, 15206, 15207, 15208, 15209, 15211, 15212, 15213, 15215, 15218, 15220, 15221, 15222, 15224, 15229, 15230, 15233, 15235, 15236, 15240, 15241, 15242, 15246, 15247, 15249, 15250, 15252, 15260, 15261, 15262, 15263, 15264, 15270, 15271, 15273, 15274, 15275, 15276, 15277, 15278, 15279, 15280, 15281, 15282, 15283, 15284, 15285, 15286, 15287, 15288, 15289, 15290, 15291, 15292, 15293, 15294, 15295, 15296, 15297, 15298, 15299, 15300, 15301, 15302, 15303, 15304, 15305, 15306, 15307, 15308, 15309, 15310, 15311, 15312, 15315, 15316, 15318, 15319, 15320, 15323, 15324, 15325, 15327, 15333, 15334, 15335, 15336, 15338, 15339, 15340, 15341, 15343, 15344, 15348, 15350, 15351, 15352, 15353, 15354, 15355, 15358, 15362, 15363, 15366, 15367, 15369, 15370, 15371, 15372, 15378, 15379, 15380, 15381, 15384, 15385, 15386, 15387, 15388, 15389, 15390, 15391, 15392, 15395, 15397, 15398, 15399, 15400, 15401, 15402, 15403, 15404, 15405, 15406, 15407, 15408, 15409, 15415, 15416, 15417, 15418, 15419, 15420, 15428, 15429, 15430, 15433, 15438, 15439, 15440, 15441, 15442, 15443, 15444, 15447, 15458, 15461, 15462, 15463, 15464, 15467, 15468, 15470, 15471, 15473, 15474, 15476, 15477, 15478, 15479, 15480, 15482, 15483, 15484, 15487, 15489, 15491, 15492, 15493, 15494, 15496, 15497, 15498, 15499, 15500, 15501, 15502, 15503, 15504, 15505, 15508, 15509, 15510, 15511, 15513, 15515, 15516, 15517, 15521, 15526, 15527, 15528, 15537, 15538, 15540, 15541, 15542, 15543, 15544, 15546, 15547, 15548, 15549, 15550, 15551, 15554, 15555, 15556, 15557, 15558, 15559, 15560, 15561, 15562, 15563, 15564, 15565, 15566, 15567, 15568, 15569, 15570, 15572, 15573, 15574, 15575, 15576, 15577, 15578, 15579, 15580, 15581, 15582, 15583, 15584, 15585, 15586, 15587, 15588, 15589, 15592, 15593, 15594, 15595, 15596, 15597, 15598, 15599, 15600, 15601, 15602, 15603, 15604, 15605, 15606, 15607, 15608, 15612, 15613, 15614, 15615, 15616, 15617, 15620, 15621, 15622, 15624, 15630, 15631, 15635, 15636, 15637, 15638, 15641, 15642, 15643, 15644, 15645, 15647, 15648, 15649, 15650, 15651, 15652, 15654, 15655, 15656, 15657, 15658, 15659, 15664, 15665, 15667, 15668, 15669, 15670, 15675, 15676, 15677, 15678, 15679, 15681, 15682, 15683, 15684, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 15696, 15698, 15699, 15700, 15702, 15704, 15706, 15707, 15708, 15714, 15715, 15716, 15718, 15722, 15725, 15726, 15727, 15728, 15732, 15739, 15740, 15741, 15742, 15743, 15744, 15745, 15760, 15761, 15762, 15763, 15764, 15765, 15766, 15767, 15768, 15802, 15803, 15818, 15852, 15853, 15854, 15857, 15858, 15859, 15862, 15866, 15868, 15869, 15870, 15871, 15882, 15883, 15891, 15892, 15893, 15894, 15895, 15897, 15898, 15903, 15904, 15910, 15918, 15920, 15921, 15924, 15928, 15929, 15930, 15931, 15932, 15936, 15937, 15938, 15939, 15940, 15941, 15942, 15945, 15946, 15948, 15949, 15950, 15951, 15952, 15953, 15954, 15956, 15958, 15962, 15963, 15964, 15965, 15966, 15967, 15968, 15969, 15970, 15971, 15974, 15975, 15976, 15977, 15978, 15979, 15980, 15981, 15984, 15989, 15990, 15991, 16006, 16011, 16012, 16013, 16014, 16015, 16016, 16017, 16018, 16020, 16021, 16022, 16024, 16025, 16028, 16029, 16030, 16031, 16032, 16033, 16034, 16036, 16037, 16042, 16043, 16044, 16045, 16046, 16047, 16048, 16059, 16060, 16061, 16062, 16063, 16064, 16065, 16067, 16068, 16069, 16070, 16073, 16076, 16079, 16080, 16081, 16085, 16090, 16091, 16094, 16096, 16097, 16101, 16102, 16103, 16104, 16112, 16113, 16114, 16115, 16116, 16117, 16118, 16119, 16127, 16131, 16132, 16133, 16134, 16135, 16143, 16144, 16145, 16146, 16147, 16149, 16151, 16152, 16153, 16154, 16156, 16157, 16158, 16159, 16160, 16161, 16162, 16163, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16171, 16173, 16174, 16175, 16176, 16177, 16178, 16179, 16180, 16183, 16185, 16186, 16187, 16189, 16191, 16192, 16193, 16194, 16196, 16197, 16198, 16199, 16200, 16201, 16202, 16203, 16204, 16205, 16206, 16208, 16209, 16210, 16213, 16215, 16216, 16217, 16218, 16219, 16220, 16221, 16222, 16224, 16225, 16226, 16227, 16228, 16229, 16230, 16231, 16232, 16236, 16237, 16238, 16239, 16240, 16241, 16242, 16243, 16244, 16245, 16246, 16247, 16248, 16249, 16250, 16251, 16252, 16253, 16254, 16256, 16257, 16258, 16259, 16260, 16261, 16262, 16263, 16264, 16266, 16267, 16268, 16269, 16270, 16271, 16272, 16273, 16274, 16275, 16276, 16277, 16278, 16279, 16280, 16283, 16287, 16288, 16289, 16290, 16291, 16292, 16293, 16294, 16295, 16297, 16298, 16299, 16300, 16301, 16302, 16303, 16304, 16305, 16307, 16308, 16309, 16310, 16311, 16313, 16314, 16315, 16316, 16317, 16318, 16319, 16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327, 16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335, 16336, 16337, 16338, 16339, 16340, 16341, 16342, 16343, 16344, 16345, 16346, 16347, 16348, 16349, 16350, 16351, 16352, 16353, 16354, 16355, 16357, 16358, 16361, 16362, 16364, 16365, 16366, 16367, 16368, 16371, 16372, 16375, 16376, 16377, 16379, 16380, 16381, 16382, 16383, 16384, 16385, 16386, 16387, 16388, 16389, 16390, 16392, 16394, 16395, 16396, 16397, 16398, 16399, 16400, 16401, 16402, 16403, 16404, 16405, 16406, 16407, 16408, 16409, 16410, 16411, 16412, 16414, 16415, 16416, 16417, 16418, 16424, 16425, 16426, 16431, 16438, 16441, 16442, 16443, 16444, 16446, 16447, 16448, 16449, 16451, 16452, 16453, 16457, 16458, 16459, 16460, 16461, 16462, 16463, 16464, 16465, 16466, 16467, 16468, 16469, 16470, 16471, 16472, 16473, 16474, 16475, 16476, 16477, 16478, 16479, 16480, 16481, 16482, 16483, 16484, 16485, 16488, 16489, 16490, 16491, 16492, 16493, 16494, 16495, 16499, 16500, 16501, 16502, 16503, 16504, 16505, 16506, 16507, 16514, 16516, 16517, 16518, 16519, 16520, 16521, 16522, 16523, 16524, 16525, 16526, 16528, 16529, 16530, 16531, 16534, 16535, 16537, 16539, 16540, 16541, 16542, 16543, 16544, 16545, 16546, 16547, 16548, 16549, 16550, 16551, 16553, 16554, 16568, 16573, 16574, 16575, 16576, 16577, 16578, 16579, 16580, 16582, 16583, 16584, 16585, 16586, 16587, 16588, 16589, 16590, 16591, 16592, 16593, 16594, 16595, 16596, 16597, 16598, 16599, 16600, 16601, 16602, 16603, 16604, 16610, 16611, 16612, 16613, 16615, 16616, 16617, 16618, 16619, 16620, 16621, 16623, 16624, 16625, 16626, 16627, 16628, 16629, 16631, 16632, 16633, 16634, 16635, 16636, 16637, 16638, 16639, 16640, 16641, 16642, 16643, 16644, 16646, 16647, 16648, 16649, 16650, 16651, 16652, 16653, 16654, 16655, 16656, 16657, 16658, 16659, 16660, 16662, 16663, 16664, 16665, 16666, 16667, 16668, 16669, 16670, 16671, 16672, 16673, 16674, 16675, 16676, 16677, 16678, 16679, 16680, 16681, 16683, 16684, 16685, 16686, 16687, 16688, 16689, 16690, 16691, 16692, 16693, 16694, 16695, 16696, 16697, 16698, 16699, 16700, 16701, 16702, 16703, 16704, 16705, 16706, 16707, 16708, 16709, 16710, 16712, 16713, 16714, 16715, 16716, 16718, 16719, 16721, 16722, 16723, 16724, 16725, 16726, 16727, 16728, 16729, 16731, 16732, 16733, 16734, 16735, 16736, 16738, 16739, 16740, 16741, 16742, 16743, 16744, 16745, 16746, 16747, 16748, 16749, 16750, 16751, 16752, 16753, 16755, 16756, 16757, 16761, 16762, 16763, 16764, 16765, 16766, 16767, 16768, 16769, 16771, 16772, 16773, 16774, 16775, 16776, 16777, 16778, 16779, 16780, 16781, 16782, 16786, 16787, 16788, 16789, 16790, 16791, 16792, 16793, 16794, 16795, 16796, 16797, 16798, 16799, 16800, 16801, 16802, 16803, 16804, 16805, 16806, 16807, 16808, 16809, 16810, 16811, 16812, 16813, 16814, 16815, 16816, 16817, 16818, 16819, 16820, 16821, 16822, 16823, 16824, 16825, 16826, 16827, 16828, 16829, 16830, 16831, 16832, 16833, 16834, 16835, 16836, 16837, 16838, 16839, 16840, 16841, 16842, 16843, 16844, 16845, 16846, 16847, 16848, 16850, 16851, 16852, 16854, 16855, 16856, 16857, 16858, 16859, 16860, 16862, 16863, 16864, 16865, 16866, 16867, 16870, 16871, 16873, 16876, 16878, 16879, 16880, 16884, 16885, 16886, 16887, 16888, 16896, 16897, 16898, 16899, 16901, 16903, 16904, 16905, 16906, 16907, 16911, 16912, 16914, 16915, 16916, 16917, 16918, 16919, 16920, 16921, 16922, 16923, 16924, 16925, 16927, 16928, 16929, 16932, 16933, 16934, 16937, 16938, 16939, 16943, 16944, 16945, 16946, 16947, 16948, 16949, 16950, 16951, 16952, 16954, 16959, 16960, 16964, 16966, 16967, 16968, 16971, 16972, 16973, 16974, 16975, 16976, 16977, 16978, 16980, 16991, 16992, 16993, 16994, 16995, 16996, 16998, 17000, 17001, 17002, 17003, 17004, 17005, 17006, 17007, 17008, 17014, 17015, 17023, 17034, 17035, 17038, 17039, 17041, 17046, 17047, 17048, 17049, 17050, 17051, 17052, 17053, 17056, 17057, 17058, 17059, 17060, 17062, 17066, 17067, 17068, 17069, 17070, 17071, 17072, 17073, 17074, 17076, 17077, 17079, 17080, 17083, 17084, 17085, 17086, 17087, 17088, 17089, 17090, 17092, 17093, 17094, 17095, 17096, 17097, 17098, 17099, 17100, 17101, 17102, 17103, 17104, 17105, 17106, 17108, 17109, 17110, 17111, 17112, 17113, 17114, 17115, 17116, 17117, 17119, 17120, 17121, 17122, 17123, 17124, 17125, 17126, 17127, 17128, 17129, 17130, 17131, 17132, 17133, 17134, 17135, 17136, 17137, 17138, 17139, 17141, 17142, 17143, 17144, 17146, 17147, 17148, 17149, 17150, 17151, 17152, 17153, 17154, 17155, 17156, 17157, 17158, 17159, 17160, 17161, 17167, 17168, 17169, 17170, 17171, 17172, 17173, 17174, 17175, 17176, 17178, 17179, 17180, 17181, 17182, 17183, 17184, 17185, 17186, 17187, 17188, 17189, 17190, 17191, 17192, 17193, 17194, 17195, 17196, 17197, 17199, 17200, 17201, 17202, 17203, 17204, 17205, 17206, 17208, 17209, 17210, 17211, 17212, 17213, 17214, 17215, 17216, 17217, 17218, 17219, 17220, 17222, 17223, 17224, 17225, 17226, 17228, 17229, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17238, 17240, 17241, 17242, 17243, 17244, 17245, 17246, 17247, 17248, 17249, 17250, 17251, 17252, 17253, 17255, 17256, 17257, 17259, 17260, 17262, 17263, 17264, 17265, 17266, 17267, 17268, 17269, 17270, 17271, 17272, 17274, 17275, 17276, 17277, 17278, 17279, 17280, 17281, 17282, 17283, 17285, 17287, 17290, 17291, 17293, 17296, 17298, 17299, 17300, 17303, 17304, 17305, 17306, 17307, 17308, 17309, 17310, 17311, 17312, 17314, 17316, 17317, 17318, 17320, 17321, 17322, 17323, 17324, 17325, 17326, 17327, 17328, 17329, 17330, 17331, 17333, 17334, 17336, 17337, 17338, 17339, 17340, 17341, 17342, 17343, 17344, 17345, 17346, 17347, 17348, 17349, 17350, 17352, 17353, 17355, 17356, 17357, 17358, 17359, 17360, 17361, 17362, 17363, 17364, 17370, 17371, 17372, 17373, 17374, 17375, 17377, 17378, 17379, 17380, 17381, 17391, 17392, 17393, 17395, 17397, 17398, 17399, 17400, 17401, 17402, 17403, 17404, 17405, 17406, 17407, 17408, 17409, 17410, 17412, 17413, 17414, 17416, 17417, 17418, 17420, 17421, 17423, 17424, 17425, 17426, 17427, 17429, 17431, 17432, 17433, 17434, 17435, 17436, 17437, 17438, 17439, 17440, 17441, 17442, 17443, 17444, 17445, 17446, 17447, 17448, 17452, 17453, 17455, 17459, 17461, 17462, 17464, 17465, 17467, 17468, 17469, 17471, 17473, 17474, 17475, 17477, 17478, 17479, 17480, 17481, 17482, 17483, 17484, 17485, 17486, 17487, 17488, 17489, 17490, 17491, 17493, 17494, 17495, 17496, 17499, 17500, 17503, 17504, 17505, 17508, 17509, 17510, 17511, 17512, 17513, 17514, 17517, 17518, 17519, 17520, 17521, 17522, 17523, 17524, 17525, 17527, 17528, 17529, 17530, 17531, 17532, 17535, 17536, 17537, 17538, 17539, 17540, 17541, 17542, 17543, 17544, 17545, 17546, 17547, 17548, 17549, 17550, 17551, 17552, 17553, 17554, 17555, 17556, 17557, 17558, 17578, 17584, 17585, 17586, 17587, 17588, 17589, 17591, 17592, 17598, 17599, 17600, 17603, 17604, 17606, 17607, 17608, 17609, 17610, 17611, 17612, 17613, 17614, 17621, 17622, 17623, 17624, 17626, 17627, 17628, 17629, 17630, 17631, 17632, 17633, 17634, 17635, 17636, 17637, 17642, 17645, 17647, 17649, 17651, 17653, 17654, 17655, 17656, 17657, 17658, 17659, 17660, 17661, 17662, 17663, 17664, 17666, 17667, 17669, 17670, 17671, 17673, 17674, 17676, 17678, 17680, 17681, 17682, 17683, 17684, 17686, 17687, 17689, 17690, 17693, 17694, 17695, 17696, 17698, 17701, 17702, 17703, 17704, 17705, 17707, 17710, 17711, 17712, 17713, 17714, 17715, 17716, 17717, 17718, 17719, 17720, 17721, 17722, 17723, 17724, 17725, 17726, 17727, 17728, 17729, 17730, 17731, 17732, 17734, 17735, 17765, 17766, 17767, 17768, 17769, 17770, 17771, 17772, 17773, 17794, 17795, 17796, 17797, 17798, 17799, 17800, 17801, 17802, 17803, 17804, 17805, 17807, 17808, 17814, 17815, 17816, 17817, 17819, 17820, 17822, 17824, 17825, 17826, 17827, 17830, 17831, 17832, 17833, 17834, 17835, 17836, 17837, 17838, 17839, 17840, 17841, 17842, 17843, 17844, 17845, 17846, 17847, 17848, 17849, 17850, 17852, 17853, 17855, 17856, 17857, 17858, 17860, 17862, 17865, 17866, 17870, 17871, 17874, 17875, 17876, 17877, 17878, 17879, 17880, 17881, 17882, 17883, 17884, 17885, 17886, 17887, 17888, 17889, 17890, 17892, 17893, 17894, 17895, 17896, 17897, 17898, 17899, 17900, 17901, 17904, 17909, 17915, 17917, 17918, 17919, 17920, 17921, 17922, 17923, 17924, 17925, 17926, 17927, 17928, 17929, 17930, 17931, 17932, 17933, 17934, 17935, 17936, 17937, 17938, 17940, 17941, 17942, 17943, 17944, 17945, 17947, 17948, 17951, 17952, 17953, 17954, 17955, 17956, 17957, 17958, 17959, 17960, 17961, 17962, 17963, 17964, 17968, 17969, 17972, 17974, 17975, 17976, 17977, 17978, 17979, 17980, 17981, 17982, 17983, 17984, 17985, 17986, 17987, 17988, 17989, 17990, 17991, 17992, 17993, 17994, 17995, 17996, 17998, 17999, 18000, 18002, 18003, 18004, 18005, 18006, 18007, 18008, 18009, 18010, 18011, 18012, 18013, 18014, 18015, 18016, 18017, 18018, 18019, 18020, 18021, 18022, 18023, 18024, 18025, 18026, 18027, 18028, 18029, 18030, 18031, 18032, 18033, 18034, 18035, 18037, 18038, 18039, 18042, 18043, 18044, 18046, 18062, 18063, 18064, 18065, 18066, 18067, 18068, 18069, 18070, 18071, 18072, 18073, 18074, 18075, 18076, 18077, 18079, 18080, 18086, 18087, 18088, 18089, 18090, 18091, 18092, 18093, 18094, 18096, 18097, 18098, 18099, 18100, 18101, 18102, 18103, 18105, 18106, 18109, 18110, 18113, 18114, 18115, 18116, 18117, 18118, 18119, 18120, 18121, 18122, 18123, 18124, 18125, 18126, 18127, 18128, 18129, 18130, 18131, 18132, 18133, 18134, 18135, 18136, 18137, 18138, 18139, 18140, 18141, 18142, 18143, 18144, 18145, 18146, 18147, 18150, 18151, 18152, 18155, 18159, 18160, 18161, 18162, 18165, 18166, 18167, 18168, 18170, 18171, 18172, 18173, 18174, 18175, 18176, 18177, 18179, 18180, 18181, 18182, 18183, 18185, 18186, 18187, 18188, 18189, 18190, 18191, 18192, 18194, 18196, 18197, 18199, 18200, 18201, 18202, 18203, 18204, 18205, 18206, 18207, 18208, 18209, 18210, 18211, 18212, 18213, 18214, 18215, 18218, 18220, 18221, 18222, 18223, 18224, 18225, 18226, 18228, 18229, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18240, 18242, 18243, 18244, 18245, 18246, 18247, 18248, 18249, 18250, 18251, 18252, 18253, 18255, 18256, 18257, 18258, 18259, 18260, 18261, 18262, 18263, 18264, 18265, 18266, 18267, 18272, 18273, 18274, 18275, 18276, 18277, 18278, 18280, 18281, 18282, 18283, 18285, 18286, 18289, 18290, 18292, 18293, 18294, 18295, 18296, 18297, 18298, 18299, 18300, 18301, 18302, 18303, 18305, 18306, 18307, 18308, 18309, 18311, 18312, 18313, 18314, 18315, 18317, 18318, 18319, 18320, 18321, 18322, 18323, 18325, 18326, 18327, 18328, 18331, 18332, 18333, 18334, 18335, 18336, 18337, 18338, 18340, 18341, 18342, 18343, 18344, 18345, 18346, 18347, 18348, 18349, 18350, 18351, 18352, 18353, 18354, 18357, 18358, 18359, 18360, 18362, 18363, 18364, 18365, 18369, 18370, 18371, 18372, 18373, 18374, 18375, 18376, 18377, 18378, 18379, 18380, 18381, 18382, 18383, 18384, 18385, 18386, 18387, 18388, 18389, 18390, 18391, 18392, 18393, 18394, 18395, 18396, 18397, 18398, 18399, 18400, 18401, 18402, 18404, 18405, 18406, 18407, 18408, 18409, 18411, 18412, 18413, 18414, 18415, 18416, 18417, 18418, 18419, 18420, 18421, 18422, 18423, 18424, 18426, 18427, 18428, 18429, 18430, 18431, 18437, 18438, 18439, 18440, 18441, 18442, 18443, 18444, 18445, 18446, 18447, 18448, 18449, 18450, 18451, 18452, 18453, 18454, 18455, 18456, 18457, 18458, 18459, 18460, 18461, 18462, 18463, 18464, 18465, 18466, 18467, 18468, 18469, 18470, 18471, 18472, 18473, 18475, 18476, 18477, 18478, 18480, 18481, 18482, 18483, 18484, 18485, 18486, 18487, 18488, 18489, 18490, 18491, 18492, 18493, 18494, 18495, 18496, 18497, 18498, 18499, 18500, 18501, 18502, 18503, 18504, 18506, 18507, 18521, 18524, 18525, 18527, 18530, 18531, 18532, 18533, 18535, 18536, 18537, 18538, 18539, 18540, 18541, 18542, 18543, 18544, 18545, 18547, 18548, 18549, 18553, 18554, 18555, 18556, 18557, 18558, 18559, 18560, 18563, 18564, 18565, 18566, 18567, 18568, 18581, 18583, 18584, 18585, 18586, 18587, 18588, 18589, 18590, 18593, 18594, 18595, 18596, 18597, 18598, 18600, 18622, 18625, 18626, 18627, 18628, 18629, 18631, 18632, 18633, 18634, 18635, 18636, 18637, 18638, 18639, 18640, 18641, 18642, 18644, 18646, 18647, 18648, 18649, 18650, 18651, 18652, 18653, 18654, 18655, 18656, 18657, 18658, 18659, 18660, 18661, 18662, 18663, 18664, 18666, 18667, 18668, 18669, 18670, 18671, 18672, 18673, 18674, 18675, 18676, 18677, 18678, 18680, 18681, 18682, 18683, 18685, 18686, 18687, 18688, 18690, 18693, 18694, 18696, 18698, 18700, 18701, 18702, 18703, 18704, 18705, 18706, 18707, 18708, 18712, 18713, 18714, 18715, 18716, 18717, 18718, 18719, 18720, 18722, 18723, 18724, 18725, 18726, 18727, 18728, 18729, 18730, 18731, 18732, 18733, 18734, 18735, 18736, 18737, 18743, 18744, 18745, 18747, 18748, 18749, 18750, 18751, 18752, 18753, 18754, 18755, 18756, 18757, 18758, 18759, 18760, 18761, 18762, 18763, 18764, 18765, 18766, 18768, 18771, 18772, 18773, 18774, 18775, 18776, 18777, 18778, 18779, 18781, 18782, 18785, 18788, 18789, 18790, 18791, 18792, 18793, 18794, 18795, 18796, 18797, 18798, 18799, 18800, 18802, 18803, 18804, 18805, 18807, 18808, 18809, 18810, 18811, 18812, 18813, 18814, 18815, 18816, 18817, 18818, 18821, 18822, 18823, 18824, 18825, 18826, 18827, 18828, 18829, 18830, 18831, 18832, 18834, 18835, 18836, 18838, 18839, 18840, 18841, 18842, 18843, 18847, 18848, 18849, 18850, 18852, 18853, 18855, 18856, 18857, 18858, 18859, 18860, 18864, 18865, 18866, 18867, 18869, 18870, 18872, 18873, 18875, 18877, 18879, 18880, 18881, 18882, 18883, 18884, 18885, 18886, 18887, 18888, 18891, 18892, 18893, 18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902, 18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911, 18912, 18913, 18914, 18915, 18916, 18917, 18918, 18919, 18921, 18922, 18924, 18926, 18927, 18928, 18929, 18930, 18931, 18933, 18934, 18937, 18938, 18939, 18940, 18942, 18943, 18944, 18945, 18946, 18947, 18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956, 18957, 18959, 18960, 18962, 18963, 18964, 18965, 18966, 18967, 18968, 18969, 18970, 18971, 18972, 18973, 18974, 18975, 18976, 18977, 18978, 18981, 18982, 18983, 18984, 18985, 18986, 18987, 18988, 18989, 18990, 18991, 18992, 18993, 18994, 18995, 18996, 18997, 18998, 18999, 19000, 19001, 19002, 19003, 19004, 19005, 19006, 19007, 19008, 19009, 19011, 19012, 19013, 19014, 19015, 19016, 19017, 19018, 19019, 19020, 19021, 19022, 19023, 19024, 19025, 19026, 19027, 19028, 19029, 19030, 19032, 19033, 19034, 19035, 19038, 19041, 19042, 19043, 19044, 19045, 19046, 19047, 19048, 19049, 19050, 19051, 19052, 19053, 19055, 19056, 19063, 19064, 19065, 19067, 19068, 19071, 19073, 19074, 19075, 19076, 19077, 19120, 19133, 19136, 19137, 19138, 19139, 19140, 19141, 19142, 19144, 19147, 19148, 19149, 19150, 19151, 19152, 19153, 19154, 19155, 19156, 19157, 19158, 19159, 19161, 19162, 19163, 19164, 19165, 19166, 19167, 19168, 19169, 19170, 19171, 19172, 19173, 19174, 19175, 19176, 19177, 19178, 19179, 19180, 19181, 19182, 19183, 19184, 19185, 19186, 19187, 19188, 19189, 19190, 19191, 19192, 19193, 19194, 19195, 19196, 19197, 19201, 19202, 19203, 19204, 19205, 19206, 19207, 19208, 19209, 19210, 19211, 19212, 19213, 19215, 19216, 19217, 19218, 19219, 19220, 19221, 19222, 19223, 19224, 19225, 19226, 19227, 19229, 19231, 19232, 19234, 19235, 19236, 19238, 19239, 19240, 19241, 19242, 19243, 19244, 19245, 19246, 19248, 19249, 19250, 19251, 19252, 19253, 19254, 19255, 19256, 19257, 19258, 19259, 19261, 19263, 19264, 19265, 19266, 19270, 19271, 19272, 19273, 19274, 19275, 19276, 19277, 19278, 19279, 19280, 19281, 19282, 19283, 19284, 19289, 19291, 19292, 19293, 19294, 19295, 19296, 19297, 19298, 19299, 19300, 19301, 19302, 19303, 19304, 19305, 19306, 19307, 19308, 19309, 19310, 19312, 19314, 19315, 19316, 19317, 19318, 19319, 19321, 19324, 19326, 19328, 19329, 19330, 19331, 19332, 19333, 19335, 19336, 19337, 19338, 19339, 19340, 19341, 19342, 19343, 19344, 19345, 19346, 19348, 19349, 19350, 19351, 19352, 19353, 19354, 19355, 19358, 19359, 19361, 19362, 19363, 19364, 19367, 19368, 19369, 19370, 19371, 19372, 19373, 19374, 19375, 19376, 19377, 19378, 19379, 19380, 19381, 19382, 19383, 19384, 19387, 19388, 19389, 19390, 19392, 19393, 19394, 19395, 19397, 19398, 19399, 19400, 19401, 19402, 19405, 19408, 19409, 19410, 19411, 19412, 19413, 19414, 19415, 19416, 19417, 19419, 19420, 19421, 19422, 19423, 19424, 19425, 19426, 19427, 19428, 19429, 19432, 19433, 19434, 19435, 19436, 19437, 19438, 19439, 19440, 19441, 19442, 19443, 19444, 19445, 19446, 19447, 19449, 19450, 19451, 19452, 19453, 19455, 19456, 19457, 19458, 19459, 19460, 19461, 19464, 19466, 19467, 19468, 19469, 19470, 19471, 19472, 19473, 19474, 19475, 19476, 19477, 19478, 19479, 19480, 19481, 19482, 19483, 19484, 19485, 19486, 19488, 19489, 19493, 19494, 19495, 19496, 19497, 19498, 19499, 19500, 19501, 19502, 19503, 19504, 19505, 19506, 19507, 19508, 19509, 19510, 19511, 19512, 19513, 19514, 19516, 19517, 19518, 19519, 19520, 19521, 19523, 19524, 19525, 19526, 19527, 19528, 19529, 19530, 19531, 19532, 19533, 19534, 19535, 19536, 19537, 19538, 19539, 19540, 19541, 19542, 19543, 19544, 19545, 19546, 19547, 19548, 19549, 19550, 19551, 19554, 19555, 19556, 19557, 19558, 19559, 19560, 19561, 19562, 19565, 19568, 19569, 19570, 19571, 19572, 19573, 19574, 19575, 19576, 19578, 19579, 19580, 19581, 19582, 19583, 19588, 19589, 19590, 19592, 19593, 19594, 19595, 19597, 19598, 19599, 19604, 19606, 19607, 19608, 19610, 19612, 19616, 19617, 19618, 19619, 19620, 19621, 19622, 19623, 19624, 19625, 19626, 19627, 19628, 19629, 19631, 19632, 19633, 19634, 19635, 19640, 19641, 19642, 19643, 19644, 19645, 19646, 19647, 19648, 19649, 19651, 19652, 19653, 19654, 19655, 19656, 19657, 19658, 19659, 19660, 19661, 19662, 19663, 19664, 19665, 19666, 19667, 19668, 19669, 19670, 19671, 19672, 19673, 19674, 19675, 19676, 19677, 19678, 19679, 19680, 19681, 19682, 19683, 19684, 19685, 19686, 19687, 19688, 19689, 19690, 19692, 19693, 19694, 19697, 19698, 19701, 19702, 19705, 19706, 19707, 19709, 19710, 19712, 19713, 19715, 19716, 19717, 19718, 19719, 19720, 19722, 19723, 19724, 19725, 19726, 19727, 19728, 19729, 19730, 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19738, 19740, 19744, 19747, 19754, 19755, 19756, 19757, 19759, 19760, 19762, 19763, 19764, 19765, 19766, 19767, 19768, 19769, 19772, 19773, 19774, 19775, 19776, 19777, 19778, 19779, 19780, 19781, 19782, 19783, 19784, 19788, 19789, 19792, 19795, 19796, 19797, 19799, 19800, 19801, 19802, 19806, 19823, 19824, 19825, 19826, 19827, 19830, 19831, 19832, 19833, 19836, 19837, 19838, 19839, 19840, 19842, 19843, 19844, 19845, 19847, 19848, 19849, 19850, 19851, 19852, 19853, 19855, 19856, 19857, 19858, 19859, 19860, 19861, 19862, 19863, 19864, 19865, 19866, 19867, 19868, 19869, 19870, 19871, 19872, 19873, 19874, 19875, 19876, 19878, 19879, 19880, 19881, 19882, 19905, 19906, 19907, 19908, 19909, 19910, 19911, 19912, 19913, 19914, 19915, 19916, 19918, 19919, 19920, 19921, 19922, 19923, 19924, 19925, 19926, 19932, 19933, 19934, 19935, 19936, 19937, 19938, 19939, 19940, 19942, 19943, 19944, 19945, 19946, 19947, 19948, 19949, 19950, 19951, 19952, 19953, 19956, 19957, 19958, 19959, 19960, 19961, 19962, 19963, 19964, 19965, 19966, 19967, 19968, 19969, 19970, 19971, 19972, 19973, 19978, 19979, 19980, 19982, 19983, 19984, 19985, 19986, 19987, 19988, 19989, 19990, 19991, 19992, 19993, 19994, 19995, 19996, 19997, 19998, 20003, 20020, 20021, 20023, 20024, 20025, 20026, 20027, 20028, 20029, 20030, 20031, 20032, 20033, 20034, 20035, 20036, 20037, 20038, 20039, 20040, 20041, 20042, 20043, 20044, 20046, 20052, 20053, 20054, 20055, 20058, 20059, 20060, 20061, 20062, 20063, 20064, 20066, 20067, 20068, 20069, 20071, 20072, 20075, 20076, 20078, 20079, 20080, 20081, 20082, 20083, 20084, 20086, 20087, 20088, 20089, 20090, 20092, 20093, 20095, 20096, 20097, 20098, 20100, 20101, 20102, 20109, 20110, 20111, 20112, 20113, 20114, 20115, 20116, 20117, 20118, 20119, 20120, 20121, 20123, 20124, 20125, 20126, 20127, 20129, 20130, 20131, 20132, 20133, 20134, 20135, 20136, 20137, 20138, 20139, 20140, 20141, 20142, 20143, 20145, 20148, 20149, 20150, 20151, 20152, 20153, 20154, 20155, 20156, 20157, 20158, 20159, 20160, 20161, 20162, 20163, 20194, 20195, 20196, 20197, 20198, 20199, 20201, 20202, 20203, 20204, 20205, 20206, 20207, 20208, 20209, 20210, 20211, 20214, 20215, 20216, 20217, 20218, 20220, 20221, 20222, 20223, 20224, 20226, 20227, 20229, 20230, 20231, 20232, 20233, 20234, 20235, 20236, 20237, 20238, 20239, 20240, 20241, 20242, 20243, 20244, 20246, 20247, 20248, 20249, 20250, 20251, 20269, 20270, 20271, 20272, 20273, 20274, 20276, 20278, 20279, 20280, 20281, 20283, 20284, 20285, 20286, 20287, 20288, 20289, 20290, 20291, 20292, 20293, 20294, 20295, 20296, 20324, 20326, 20327, 20329, 20330, 20331, 20332, 20333, 20334, 20335, 20336, 20337, 20338, 20339, 20340, 20341, 20342, 20343, 20344, 20345, 20346, 20347, 20348, 20349, 20350, 20351, 20352, 20353, 20354, 20355, 20357, 20358, 20359, 20360, 20361, 20362, 20363, 20365, 20368, 20370, 20372, 20373, 20374, 20376, 20377, 20378, 20379, 20380, 20381, 20382, 20383, 20384, 20385, 20386, 20387, 20388, 20389, 20390, 20391, 20392, 20393, 20394, 20395, 20396, 20397, 20398, 20399, 20400, 20401, 20402, 20403, 20404, 20405, 20406, 20407, 20408, 20409, 20410, 20411, 20415, 20416, 20417, 20418, 20419, 20420, 20422, 20424, 20426, 20427, 20428, 20429, 20430, 20431, 20432, 20433, 20434, 20435, 20436, 20438, 20439, 20440, 20441, 20442, 20443, 20444, 20445, 20447, 20448, 20449, 20450, 20451, 20452, 20453, 20454, 20455, 20456, 20458, 20459, 20460, 20463, 20464, 20465, 20470, 20471, 20472, 20473, 20474, 20475, 20476, 20477, 20478, 20479, 20480, 20481, 20482, 20483, 20484, 20485, 20486, 20488, 20489, 20490, 20491, 20492, 20493, 20494, 20495, 20496, 20497, 20498, 20499, 20500, 20501, 20502, 20503, 20504, 20505, 20506, 20507, 20508, 20509, 20510, 20511, 20512, 20513, 20514, 20515, 20516, 20518, 20520, 20551, 20552, 20553, 20554, 20555, 20556, 20557, 20561, 20563, 20564, 20599, 20600, 20601, 20603, 20604, 20605, 20606, 20607, 20608, 20609, 20610, 20611, 20612, 20613, 20614, 20616, 20617, 20618, 20619, 20634, 20635, 20666, 20668, 20669, 20670, 20671, 20672, 20673, 20674, 20676, 20677, 20678, 20679, 20680, 20682, 20683, 20684, 20685, 20709, 20710, 20713, 20714, 20722, 20723, 20724, 20726, 20727, 20728, 20729, 20730, 20731, 20732, 20735, 20736, 20747, 20748, 20749, 20751, 20752, 20753, 20755, 20756, 20757, 20762, 20763, 20764, 20765, 20766, 20767, 20768, 20769, 20770, 20771, 20772, 20773, 20774, 20775, 20777, 20778, 20779, 20780, 20781, 20782, 20783, 20784, 20785, 20786, 20787, 20788, 20789, 20790, 20791, 20792, 20793, 20794, 20795, 20796, 20797, 20798, 20799, 20800, 20801, 20802, 20803, 20804, 20805, 20806, 20807, 20808, 20809, 20810, 20811, 20812, 20813, 20814, 20815, 20816, 20825, 20845, 20846, 20847, 20848, 20849, 20850, 20851, 20852, 20853, 20854, 20855, 20856, 20857, 20858, 20859, 20864, 20865, 20866, 20867, 20868, 20869, 20870, 20871, 20872, 20873, 20874, 20875, 20876, 20877, 20878, 20879, 20880, 20881, 20882, 20883, 20885, 20886, 20887, 20889, 20890, 20891, 20892, 20893, 20894, 20895, 20896, 20897, 20898, 20899, 20900, 20901, 20902, 20903, 20904, 20905, 20906, 20907, 20908, 20909, 20910, 20911, 20912, 20913, 20914, 20915, 20916, 20917, 20918, 20920, 20921, 20922, 20924, 20925, 20926, 20927, 20928, 20929, 20930, 20931, 20932, 20933, 20934, 20977, 20978, 20980, 20981, 20982, 20983, 20984, 20985, 20986, 20987, 20988, 20989, 20990, 20995, 20998, 21004, 21005, 21006, 21007, 21008, 21009, 21010, 21018, 21019, 21021, 21022, 21023, 21024, 21025, 21026, 21027, 21029, 21030, 21032, 21033, 21039, 21040, 21041, 21042, 21044, 21045, 21046, 21047, 21048, 21049, 21050, 21051, 21052, 21053, 21055, 21056, 21057, 21058, 21059, 21060, 21061, 21062, 21063, 21064, 21065, 21066, 21071, 21072, 21073, 21074, 21075, 21077, 21078, 21079, 21080, 21081, 21082, 21083, 21084, 21085, 21086, 21087, 21088, 21089, 21090, 21092, 21093, 21094, 21095, 21096, 21097, 21101, 21102, 21103, 21104, 21105, 21106, 21107, 21108, 21109, 21110, 21111, 21112, 21113, 21114, 21115, 21116, 21117, 21118, 21119, 21120, 21123, 21124, 21126, 21127, 21128, 21129, 21130, 21131, 21132, 21133, 21134, 21135, 21136, 21137, 21138, 21139, 21142, 21145, 21147, 21148, 21151, 21152, 21153, 21155, 21156, 21157, 21158, 21159, 21160, 21161, 21164, 21168, 21170, 21171, 21172, 21173, 21174, 21175, 21176, 21178, 21179, 21180, 21181, 21182, 21183, 21185, 21186, 21188, 21189, 21192, 21193, 21194, 21195, 21196, 21197, 21198, 21200, 21203, 21205, 21207, 21209, 21210, 21211, 21212, 21213, 21214, 21215, 21216, 21217, 21218, 21220, 21221, 21225, 21233, 21234, 21235, 21236, 21237, 21238, 21241, 21242, 21244, 21245, 21246, 21249, 21250, 21251, 21253, 21254, 21255, 21256, 21257, 21258, 21259, 21261, 21262, 21263, 21264, 21265, 21267, 21275, 21276, 21277, 21279, 21283, 21284, 21285, 21286, 21287, 21288, 21289, 21290, 21291, 21292, 21293, 21294, 21295, 21296, 21300, 21301, 21302, 21303, 21304, 21305, 21306, 21307, 21308, 21309, 21310, 21311, 21312, 21313, 21314, 21315, 21316, 21317, 21318, 21319, 21322, 21323, 21324, 21325, 21326, 21328, 21330, 21331, 21332, 21334, 21335, 21336, 21337, 21338, 21339, 21340, 21341, 21342, 21343, 21344, 21345, 21346, 21347, 21348, 21349, 21350, 21351, 21352, 21353, 21354, 21357, 21359, 21362, 21365, 21368, 21370, 21373, 21375, 21376, 21380, 21381, 21382, 21383, 21384, 21385, 21386, 21387, 21389, 21391, 21393, 21394, 21395, 21396, 21397, 21398, 21399, 21400, 21402, 21403, 21404, 21405, 21408, 21409, 21410, 21411, 21413, 21414, 21416, 21417, 21419, 21420, 21422, 21423, 21425, 21426, 21427, 21428, 21429, 21430, 21432, 21434, 21435, 21436, 21437, 21438, 21439, 21440, 21441, 21443, 21444, 21445, 21446, 21447, 21448, 21449, 21450, 21451, 21452, 21453, 21454, 21455, 21456, 21457, 21458, 21459, 21460, 21461, 21462, 21463, 21464, 21465, 21466, 21467, 21468, 21469, 21470, 21471, 21472, 21474, 21475, 21476, 21477, 21478, 21483, 21484, 21485, 21487, 21488, 21489, 21492, 21493, 21494, 21496, 21497, 21498, 21499, 21500, 21501, 21502, 21503, 21504, 21505, 21506, 21510, 21512, 21514, 21515, 21516, 21517, 21518, 21519, 21520, 23408, 21713, 20588, 21627, 21628, 21632, 21633, 21636, 21637, 21638, 21639, 21640, 21641, 21643, 21644, 21648, 21649, 21650, 21651, 21652, 21654, 21655, 21656, 21657, 21658, 21659, 21660, 21661, 21662, 21663, 21664, 21682, 21683, 21684, 21685, 21686, 21687, 21690, 21691, 21692, 21694, 21695, 21696, 21699, 21700, 21701, 21702, 21703, 21704, 21705, 21706, 21707, 21708, 21709, 21710, 21711, 21717, 21718, 21719, 21720, 21721, 21722, 21723, 21724, 21725, 21726, 21727, 21728, 21729, 21730, 21731, 21732, 21733, 21734, 21735, 21736, 21737, 21738, 21739, 21740, 21741, 21742, 21743, 21744, 21746, 21747, 21748, 21749, 21750, 21751, 21752, 21753, 21754, 21755, 21756, 21757, 21759, 21760, 21761, 21763, 21766, 21767, 21768, 21769, 21770, 21771, 21772, 21773, 21774, 21775, 21776, 21777, 21778, 21779, 21780, 21782, 21783, 21784, 21787, 21788, 21789, 21790, 21791, 21792, 21793, 21794, 21795, 21796, 21797, 21798, 21801, 21802, 21803, 21804, 21805, 21807, 21808, 21809, 21810, 21811, 21814, 21815, 21816, 21817, 21818, 21819, 21820, 21821, 21822, 21823, 21824, 21826, 21827, 21829, 21837, 21839, 21840, 21844, 21846, 21847, 21849, 21851, 21852, 21853, 21854, 21855, 21856, 21858, 21859, 21860, 21861, 21862, 21864, 21867, 21869, 21870, 21872, 21876, 21877, 21878, 21879, 21891, 21892, 21893, 21894, 21895, 21896, 21897, 21898, 21899, 21901, 21902, 21903, 21904, 21905, 21906, 21907, 21908, 21909, 21911, 21912, 21921, 21922, 21923, 21924, 21925, 21926, 21928, 21930, 21931, 21935, 21936, 21937, 21938, 21939, 21940, 21941, 21942, 21944, 21945, 21946, 21947, 21949, 21950, 21951, 21952, 21953, 21954, 21955, 21956, 21957, 21960, 21961, 21962, 21963, 21967, 21968, 21969, 21970, 21971, 21974, 21975, 21976, 21978, 21979, 21981, 21983, 21984, 21985, 21986, 21992, 21993, 21995, 21996, 21997, 21998, 21999, 22000, 22001, 22002, 22003, 22004, 22005, 22006, 22007, 22008, 22009, 22011, 22012, 22013, 22015, 22016, 22017, 22018, 22019, 22020, 22021, 22022, 22023, 22024, 22025, 22026, 22027, 22037, 22038, 22039, 22040, 22042, 22043, 22044, 22045, 22046, 22051, 22052, 22053, 22054, 22058, 22059, 22060, 22061, 22062, 22063, 22064, 22065, 22066, 22068, 22069, 22070, 22071, 22072, 22073, 22074, 22075, 22076, 22077, 22078, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22093, 22094, 22095, 22096, 22097, 22098, 22099, 22100, 22101, 22102, 22103, 22105, 22106, 22107, 22108, 22110, 22112, 22113, 22114, 22115, 22116, 22121, 22122, 22123, 22124, 22125, 22126, 22127, 22130, 22132, 22133, 22134, 22135, 22136, 22137, 22138, 22139, 22141, 22142, 22143, 22144, 22146, 22148, 22149, 22150, 22151, 22160, 22174, 22175, 22177, 22180, 22181, 22182, 22187, 22189, 22194, 22195, 22196, 22197, 22199, 22201, 22202, 22204, 22205, 22206, 22208, 22211, 22212, 22213, 22214, 22215, 22216, 22217, 22218, 22221, 22224, 22225, 22226, 22227, 22228, 22229, 22230, 22231, 22232, 22233, 22234, 22235, 22237, 22239, 22240, 22241, 22242, 22243, 22244, 22246, 22252, 22253, 22254, 22255, 22257, 22258, 22259, 22260, 22261, 22262, 22263, 22265, 22267, 22268, 22269, 22272, 22273, 22274, 22275, 22277, 22278, 22279, 22280, 22281, 22282, 22283, 22285, 22286, 22287, 22288, 22289, 22291, 22292, 22293, 22295, 22297, 22298, 22301, 22302, 22303, 22305, 22306, 22307, 22308, 22309, 22310, 22311, 22312, 22313, 22314, 22315, 22317, 22318, 22320, 22323, 22325, 22326, 22327, 22331, 22332, 22333, 22334, 22336, 22337, 22338, 22339, 22340, 22341, 22342, 22343, 22348, 22350, 22351, 22355, 22356, 22357, 22358, 22360, 22362, 22363, 22364, 22365, 22367, 22368, 22369, 22370, 22371, 22372, 22373, 22374, 22375, 22376, 22377, 22378, 22380, 22381, 22384, 22385, 22386, 22387, 22388, 22389, 22390, 22392, 22393, 22394, 22395, 22396, 22400, 22401, 22402, 22403, 22404, 22405, 22406, 22407, 22408, 22410, 22417, 22419, 22420, 22421, 22422, 22423, 22424, 22427, 22429, 22430, 22431, 22432, 22433, 22434, 22435, 22436, 22437, 22438, 22439, 22440, 22441, 22442, 22443, 22444, 22445, 22446, 22447, 22448, 22449, 22451, 22452, 22453, 22454, 22455, 22456, 22457, 22458, 22459, 22460, 22461, 22462, 22463, 22464, 22465, 22466, 22467, 22468, 22469, 22470, 22471, 22472, 22473, 22474, 22476, 22477, 22478, 22479, 22480, 22481, 22482, 22483, 22484, 22485, 22488, 22489, 22490, 22491, 22492, 22494, 22495, 22496, 22497, 22498, 22499, 22500, 22502, 22503, 22504, 22505, 22506, 22507, 22508, 22510, 22511, 22512, 22513, 22514, 22519, 22520, 22523, 22656, 22798, 22799, 22800, 22801, 22819, 22821, 22822, 22831, 22832, 22841, 22842, 22843, 22844, 22845, 22846, 22847, 22848, 22849, 22851, 22853, 22855, 22869, 22871, 22873, 22874, 22875, 22876, 22877, 22878, 22880, 22881, 22882, 22883, 22884, 22885, 22887, 22890, 22891, 22892, 22893, 22898, 22899, 22905, 22917, 22918, 22922, 22924, 22939, 22940, 22945, 22947, 22948, 22949, 22950, 22951, 22952, 22953, 22954, 22955, 22960, 22963, 22972, 22974, 22980, 22982, 22985, 22987, 22991, 23016, 23022, 23028, 23029, 23030, 23038, 23042, 23048, 23050, 23051, 23066, 23079, 23082, 23086, 23127, 23147, 23151, 23162, 23165, 23172, 23175, 23176, 23177, 23178, 23179, 23204, 23207, 23219, 23257, 23263, 23270, 23271, 23272, 23273, 23306, 23330, 23337, 23339, 23363, 23367, 23378, 23381, 23383, 23291, 23411, 23415, 23418, 23419, 23420, 23421, 23433, 23434, 23435, 23437, 23440, 23443, 23446, 23449, 23461, 23462, 23463, 23464, 23465, 23466, 23483, 23484, 24003, 24004, 23320, 23489, 22997, 21714, 21715, 21716, 23258, 17207, 17809, 17810, 17811, 17812, 20923, 22834, 22837, 22932, 22981, 22979, 23036, 22993, 23338, 22994, 22992, 23002, 22931, 15666, 14443, 15214, 15383, 15431, 15432, 15434, 15437, 15445, 15446, 15448, 15450, 15451, 15452, 15453, 15455, 15456, 15457, 15485, 15486, 15488, 15490, 15520, 15539, 15663, 15701, 15709, 15720, 15731, 15733, 15734, 15735, 17376, 17708, 18528, 21140, 21166, 21252, 22515, 22833, 22857, 22859, 22861, 22862, 22863, 22864, 22872, 22934, 22935, 22936, 22966, 23033, 23102, 23180, 23268, 23326, 23373, 23396, 23409, 23452, 23454, 23534, 23535, 23536, 23699, 23719, 17910, 17911, 17912, 17913, 17914, 22986, 23035, 19, 29, 31, 49, 55, 62, 65, 71, 73, 82, 87, 90, 93, 102, 105, 106, 107, 108, 109, 111, 112, 120, 129, 130, 153, 192, 201, 211, 221, 224, 229, 230, 242, 262, 280, 281, 282, 283, 286, 287, 290, 291, 303, 309, 351, 361, 364, 365, 370, 371, 373, 387, 388, 389, 393, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 418, 421, 542, 564, 566, 567, 601, 638, 693, 700, 749, 841, 852, 860, 882, 929, 994, 995, 996, 1055, 1056, 1067, 1171, 1227, 1293, 1384, 1392, 1403, 1406, 1408, 1409, 1468, 1541, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1631, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1714, 1730, 1757, 1764, 1798, 1810, 1811, 1819, 1820, 1849, 1857, 1858, 1861, 1862, 1864, 1879, 1881, 1925, 1926, 1927, 1928, 1929, 1930, 1932, 1945, 1990, 1991, 2040, 2095, 2109, 2138, 2213, 2217, 2218, 2219, 2221, 2222, 2279, 2280, 2281, 2282, 2286, 2288, 2289, 2290, 2291, 2292, 2294, 2298, 2325, 2472, 2593, 2637, 2665, 2689, 2690, 2702, 2709, 2710, 2741, 2746, 2797, 2807, 2809, 2833, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2871, 2873, 2874, 2875, 2877, 2886, 2889, 2890, 2891, 2896, 2899, 2935, 2938, 2939, 3146, 3151, 3152, 3200, 3259, 3262, 3437, 3460, 3462, 3524, 3559, 3564, 3575, 3580, 3642, 3668, 3697, 3699, 3777, 3778, 3793, 3796, 3826, 3832, 3839, 3852, 3860, 3869, 3870, 3876, 3878, 3938, 3957, 3966, 3971, 3972, 3973, 3997, 4039, 4055, 4069, 4121, 4149, 4153, 4157, 4174, 4176, 4178, 4179, 4206, 4224, 4237, 4239, 4245, 4246, 4247, 4253, 4261, 4322, 4333, 4340, 4346, 4347, 4348, 4394, 4395, 4408, 4410, 4443, 4482, 4487, 4491, 4621, 4626, 4669, 4683, 4691, 4703, 4704, 4717, 4725, 4816, 4862, 4881, 4955, 4957, 4970, 4975, 4976, 4985, 4986, 4987, 4988, 4989, 4990, 4991, 4992, 4993, 4994, 4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5059, 5060, 5061, 5062, 5064, 5084, 5104, 5105, 5187, 5231, 5264, 5315, 5326, 5348, 5367, 5407, 5415, 5442, 5443, 5445, 5447, 5468, 5507, 5521, 5522, 5524, 5525, 5526, 5542, 5548, 5549, 5550, 5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, 5561, 5562, 5563, 5587, 5588, 5589, 5590, 5621, 5625, 5626, 5627, 5628, 5629, 5630, 5631, 5632, 5633, 5737, 5740, 5746, 5772, 5773, 5776, 5777, 5778, 5779, 5788, 5789, 5790, 5791, 5793, 5794, 5795, 5796, 5801, 5825, 5866, 5867, 5868, 5872, 5903, 5928, 5936, 5945, 5946, 5947, 5948, 5949, 5954, 5956, 5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972, 5973, 5980, 5983, 5986, 5987, 5989, 5995, 6022, 6023, 6036, 6076, 6092, 6106, 6107, 6108, 6197, 6214, 6242, 6269, 6270, 6296, 6326, 6327, 6346, 6561, 6571, 6572, 6573, 6666, 6687, 6767, 6772, 6773, 7006, 7008, 7013, 7014, 7094, 7095, 7096, 7116, 7117, 7119, 7121, 7122, 7123, 7124, 7127, 7128, 7129, 7130, 7131, 7133, 7134, 7143, 7144, 7146, 7150, 7151, 7152, 7173, 7174, 7186, 7227, 7270, 7373, 7374, 7375, 7377, 7378, 7388, 7393, 7488, 7503, 7504, 7525, 7526, 7528, 7546, 7547, 7548, 7551, 7552, 7554, 7556, 7558, 7559, 7561, 7563, 7570, 7663, 7689, 7703, 7709, 7710, 7711, 7712, 7713, 7743, 7745, 7746, 7747, 7748, 7791, 7896, 7898, 7906, 7919, 7935, 8148, 8206, 8316, 8321, 8322, 8323, 8377, 8406, 8407, 8505, 8536, 8537, 8552, 8559, 8599, 8613, 8663, 8676, 8677, 8765, 8777, 8880, 8887, 8935, 9180, 9275, 9276, 9417, 9542, 9576, 9578, 9579, 9581, 9582, 9599, 9702, 9703, 9704, 9705, 9837, 9896, 9936, 10080, 10081, 10084, 10178, 10203, 10236, 10237, 10238, 10239, 10291, 10292, 10294, 10295, 10297, 10298, 10395, 10397, 10449, 10451, 10452, 10453, 10454, 10459, 10466, 10483, 10484, 10492, 10493, 10494, 10579, 10783, 10784, 10785, 10786, 10787, 10788, 10789, 10790, 10791, 10792, 10793, 10794, 10795, 10796, 10797, 10798, 10818, 10819, 10820, 10898, 10985, 10989, 11045, 11144, 11148, 11149, 11151, 11179, 11292, 11381, 11392, 11393, 11394, 11395, 11396, 11398, 11399, 11400, 11402, 11403, 11404, 11405, 11408, 11409, 11410, 11411, 11412, 11413, 11414, 11415, 11416, 11437, 11474, 11479, 11494, 11547, 11549, 11550, 11579, 11580, 11581, 11597, 11606, 11617, 11618, 11619, 11628, 11676, 11719, 11742, 11743, 11779, 11780, 11809, 11816, 11902, 11903, 11904, 11905, 11906, 11907, 11908, 11909, 11919, 11926, 11938, 11958, 12020, 12035, 12036, 12039, 12040, 12044, 12054, 12142, 12145, 12146, 12147, 12176, 12177, 12200, 12260, 12386, 12434, 12536, 12741, 12758, 12819, 12857, 12898, 13083, 13148, 13281, 13339, 13477, 13496, 13516, 13517, 13518, 13519, 13520, 13521, 13522, 13523, 13619, 13620, 13856, 13857, 13977, 14016, 14017, 14018, 14019, 14042, 14061, 14062, 14063, 14101, 14141, 14142, 14143, 14144, 14145, 14146, 14147, 14148, 14161, 14162, 14181, 14184, 14261, 14265, 14274, 14302, 14306, 14307, 14309, 14310, 14311, 14312, 14341, 14346, 14352, 14391, 14406, 14422, 14493, 14501, 14554, 14562, 14563, 14605, 14606, 14623, 14629, 14630, 14631, 14632, 14633, 14635, 14636, 14641, 14642, 14643, 14644, 14681, 14682, 14683, 14684, 14685, 14687, 14688, 14689, 14690, 14691, 14692, 14694, 14695, 14696, 14697, 14698, 14700, 14701, 14702, 14703, 14704, 14705, 14707, 14708, 14709, 14710, 14712, 14713, 14714, 14719, 14746, 14755, 14756, 14761, 14801, 14824, 14851, 14852, 14853, 14854, 14855, 14856, 14858, 14877, 14879, 14885, 14886, 14941, 14966, 14967, 14968, 15081, 15085, 15110, 15118, 15121, 15123, 15135, 15139, 15166, 15216, 15217, 15219, 15313, 15314, 15317, 15328, 15349, 15356, 15357, 15359, 15360, 15361, 15364, 15368, 15373, 15374, 15375, 15376, 15377, 15382, 15394, 15410, 15411, 15412, 15413, 15414, 15421, 15422, 15423, 15424, 15425, 15426, 15427, 15435, 15436, 15449, 15454, 15459, 15460, 15465, 15466, 15469, 15475, 15481, 15495, 15506, 15507, 15512, 15514, 15518, 15519, 15522, 15524, 15525, 15529, 15530, 15532, 15533, 15534, 15535, 15536, 15545, 15552, 15553, 15571, 15590, 15591, 15609, 15610, 15611, 15618, 15623, 15625, 15626, 15627, 15628, 15629, 15633, 15634, 15639, 15640, 15653, 15660, 15661, 15672, 15680, 15685, 15693, 15694, 15695, 15703, 15705, 15710, 15711, 15712, 15717, 15719, 15721, 15723, 15724, 15729, 15730, 15736, 15737, 15738, 15746, 15747, 15748, 15749, 15750, 15751, 15752, 15753, 15754, 15756, 15757, 15758, 15759, 15769, 15770, 15771, 15772, 15773, 15774, 15775, 15776, 15777, 15778, 15780, 15781, 15782, 15783, 15784, 15785, 15786, 15787, 15788, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, 15798, 15799, 15800, 15801, 15804, 15805, 15806, 15807, 15808, 15809, 15810, 15811, 15812, 15813, 15814, 15815, 15816, 15817, 15832, 15835, 15838, 15839, 15840, 15841, 15842, 15843, 15844, 15845, 15846, 15847, 15848, 15849, 15850, 15851, 15855, 15856, 15860, 15861, 15863, 15864, 15865, 15867, 15872, 15873, 15874, 15875, 15876, 15877, 15878, 15879, 15880, 15881, 15884, 15885, 15886, 15887, 15888, 15889, 15890, 15896, 15899, 15900, 15901, 15902, 15905, 15906, 15907, 15908, 15909, 15911, 15912, 15913, 15914, 15915, 15916, 15917, 15919, 15922, 15923, 15925, 15926, 15927, 15933, 15934, 15935, 15944, 15947, 15955, 15957, 15959, 15961, 15972, 15973, 16000, 16001, 16002, 16003, 16004, 16005, 16007, 16008, 16009, 16019, 16023, 16026, 16027, 16035, 16038, 16039, 16040, 16041, 16049, 16050, 16051, 16052, 16053, 16054, 16055, 16056, 16057, 16058, 16066, 16072, 16075, 16082, 16083, 16084, 16086, 16092, 16093, 16095, 16098, 16100, 16105, 16106, 16107, 16108, 16109, 16110, 16111, 16120, 16121, 16123, 16124, 16125, 16126, 16128, 16129, 16136, 16137, 16139, 16141, 16142, 16148, 16150, 16172, 16181, 16182, 16184, 16190, 16207, 16211, 16212, 16214, 16233, 16234, 16235, 16255, 16265, 16281, 16284, 16285, 16286, 16296, 16306, 16312, 16356, 16359, 16360, 16363, 16369, 16373, 16374, 16378, 16393, 16419, 16420, 16421, 16422, 16423, 16427, 16428, 16429, 16430, 16432, 16433, 16434, 16435, 16436, 16437, 16439, 16440, 16445, 16450, 16454, 16455, 16456, 16486, 16487, 16508, 16509, 16510, 16511, 16512, 16513, 16527, 16532, 16533, 16538, 16564, 16565, 16566, 16605, 16606, 16608, 16614, 16622, 16630, 16645, 16661, 16682, 16711, 16717, 16720, 16730, 16737, 16754, 16758, 16759, 16760, 16770, 16783, 16784, 16785, 16849, 16853, 23311, 16868, 16869, 16872, 16874, 16875, 16877, 16881, 16882, 16883, 16889, 16890, 16891, 16892, 16893, 16894, 16895, 16900, 16902, 16908, 16909, 16910, 16926, 16930, 16931, 16935, 16936, 16940, 16941, 16942, 16953, 16955, 16956, 16957, 16958, 16961, 16962, 16963, 16965, 16969, 16970, 16979, 16981, 16982, 16983, 16984, 16985, 16986, 16987, 16988, 16989, 16990, 16997, 16999, 17009, 17010, 17011, 17012, 17013, 17016, 17017, 17018, 17019, 17020, 17021, 17022, 17024, 17025, 17026, 17027, 17028, 17029, 17030, 17031, 17032, 17055, 17061, 17063, 17064, 17065, 17075, 17078, 17081, 17082, 17091, 17107, 17118, 17140, 17145, 17162, 17163, 17165, 17198, 17221, 17227, 17239, 17254, 17258, 17261, 17284, 17286, 17288, 17289, 17292, 17294, 17295, 17297, 17301, 17302, 17315, 17319, 17332, 17335, 17351, 17354, 17365, 17366, 17367, 17368, 17369, 17382, 17383, 17384, 17385, 17386, 17387, 17388, 17389, 17390, 17394, 17396, 17411, 17415, 17419, 17422, 17430, 17449, 17450, 17451, 17454, 17456, 17457, 17458, 17460, 17466, 17470, 17476, 17492, 17501, 17502, 17506, 17507, 17515, 17516, 17526, 17533, 17534, 17559, 17560, 17561, 17562, 17563, 17564, 17565, 17566, 17567, 17568, 17569, 17570, 17571, 17572, 17573, 17574, 17576, 17577, 17579, 17580, 17581, 17582, 17583, 17590, 17593, 17594, 17595, 17596, 17597, 17601, 17602, 17605, 17615, 17616, 17617, 17618, 17619, 17620, 17625, 17638, 17639, 17640, 17641, 17643, 17644, 17646, 17648, 17650, 17652, 17665, 17668, 17672, 17675, 17677, 17679, 17688, 17691, 17697, 17699, 17700, 17706, 17709, 17736, 17755, 17818, 17823, 17829, 17851, 17854, 17861, 17863, 17864, 17867, 17868, 17869, 17872, 17873, 17902, 17903, 17905, 17906, 17907, 17908, 17916, 17946, 17949, 17950, 17967, 17970, 17971, 17973, 18001, 18036, 18040, 18041, 18045, 18047, 26651, 26342, 26341, 26340, 26339, 26338, 26337, 25579, 25578, 25577, 25576, 25575, 18060, 18061, 18078, 18081, 18082, 18083, 18084, 18085, 18095, 18104, 18107, 18108, 18153, 18154, 18156, 18157, 18158, 18169, 18178, 18184, 18198, 18239, 18241, 18254, 18269, 18270, 18271, 18284, 18287, 18288, 18304, 18361, 18368, 18403, 18410, 18425, 25574, 25573, 25572, 25571, 25570, 18474, 18479, 18526, 18529, 18534, 18546, 18550, 18551, 18552, 18562, 18582, 18599, 25569, 25568, 25567, 25566, 25565, 25564, 25563, 25562, 25561, 25560, 25559, 25558, 25557, 25556, 25555, 25554, 25553, 25552, 25551, 25550, 25549, 18643, 18645, 18665, 18679, 18684, 18689, 18691, 18692, 18695, 18697, 18721, 18738, 18739, 18740, 18741, 18742, 18769, 18770, 18780, 18783, 18801, 18806, 18819, 18820, 18844, 18845, 18846, 18851, 18854, 18861, 18862, 18863, 18868, 18871, 18874, 18876, 18878, 18889, 18920, 18925, 18932, 18958, 18961, 18979, 18980, 19010, 19031, 19036, 19037, 19039, 19040, 19054, 19066, 19069, 19070, 19072, 19134, 19135, 19145, 19146, 19160, 19198, 19199, 19200, 19214, 19228, 19230, 19247, 19260, 19262, 19267, 19268, 19269, 19285, 19286, 19287, 19288, 19290, 19311, 19313, 19320, 19322, 19327, 19334, 19347, 19356, 19357, 19365, 19366, 19385, 19386, 19391, 19403, 19404, 19406, 19407, 19418, 19454, 19463, 19487, 19490, 19491, 19492, 19522, 19552, 19553, 19563, 19564, 19566, 19567, 19577, 19584, 19585, 19586, 19587, 19591, 19596, 19600, 19601, 19602, 19603, 19605, 19609, 19611, 19613, 19614, 19615, 19630, 19636, 19637, 19638, 19639, 19650, 19695, 19696, 19700, 19704, 19708, 19721, 19739, 19741, 19742, 19743, 19745, 19746, 19748, 19749, 19750, 19751, 19752, 19753, 19758, 19761, 19770, 19771, 19785, 19786, 19787, 19790, 19791, 19793, 19794, 19798, 19803, 19804, 19805, 19807, 19808, 19809, 19810, 19811, 19812, 19813, 19814, 19815, 19816, 19817, 19818, 19819, 19820, 19821, 19822, 19828, 19829, 19835, 19841, 19846, 19854, 19877, 19883, 25548, 25547, 25546, 25545, 25544, 25543, 25542, 25541, 24857, 23186, 23185, 23184, 23182, 23181, 23122, 22938, 22399, 22346, 22322, 22300, 19917, 19927, 19928, 19929, 19930, 19931, 19941, 19954, 19974, 19975, 19976, 19981, 19999, 20000, 20019, 20045, 20047, 20048, 20049, 20050, 20073, 20074, 20085, 20091, 20099, 20103, 20104, 20105, 20106, 20107, 20122, 20128, 20144, 20146, 22173, 22172, 22171, 22170, 22169, 22168, 22167, 22166, 22164, 22163, 22162, 22129, 21991, 21990, 21989, 21988, 21943, 21919, 21918, 21917, 21916, 21915, 21914, 21843, 21842, 21841, 21786, 21712, 21647, 20200, 20212, 20213, 20225, 20245, 21646, 21645, 21626, 21625, 21624, 21623, 21622, 21621, 21620, 21619, 21618, 21617, 21616, 21615, 21614, 21613, 21612, 20277, 20297, 21611, 21610, 21609, 21608, 21607, 21606, 21605, 21604, 21603, 21602, 21601, 21600, 21599, 21598, 21597, 21596, 21595, 21594, 21593, 21592, 21591, 21590, 21589, 21588, 21587, 21586, 20325, 20356, 20364, 20366, 20367, 20369, 20371, 20375, 20413, 20414, 20421, 20423, 20425, 20446, 20457, 20461, 20462, 20466, 20467, 20468, 20469, 20517, 20519, 21585, 21584, 21583, 21582, 21581, 21580, 21579, 21578, 21577, 21576, 21575, 21574, 21573, 21572, 21571, 21570, 21569, 21568, 21567, 21566, 21565, 21564, 21563, 21562, 21561, 21560, 21559, 21558, 21557, 21556, 20558, 20560, 20562, 21555, 21554, 21553, 21552, 21551, 21550, 21549, 21548, 21547, 21546, 21545, 21544, 21543, 21542, 21541, 21540, 21539, 21538, 21537, 21536, 21535, 21534, 21533, 21532, 21531, 21530, 21529, 21528, 21527, 21526, 21525, 21524, 21523, 21522, 20602, 20615, 20993, 20746, 20745, 20744, 20743, 20742, 20741, 20740, 20739, 20738, 20737, 20706, 20705, 20704, 20703, 20702, 20701, 20700, 20699, 20698, 20697, 20696, 20695, 20694, 20693, 20692, 20691, 20690, 20689, 20688, 20687, 20686, 20665, 20664, 20663, 20662, 20661, 20660, 20659, 20658, 20657, 20656, 20667, 20675, 20681, 20655, 20654, 20653, 20652, 20651, 20650, 20649, 20648, 20647, 20646, 20645, 20644, 20643, 20642, 20641, 20640, 20639, 20638, 20637, 20636, 20633, 20707, 20708, 20716, 20717, 20718, 20719, 20720, 20725, 20733, 20734, 20632, 20631, 20630, 20629, 20628, 20627, 20626, 20625, 20624, 20623, 20754, 20776, 20817, 20818, 20819, 20820, 20821, 20822, 20823, 20824, 20826, 20827, 20828, 20829, 20830, 20831, 20832, 20833, 20834, 20835, 20836, 20837, 20838, 20839, 20840, 20841, 20842, 20843, 20844, 20860, 20861, 20862, 20863, 20884, 20888, 20919, 20979, 20991, 20622, 20621, 20994, 20999, 21001, 21002, 21011, 21012, 21013, 21014, 21015, 21016, 21017, 21020, 21031, 21034, 21035, 21036, 21037, 21038, 21043, 21054, 21067, 21068, 21069, 21070, 21076, 21091, 21098, 21099, 21100, 21121, 21122, 21143, 21144, 21146, 21149, 21150, 21154, 21162, 21163, 21165, 21167, 21169, 21177, 21184, 21187, 21190, 21191, 21199, 21201, 21202, 21204, 21206, 21208, 21222, 21224, 21226, 21227, 21228, 21229, 21230, 21231, 21232, 21239, 21240, 21243, 21247, 21248, 21260, 21266, 21268, 21269, 21270, 21271, 21272, 21273, 21274, 21278, 21281, 21297, 21298, 21299, 21320, 21321, 21329, 21355, 21356, 21358, 21360, 21361, 21363, 21364, 21366, 21367, 21369, 21371, 21372, 21374, 21388, 21390, 21392, 21401, 21406, 21407, 21412, 21415, 21418, 21421, 21424, 21473, 21479, 21480, 21481, 21482, 21490, 21491, 21495, 21508, 21511, 21513, 20620, 20594, 20593, 20592, 20587, 20586, 20585, 20584, 20583, 20582, 20570, 20550, 20549, 20548, 20547, 20540, 20539, 20527, 20526, 20524, 20523, 20522, 20521, 20323, 20322, 20321, 20320, 20319, 20318, 20317, 20316, 20315, 20314, 20313, 20312, 20311, 20310, 20309, 20308, 20307, 20306, 20305, 20304, 20303, 20302, 20301, 20300, 20299, 20298, 20268, 20267, 20266, 20265, 20264, 20263, 20262, 20261, 20260, 20259, 20258, 20257, 20256, 20255, 20254, 21629, 21630, 21631, 21634, 21635, 21642, 20253, 20252, 20193, 21653, 21665, 21666, 21667, 21668, 21669, 21670, 21671, 21672, 21673, 21674, 21675, 21676, 21677, 21678, 21679, 21680, 21681, 21688, 21689, 21697, 21698, 20192, 21758, 21762, 21781, 20191, 21799, 21800, 21806, 21812, 21830, 21831, 21832, 21833, 21834, 21835, 21836, 20190, 20189, 21845, 21848, 21850, 21857, 21863, 21865, 21866, 21871, 21873, 21874, 21875, 21880, 21881, 21882, 21883, 21884, 21885, 21886, 21887, 21888, 21889, 21900, 21910, 21913, 20187, 20186, 20185, 20184, 20183, 20182, 21920, 21929, 21932, 21933, 21934, 20181, 21958, 21959, 21964, 21965, 21966, 21972, 21973, 21977, 21980, 21982, 21987, 20180, 20179, 20178, 20177, 21994, 22010, 22028, 22029, 22030, 22031, 22032, 22033, 22034, 22035, 22036, 22041, 22047, 22049, 22050, 22055, 22056, 22057, 22067, 22091, 22104, 22109, 22111, 22117, 22118, 22119, 22120, 22128, 20176, 22131, 22140, 22147, 22152, 22161, 20175, 20174, 20173, 20172, 20171, 20170, 20169, 20168, 20167, 20166, 20165, 20164, 22176, 22186, 22188, 22190, 22191, 22192, 22193, 22200, 22203, 22207, 22209, 22210, 22219, 22220, 22236, 22238, 22247, 22248, 22249, 22250, 22251, 22256, 22264, 22266, 22270, 22271, 22276, 22290, 22299, 19904, 22304, 22316, 22319, 19903, 22328, 22330, 22335, 22344, 22345, 19902, 22347, 22349, 22352, 22353, 22354, 22359, 22361, 22366, 22379, 22383, 22391, 22398, 19901, 22411, 22412, 22413, 22414, 22415, 22416, 22418, 22425, 22426, 22428, 22450, 22475, 22486, 22487, 22501, 22509, 22516, 22517, 22518, 22521, 22524, 22525, 22526, 22527, 22528, 22529, 22530, 22531, 22532, 22533, 22534, 22535, 22536, 22537, 22538, 22539, 22540, 22541, 22542, 22543, 22544, 22545, 22546, 22547, 22548, 22549, 22550, 22551, 22552, 22553, 22554, 22555, 22556, 22557, 22558, 22559, 22560, 22561, 22562, 22563, 22564, 22565, 22566, 22567, 22568, 22569, 22570, 22571, 22572, 22573, 22574, 22575, 22576, 22577, 22578, 22579, 22580, 22581, 22582, 22583, 22584, 22585, 22586, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22596, 22597, 22598, 22599, 22600, 22601, 22602, 22603, 22604, 22605, 22606, 22607, 22608, 22609, 22610, 22611, 22612, 22613, 22614, 22615, 22616, 22617, 22618, 22619, 22620, 22621, 22622, 22623, 22624, 22625, 22626, 22627, 22628, 22629, 22630, 22631, 22632, 22633, 22634, 22635, 22636, 22637, 22638, 22639, 22640, 22641, 22642, 22643, 22644, 22645, 22646, 22647, 22648, 22649, 22650, 22651, 22652, 22653, 22654, 22655, 22657, 22658, 22659, 22660, 22661, 22662, 22663, 22664, 22665, 22666, 22667, 22668, 22669, 22670, 22671, 22672, 22673, 22674, 22675, 22676, 22677, 22678, 22679, 22680, 22681, 22682, 22683, 22684, 22685, 22686, 22687, 22688, 22689, 22690, 22691, 22692, 22693, 22694, 22695, 22696, 22697, 22698, 22699, 22700, 22701, 22702, 22703, 22704, 22705, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22713, 22714, 22715, 22716, 22717, 22718, 22719, 22720, 22721, 22722, 22723, 22724, 22725, 22727, 22728, 22729, 22730, 22731, 22732, 22733, 22734, 22735, 22736, 22737, 22738, 22739, 22741, 22743, 22744, 22745, 22746, 22747, 22748, 22749, 22750, 22751, 22752, 22753, 22754, 22755, 22756, 22757, 22758, 22759, 22760, 22761, 22762, 22763, 22764, 22765, 22766, 22767, 22768, 22769, 22770, 22771, 22772, 22773, 22774, 22775, 22776, 22777, 22778, 22779, 22780, 22781, 22782, 22783, 22784, 22785, 22786, 22787, 22788, 22789, 22790, 22791, 22792, 22793, 22794, 22795, 22796, 22797, 22807, 22818, 22820, 22824, 22836, 22838, 22888, 22900, 22910, 22911, 22912, 22923, 22941, 22958, 22967, 22975, 22976, 22977, 22978, 22995, 23007, 23019, 23037, 23040, 23052, 23053, 23055, 23056, 23059, 23061, 23063, 23076, 23077, 23078, 23087, 23088, 23094, 23110, 23112, 23113, 23115, 23116, 23118, 23119, 23120, 23128, 23173, 23174, 23188, 23199, 23208, 23212, 23218, 23220, 23230, 23231, 23233, 23234, 23246, 23253, 23255, 23256, 23260, 23261, 23262, 23266, 23278, 23281, 23282, 23300, 23301, 23310, 23316, 23322, 23323, 23327, 23328, 23334, 23335, 23343, 23347, 23362, 23365, 23380, 23382, 23385, 23386, 23392, 23395, 23406, 23407, 23413, 23428, 23439, 23455, 23456, 23457, 23458, 23459, 23460, 23473, 23496, 23500, 23512, 23157, 23243, 23244, 23245, 23447, 23139, 23140, 23370, 23149, 24484, 23511, 23482, 23510, 23521, 23702, 23558, 23684, 23808, 24766, 23683, 23488, 23700, 23628, 23627, 23710, 24468, 24710, 23703, 23522, 23698, 23525, 24108, 23706, 23486, 24109, 24463, 24462, 23487, 23696, 23685, 23481, 22943, 23635, 24497, 24510, 23605, 23606, 24711, 24501, 24492, 24493, 24498, 24657, 24495, 24499, 23604, 23603, 24373, 24372, 23533, 24265, 24264, 24263, 23531, 23530, 23529, 23966, 23537, 23682, 23686, 23758, 23800, 24034, 24700, 24814, 23619, 23623, 23624, 23625, 23626, 24519, 23973, 23712, 23103, 23713, 23971, 953, 1401, 1758, 1759, 1760, 1761, 1762, 1850, 1979, 1980, 2051, 2154, 2424, 3201, 4450, 4942, 5063, 5201, 5596, 6526, 6688, 6926, 6931, 7236, 7314, 7624, 7938, 8498, 8499, 8500, 8501, 8502, 8796, 9567, 9658, 9659, 9686, 10044, 10156, 10620, 10736, 11080, 11537, 11538, 11539, 11540, 11541, 11542, 11543, 11544, 11545, 11623, 11978, 12317, 12417, 12421, 12462, 12466, 12469, 12470, 12516, 12517, 12804, 12916, 12917, 13056, 13838, 14735, 14830, 14831, 14870, 14906, 14913, 15133, 15134, 15142, 15143, 15144, 15145, 15151, 15152, 15153, 15154, 15155, 15156, 15157, 15158, 15159, 15160, 15161, 15167, 15173, 15619, 15632, 15982, 15983, 15985, 15992, 15993, 15996, 15997, 15998, 15999, 16077, 16078, 16089, 16099, 16496, 16497, 16498, 16536, 16609, 16861, 17042, 17313, 17428, 17575, 17685, 17737, 17738, 17739, 17740, 17741, 17742, 17743, 17744, 17745, 17746, 17747, 17748, 17749, 17750, 17751, 17752, 17753, 17754, 17756, 17757, 17758, 17759, 17760, 17761, 17762, 17763, 17764, 17774, 17775, 17776, 17777, 17778, 17779, 17780, 17781, 17782, 17783, 17784, 17785, 17786, 17787, 17788, 17789, 17790, 17791, 17792, 17793, 17859, 17997, 18148, 18149, 18163, 18164, 18216, 18217, 18268, 18623, 18624, 18890, 18935, 18936, 18941, 19057, 19058, 19059, 19060, 19078, 19079, 19080, 19081, 19082, 19083, 19084, 19085, 19086, 19087, 19088, 19089, 19090, 19091, 19092, 19093, 19094, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102, 19103, 19104, 19105, 19106, 19107, 19108, 19109, 19110, 19111, 19112, 19113, 19114, 19115, 19116, 19117, 19118, 19119, 19121, 19122, 19123, 19124, 19125, 19126, 19127, 19128, 19129, 19130, 19131, 19132, 19233, 19237, 19323, 19430, 19431, 19691, 20094, 20219, 20275, 20282, 20412, 21521, 20935, 20936, 20937, 20938, 20939, 20940, 20941, 20942, 20943, 20944, 20945, 20946, 20947, 20948, 20949, 20950, 20951, 20952, 20953, 20954, 20955, 20956, 20957, 20958, 20959, 20960, 20961, 20962, 20963, 20964, 20965, 20966, 20967, 20968, 20969, 20970, 20971, 20972, 20973, 20974, 20975, 20976, 21003, 21333, 21507, 20598, 20597, 20596, 20595, 20589, 20581, 20580, 20579, 20578, 20577, 20576, 20575, 20574, 20573, 20572, 20571, 20569, 20568, 20567, 20566, 20565, 20546, 20545, 20544, 20543, 20542, 20541, 20538, 20537, 20536, 20535, 20534, 20533, 20532, 20531, 20530, 20529, 20528, 20525, 21764, 21765, 21838, 20188, 21868, 22048, 22145, 22185, 22284, 22296, 22409, 22522, 22802, 22804, 22806, 22810, 22811, 22812, 22813, 22814, 22815, 22816, 22817, 22823, 22825, 22826, 22827, 22828, 22829, 22830, 22835, 22839, 22840, 22850, 22856, 22858, 22860, 22865, 22866, 22867, 22868, 22870, 22879, 22886, 22889, 22894, 22895, 22896, 22897, 22901, 22902, 22903, 22904, 22906, 22907, 22908, 22909, 22913, 22914, 22915, 22916, 22919, 22920, 22921, 22925, 22926, 22927, 22928, 22929, 22930, 22933, 22937, 19900, 22942, 22946, 22956, 22957, 22959, 22962, 22964, 22965, 22968, 22969, 22970, 22971, 22973, 22983, 22984, 22988, 22989, 22990, 22996, 22998, 22999, 23000, 23001, 23003, 23004, 23005, 23006, 23008, 23009, 23010, 23011, 23012, 23015, 23018, 23020, 23021, 23023, 23024, 23025, 23026, 23027, 23031, 23032, 23034, 23039, 23043, 23044, 23045, 23046, 23047, 23049, 23054, 23057, 23058, 23060, 23062, 23064, 23065, 23067, 23068, 23069, 23070, 23071, 23072, 23073, 23074, 23075, 23080, 23081, 23083, 23084, 23085, 23089, 23090, 23091, 23092, 23093, 23095, 23096, 23097, 23098, 23099, 23100, 23101, 23104, 23105, 23106, 23107, 23108, 23109, 23111, 23114, 23117, 23121, 19899, 23123, 23124, 23129, 23130, 23131, 23132, 23133, 23134, 23135, 23136, 23137, 23138, 23141, 23142, 23143, 23144, 23145, 23146, 23148, 23150, 23152, 23153, 23154, 23155, 23158, 23159, 23160, 23161, 23163, 23164, 23166, 23167, 23168, 23169, 23170, 23171, 19898, 19897, 19896, 19895, 19894, 19893, 23187, 23189, 23190, 23191, 23192, 23193, 23194, 23195, 23196, 23197, 23198, 23200, 23201, 23202, 23203, 23205, 23206, 23209, 23210, 23211, 23213, 23214, 23215, 23216, 23217, 23222, 23223, 23224, 23225, 23226, 23227, 23228, 23229, 23232, 23235, 23236, 23237, 23239, 23240, 23241, 23242, 23247, 23249, 23250, 23252, 23254, 23259, 23264, 23265, 23267, 23269, 23274, 23275, 23276, 23277, 23279, 23280, 23283, 23284, 23285, 23286, 23287, 23288, 23289, 23290, 23292, 23293, 23294, 23295, 23296, 23297, 23298, 23299, 23304, 23305, 23307, 23308, 23309, 23312, 23313, 23314, 23315, 23317, 23318, 23319, 23321, 23324, 23325, 23329, 23331, 23332, 23333, 23336, 23340, 23341, 23342, 23344, 23345, 23346, 23348, 23349, 23350, 23351, 23353, 23354, 23355, 23356, 23357, 23358, 23359, 23360, 23361, 23364, 23366, 23368, 23369, 23371, 23372, 23374, 23375, 23376, 23377, 23379, 23384, 23387, 23388, 23389, 23390, 23391, 23393, 23394, 23397, 23398, 23399, 23400, 23401, 23402, 23403, 23404, 23405, 23410, 23412, 23414, 23416, 23417, 23422, 23423, 23424, 23425, 23426, 23427, 23429, 23430, 23436, 23438, 23441, 23442, 23444, 23445, 23448, 23451, 23453, 23467, 23468, 23469, 23470, 23471, 23472, 23474, 23475, 23476, 23477, 23478, 23479, 23480, 23485, 23491, 23497, 23498, 23499, 23501, 23502, 23503, 23504, 23505, 23506, 23507, 23508, 23509, 23523, 23524, 23526, 23527, 23528, 23532, 23540, 23543, 23544, 23545, 23561, 23562, 23563, 23588, 23599, 23607, 23608, 23609, 23610, 23611, 23613, 23614, 23615, 23616, 23617, 23618, 23621, 23622, 23629, 23630, 23631, 23632, 23633, 23634, 23694, 23697, 23707, 23708, 23709, 23721, 23722, 23754, 23765, 23775, 23788, 23795, 23819, 23820, 23824, 23825, 23830, 23845, 23850, 23852, 23853, 23854, 23855, 23872, 23894, 23902, 23903, 23904, 23909, 23910, 23936, 23952, 23988, 24039, 24171, 24202, 24203, 24204, 24205, 24220, 24292, 24293, 24294, 24295, 24296, 24297, 24298, 24299, 24300, 24301, 24302, 24303, 24304, 24305, 24306, 24307, 24308, 24309, 24310, 24311, 24319, 24337, 24360, 24361, 24364, 24417, 24470, 24491, 24496, 24503, 24522, 24527, 24529, 24536, 24545, 24631, 24632, 24658, 24753, 24860, 24366, 23542, 23554, 23555, 23559, 23560, 23565, 23566, 23567, 23568, 23569, 23570, 23571, 23572, 23573, 23574, 23576, 23577, 23578, 23579, 23580, 23581, 23582, 23583, 23584, 23585, 23586, 23587, 23589, 23590, 23591, 23592, 23593, 23594, 23595, 23596, 23597, 23598, 23600, 23601, 23602, 23612, 23620, 23636, 23637, 23679, 23681, 23687, 23701, 23704, 23705, 23714, 23716, 23717, 23718, 23720, 23723, 23724, 23727, 23741, 23745, 23746, 23747, 23748, 23751, 23752, 23753, 23757, 23759, 23761, 23762, 23764, 23766, 23768, 23769, 23774, 23786, 23787, 23789, 23790, 23797, 23807, 23811, 23812, 23813, 23814, 23815, 23817, 23818, 23822, 23832, 23834, 23835, 23841, 23843, 23858, 23861, 23863, 23864, 23868, 23869, 23873, 23877, 23878, 23879, 23880, 23881, 23889, 23892, 23893, 23896, 23897, 23899, 23900, 23905, 23907, 23912, 23913, 23914, 23920, 23928, 23941, 23942, 23944, 23948, 23949, 23950, 23951, 23969, 23979, 23995, 23999, 24001, 24005, 24006, 24007, 24024, 24025, 24043, 24047, 24059, 24064, 24065, 24133, 24136, 24138, 24143, 24144, 24159, 24175, 24179, 24180, 24187, 24207, 24208, 24217, 24222, 24223, 24224, 24225, 24239, 24240, 24241, 24242, 24243, 24244, 24245, 24246, 24247, 24312, 24320, 24325, 24338, 24351, 24352, 24358, 24363, 24365, 24367, 24369, 24370, 24374, 24375, 24377, 24378, 24379, 24382, 24383, 24384, 24386, 24388, 24389, 24392, 24393, 24394, 24395, 24396, 24397, 24403, 24404, 24405, 24406, 24407, 24408, 24409, 24410, 24411, 24412, 24413, 24414, 24415, 24416, 24419, 24420, 24421, 24422, 24423, 24424, 24425, 24426, 24427, 24428, 24429, 24430, 24431, 24432, 24433, 24434, 24435, 24436, 24437, 24441, 24442, 24443, 24444, 24445, 24448, 24451, 24452, 24453, 24455, 24456, 24457, 24476, 24477, 24480, 24481, 24482, 24483, 24486, 24487, 24488, 24489, 24490, 24504, 24505, 24506, 24507, 24508, 24509, 24520, 24530, 24549, 24550, 24551, 24552, 24630, 24653, 24654, 24667, 24668, 24670, 24671, 24672, 24727, 24728, 24729, 24734, 24735, 24736, 24737, 24738, 24739, 24740, 24743, 24780, 24782, 24792, 24805, 24818, 24819, 24830, 24833, 24834, 24835, 24836, 24837, 24838, 24839, 24840, 24841, 24842, 24843, 24851, 24858, 24868, 24905, 24906, 24924, 24925, 24926, 24927, 24929, 24930, 24931, 24934, 24935, 24968, 24969, 24970, 24971, 24974, 24977, 24982, 24984, 24985, 24986, 24987, 24988, 24989, 24990, 24993, 24995, 24996, 24997, 24998, 25007, 25009, 25010, 25011, 25012, 25013, 25014, 25015, 25016, 25017, 25018, 25019, 25020, 25021, 25022, 25023, 25024, 25025, 25029, 25040, 25050, 25051, 25052, 25053, 25054, 25055, 25056, 25058, 25062, 25070, 25071, 25072, 25074, 25075, 25076, 25077, 25078, 25079, 25080, 25081, 25082, 25083, 25089, 25093, 25094, 25095, 25096, 25097, 25098, 25099, 25100, 25101, 25102, 25103, 25104, 25105, 25106, 25107, 25109, 25110, 25111, 25113, 25139, 25145, 25146, 25147, 25148, 25149, 25150, 25151, 25152, 25168, 25171, 25173, 25176, 25177, 25178, 25179, 25180, 25181, 25182, 25183, 25184, 25185, 25186, 25187, 25188, 25189, 25190, 25191, 25193, 25194, 25195, 25196, 25200, 25202, 25207, 25212, 25158, 25160, 24664, 24723, 24744, 24675, 24777, 24674, 25061, 25031, 24559, 25153, 24553, 24555, 24561, 24698, 25033, 24554, 24557, 24683, 24684, 24688, 24696, 24697, 24556, 24558, 24685, 24686, 24687, 24762, 24822, 25155, 24690, 24844, 24848, 25976, 25992, 25141, 25144, 25134, 25967, 24938, 25142, 25034, 24813, 25991, 25885, 25140, 25167, 25059, 26253, 25162, 25028, 25170, 25001, 25060, 25063, 25115, 25143, 25003, 25027, 25580, 24722, 25049, 25047, 25030, 24965, 24967, 24761, 25138, 24976, 25161, 25169, 25057, 25002, 24972, 25032, 24966, 24978, 24979, 24994, 24999, 25977, 26560, 24960, 25175, 25073, 25132, 25164, 24656, 24815, 25084, 67, 70, 72, 75, 81, 149, 150, 161, 163, 165, 200, 204, 207, 208, 209, 219, 220, 243, 260, 296, 298, 301, 318, 319, 320, 321, 322, 323, 324, 326, 333, 336, 339, 354, 380, 386, 444, 470, 496, 497, 498, 509, 516, 535, 536, 538, 586, 592, 605, 606, 607, 609, 610, 611, 612, 613, 614, 725, 753, 809, 897, 904, 919, 924, 1058, 1230, 1235, 1288, 1290, 1306, 1361, 1455, 1467, 1485, 1546, 1567, 1643, 1644, 1649, 1659, 1677, 1859, 1987, 2087, 2133, 2197, 2199, 2200, 2220, 2223, 2293, 2295, 2296, 2297, 2300, 2301, 2312, 2313, 2441, 2617, 2756, 2813, 2815, 2872, 2883, 2885, 2940, 3070, 3071, 3082, 3148, 3176, 3202, 3299, 3302, 3303, 3307, 3420, 3427, 3440, 3525, 3558, 3565, 3623, 3651, 3718, 3831, 4045, 4115, 4313, 4315, 4318, 4439, 4579, 4882, 5050, 5051, 5098, 5131, 5192, 5544, 5604, 5678, 5813, 5818, 5876, 5877, 5904, 6032, 6046, 6067, 6183, 6769, 6770, 6783, 8549, 9557, 9577, 9617, 9820, 10256, 10265, 10362, 10365, 10368, 10401, 10402, 10403, 10404, 10443, 10444, 10446, 10448, 10450, 10607, 10810, 11337, 11341, 11342, 11343, 11344, 11345, 11349, 11354, 11358, 11364, 11366, 11367, 11369, 11375, 11376, 11377, 11379, 11384, 11385, 11386, 11449, 11463, 11468, 11478, 11481, 11493, 11495, 11499, 11500, 11599, 11601, 11660, 11670, 11959, 12038, 14201, 14699, 14706, 14711, 15210, 15223, 15226, 15227, 15228, 15231, 15232, 15234, 15237, 15238, 15239, 15243, 15244, 15245, 15248, 15251, 15253, 15254, 15255, 15256, 15257, 15258, 15259, 15322, 15326, 15329, 15330, 15331, 15332, 15337, 15342, 15345, 15346, 15347, 15393, 15472, 15646, 16138, 16140, 16188, 16556, 16557, 16560, 16561, 16562, 16563, 16567, 16569, 16570, 16571, 16572, 16581, 17463, 17733, 17813, 17828, 17939, 17965, 17966, 18329, 18355, 18366, 18367, 18699, 19711, 19714, 23183, 20051, 22165, 21219, 21223, 21378, 20591, 20590, 21785, 22740, 22742, 22852, 22854, 22944, 22961, 23126, 23238, 24324, 24560, 24649, 24650, 24666, 24689, 24692, 24693, 24695, 24699, 24708, 24715, 24745, 24781, 24808, 24809, 24850, 24854, 24855, 19892, 24866, 24867, 24881, 24882, 24885, 24886, 24891, 24892, 24893, 24895, 24903, 24904, 24907, 24908, 24916, 24917, 24918, 24919, 24920, 24921, 24922, 24923, 24928, 24932, 24933, 24936, 24937, 24939, 24940, 24941, 24942, 24943, 24944, 24945, 24946, 24947, 24948, 24949, 24950, 24951, 24952, 24953, 24955, 24958, 24959, 24961, 24962, 24963, 24964, 24975, 24980, 24981, 24991, 25000, 25004, 25005, 25008, 25035, 25036, 25037, 25038, 25039, 25041, 25042, 25043, 25044, 25045, 25046, 25064, 25065, 25066, 25067, 25068, 25069, 25085, 25086, 25087, 25088, 25090, 25091, 25092, 25108, 25112, 25114, 25116, 25117, 25118, 25119, 25120, 25121, 25122, 25123, 25124, 25125, 25126, 25127, 25128, 25129, 25130, 25131, 25133, 25135, 25136, 25137, 25154, 25156, 25157, 25163, 25165, 25166, 25172, 25174, 25192, 25213, 25214, 25218, 25223, 25225, 25236, 25246, 25265, 25267, 25268, 25303, 25305, 25315, 25319, 25324, 25325, 25344, 25345, 25346, 25347, 25348, 25354, 25357, 25358, 25360, 25363, 25367, 25368, 25369, 25370, 25371, 25372, 25373, 25483, 25484, 25485, 25486, 25491, 25499, 25500, 25502, 25506, 25507, 25508, 25509, 25515, 25518, 25535, 25536, 25537, 25538, 25539, 25540, 19891, 19890, 19889, 19888, 19887, 19886, 19885, 19884, 18621, 18620, 18619, 18618, 18617, 18616, 18615, 18614, 18613, 18612, 18611, 18610, 18609, 18608, 18607, 18606, 18605, 18604, 18603, 18602, 18601, 18436, 18435, 18434, 18433, 18432, 18059, 18058, 18057, 18056, 18055, 25588, 25591, 25592, 25593, 25595, 25597, 25598, 25599, 25603, 25608, 25632, 25633, 25634, 25638, 25639, 25640, 25644, 25653, 25661, 25662, 25663, 25695, 25697, 25703, 25706, 25708, 25710, 25731, 25735, 25740, 25741, 25744, 25745, 25746, 25754, 25755, 25756, 25757, 25770, 25772, 25782, 25795, 25796, 25798, 25799, 25824, 25837, 25840, 25848, 25851, 25852, 25853, 25854, 25855, 25856, 25857, 25858, 25859, 25860, 25863, 25864, 25865, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25874, 25875, 25876, 25877, 25878, 25879, 25882, 25883, 25884, 25886, 25887, 25888, 25889, 25890, 25891, 25892, 25893, 25894, 25895, 25896, 25897, 25898, 25899, 25900, 25901, 25902, 25903, 25904, 25905, 25906, 25907, 25908, 25909, 25910, 25911, 25912, 25913, 25914, 25915, 25916, 25917, 25918, 25919, 25920, 25921, 25922, 25923, 25924, 25925, 25926, 25927, 25928, 25929, 25930, 25931, 25932, 25933, 25934, 25935, 25936, 25937, 25938, 25939, 25940, 25941, 25942, 25943, 25944, 25945, 25946, 25947, 25948, 25949, 25950, 25951, 25952, 25953, 25954, 25955, 25956, 25957, 25958, 25959, 25960, 25961, 25962, 25964, 25965, 25966, 25970, 25971, 25972, 25973, 25974, 25975, 25980, 25985, 25994, 26007, 26012, 26016, 26017, 26019, 26020, 26021, 26024, 26027, 26028, 26029, 26030, 26031, 26032, 26033, 26037, 26038, 26042, 26046, 26050, 26056, 26057, 26075, 26089, 26090, 26091, 26092, 26101, 26102, 26111, 26113, 26116, 26119, 26120, 26121, 26123, 26124, 26131, 26164, 26166, 26176, 26177, 26178, 26188, 26190, 26192, 26204, 26207, 26214, 26215, 26216, 26221, 26222, 26223, 26230, 26238, 26239, 26240, 26241, 26242, 26243, 26244, 26246, 26247, 26251, 26254, 26255, 26258, 26259, 26262, 26267, 26289, 26300, 26301, 26302, 26303, 26304, 26305, 26306, 26307, 26308, 26309, 26323, 26324, 26325, 26326, 26327, 26328, 26329, 26330, 26331, 26332, 18054, 18053, 18052, 18051, 18050, 18049, 26346, 26350, 26351, 26352, 26353, 26354, 26355, 26367, 26378, 26383, 26384, 26391, 26393, 26394, 26395, 26396, 26397, 26398, 26400, 26401, 26438, 26439, 26464, 26465, 26466, 26502, 26520, 26534, 26576, 26579, 26650, 18048, 26698, 26724, 26738, 26739, 26740, 26741, 26742, 26743, 26744, 26745, 26747, 26748, 26749, 26750, 26751, 26752, 26753, 26754, 26755, 26756, 26757, 26758, 26759, 26760, 26765, 26781, 27703, 27705, 27666, 27721, 27722, 27667, 29093, 29089, 28267, 27668, 28126, 27723, 27711, 28344, 28343, 28363, 27704, 28470, 28569, 28596, 28572, 28571, 28573, 27217, 28206, 27398, 27346, 27399, 28132, 28163, 27637, 27684, 27541, 27817, 27478, 27215, 27584, 27989, 27890, 26834, 28067, 28209, 28210, 28225, 28227, 28226, 26719, 26775, 26774, 26776, 26764, 26822, 27169, 27166, 27818, 28329, 27216, 27489, 27867, 27914, 29095, 27707, 32842, 29142, 32835, 29238, 27819, 29141, 29712, 29088, 29144, 29152, 29016, 29154, 29019, 29290, 29287, 29289, 29172, 30030, 30034, 27305, 27845, 27059, 30653, 29888, 30379, 32841, 26482, 27483, 26125, 29452, 25197, 28017, 30734, 30721, 28302, 26643, 29264, 29998, 27829, 30567, 30566, 30586, 30587, 30713, 30730, 32633, 32638, 32639, 28883, 26358, 26369, 28297, 27893, 29202, 29587, 29589, 29588, 28486, 27928, 29480, 28500, 32543, 29239, 29203, 29207, 29246, 29212, 29205, 29208, 32546, 32547, 28491, 28481, 28490, 28488, 32542, 32545, 29194, 29196, 28489, 29195, 29231, 29218, 29210, 29232, 32637, 26548, 31792, 31791, 31793, 31788, 31789, 31790, 30217, 25760, 25762, 28440, 24637, 25800, 26549, 27393, 29617, 25827, 25737, 29158, 25251, 25302, 26879, 27010, 25306, 25826, 25248, 25234, 25299, 25253, 25298, 24357, 25317, 25249, 25219, 25271, 25245, 25307, 25222, 25220, 24771, 25281, 25282, 26992, 25297, 25605, 32564, 26999, 26988, 25238, 25235, 27011, 25241, 25239, 25240, 26155, 27364, 27365, 25816, 24042, 26998, 26993, 26995, 27000, 26989, 26994, 26990, 25395, 25828, 25311, 27001, 26991, 26987, 26997, 27012, 25582, 25825, 25264, 25301, 25285, 25300, 25250, 27385, 29298, 29327, 28404, 25489, 31186, 30231, 32517, 28002, 30481, 25675, 31122, 25791, 28306, 27936, 23013, 23014, 23041, 23513, 23514, 23515, 23516, 23517, 23518, 23519, 23520, 23538, 23539, 23546, 23547, 23548, 23549, 23550, 23551, 23552, 23553, 23556, 23557, 23564, 23575, 23638, 23639, 23640, 23641, 23642, 23643, 23644, 23645, 23646, 23647, 23648, 23649, 23650, 23651, 23652, 23653, 23654, 23655, 23656, 23657, 23658, 23659, 23660, 23661, 23662, 23663, 23664, 23665, 23666, 23667, 23668, 23669, 23670, 23671, 23672, 23673, 23674, 23675, 23676, 23677, 23678, 23680, 23688, 23689, 23690, 23691, 23692, 23693, 23695, 23711, 23715, 23725, 23726, 23728, 23729, 23730, 23731, 23732, 23733, 23734, 23735, 23736, 23737, 23738, 23739, 23740, 23743, 23744, 23749, 23750, 23755, 23756, 23760, 23763, 23767, 23770, 23771, 23772, 23773, 23776, 23777, 23778, 23779, 23780, 23781, 23782, 23783, 23784, 23785, 23791, 23792, 23793, 23794, 23796, 23801, 23802, 23803, 23804, 23805, 23806, 23809, 23810, 23816, 23821, 23823, 23826, 23831, 23833, 23836, 23837, 23838, 23839, 23840, 23842, 23844, 23851, 23856, 23857, 23859, 23860, 23862, 23865, 23866, 23867, 23870, 23871, 23874, 23875, 23876, 23882, 23883, 23884, 23885, 23886, 23887, 23888, 23891, 23895, 23898, 23901, 23906, 23908, 23911, 23915, 23916, 23917, 23919, 23921, 23922, 23923, 23924, 23925, 23929, 23930, 23931, 23932, 23933, 23934, 23935, 23937, 23938, 23939, 23940, 23943, 23945, 23946, 23947, 23953, 23954, 23956, 23957, 23958, 23959, 23960, 23961, 23962, 23963, 23964, 23965, 23967, 23968, 23970, 23972, 23974, 23975, 23976, 23977, 23978, 23980, 23981, 23982, 23983, 23984, 23985, 23986, 23987, 23989, 23990, 23991, 23992, 23993, 23994, 23996, 23997, 23998, 24000, 24008, 24009, 24010, 24012, 24013, 24014, 24015, 24016, 24017, 24018, 24019, 24020, 24021, 24022, 24023, 24026, 24027, 24028, 24029, 24030, 24031, 24032, 24033, 24035, 24037, 24038, 24040, 24041, 24044, 24045, 24046, 24048, 24049, 24050, 24051, 24052, 24053, 24054, 24055, 24056, 24057, 24058, 24060, 24061, 24062, 24063, 24066, 24067, 24068, 24069, 24071, 24072, 24073, 24074, 24075, 24076, 24077, 24078, 24079, 24080, 24081, 24082, 24083, 24084, 24085, 24086, 24087, 24088, 24089, 24090, 24091, 24092, 24093, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24102, 24103, 24104, 24105, 24106, 24107, 24110, 24111, 24112, 24113, 24114, 24115, 24116, 24117, 24118, 24119, 24120, 24121, 24122, 24123, 24124, 24125, 24126, 24127, 24128, 24129, 24130, 24131, 24132, 24134, 24135, 24137, 24139, 24141, 24142, 24145, 24146, 24147, 24148, 24149, 24150, 24151, 24152, 24153, 24154, 24155, 24156, 24157, 24158, 24160, 24161, 24162, 24164, 24165, 24166, 24167, 24168, 24169, 24170, 24172, 24173, 24174, 24176, 24177, 24178, 24181, 24182, 24183, 24184, 24185, 24186, 24188, 24189, 24190, 24191, 24192, 24193, 24194, 24195, 24196, 24197, 24198, 24199, 24200, 24201, 24206, 24209, 24210, 24211, 24212, 24213, 24214, 24215, 24216, 24218, 24219, 24221, 24226, 24227, 24228, 24229, 24230, 24231, 24232, 24233, 24234, 24235, 24236, 24237, 24238, 24248, 24249, 24250, 24251, 24252, 24253, 24254, 24255, 24256, 24257, 24258, 24259, 24260, 24261, 24262, 24266, 24267, 24268, 24269, 24270, 24271, 24272, 24273, 24274, 24275, 24276, 24277, 24278, 24279, 24280, 24281, 24282, 24283, 24284, 24285, 24286, 24287, 24288, 24289, 24290, 24291, 24313, 24314, 24315, 24316, 24317, 24321, 24322, 24323, 24326, 24327, 24328, 24329, 24330, 24331, 24332, 24333, 24334, 24335, 24336, 24339, 24340, 24341, 24342, 24343, 24344, 24345, 24346, 24347, 24348, 24349, 24350, 24353, 24354, 24355, 24356, 24359, 24362, 24371, 24376, 24380, 24381, 24385, 24387, 24390, 24391, 24398, 24399, 24400, 24401, 24418, 24438, 24439, 24440, 24446, 24447, 24449, 24450, 24454, 24458, 24459, 24460, 24461, 24464, 24465, 24466, 24467, 24469, 24471, 24472, 24473, 24474, 24475, 24478, 24479, 24485, 24494, 24500, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24521, 24524, 24525, 24526, 24528, 24531, 24532, 24533, 24534, 24535, 24537, 24538, 24539, 24540, 24541, 24542, 24543, 24544, 24546, 24547, 24548, 24562, 24563, 24564, 24565, 24566, 24567, 24568, 24569, 24570, 24571, 24572, 24573, 24574, 24575, 24576, 24577, 24578, 24579, 24580, 24581, 24582, 24583, 24584, 24585, 24586, 24587, 24588, 24589, 24590, 24591, 24592, 24593, 24594, 24595, 24596, 24597, 24598, 24599, 24600, 24601, 24602, 24603, 24604, 24605, 24606, 24607, 24608, 24609, 24610, 24611, 24612, 24613, 24614, 24615, 24616, 24617, 24618, 24619, 24620, 24621, 24622, 24623, 24624, 24625, 24626, 24627, 24628, 24629, 24633, 24634, 24635, 24636, 24638, 24639, 24640, 24641, 24642, 24643, 24644, 24645, 24646, 24647, 24648, 24651, 24652, 24655, 24661, 24662, 24663, 24665, 24669, 24673, 24676, 24677, 24678, 24681, 24682, 24694, 24701, 24702, 24703, 24704, 24705, 24706, 24707, 24709, 24712, 24713, 24714, 24716, 24717, 24718, 24719, 24720, 24721, 24724, 24725, 24726, 24730, 24731, 24732, 24733, 24741, 24742, 24746, 24747, 24748, 24749, 24750, 24751, 24752, 24754, 24755, 24756, 24757, 24758, 24759, 24760, 24763, 24764, 24765, 24767, 24768, 24769, 24770, 24775, 24776, 24778, 24779, 24783, 24784, 24785, 24786, 24787, 24788, 24789, 24790, 24791, 24793, 24794, 24795, 24796, 24797, 24798, 24799, 24800, 24801, 24802, 24803, 24804, 24806, 24807, 24810, 24811, 24812, 24816, 24817, 24820, 24821, 24823, 24824, 24825, 24826, 24827, 24828, 24829, 24831, 24832, 24845, 24846, 24847, 24849, 24852, 24853, 24859, 24861, 24862, 24863, 24864, 24865, 24869, 24870, 24871, 24872, 24874, 24875, 24876, 24877, 24878, 24879, 24880, 24883, 24884, 24887, 24888, 24889, 24890, 24894, 24896, 24897, 24898, 24899, 24900, 24901, 24902, 24910, 24911, 24912, 24913, 24914, 24915, 24954, 24956, 24957, 24973, 24983, 24992, 25006, 25026, 25198, 25199, 25201, 25203, 25204, 25205, 25206, 25208, 25209, 25210, 25211, 25215, 25216, 25217, 25221, 25224, 25226, 25227, 25228, 25229, 25230, 25231, 25232, 25233, 25237, 25242, 25243, 25244, 25247, 25252, 25254, 25255, 25256, 25257, 25258, 25259, 25260, 25261, 25262, 25263, 25266, 25269, 25270, 25272, 25273, 25274, 25275, 25276, 25277, 25278, 25279, 25280, 25283, 25284, 25286, 25287, 25288, 25289, 25290, 25291, 25292, 25293, 25294, 25295, 25296, 25308, 25309, 25310, 25312, 25313, 25314, 25316, 25318, 25320, 25321, 25322, 25323, 25326, 25327, 25328, 25329, 25330, 25331, 25332, 25333, 25334, 25335, 25336, 25337, 25338, 25339, 25340, 25341, 25342, 25343, 25349, 25350, 25351, 25352, 25353, 25355, 25356, 25359, 25361, 25362, 25364, 25365, 25366, 25374, 25375, 25376, 25377, 25378, 25379, 25380, 25381, 25382, 25383, 25384, 25385, 25386, 25387, 25388, 25389, 25390, 25391, 25392, 25393, 25394, 25396, 25397, 25398, 25399, 25400, 25401, 25402, 25403, 25404, 25405, 25406, 25410, 25411, 25412, 25413, 25414, 25415, 25416, 25417, 25418, 25419, 25420, 25421, 25422, 25423, 25424, 25425, 25426, 25427, 25428, 25429, 25430, 25431, 25432, 25433, 25434, 25435, 25436, 25437, 25438, 25439, 25440, 25441, 25442, 25443, 25444, 25445, 25446, 25447, 25448, 25449, 25450, 25451, 25452, 25453, 25454, 25455, 25456, 25457, 25458, 25459, 25460, 25461, 25462, 25463, 25464, 25465, 25466, 25467, 25468, 25469, 25470, 25471, 25472, 25473, 25474, 25475, 25476, 25477, 25478, 25479, 25480, 25481, 25482, 25487, 25488, 25490, 25492, 25493, 25494, 25495, 25496, 25497, 25498, 25501, 25503, 25504, 25505, 25510, 25511, 25512, 25513, 25514, 25516, 25519, 25520, 25521, 25522, 25523, 25524, 25525, 25526, 25527, 25528, 25529, 25530, 25531, 25532, 25533, 25534, 25581, 25583, 25584, 25585, 25586, 25587, 25589, 25590, 25594, 25596, 25600, 25601, 25602, 25604, 25606, 25607, 25609, 25610, 25611, 25612, 25613, 25614, 25615, 25616, 25617, 25618, 25619, 25622, 25623, 25624, 25625, 25629, 25636, 25650, 25651, 25652, 25654, 25655, 25656, 25658, 25659, 25660, 25664, 25665, 25666, 25667, 25668, 25669, 25670, 25671, 25672, 25673, 25674, 25676, 25677, 25678, 25679, 25680, 25681, 25682, 25683, 25684, 25685, 25686, 25687, 25688, 25689, 25690, 25691, 25692, 25693, 25694, 25698, 25699, 25700, 25701, 25702, 25704, 25705, 25707, 25709, 25711, 25712, 25713, 25714, 25715, 25716, 25717, 25718, 25719, 25720, 25721, 25722, 25723, 25724, 25725, 25726, 25727, 25728, 25729, 25730, 25732, 25733, 25734, 25736, 25738, 25739, 25742, 25743, 25747, 25748, 25749, 25750, 25751, 25752, 25753, 25758, 25759, 25761, 25763, 25764, 25765, 25766, 25767, 25768, 25769, 25771, 25773, 25774, 25775, 25776, 25777, 25778, 25780, 25781, 25783, 25784, 25785, 25786, 25787, 25788, 25789, 25790, 25792, 25793, 25794, 25797, 25801, 25802, 25803, 25804, 25805, 25806, 25807, 25808, 25809, 25810, 25811, 25812, 25813, 25814, 25815, 25817, 25818, 25819, 25820, 25821, 25822, 25823, 25829, 25830, 25831, 25832, 25833, 25834, 25835, 25836, 25838, 25839, 25841, 25842, 25843, 25844, 25845, 25846, 25847, 25849, 25850, 25861, 25862, 25880, 25881, 25963, 25968, 25969, 25978, 25979, 25981, 25982, 25983, 25984, 25986, 25987, 25988, 25989, 25990, 25993, 25995, 26040, 26041, 26043, 26044, 26045, 26047, 26048, 26073, 26076, 26078, 26080, 26081, 26082, 26083, 26084, 26085, 26086, 26088, 26093, 26094, 26096, 26097, 26098, 26099, 26103, 26104, 26105, 26109, 26110, 26112, 26114, 26115, 26117, 26126, 26127, 26128, 26129, 26130, 26156, 26157, 26158, 26159, 26160, 26161, 26162, 26165, 26167, 26169, 26170, 26171, 26172, 26173, 26174, 26175, 26179, 26180, 26181, 26182, 26183, 26184, 26185, 26186, 26187, 26189, 26191, 26193, 26194, 26195, 26196, 26197, 26198, 26199, 26200, 26201, 26202, 26203, 26205, 26206, 26212, 26213, 26217, 26218, 26219, 26220, 26224, 26225, 26226, 26227, 26228, 26229, 26231, 26232, 26233, 26234, 26235, 26236, 26237, 26245, 26248, 26249, 26250, 26252, 26256, 26257, 26260, 26261, 26263, 26264, 26265, 26266, 26268, 26269, 26270, 26271, 26272, 26273, 26274, 26275, 26276, 26277, 26278, 26279, 26280, 26281, 26282, 26283, 26284, 26285, 26286, 26287, 26288, 26290, 26291, 26292, 26293, 26294, 26295, 26296, 26297, 26298, 26299, 26310, 26311, 26312, 26313, 26316, 26317, 26318, 26319, 26320, 26321, 26322, 26333, 26334, 26335, 26336, 26343, 26344, 26347, 26348, 26349, 26356, 26357, 26359, 26360, 26361, 26362, 26363, 26364, 26365, 26366, 26368, 26370, 26371, 26372, 26373, 26374, 26375, 26376, 26377, 26379, 26380, 26381, 26382, 26387, 26388, 26389, 26390, 26392, 26402, 26403, 26404, 26405, 26406, 26407, 26408, 26409, 26410, 26411, 26412, 26413, 26414, 26415, 26416, 26417, 26418, 26420, 26421, 26422, 26423, 26424, 26425, 26426, 26427, 26428, 26429, 26430, 26432, 26433, 26434, 26435, 26436, 26437, 26440, 26441, 26442, 26443, 26444, 26445, 26446, 26447, 26448, 26449, 26450, 26451, 26452, 26454, 26455, 26456, 26457, 26458, 26459, 26460, 26461, 26462, 26467, 26468, 26469, 26470, 26471, 26472, 26473, 26474, 26475, 26476, 26477, 26480, 26481, 26483, 26484, 26485, 26486, 26487, 26488, 26489, 26490, 26491, 26492, 26493, 26494, 26495, 26496, 26497, 26498, 26499, 26500, 26501, 26503, 26504, 26505, 26506, 26507, 26508, 26509, 26510, 26511, 26512, 26513, 26514, 26515, 26516, 26517, 26518, 26519, 26521, 26522, 26523, 26524, 26525, 26526, 26527, 26528, 26529, 26530, 26531, 26532, 26533, 26535, 26536, 26537, 26538, 26539, 26540, 26541, 26542, 26543, 26544, 26546, 26547, 26550, 26551, 26552, 26553, 26554, 26555, 26556, 26557, 26558, 26559, 26561, 26564, 26565, 26566, 26567, 26568, 26569, 26570, 26571, 26572, 26573, 26574, 26575, 26577, 26578, 26580, 26581, 26582, 26583, 26584, 26585, 26586, 26587, 26588, 26589, 26590, 26591, 26592, 26593, 26594, 26595, 26596, 26597, 26598, 26599, 26600, 26601, 26602, 26603, 26604, 26605, 26606, 26607, 26608, 26612, 26613, 26614, 26615, 26616, 26617, 26618, 26619, 26620, 26621, 26622, 26623, 26624, 26625, 26626, 26627, 26628, 26630, 26631, 26632, 26633, 26634, 26635, 26636, 26637, 26638, 26639, 26641, 26644, 26645, 26646, 26647, 26648, 26649, 26652, 26653, 26654, 26655, 26656, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26665, 26666, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26674, 26675, 26676, 26677, 26678, 26679, 26680, 26681, 26682, 26683, 26684, 26685, 26686, 26687, 26690, 26691, 26692, 26693, 26694, 26696, 26697, 26699, 26700, 26701, 26702, 26703, 26704, 26705, 26706, 26707, 26708, 26709, 26711, 26712, 26713, 26716, 26718, 26720, 26721, 26722, 26723, 26725, 26726, 26727, 26728, 26729, 26730, 26731, 26732, 26733, 26734, 26735, 26736, 26737, 26746, 26761, 26762, 26763, 26766, 26767, 26768, 26769, 26770, 26771, 26772, 26773, 26777, 26778, 26779, 26780, 26782, 26783, 26784, 26785, 26786, 26787, 26788, 26789, 26790, 26791, 26792, 26793, 26794, 26795, 26796, 26797, 26798, 26799, 26800, 26801, 26802, 26803, 26804, 26805, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26816, 26817, 26818, 26819, 26820, 26821, 26823, 26824, 26825, 26826, 26827, 26828, 26829, 26830, 26831, 26832, 26833, 26835, 26836, 26837, 26838, 26839, 26840, 26841, 26842, 26844, 26845, 26846, 26847, 26848, 26850, 26851, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26862, 26863, 26864, 26865, 26867, 26868, 26869, 26870, 26871, 26872, 26873, 26874, 26875, 26876, 26877, 26878, 26880, 26881, 26882, 26883, 26884, 26885, 26886, 26887, 26888, 26889, 26890, 26891, 26892, 26893, 26894, 26895, 26896, 26897, 26898, 26899, 26900, 26901, 26902, 26903, 26904, 26905, 26906, 26907, 26908, 26909, 26910, 26911, 26912, 26913, 26914, 26915, 26916, 26917, 26918, 26919, 26920, 26921, 26922, 26923, 26924, 26925, 26926, 26927, 26928, 26929, 26930, 26931, 26932, 26933, 26934, 26935, 26936, 26937, 26938, 26939, 26941, 26942, 26943, 26944, 26945, 26946, 26947, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26964, 26965, 26966, 26967, 26968, 26969, 26970, 26971, 26972, 26973, 26974, 26975, 26976, 26977, 26978, 26979, 26980, 26981, 26982, 26983, 26984, 26985, 26986, 26996, 27002, 27003, 27004, 27005, 27006, 27007, 27008, 27009, 27014, 27015, 27017, 27018, 27019, 27020, 27021, 27022, 27023, 27024, 27025, 27026, 27027, 27028, 27029, 27030, 27031, 27032, 27033, 27034, 27035, 27036, 27037, 27038, 27039, 27040, 27041, 27042, 27043, 27044, 27045, 27046, 27047, 27048, 27049, 27051, 27052, 27053, 27054, 27055, 27056, 27057, 27058, 27060, 27061, 27062, 27063, 27064, 27065, 27066, 27067, 27068, 27069, 27070, 27071, 27072, 27073, 27074, 27075, 27079, 27088, 27089, 27099, 27101, 27102, 27103, 27104, 27105, 27106, 27107, 27108, 27109, 27110, 27111, 27112, 27113, 27114, 27115, 27117, 27118, 27119, 27120, 27121, 27122, 27123, 27125, 27126, 27127, 27131, 27132, 27133, 27134, 27135, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27146, 27147, 27148, 27149, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27159, 27160, 27161, 27162, 27163, 27164, 27165, 27167, 27168, 27170, 27171, 27172, 27173, 27174, 27175, 27176, 27177, 27178, 27179, 27180, 27181, 27182, 27183, 27184, 27185, 27186, 27187, 27188, 27189, 27190, 27191, 27193, 27194, 27195, 27196, 27197, 27198, 27199, 27200, 27201, 27202, 27203, 27204, 27205, 27206, 27207, 27208, 27209, 27210, 27211, 27212, 27213, 27214, 27218, 27219, 27220, 27221, 27222, 27223, 27224, 27225, 27226, 27227, 27228, 27229, 27230, 27231, 27232, 27233, 27234, 27235, 27236, 27237, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27249, 27250, 27251, 27252, 27253, 27254, 27255, 27257, 27258, 27259, 27260, 27261, 27262, 27263, 27264, 27265, 27266, 27267, 27268, 27270, 27271, 27272, 27273, 27274, 27275, 27276, 27277, 27278, 27279, 27280, 27281, 27282, 27283, 27284, 27285, 27286, 27287, 27288, 27289, 27290, 27291, 27292, 27293, 27294, 27295, 27296, 27297, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27306, 27307, 27308, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 27316, 27317, 27318, 27319, 27320, 27321, 27322, 27323, 27324, 27326, 27327, 27328, 27329, 27330, 27331, 27332, 27333, 27334, 27335, 27336, 27337, 27338, 27339, 27340, 27341, 27342, 27343, 27344, 27345, 27347, 27348, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27375, 27376, 27377, 27378, 27379, 27380, 27381, 27382, 27383, 27384, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27394, 27395, 27396, 27397, 27400, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27424, 27425, 27426, 27427, 27428, 27429, 27430, 27431, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27442, 27443, 27444, 27445, 27446, 27447, 27448, 27449, 27450, 27451, 27452, 27453, 27454, 27455, 27456, 27457, 27458, 27459, 27460, 27461, 27462, 27463, 27464, 27465, 27466, 27467, 27468, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27479, 27480, 27481, 27482, 27484, 27485, 27486, 27487, 27488, 27490, 27491, 27492, 27493, 27494, 27495, 27496, 27497, 27499, 27500, 27501, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27512, 27513, 27514, 27515, 27516, 27517, 27518, 27519, 27520, 27521, 27522, 27523, 27526, 27527, 27529, 27530, 27531, 27532, 27533, 27534, 27535, 27536, 27537, 27538, 27539, 27540, 27542, 27543, 27544, 27545, 27546, 27547, 27548, 27549, 27550, 27551, 27552, 27553, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27562, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27571, 27572, 27573, 27574, 27575, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27583, 27585, 27586, 27587, 27588, 27589, 27590, 27591, 27592, 27593, 27595, 27596, 27597, 27598, 27599, 27600, 27601, 27602, 27603, 27604, 27605, 27606, 27607, 27608, 27609, 27610, 27611, 27613, 27614, 27615, 27616, 27617, 27618, 27619, 27620, 27622, 27623, 27624, 27625, 27626, 27627, 27628, 27629, 27630, 27631, 27632, 27633, 27634, 27635, 27636, 27638, 27639, 27640, 27641, 27642, 27643, 27644, 27645, 27646, 27647, 27648, 27649, 27650, 27651, 27653, 27654, 27655, 27656, 27657, 27658, 27659, 27660, 27661, 27662, 27663, 27664, 27665, 27669, 27671, 27673, 27674, 27676, 27677, 27678, 27679, 27680, 27682, 27683, 27685, 27686, 27687, 27688, 27689, 27690, 27691, 27692, 27693, 27694, 27695, 27696, 27697, 27698, 27699, 27701, 27702, 27706, 27708, 27709, 27710, 27712, 27713, 27714, 27715, 27716, 27717, 27718, 27719, 27720, 27724, 27725, 27726, 27727, 27729, 27730, 27731, 27732, 27733, 27734, 27736, 27737, 27738, 27740, 27741, 27742, 27743, 27744, 27745, 27746, 27747, 27748, 27749, 27750, 27751, 27752, 27753, 27754, 27755, 27756, 27757, 27758, 27759, 27760, 27761, 27762, 27763, 27764, 27765, 27766, 27767, 27768, 27769, 27770, 27771, 27772, 27773, 27774, 27775, 27776, 27777, 27778, 27779, 27780, 27781, 27782, 27783, 27784, 27785, 27786, 27787, 27788, 27789, 27791, 27792, 27793, 27794, 27795, 27796, 27797, 27798, 27799, 27800, 27801, 27802, 27803, 27804, 27805, 27806, 27807, 27808, 27809, 27810, 27811, 27812, 27813, 27814, 27815, 27816, 27820, 27821, 27822, 27823, 27824, 27825, 27826, 27827, 27828, 27830, 27832, 27833, 27834, 27835, 27836, 27837, 27838, 27839, 27840, 27841, 27842, 27843, 27844, 27846, 27847, 27848, 27849, 27850, 27851, 27852, 27853, 27854, 27855, 27856, 27857, 27858, 27859, 27860, 27862, 27863, 27864, 27865, 27866, 27868, 27869, 27870, 27871, 27872, 27873, 27874, 27875, 27876, 27877, 27878, 27879, 27880, 27881, 27882, 27883, 27884, 27885, 27886, 27887, 27888, 27889, 27891, 27892, 27894, 27895, 27896, 27897, 27898, 27899, 27900, 27902, 27903, 27904, 27905, 27906, 27907, 27908, 27909, 27910, 27911, 27912, 27913, 27915, 27916, 27917, 27918, 27919, 27920, 27921, 27922, 27923, 27924, 27925, 27926, 27927, 27929, 27930, 27931, 27932, 27933, 27935, 27937, 27938, 27939, 27940, 27941, 27942, 27943, 27944, 27946, 27947, 27948, 27949, 27950, 27951, 27952, 27953, 27954, 27955, 27956, 27957, 27958, 27959, 27960, 27961, 27962, 27963, 27964, 27965, 27966, 27968, 27969, 27970, 27971, 27972, 27973, 27974, 27975, 27976, 27977, 27978, 27979, 27980, 27981, 27982, 27983, 27984, 27985, 27986, 27987, 27988, 27990, 27991, 27992, 27993, 27994, 27995, 27996, 27997, 27998, 27999, 28000, 28001, 28003, 28004, 28005, 28006, 28007, 28008, 28009, 28010, 28011, 28012, 28013, 28014, 28015, 28016, 28018, 28019, 28021, 28022, 28023, 28024, 28025, 28026, 28027, 28028, 28029, 28030, 28031, 28032, 28033, 28034, 28035, 28036, 28037, 28038, 28039, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28060, 28058, 28052, 28051, 28050, 28053, 28054, 28055, 28056, 28057, 28049, 28059, 28048, 28061, 28062, 28063, 28064, 28065, 28066, 28068, 28069, 28070, 28076, 28077, 28078, 28079, 28080, 28081, 28082, 28083, 28085, 28086, 28087, 28088, 28089, 28090, 28092, 28093, 28094, 28095, 28096, 28097, 28098, 28099, 28100, 28101, 28103, 28104, 28105, 28106, 28107, 28108, 28109, 28110, 28111, 28112, 28113, 28114, 28115, 28116, 28117, 28118, 28119, 28120, 28121, 28122, 28123, 28124, 28125, 28127, 28128, 28129, 28130, 28131, 28133, 28135, 28136, 28137, 28138, 28139, 28140, 28141, 28142, 28143, 28144, 28145, 28148, 28149, 28150, 28151, 28153, 28156, 28157, 28158, 28159, 28160, 28161, 28162, 28164, 28165, 28166, 28167, 28168, 28169, 28170, 28171, 28172, 28173, 28174, 28175, 28176, 28177, 28178, 28179, 28180, 28181, 28182, 28183, 28184, 28186, 28187, 28188, 28189, 28190, 28191, 28192, 28194, 28195, 28196, 28197, 28198, 28199, 28200, 28201, 28202, 28203, 28204, 28205, 28207, 28208, 28211, 28212, 28213, 28214, 28215, 28216, 28217, 28218, 28220, 28221, 28222, 28224, 28228, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28237, 28239, 28240, 28241, 28242, 28243, 28244, 28245, 28246, 28247, 28248, 28249, 28250, 28251, 28252, 28253, 28254, 28255, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28268, 28269, 28270, 28271, 28273, 28274, 28276, 28277, 28278, 28279, 28280, 28282, 28283, 28284, 28288, 28289, 28292, 28293, 28294, 28295, 28296, 28298, 28299, 28300, 28301, 28303, 28304, 28305, 28307, 28308, 28309, 28310, 28311, 28312, 28313, 28314, 28315, 28316, 28317, 28318, 28319, 28320, 28322, 28323, 28324, 28325, 28327, 28328, 28330, 28332, 28333, 28340, 28341, 28342, 28345, 28346, 28347, 28348, 28349, 28350, 28351, 28352, 28353, 28354, 28355, 28356, 28357, 28358, 28359, 28360, 28361, 28362, 28364, 28365, 28366, 28367, 28368, 28369, 28370, 28371, 28372, 28373, 28374, 28375, 28376, 28377, 28378, 28379, 28380, 28381, 28382, 28383, 28384, 28385, 28386, 28387, 28388, 28389, 28390, 28391, 28392, 28393, 28394, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28405, 28406, 28407, 28408, 28409, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28418, 28419, 28420, 28421, 28422, 28423, 28424, 28425, 28426, 28427, 28428, 28429, 28430, 28431, 28432, 28433, 28434, 28435, 28436, 28437, 28438, 28439, 28441, 28442, 28443, 28444, 28445, 28446, 28447, 28448, 28449, 28450, 28451, 28452, 28453, 28454, 28455, 28456, 28457, 28458, 28459, 28460, 28461, 28462, 28463, 28464, 28465, 28466, 28467, 28468, 28469, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28478, 28479, 28480, 28482, 28483, 28484, 28485, 28487, 28492, 28493, 28494, 28495, 28496, 28497, 28498, 28499, 28501, 28503, 28504, 28505, 28506, 28507, 28509, 28510, 28511, 28512, 28513, 28514, 28515, 28516, 28517, 28518, 28519, 28520, 28521, 28523, 28524, 28525, 28526, 28527, 28528, 28529, 28530, 28531, 28532, 28533, 28534, 28535, 28536, 28537, 28538, 28539, 28540, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28548, 28549, 28550, 28551, 28552, 28553, 28554, 28555, 28556, 28557, 28558, 28559, 28560, 28561, 28563, 28564, 28565, 28566, 28567, 28568, 28570, 28574, 28575, 28576, 28577, 28578, 28579, 28580, 28581, 28582, 28583, 28584, 28585, 28586, 28587, 28589, 28590, 28591, 28593, 28594, 28595, 28597, 28599, 28600, 28601, 28602, 28603, 28604, 28605, 28606, 28607, 28608, 28609, 28610, 28611, 28612, 28613, 28614, 28615, 28616, 28617, 28618, 28619, 28620, 28621, 28622, 28623, 28624, 28625, 28626, 28627, 28628, 28629, 28630, 28631, 28632, 28633, 28635, 28636, 28637, 28638, 28639, 28640, 28641, 28642, 28643, 28644, 28645, 28646, 28647, 28648, 28650, 28651, 28652, 28653, 28654, 28655, 28656, 28657, 28658, 28659, 28660, 28662, 28663, 28664, 28665, 28666, 28667, 28668, 28669, 28670, 28671, 28672, 28674, 28675, 28676, 28677, 28678, 28679, 28680, 28681, 28682, 28683, 28684, 28685, 28686, 28687, 28689, 28690, 28691, 28692, 28693, 28694, 28695, 28696, 28697, 28698, 28699, 28700, 28701, 28702, 28703, 28704, 28705, 28706, 28707, 28708, 28709, 28710, 28711, 28712, 28713, 28714, 28715, 28716, 28717, 28718, 28719, 28720, 28721, 28722, 28723, 28724, 28725, 28726, 28727, 28728, 28729, 28730, 28731, 28732, 28733, 28734, 28735, 28736, 28737, 28738, 28739, 28740, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28748, 28749, 28750, 28751, 28752, 28753, 28754, 28755, 28756, 28757, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28766, 28767, 28768, 28769, 28770, 28771, 28773, 28774, 28775, 28776, 28777, 28778, 28779, 28780, 28781, 28782, 28783, 28784, 28785, 28786, 28787, 28788, 28789, 28790, 28791, 28792, 28793, 28794, 28795, 28796, 28797, 28798, 28799, 28800, 28801, 28802, 28803, 28804, 28805, 28806, 28807, 28808, 28809, 28810, 28811, 28812, 28813, 28814, 28815, 28816, 28817, 28818, 28819, 28820, 28821, 28822, 28823, 28824, 28825, 28826, 28827, 28828, 28829, 28830, 28831, 28832, 28833, 28834, 28835, 28836, 28837, 28838, 28839, 28840, 28841, 28842, 28843, 28844, 28845, 28846, 28847, 28848, 28849, 28850, 28851, 28852, 28853, 28854, 28855, 28856, 28857, 28858, 28859, 28860, 28861, 28862, 28863, 28864, 28865, 28866, 28867, 28868, 28869, 28870, 28871, 28872, 28873, 28874, 28875, 28876, 28877, 28878, 28879, 28880, 28881, 28882, 28884, 28885, 28886, 28887, 28888, 28889, 28890, 28891, 28892, 28893, 28894, 28895, 28896, 28897, 28898, 28899, 28900, 28901, 28902, 28903, 28904, 28905, 28906, 28907, 28908, 28909, 28910, 28911, 28912, 28913, 28914, 28915, 28916, 28917, 28918, 28919, 28920, 28921, 28922, 28923, 28924, 28925, 28926, 28927, 28928, 28929, 28930, 28931, 28932, 28933, 28934, 28935, 28936, 28937, 28938, 28939, 28940, 28941, 28942, 28943, 28944, 28945, 28946, 28947, 28948, 28949, 28950, 28951, 28952, 28953, 28954, 28955, 28956, 28957, 28958, 28960, 28961, 28964, 28965, 28984, 28985, 28986, 28987, 28988, 28989, 28990, 28991, 28992, 28993, 28994, 28995, 28996, 28997, 28998, 28999, 29000, 29001, 29002, 29003, 29004, 29005, 29006, 29007, 29008, 29009, 29010, 29011, 29013, 29014, 29015, 29017, 29018, 29020, 29021, 29022, 29023, 29024, 29025, 29026, 29027, 29028, 29029, 29030, 29031, 29032, 29033, 29034, 29035, 29036, 29037, 29038, 29039, 29043, 29044, 29045, 29046, 29047, 29048, 29049, 29050, 29051, 29052, 29053, 29054, 29055, 29056, 29057, 29058, 29059, 29060, 29061, 29062, 29063, 29064, 29065, 29066, 29067, 29068, 29069, 29070, 29071, 29072, 29073, 29074, 29075, 29076, 29077, 29078, 29079, 29080, 29081, 29082, 29083, 29087, 29094, 29096, 29097, 29098, 29099, 29100, 29101, 29102, 29103, 29104, 29105, 29106, 29107, 29108, 29109, 29110, 29111, 29112, 29113, 29114, 29115, 29116, 29117, 29118, 29119, 29120, 29121, 29122, 29123, 29124, 29125, 29126, 29127, 29128, 29129, 29130, 29131, 29132, 29133, 29134, 29135, 29136, 29137, 29138, 29139, 29140, 29143, 29145, 29146, 29147, 29149, 29150, 29151, 29153, 29155, 29156, 29157, 29159, 29160, 29161, 29162, 29163, 29165, 29169, 29170, 29171, 29173, 29174, 29175, 29176, 29177, 29178, 29179, 29180, 29181, 29182, 29183, 29184, 29185, 29186, 29187, 29188, 29189, 29190, 29191, 29192, 29193, 29197, 29198, 29199, 29200, 29201, 29204, 29206, 29209, 29211, 29213, 29214, 29215, 29216, 29217, 29219, 29220, 29221, 29222, 29223, 29224, 29225, 29227, 29228, 29229, 29230, 29233, 29234, 29235, 29236, 29237, 29240, 29241, 29242, 29243, 29244, 29245, 29247, 29248, 29249, 29250, 29251, 29252, 29253, 29254, 29255, 29256, 29257, 29258, 29259, 29260, 29261, 29262, 29263, 29265, 29266, 29267, 29268, 29269, 29270, 29271, 29272, 29273, 29274, 29275, 29276, 29277, 29278, 29279, 29280, 29281, 29282, 29283, 29285, 29286, 29288, 29291, 29292, 29293, 29294, 29295, 29296, 29297, 29299, 29300, 29301, 29302, 29303, 29304, 29305, 29306, 29307, 29308, 29309, 29310, 29311, 29312, 29313, 29314, 29315, 29316, 29317, 29318, 29319, 29320, 29321, 29322, 29323, 29324, 29325, 29326, 29328, 29329, 29330, 29331, 29332, 29333, 29334, 29335, 29336, 29337, 29338, 29339, 29340, 29341, 29342, 29343, 29344, 29345, 29346, 29347, 29348, 29349, 29350, 29351, 29352, 29353, 29354, 29355, 29356, 29357, 29358, 29359, 29360, 29361, 29362, 29363, 29364, 29365, 29366, 29367, 29368, 29369, 29370, 29371, 29372, 29373, 29374, 29375, 29376, 29377, 29378, 29379, 29380, 29381, 29382, 29383, 29384, 29385, 29386, 29387, 29388, 29389, 29390, 29391, 29392, 29393, 29394, 29395, 29396, 29397, 29398, 29399, 29400, 29401, 29402, 29403, 29404, 29405, 29406, 29407, 29408, 29409, 29411, 29412, 29413, 29414, 29415, 29416, 29417, 29418, 29419, 29420, 29421, 29422, 29423, 29424, 29425, 29426, 29427, 29428, 29429, 29430, 29431, 29432, 29433, 29434, 29435, 29436, 29437, 29438, 29439, 29440, 29441, 29442, 29443, 29444, 29445, 29446, 29447, 29448, 29449, 29450, 29451, 29453, 29454, 29455, 29456, 29457, 29458, 29459, 29460, 29461, 29466, 29468, 29469, 29471, 29472, 29473, 29474, 29475, 29476, 29477, 29478, 29479, 29481, 29482, 29483, 29484, 29485, 29486, 29487, 29488, 29489, 29490, 29491, 29492, 29493, 29494, 29495, 29496, 29497, 29498, 29499, 29500, 29501, 29503, 29504, 29505, 29506, 29507, 29508, 29509, 29510, 29511, 29512, 29513, 29514, 29515, 29517, 29518, 29519, 29520, 29521, 29522, 29523, 29524, 29525, 29526, 29527, 29528, 29529, 29530, 29532, 29533, 29534, 29535, 29537, 29538, 29539, 29540, 29541, 29542, 29543, 29544, 29545, 29546, 29547, 29548, 29549, 29550, 29551, 29552, 29553, 29554, 29555, 29556, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29566, 29567, 29568, 29569, 29570, 29571, 29572, 29573, 29574, 29575, 29576, 29577, 29578, 29579, 29580, 29581, 29582, 29583, 29584, 29585, 29586, 29590, 29591, 29592, 29593, 29594, 29595, 29596, 29597, 29598, 29599, 29601, 29602, 29603, 29604, 29605, 29607, 29608, 29609, 29610, 29611, 29612, 29613, 29614, 29615, 29616, 29618, 29619, 29620, 29621, 29622, 29623, 29624, 29625, 29626, 29627, 29628, 29629, 29630, 29631, 29632, 29633, 29634, 29635, 29636, 29637, 29639, 29640, 29641, 29642, 29643, 29644, 29645, 29646, 29647, 29648, 29649, 29650, 29651, 29652, 29654, 29655, 29656, 29657, 29658, 29660, 29662, 29663, 29664, 29665, 29667, 29668, 29669, 29670, 29671, 29672, 29673, 29674, 29675, 29676, 29677, 29679, 29680, 29681, 29682, 29684, 29685, 29686, 29687, 29688, 29689, 29690, 29691, 29692, 29693, 29694, 29695, 29696, 29697, 29698, 29699, 29700, 29701, 29702, 29703, 29704, 29708, 29709, 29710, 29711, 29713, 29714, 29715, 29716, 29717, 29718, 29719, 29720, 29721, 29722, 29724, 29725, 29726, 29727, 29728, 29729, 29730, 29731, 29732, 29733, 29734, 29735, 29736, 29737, 29738, 29740, 29741, 29742, 29743, 29744, 29745, 29746, 29747, 29748, 29749, 29750, 29751, 29752, 29753, 29754, 29755, 29756, 29757, 29758, 29759, 29760, 29761, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 29776, 29777, 29778, 29780, 29781, 29782, 29783, 29784, 29785, 29789, 29790, 29791, 29792, 29793, 29794, 29795, 29796, 29798, 29799, 29800, 29801, 29802, 29803, 29804, 29805, 29806, 29807, 29808, 29809, 29810, 29811, 29812, 29814, 29815, 29816, 29818, 29819, 29820, 29821, 29822, 29823, 29824, 29825, 29826, 29827, 29828, 29829, 29830, 29831, 29832, 29833, 29834, 29835, 29836, 29837, 29838, 29839, 29840, 29841, 29842, 29843, 29844, 29845, 29846, 29847, 29848, 29849, 29850, 29851, 29852, 29853, 29854, 29855, 29856, 29857, 29858, 29859, 29860, 29861, 29862, 29863, 29864, 29865, 29866, 29867, 29868, 29870, 29871, 29872, 29873, 29874, 29875, 29876, 29877, 29878, 29879, 29880, 29881, 29882, 29883, 29884, 29885, 29886, 29887, 29889, 29890, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 29905, 29906, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29916, 29917, 29918, 29919, 29920, 29921, 29922, 29923, 29924, 29925, 29926, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29934, 29935, 29936, 29937, 29938, 29939, 29940, 29941, 29942, 29943, 29944, 29945, 29947, 29948, 29949, 29950, 29951, 29952, 29953, 29955, 29958, 29959, 29960, 29961, 29962, 29963, 29964, 29965, 29966, 29967, 29968, 29969, 29970, 29971, 29973, 29974, 29975, 29976, 29977, 29978, 29979, 29980, 29981, 29982, 29983, 29984, 29985, 29986, 29987, 29988, 29989, 29990, 29991, 29992, 29993, 29994, 29995, 29996, 29997, 29999, 30000, 30001, 30002, 30003, 30004, 30005, 30006, 30007, 30008, 30009, 30010, 30011, 30012, 30013, 30014, 30015, 30016, 30017, 30018, 30019, 30020, 30021, 30022, 30023, 30024, 30025, 30026, 30027, 30028, 30029, 30031, 30032, 30033, 30035, 30036, 30037, 30038, 30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30053, 30054, 30055, 30056, 30057, 30058, 30059, 30060, 30061, 30062, 30063, 30064, 30065, 30066, 30067, 30068, 30069, 30070, 30071, 30072, 30073, 30074, 30075, 30076, 30077, 30078, 30079, 30080, 30081, 30082, 30083, 30084, 30085, 30086, 30087, 30088, 30089, 30090, 30091, 30093, 30094, 30095, 30096, 30097, 30098, 30099, 30101, 30102, 30103, 30104, 30105, 30106, 30107, 30108, 30110, 30111, 30113, 30114, 30115, 30116, 30117, 30118, 30120, 30121, 30122, 30123, 30124, 30125, 30126, 30127, 30130, 30131, 30132, 30133, 30134, 30135, 30136, 30137, 30138, 30139, 30140, 30141, 30142, 30143, 30144, 30145, 30146, 30147, 30148, 30149, 30150, 30151, 30152, 30153, 30154, 30155, 30156, 30157, 30158, 30159, 30160, 30161, 30162, 30163, 30164, 30165, 30166, 30167, 30169, 30170, 30171, 30172, 30173, 30174, 30175, 30176, 30177, 30178, 30179, 30180, 30181, 30182, 30183, 30184, 30186, 30187, 30188, 30189, 30190, 30191, 30192, 30193, 30194, 30195, 30196, 30197, 30198, 30199, 30200, 30201, 30202, 30203, 30204, 30205, 30206, 30207, 30208, 30209, 30210, 30211, 30212, 30214, 30215, 30216, 30218, 30219, 30220, 30221, 30222, 30223, 30224, 30225, 30226, 30227, 30228, 30229, 30230, 30232, 30233, 30234, 30235, 30236, 30238, 30239, 30240, 30241, 30242, 30243, 30244, 30245, 30246, 30247, 30248, 30249, 30250, 30252, 30253, 30254, 30255, 30256, 30257, 30258, 30259, 30260, 30261, 30262, 30263, 30264, 30265, 30266, 30268, 30269, 30270, 30271, 30272, 30273, 30274, 30275, 30276, 30277, 30278, 30279, 30280, 30281, 30282, 30283, 30284, 30285, 30286, 30287, 30288, 30289, 30290, 30291, 30292, 30293, 30294, 30295, 30296, 30297, 30298, 30299, 30300, 30301, 30302, 30303, 30304, 30305, 30306, 30307, 30308, 30309, 30310, 30311, 30312, 30313, 30314, 30315, 30316, 30317, 30318, 30319, 30320, 30322, 30325, 30326, 30327, 30328, 30329, 30330, 30331, 30332, 30333, 30334, 30335, 30336, 30337, 30338, 30339, 30340, 30341, 30342, 30343, 30344, 30345, 30346, 30347, 30348, 30350, 30351, 30352, 30353, 30354, 30355, 30356, 30357, 30358, 30359, 30360, 30361, 30362, 30363, 30364, 30365, 30366, 30367, 30368, 30369, 30370, 30371, 30372, 30373, 30374, 30375, 30376, 30377, 30378, 30380, 30381, 30382, 30383, 30384, 30385, 30386, 30387, 30388, 30389, 30390, 30391, 30392, 30393, 30394, 30395, 30396, 30397, 30398, 30399, 30400, 30401, 30402, 30403, 30404, 30405, 30406, 30407, 30408, 30409, 30411, 30412, 30413, 30414, 30415, 30416, 30417, 30418, 30419, 30420, 30421, 30422, 30423, 30424, 30425, 30426, 30427, 30428, 30429, 30430, 30431, 30432, 30433, 30434, 30435, 30436, 30437, 30438, 30439, 30440, 30441, 30442, 30443, 30444, 30445, 30446, 30447, 30448, 30449, 30450, 30451, 30452, 30453, 30454, 30455, 30456, 30457, 30458, 30459, 30460, 30461, 30462, 30463, 30464, 30465, 30466, 30467, 30468, 30469, 30470, 30471, 30472, 30473, 30474, 30475, 30476, 30477, 30478, 30479, 30480, 30482, 30483, 30484, 30485, 30486, 30487, 30488, 30489, 30490, 30491, 30492, 30493, 30494, 30495, 30496, 30497, 30498, 30499, 30500, 30501, 30502, 30503, 30504, 30505, 30506, 30507, 30508, 30509, 30510, 30511, 30512, 30513, 30514, 30515, 30516, 30517, 30518, 30519, 30520, 30521, 30522, 30523, 30524, 30525, 30526, 30527, 30528, 30529, 30530, 30531, 30532, 30533, 30534, 30535, 30536, 30537, 30538, 30539, 30540, 30541, 30542, 30543, 30544, 30545, 30546, 30547, 30548, 30549, 30550, 30551, 30552, 30553, 30554, 30555, 30556, 30557, 30558, 30559, 30560, 30561, 30562, 30563, 30564, 30565, 30568, 30569, 30570, 30571, 30572, 30573, 30574, 30575, 30576, 30577, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30585, 30588, 30589, 30590, 30591, 30592, 30593, 30594, 30595, 30596, 30597, 30598, 30599, 30600, 30601, 30602, 30603, 30604, 30605, 30606, 30607, 30608, 30609, 30610, 30611, 30613, 30614, 30615, 30616, 30617, 30618, 30619, 30621, 30622, 30623, 30624, 30625, 30626, 30627, 30628, 30629, 30630, 30631, 30632, 30633, 30634, 30639, 30640, 30641, 30642, 30643, 30644, 30645, 30646, 30647, 30648, 30649, 30650, 30651, 30652, 30654, 30655, 30656, 30657, 30658, 30659, 30660, 30661, 30662, 30663, 30664, 30665, 30666, 30667, 30668, 30669, 30670, 30671, 30672, 30673, 30674, 30675, 30676, 30677, 30678, 30679, 30680, 30681, 30682, 30683, 30684, 30685, 30686, 30687, 30688, 30689, 30690, 30691, 30692, 30693, 30694, 30695, 30696, 30697, 30698, 30699, 30700, 30701, 30702, 30703, 30704, 30706, 30707, 30708, 30709, 30710, 30711, 30712, 30714, 30715, 30716, 30717, 30718, 30719, 30722, 30723, 30724, 30725, 30726, 30727, 30728, 30729, 30731, 30732, 30733, 30735, 30736, 30737, 30738, 30739, 30740, 30741, 30742, 30743, 30744, 30745, 30746, 30747, 30748, 30749, 30750, 30751, 30752, 30753, 30754, 30755, 30756, 30757, 30758, 30759, 30760, 30761, 30762, 30763, 30764, 30765, 30766, 30767, 30768, 30769, 30770, 30771, 30772, 30773, 30774, 30775, 30776, 30777, 30778, 30779, 30781, 30783, 30785, 30787, 30788, 30789, 30790, 30791, 30792, 30793, 30794, 30795, 30796, 30797, 30798, 30799, 30800, 30801, 30802, 30803, 30804, 30805, 30806, 30807, 30808, 30809, 30810, 30811, 30812, 30813, 30814, 30815, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823, 30824, 30825, 30826, 30827, 30828, 30829, 30830, 30831, 30832, 30833, 30835, 30836, 30837, 30838, 30839, 30840, 30841, 30842, 30843, 30844, 30845, 30846, 30847, 30848, 30849, 30850, 30851, 30852, 30853, 30855, 30856, 30857, 30858, 30860, 30861, 30862, 30863, 30864, 30865, 30866, 30867, 30868, 30869, 30870, 30871, 30872, 30873, 30874, 30875, 30876, 30877, 30878, 30879, 30880, 30881, 30882, 30883, 30884, 30885, 30886, 30887, 30888, 30889, 30890, 30891, 30892, 30893, 30894, 30895, 30896, 30897, 30898, 30899, 30900, 30901, 30902, 30903, 30904, 30905, 30906, 30907, 30908, 30909, 30910, 30911, 30912, 30913, 30914, 30915, 30916, 30917, 30918, 30919, 30920, 30921, 30922, 30924, 30925, 30926, 30927, 30928, 30929, 30930, 30931, 30932, 30933, 30934, 30935, 30936, 30937, 30938, 30939, 30940, 30941, 30942, 30943, 30944, 30945, 30946, 30947, 30948, 30949, 30950, 30951, 30952, 30953, 30954, 30955, 30956, 30957, 30958, 30959, 30960, 30961, 30962, 30963, 30964, 30965, 30966, 30967, 30968, 30969, 30970, 30971, 30972, 30973, 30974, 30975, 30976, 30977, 30978, 30979, 30980, 30981, 30982, 30983, 30984, 30985, 30986, 30987, 30988, 30989, 30990, 30991, 30992, 30993, 30994, 30995, 30996, 30997, 30998, 30999, 31000, 31001, 31003, 31004, 31005, 31006, 31007, 31008, 31009, 31010, 31011, 31012, 31013, 31014, 31015, 31016, 31017, 31018, 31019, 31020, 31021, 31022, 31023, 31024, 31025, 31026, 31027, 31028, 31029, 31030, 31031, 31032, 31033, 31036, 31037, 31038, 31039, 31040, 31041, 31042, 31043, 31044, 31045, 31046, 31047, 31048, 31049, 31050, 31051, 31052, 31053, 31054, 31055, 31056, 31057, 31058, 31059, 31060, 31061, 31062, 31063, 31064, 31065, 31066, 31067, 31068, 31069, 31070, 31071, 31072, 31073, 31074, 31075, 31076, 31077, 31078, 31079, 31080, 31081, 31082, 31083, 31084, 31085, 31086, 31087, 31088, 31089, 31090, 31091, 31092, 31093, 31094, 31095, 31096, 31097, 31098, 31099, 31100, 31101, 31102, 31103, 31104, 31105, 31106, 31107, 31108, 31109, 31110, 31111, 31115, 31116, 31117, 31118, 31119, 31120, 31121, 31123, 31124, 31125, 31126, 31127, 31129, 31130, 31131, 31132, 31133, 31134, 31135, 31136, 31137, 31138, 31139, 31140, 31141, 31142, 31143, 31144, 31145, 31146, 31147, 31149, 31150, 31151, 31152, 31153, 31154, 31155, 31156, 31157, 31158, 31159, 31160, 31161, 31162, 31163, 31164, 31165, 31166, 31167, 31168, 31169, 31170, 31171, 31172, 31173, 31174, 31175, 31176, 31177, 31178, 31179, 31180, 31181, 31182, 31183, 31184, 31185, 31187, 31188, 31189, 31190, 31191, 31192, 31193, 31194, 31195, 31196, 31198, 31199, 31200, 31201, 31202, 31203, 31204, 31205, 31206, 31207, 31208, 31209, 31210, 31211, 31212, 31214, 31215, 31216, 31217, 31218, 31219, 31220, 31221, 31222, 31223, 31224, 31225, 31226, 31228, 31229, 31230, 31231, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31240, 31241, 31242, 31243, 31244, 31245, 31246, 31247, 31248, 31249, 31250, 31251, 31252, 31253, 31254, 31255, 31256, 31257, 31258, 31259, 31260, 31261, 31262, 31263, 31264, 31265, 31266, 31267, 31268, 31269, 31271, 31272, 31273, 31274, 31276, 31277, 31278, 31279, 31280, 31281, 31282, 31283, 31284, 31285, 31286, 31287, 31288, 31289, 31290, 31291, 31292, 31293, 31294, 31295, 31296, 31297, 31298, 31299, 31300, 31301, 31302, 31304, 31305, 31306, 31307, 31308, 31309, 31310, 31311, 31312, 31313, 31314, 31315, 31316, 31317, 31318, 31319, 31320, 31321, 31322, 31323, 31324, 31325, 31326, 31327, 31328, 31329, 31330, 31331, 31333, 31334, 31335, 31336, 31337, 31338, 31339, 31340, 31341, 31342, 31343, 31344, 31345, 31346, 31347, 31348, 31349, 31350, 31351, 31352, 31353, 31354, 31355, 31356, 31357, 31358, 31359, 31360, 31361, 31362, 31363, 31364, 31365, 31366, 31367, 31368, 31369, 31370, 31371, 31372, 31373, 31374, 31375, 31376, 31377, 31378, 31379, 31380, 31381, 31382, 31383, 31384, 31385, 31386, 31387, 31388, 31389, 31390, 31391, 31392, 31393, 31394, 31395, 31396, 31397, 31398, 31399, 31400, 31401, 31402, 31403, 31404, 31405, 31406, 31407, 31408, 31409, 31411, 31412, 31413, 31414, 31415, 31416, 31417, 31418, 31419, 31420, 31421, 31422, 31423, 31424, 31425, 31426, 31427, 31428, 31429, 31430, 31431, 31432, 31433, 31434, 31435, 31437, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31446, 31447, 31448, 31449, 31450, 31451, 31452, 31453, 31454, 31455, 31456, 31457, 31458, 31459, 31460, 31461, 31462, 31463, 31464, 31465, 31466, 31467, 31468, 31469, 31470, 31471, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31481, 31482, 31483, 31484, 31485, 31486, 31487, 31488, 31489, 31490, 31491, 31492, 31493, 31494, 31495, 31496, 31497, 31498, 31499, 31500, 31501, 31502, 31503, 31504, 31505, 31506, 31507, 31508, 31509, 31510, 31511, 31512, 31513, 31514, 31515, 31516, 31517, 31518, 31519, 31520, 31521, 31522, 31523, 31524, 31526, 31527, 31528, 31529, 31530, 31531, 31532, 31533, 31534, 31535, 31536, 31537, 31538, 31539, 31540, 31541, 31542, 31543, 31544, 31545, 31546, 31547, 31548, 31549, 31550, 31551, 31552, 31553, 31554, 31555, 31556, 31557, 31558, 31559, 31560, 31561, 31562, 31563, 31564, 31565, 31566, 31567, 31568, 31569, 31570, 31571, 31572, 31573, 31574, 31575, 31576, 31577, 31578, 31579, 31580, 31581, 31582, 31583, 31584, 31585, 31586, 31587, 31588, 31589, 31590, 31591, 31592, 31593, 31594, 31595, 31596, 31597, 31598, 31599, 31600, 31601, 31602, 31603, 31604, 31605, 31606, 31607, 31608, 31609, 31610, 31611, 31612, 31613, 31614, 31615, 31616, 31617, 31618, 31619, 31620, 31621, 31622, 31623, 31624, 31625, 31626, 31627, 31628, 31629, 31630, 31631, 31632, 31633, 31634, 31635, 31636, 31637, 31638, 31639, 31640, 31641, 31642, 31643, 31644, 31645, 31646, 31647, 31648, 31649, 31650, 31651, 31652, 31653, 31654, 31655, 31656, 31657, 31658, 31659, 31660, 31661, 31662, 31663, 31664, 31665, 31666, 31667, 31668, 31669, 31670, 31671, 31672, 31673, 31674, 31675, 31676, 31677, 31678, 31679, 31680, 31681, 31682, 31683, 31684, 31685, 31686, 31687, 31688, 31689, 31690, 31691, 31692, 31693, 31694, 31695, 31696, 31697, 31698, 31699, 31700, 31701, 31702, 31703, 31704, 31705, 31706, 31708, 31709, 31710, 31711, 31712, 31713, 31714, 31715, 31716, 31717, 31718, 31719, 31720, 31721, 31722, 31723, 31724, 31725, 31726, 31727, 31728, 31729, 31730, 31731, 31732, 31733, 31734, 31735, 31736, 31737, 31738, 31739, 31740, 31741, 31742, 31743, 31744, 31745, 31746, 31747, 31748, 31749, 31750, 31751, 31752, 31754, 31755, 31756, 31757, 31758, 31759, 31760, 31761, 31762, 31763, 31764, 31765, 31766, 31767, 31768, 31769, 31770, 31773, 31775, 31776, 31777, 31778, 31779, 31780, 31781, 31782, 31783, 31784, 31785, 31786, 31787, 31794, 31795, 31796, 31797, 31798, 31799, 31800, 31801, 31802, 31803, 31804, 31805, 31806, 31807, 31808, 31809, 31810, 31811, 31812, 31813, 31814, 31815, 31816, 31817, 31818, 31819, 31820, 31821, 31822, 31823, 31824, 31825, 31826, 31827, 31828, 31829, 31830, 31831, 31832, 31833, 31834, 31835, 31836, 31838, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31857, 31858, 31861, 31862, 31863, 31864, 31865, 31866, 31867, 31868, 31869, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 31878, 31879, 31880, 31881, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31889, 31890, 31891, 31892, 31893, 31894, 31895, 31896, 31897, 31898, 31899, 31900, 31902, 31903, 31904, 31905, 31906, 31907, 31908, 31909, 31910, 31911, 31912, 31913, 31915, 31916, 31917, 31918, 31919, 31920, 31921, 31922, 31923, 31924, 31925, 31926, 31927, 31928, 31929, 31930, 31931, 31932, 31933, 31934, 31935, 31936, 31937, 31938, 31939, 31940, 31941, 31942, 31943, 31944, 31945, 31946, 31947, 31948, 31949, 31950, 31951, 31952, 31953, 31954, 31955, 31956, 31957, 31958, 31959, 31960, 31961, 31962, 31963, 31964, 31965, 31966, 31967, 31968, 31969, 31970, 31971, 31972, 31973, 31974, 31975, 31976, 31977, 31978, 31979, 31980, 31981, 31982, 31983, 31984, 31985, 31986, 31987, 31988, 31989, 31990, 31991, 31992, 31993, 31994, 31995, 31996, 31997, 31998, 31999, 32000, 32001, 32002, 32003, 32004, 32005, 32006, 32007, 32008, 32009, 32010, 32011, 32012, 32013, 32014, 32015, 32016, 32017, 32018, 32019, 32020, 32021, 32022, 32023, 32024, 32025, 32026, 32027, 32028, 32029, 32030, 32031, 32032, 32033, 32034, 32035, 32036, 32037, 32038, 32039, 32040, 32041, 32042, 32043, 32044, 32045, 32046, 32047, 32048, 32049, 32050, 32051, 32052, 32053, 32054, 32055, 32056, 32057, 32058, 32059, 32060, 32061, 32062, 32063, 32064, 32065, 32066, 32067, 32068, 32069, 32070, 32071, 32072, 32073, 32074, 32075, 32076, 32077, 32078, 32079, 32080, 32081, 32082, 32083, 32084, 32085, 32086, 32087, 32088, 32089, 32090, 32091, 32092, 32093, 32094, 32095, 32096, 32097, 32098, 32099, 32100, 32101, 32102, 32103, 32104, 32105, 32106, 32107, 32108, 32109, 32110, 32111, 32112, 32113, 32114, 32115, 32116, 32117, 32118, 32119, 32120, 32121, 32122, 32123, 32124, 32125, 32126, 32127, 32128, 32129, 32130, 32131, 32132, 32133, 32134, 32135, 32136, 32137, 32138, 32139, 32140, 32141, 32142, 32143, 32144, 32145, 32146, 32147, 32148, 32149, 32150, 32151, 32152, 32153, 32154, 32155, 32156, 32157, 32158, 32159, 32160, 32161, 32162, 32163, 32164, 32165, 32166, 32167, 32168, 32169, 32170, 32171, 32172, 32173, 32174, 32175, 32176, 32178, 32179, 32180, 32181, 32182, 32183, 32184, 32185, 32186, 32188, 32189, 32190, 32191, 32192, 32193, 32194, 32195, 32196, 32197, 32198, 32199, 32200, 32201, 32202, 32203, 32204, 32205, 32206, 32207, 32208, 32209, 32212, 32213, 32214, 32215, 32216, 32217, 32218, 32221, 32222, 32223, 32224, 32225, 32226, 32227, 32228, 32229, 32230, 32231, 32232, 32233, 32234, 32235, 32236, 32237, 32238, 32239, 32241, 32242, 32244, 32245, 32246, 32247, 32248, 32249, 32250, 32251, 32252, 32253, 32254, 32255, 32256, 32257, 32258, 32259, 32260, 32261, 32262, 32263, 32264, 32265, 32266, 32267, 32268, 32269, 32270, 32271, 32272, 32273, 32274, 32275, 32276, 32277, 32278, 32279, 32280, 32281, 32282, 32283, 32284, 32285, 32286, 32287, 32288, 32289, 32290, 32291, 32292, 32293, 32294, 32295, 32296, 32297, 32298, 32299, 32300, 32301, 32302, 32303, 32304, 32305, 32306, 32307, 32308, 32309, 32310, 32311, 32312, 32313, 32314, 32315, 32316, 32317, 32318, 32319, 32320, 32321, 32322, 32323, 32324, 32325, 32326, 32327, 32328, 32329, 32330, 32331, 32332, 32333, 32334, 32335, 32336, 32337, 32338, 32339, 32340, 32341, 32342, 32343, 32344, 32345, 32346, 32347, 32348, 32349, 32350, 32352, 32353, 32354, 32355, 32356, 32357, 32358, 32359, 32360, 32361, 32362, 32363, 32364, 32365, 32366, 32367, 32368, 32369, 32370, 32371, 32372, 32373, 32374, 32375, 32376, 32377, 32378, 32379, 32380, 32381, 32382, 32383, 32384, 32385, 32386, 32387, 32388, 32389, 32390, 32391, 32392, 32393, 32394, 32395, 32396, 32397, 32398, 32399, 32400, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32409, 32410, 32411, 32412, 32413, 32414, 32415, 32416, 32417, 32418, 32419, 32420, 32421, 32422, 32423, 32424, 32425, 32426, 32427, 32428, 32429, 32430, 32431, 32432, 32433, 32434, 32435, 32436, 32437, 32438, 32439, 32440, 32441, 32442, 32443, 32444, 32445, 32446, 32447, 32448, 32449, 32450, 32451, 32452, 32453, 32454, 32466, 32467, 32468, 32469, 32470, 32471, 32472, 32473, 32474, 32475, 32476, 32477, 32478, 32479, 32480, 32481, 32482, 32483, 32484, 32485, 32486, 32487, 32488, 32490, 32491, 32492, 32493, 32494, 32495, 32496, 32497, 32498, 32499, 32500, 32501, 32502, 32503, 32504, 32505, 32507, 32508, 32509, 32510, 32511, 32512, 32513, 32514, 32515, 32516, 32518, 32519, 32520, 32521, 32522, 32523, 32524, 32525, 32526, 32527, 32528, 32529, 32530, 32531, 32532, 32533, 32534, 32535, 32536, 32537, 32538, 32540, 32541, 32544, 32548, 32549, 32550, 32551, 32552, 32553, 32554, 32555, 32556, 32557, 32558, 32559, 32560, 32561, 32562, 32563, 32565, 32566, 32567, 32568, 32569, 32570, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32578, 32579, 32580, 32582, 32583, 32584, 32585, 32586, 32587, 32588, 32589, 32590, 32591, 32592, 32593, 32594, 32595, 32596, 32597, 32598, 32599, 32600, 32601, 32602, 32603, 32604, 32606, 32607, 32608, 32609, 32615, 32616, 32617, 32618, 32619, 32620, 32621, 32622, 32623, 32624, 32625, 32626, 32627, 32629, 32630, 32631, 32632, 32634, 32635, 32636, 32640, 32641, 32642, 32643, 32647, 32648, 32649, 32650, 32651, 32652, 32653, 32654, 32655, 32656, 32657, 32658, 32659, 32660, 32661, 32662, 32663, 32664, 32665, 32666, 32667, 32668, 32669, 32675, 32676, 32677, 32678, 32679, 32680, 32681, 32682, 32683, 32684, 32685, 32686, 32687, 32688, 32689, 32690, 32691, 32692, 32693, 32694, 32695, 32697, 32700, 32702, 32704, 32706, 32708, 32709, 32710, 32711, 32712, 32713, 32714, 32715, 32716, 32717, 32718, 32719, 32720, 32721, 32722, 32723, 32724, 32725, 32726, 32727, 32728, 32729, 32730, 32731, 32732, 32733, 32734, 32735, 32736, 32737, 32738, 32739, 32740, 32741, 32742, 32743, 32744, 32745, 32746, 32747, 32748, 32749, 32751, 32752, 32753, 32754, 32755, 32756, 32757, 32758, 32759, 32760, 32761, 32762, 32763, 32764, 32765, 32766, 32767, 32768, 32769, 32770, 32771, 32772, 32773, 32774, 32775, 32776, 32777, 32778, 32780, 32785, 32786, 32787, 32788, 32790, 32794, 32795, 32796, 32797, 32800, 32821, 32832, 32833, 32834, 32843, 32844, 32847, 32853, 32854, 33005, 33006, 32871, 32887, 32931, 32980, 32983, 33007, 33008, 33010, 33011, 33014, 33016, 33017, 33029, 33030, 33031, 33087, 33252, 32939, 32942, 32944, 32954, 32981, 33018, 33019, 33025, 33026, 33027, 33032, 33069, 33251, 32779, 32781, 32782, 32784, 32789, 32791, 32793, 32798, 32799, 32801, 32802, 32803, 32804, 32805, 32806, 32807, 32808, 32809, 32810, 32811, 32812, 32813, 32814, 32815, 32816, 32818, 32819, 32820, 32822, 32823, 32824, 32825, 32826, 32827, 32828, 32829, 32830, 32831, 32836, 32837, 32838, 32839, 32840, 32845, 32846, 32848, 32849, 32857, 32865, 32866, 32867, 32870, 32872, 32873, 32874, 32875, 32876, 32877, 32878, 32879, 32882, 32883, 32885, 32886, 32892, 32893, 32897, 32898, 32900, 32901, 32904, 32905, 32906, 32907, 32908, 32913, 32914, 32915, 32916, 32918, 32919, 32922, 32923, 32924, 32925, 32926, 32927, 32930, 32933, 32934, 32938, 32941, 32946, 32948, 32950, 32953, 32955, 32956, 32957, 32958, 32984, 33045, 33049, 33050, 33051, 33052, 33054, 33059, 33060, 33061, 33062, 33063, 33064, 33067, 33068, 33070, 33073, 33080, 33081, 33086, 33088, 33089, 33090, 33104, 33105, 33108, 33109, 33110, 33113, 33114, 33116, 33118, 33121, 33122, 33125, 33128, 33129, 33130, 33134, 33135, 33136, 33137, 33138, 33139, 33140, 33141, 33142, 33143, 33146, 33147, 33148, 33149, 33150, 33151, 33152, 33153, 33154, 33155, 33156, 33157, 33158, 33159, 33160, 33161, 33162, 33163, 33164, 33167, 33168, 33169, 33170, 33173, 33174, 33184, 33185, 33186, 33188, 33189, 33190, 33191, 33192, 33194, 33196, 33197, 33198, 33199, 33200, 33202, 33203, 33205, 33210, 33211, 33212, 33213, 33214, 33215, 33216, 33217, 33218, 33219, 33220, 33221, 33222, 33223, 33224, 33225, 33226, 33227, 33228, 33229, 33233, 33234, 33235, 33236, 33237, 33238, 33239, 33240, 33241, 33242, 33243, 33244, 33245, 33246, 33248, 33255, 33259, 33264, 33271, 33272, 33273, 33274, 33280, 33282, 33285, 33286, 33287, 33288, 33289, 33290, 33291, 33292, 33293, 33297, 33298, 33299, 33300, 33301, 33303, 33305, 33306, 33307, 33308, 33309, 33310, 33312, 33314, 33315, 33316, 33317, 33318, 33319, 33320, 33321, 33322, 33323, 33324, 33325, 33326, 33327, 33328, 33329, 33330, 33331, 33332, 33333, 33335, 33337, 33339, 33340, 33341, 33342, 33343, 33344, 33346, 33350, 33351, 33352, 33353, 33354, 33355, 33357, 33360, 33361, 33364, 33365, 33366, 33367, 33369, 33370, 33372, 33373, 33376, 33377, 33378, 33379, 33380, 33382, 33383, 33384, 33385, 33387, 33388, 33391, 33392, 33393, 33395, 33396, 33397, 33398, 33399, 33400, 33401, 33402, 33403, 33404, 33405, 33406, 33408, 33409, 33410, 33411, 33412, 33413, 33414, 33415, 33416, 33417, 33418, 33422, 33425, 33426, 33429, 33430, 33431, 33432, 33433, 33434, 33435, 33436, 33437, 33438, 33439, 33441, 33442, 33447, 33448, 33449, 33450, 33453, 33455, 33457, 33459, 33460, 33461, 33462, 33463, 33464, 33465, 33466, 33467, 33468, 33469, 33470, 33471, 33472, 33473, 33474, 33475, 33476, 33477, 33478, 33479, 33480, 33481, 33482, 33488, 33489, 33490, 33491, 33492, 33493, 33495, 33498, 33499, 33500, 33501, 33502, 33503, 33504, 33505, 33506, 33508, 33510, 33511, 33513, 33515, 33516, 33517, 33518, 33519, 33520, 33521, 33522, 33523, 33524, 33525, 33526, 33527, 33528, 33529, 33530, 33531, 33532, 33533, 33535, 33536, 33537, 33538, 33539, 33540, 33541, 33542, 33543, 33544, 33545, 33546, 33547, 33548, 33549, 33550, 33551, 33552, 33553, 33554, 33555, 33556, 33557, 33558, 33559, 33560, 33561, 33562, 33563, 33564, 33565, 33566, 33567, 33568, 33570, 33571, 33572, 33575, 33576, 33578, 33579, 33580, 33581, 33583, 33586, 33587, 33588, 33589, 33590, 33591, 33592, 33593, 33594, 33595, 33596, 33597, 33598, 33599, 33600, 33601, 33602, 33603, 33608, 33609, 33610, 33611, 33612, 33613, 33614, 33615, 33616, 33617, 33618, 33619, 33620, 33621, 33622, 33623, 33624, 33625, 33626, 33627, 33628, 33629, 33630, 33631, 33632, 33633, 33634, 33635, 33636, 33637, 33638, 33639, 33640, 33641, 33642, 33643, 33644, 33645, 33646, 33647, 33648, 33649, 33650, 33651, 33652, 33653, 33654, 33655, 33656, 33657, 33658, 33659, 33660, 33661, 33662, 33663, 33664, 33665, 33666, 33667, 33668, 33669, 33670, 33671, 33672, 33673, 33674, 33675, 33676, 33677, 33678, 33679, 33680, 33681, 33682, 33683, 33684, 33685, 33686, 33687, 33689, 33690, 33691, 33692, 33693, 33694, 33695, 33696, 33698, 33699, 33700, 33701, 33704, 33705, 33707, 33708, 33710, 33711, 33712, 33713, 33715, 33716, 33717, 33718, 33719, 33720, 33721, 33722, 33723, 33724, 33725, 33729, 33730, 33731, 33732, 33733, 33734, 33735, 33737, 33738, 33739, 33740, 33741, 33742, 33743, 33744, 33745, 33746, 33747, 33748, 33749, 33750, 33751, 33752, 33753, 33754, 33755, 33756, 33757, 33758, 33759, 33761, 33762, 33763, 33764, 33768, 33769, 33770, 33771, 33772, 33773, 33774, 33775, 33776, 33778, 33779, 33780, 33782, 33783, 33784, 33785, 33787, 33788, 33789, 33790, 33791, 33792, 33793, 33794, 33795, 33796, 33798, 33799, 33800, 33802, 33805, 33806, 33809, 33810, 33815, 33816, 33817, 33818, 33819, 33820, 33822, 33823, 33824, 33827, 33828, 33829, 33830, 33831, 33832, 33835, 33836, 33838, 33839, 33840, 33841, 33842, 33843, 33844, 33845, 33846, 33848, 33849, 33850, 33851, 33852, 33853, 33854, 33855, 33856, 33857, 33861, 33862, 33863, 33865, 33866, 33867, 33868, 33869, 33870, 33871, 33872, 33874, 33876, 33877, 33878, 33879, 33880, 33881, 33882, 33883, 33885, 33886, 33887, 33888, 33890, 33892, 33904, 33906, 33907, 33908, 33909, 33910, 33911, 33915, 33916, 33917, 33918, 33919, 33920, 33921, 33922, 33923, 33924, 33925, 33926, 33927, 33928, 33929, 33930, 33931, 33932, 33933, 33934, 33935, 33936, 33937, 33938, 33939, 33940, 33941, 33942, 33943, 33946, 33947, 33949, 33950, 33951, 33952, 33953, 33954, 33955, 33956, 33957, 33958, 33959, 33962, 33963, 33964, 33966, 33967, 33968, 33970, 33971, 33972, 33973, 33974, 33975, 33983, 33984, 33985, 33986, 33988, 33989, 33990, 33991, 33992, 33993, 33994, 33995, 33996, 33998, 33999, 34000, 34001, 34002, 34003, 34004, 34005, 34011, 34014, 34015, 34016, 34017, 34018, 34019, 34021, 34022, 34024, 34025, 34026, 34027, 34028, 34029, 34031, 34032, 34034, 34035, 34036, 34037, 34038, 34039, 34040, 34042, 34043, 34044, 34045, 34047, 34049, 34050, 34054, 34055, 34057, 34058, 34059, 34060, 34061, 34062, 34063, 34064, 34068, 34069, 34070, 34071, 34072, 34073, 34074, 34075, 34076, 34077, 34078, 34079, 34080, 34081, 34082, 34083, 34084, 34085, 34086, 34087, 34088, 34089, 34090, 34091, 34092, 34093, 34094, 34095, 34096, 34097, 34098, 34099, 34100, 34102, 34104, 34105, 34106, 34107, 34108, 34109, 34110, 34111, 34112, 34113, 34114, 34115, 34116, 34119, 34120, 34121, 34125, 34127, 34128, 34129, 34131, 34133, 34134, 34135, 34137, 34139, 34140, 34141, 34142, 34143, 34144, 34145, 34146, 34147, 34148, 34149, 34150, 34151, 34152, 34153, 34154, 34155, 34156, 34157, 34158, 34159, 34161, 34162, 34164, 34165, 34166, 34168, 34169, 34170, 34171, 34172, 34173, 34174, 34175, 34178, 34179, 34180, 34181, 34183, 34184, 34185, 34186, 34187, 34188, 34189, 34190, 34191, 34192, 34193, 34194, 34196, 34197, 34198, 34199, 34200, 34201, 34202, 34203, 34210, 34211, 34213, 34215, 34216, 34217, 34218, 34219, 34220, 34221, 34222, 34223, 34224, 34225, 34226, 34227, 34228, 34229, 34230, 34234, 34235, 34236, 34237, 34238, 34244, 34245, 34246, 34247, 34250, 34252, 34254, 34255, 34256, 34257, 34264, 34265, 34266, 34267, 34268, 34269, 34270, 34271, 34272, 34273, 34274, 34275, 34276, 34277, 34279, 34281, 34286, 34288, 34291, 34296, 34297, 34298, 34300, 34307, 34313, 34319, 34332, 34361, 34362, 34363, 34505, 34549, 34550, 34551, 34552, 34553, 34554, 34555, 34556, 34557, 34558, 34587, 34588, 34589, 34632, 34655, 34694, 34731, 34732, 35477, 34989, 35599, 34988, 35395, 35168, 35399, 34793, 35646, 35189, 35100, 35101, 35002, 35597, 35001, 34999, 35596, 35000, 35497, 36506, 35507, 35496, 35494, 35790, 34952, 35500, 35608, 34924, 34330, 35498, 35594, 36021, 35461, 35826, 34953, 35471, 35495, 35508, 35398, 35476, 35473, 35469, 35483, 35290, 35292, 34772, 34788, 34914, 34771, 34794, 35470, 35475, 35573, 35580, 35578, 35576, 35579, 35574, 35577, 35575, 36119, 36120, 36124, 36122, 36121, 36069, 35293, 35291, 36114, 36116, 36108, 36118, 36109, 34880, 34912, 34881, 35808, 35482, 36223, 35117, 35344, 35094, 34882, 34885, 35472, 35501, 35984, 35499, 36101, 36102, 35467, 35462, 34735, 35361, 34970, 34868, 35016, 34995, 34996, 34994, 34908, 34974, 34887, 34975, 34966, 34977, 34871, 36557, 36559, 35005, 35635, 35326, 35640, 35325, 35634, 35327, 34856, 34870, 34992, 34990, 34906, 34910, 34909, 34869, 34900, 35569, 35571, 35617, 34979, 34859, 34861, 34904, 34905, 34860, 34857, 34902, 34901, 34883, 34903, 34858, 35309, 35305, 35307, 34928, 35311, 35030, 35491, 35451, 35564, 35547, 35590, 35614, 35557, 35368, 35372, 35638, 35314, 35572, 35119, 35320, 35321, 35570, 35046, 35028, 36173, 35029, 35039, 35299, 35641, 35323, 35322, 35604, 35587, 35589, 34381, 35642, 34724, 35373, 35460, 34986, 35601, 35396, 35073, 35089, 35106, 35444, 35097, 34728, 34734, 35113, 34956, 34716, 34810, 34808, 35255, 36066, 36065, 35009, 34925, 35092, 34907, 35098, 34947, 34852, 34838, 34839, 35047, 36155, 35281, 36479, 36481, 36561, 34704, 34720, 34816, 35014, 34743, 34781, 35376, 35820, 34796, 36549, 34800, 34854, 34799, 35144, 35176, 35227, 35226, 34797, 35062, 35035, 35458, 35651, 34780, 34784, 34825, 34826, 34813, 34815, 35766, 34445, 34459, 34447, 34455, 34453, 34458, 34454, 34448, 34441, 34450, 35821, 35610, 35465, 34686, 34687, 35770, 34567, 34568, 34497, 34496, 34755, 34630, 34628, 35133, 35131, 34789, 36024, 35045, 35365, 34997, 34998, 35598, 34915, 34920, 35394, 35143, 36093, 35013, 35015, 35387, 35068, 35400, 34983, 34985, 35611, 35048, 35474, 35049, 35093, 35099, 35038, 35034, 34562, 34565, 34561, 35600, 34991, 35007, 34320, 34944, 36171, 34929, 34935, 34775, 34776, 35273, 35336, 35339, 35069, 35819, 36356, 36355, 36165, 36166, 34984, 36152, 34960, 36151, 36169, 36167, 36154, 34770, 34950, 34948, 34383, 34382, 35023, 35169, 34765, 34723, 34717, 34721, 34715, 34730, 34719, 34718, 34766, 34949, 34951, 34802, 34919, 35377, 35379, 35335, 34778, 34777, 35024, 35026, 35022, 34918, 34922, 35380, 35346, 36162, 34327, 34741, 34899, 34338, 34737, 34739, 34336, 34740, 36209, 34806, 34738, 34436, 35055, 34365, 34526, 35012, 34965, 34980, 35135, 35297, 34451, 34449, 36070, 35771, 35877, 34564, 35763, 36099, 34862, 34606, 34607, 34660, 34605, 36097, 36095, 34444, 36208, 35909, 34528, 34548, 36911, 36979, 35132, 35319, 35324, 35083, 35080, 35084, 35079, 35070, 35090, 35104, 35105, 34879, 34888, 35102, 35318, 35602, 35008, 34955, 35364, 35017, 34520, 34519, 34703, 35607, 34531, 35397, 35040, 35042, 35025, 34987, 36778, 34812, 34823, 34819, 34824, 34822, 34653, 36607, 34710, 35337, 34682, 34744, 34675, 34708, 35340, 34645, 34644, 34456, 34654, 34676, 34681, 34711, 34783, 34785, 35003, 35061, 35071, 35072, 35338, 36349, 36350, 34310, 35031, 35060, 37072, 34976, 34978, 35603, 35345, 36148, 34460, 34461, 34463, 34465, 34466, 34467, 34468, 34469, 34470, 34471, 34472, 34473, 34474, 34475, 34657, 34658, 34701, 34702, 35004, 35330, 35331, 35332, 35545, 35633, 35644, 35768, 36558, 35147, 35445, 35248, 35247, 34478, 34481, 35250, 34479, 34677, 34678, 34679, 34683, 34684, 34685, 34712, 34713, 34714, 34768, 34786, 34787, 35341, 35342, 35343, 34705, 34972, 34973, 35020, 35127, 35328, 35329, 35612, 35636, 35637, 36837, 34364, 36164, 36213, 36217, 36224, 36225, 36226, 36273, 36476, 36477, 36478, 36494, 36495, 36497, 36499, 36502, 36508, 36516, 36517, 36522, 36535, 36536, 36551, 36564, 36595, 36610, 36612, 36619, 36620, 36624, 36642, 36656, 36657, 36658, 36661, 36666, 36669, 36670, 36672, 36723, 36724, 36725, 36731, 36736, 36764, 36765, 36766, 36767, 36770, 36771, 36772, 36773, 36774, 36776, 36788, 36794, 36796, 36805, 36807, 36808, 36811, 36829, 36830, 36839, 36840, 36841, 36842, 36844, 36847, 36848, 36851, 36855, 36856, 36871, 36874, 36877, 36879, 36881, 36886, 36888, 36889, 36891, 36892, 36893, 36896, 36907, 36913, 36939, 36940, 36941, 36944, 36945, 36946, 36947, 36948, 36950, 36954, 36961, 36967, 36969, 36971, 36978, 36983, 36990, 36998, 37003, 37004, 37007, 37011, 37012, 37014, 37016, 37017, 37021, 37026, 37027, 37028, 37029, 37030, 37031, 37032, 37033, 37035, 37044, 37068, 37069, 37071, 37107, 37116, 37119, 37120, 37144, 37146, 37148, 37149, 37181, 37183, 37184, 37187, 37189, 37215, 37222, 37223, 37225, 37226, 37227, 37230, 37231, 37488, 37519, 37528, 37540, 37543, 37544, 37545, 37546, 37547, 37554, 37574, 37577, 37578, 37579, 37581, 37583, 37584, 37586, 37587, 37588, 37589, 37592, 37593, 37596, 37670, 37687, 37688, 37689, 37696, 37702, 37704, 37711, 37712, 37713, 37728, 37729, 37742, 37755, 37776, 37779, 37780, 37813, 37833, 37852, 37856, 37858, 37861, 37862, 37865, 37890, 37906, 37920, 37928, 37941, 37942, 37947, 37948, 37949, 37965, 37967, 37991, 37992, 37993, 37994, 37996, 38009, 38010, 38017, 38028, 38054, 38112, 38113, 38135, 38136, 38153, 38161, 38172, 38173, 38175, 38176, 38177, 38181, 38189, 38194, 38200, 38222, 38284, 38316, 38391, 38453, 38487, 38493, 38500, 38505, 38508, 38567, 38569, 38841, 38858, 36482, 36626, 36627, 36659, 36678, 36880, 36897, 36899, 36916, 36934, 37006, 37013, 37022, 37023, 37025, 37038, 37098, 37217, 37562, 37571, 37595, 37662, 37663, 37664, 37665, 37666, 37672, 37690, 37697, 37744, 37782, 37824, 37849, 37854, 37855, 37864, 37901, 37930, 37935, 37936, 37955, 37968, 37970, 37972, 37973, 37986, 38004, 38008, 38104, 38107, 38159, 38201, 38228, 38229, 38231, 38232, 38234, 38294, 38308, 38309, 38317, 38319, 38332, 38369, 38410, 38422, 38451, 38454, 38458, 38463, 38763, 38879, 39010, 37859, 37850, 38867, 36955, 36993, 37221, 37496, 37497, 37498, 37572, 37575, 37576, 37580, 37582, 37591, 37597, 37774, 37810, 38160, 38188, 35037, 35044, 37158, 37915, 34337, 35041, 35809, 37888, 38751, 35036, 37851, 35033, 35052, 36511, 37828, 37846, 34942, 36838, 37094, 37190, 37200, 37853, 37997, 37998, 37999, 38182, 38283, 38711, 38712, 38840, 35019, 35021, 35148, 37814, 38163, 36957, 36960, 36968, 36970, 36982, 37034, 37041, 37117, 37182, 37188, 37830, 37879, 37880, 37902, 37903, 37904, 36212, 36272, 36296, 36530, 36565, 36568, 36643, 36710, 36789, 36791, 36812, 36817, 36885, 37501, 37502, 37503, 37533, 37534, 37674, 37675, 37863, 37868, 37886, 37887, 37907, 37918, 37934, 37945, 37950, 37985, 38041, 38065, 38066, 38068, 38186, 38208, 38288, 38293, 38325, 38334, 38335, 38336, 38340, 38341, 38342, 38374, 38433, 38439, 38456, 38461, 38482, 38492, 38494, 38752, 39172, 39509, 37122, 37123, 37124, 37125, 37126, 37127, 37129, 37132, 37133, 37134, 37491, 37495, 38125, 38154, 38184, 38551, 38557, 38558, 39173, 37715, 38032, 38035, 37232, 37493, 37494, 38370, 38490, 35179, 37980, 37981, 38039, 38040, 38501, 39019, 39092, 37990, 37558, 35074, 36715, 38211, 38595, 36085, 36090, 36084, 35517, 35490, 36089, 35518, 36091, 36087, 36086, 36083, 36082, 36088, 36538, 36566, 36572, 38110, 38193, 36571, 37282, 37281, 35519, 35493, 37280, 37279, 35527, 35521, 37278, 35522, 37277, 37293, 37720, 37550, 37551, 37100, 37549, 35354, 35353, 35520, 36863, 35523, 38599, 38603, 38524, 38525, 38563, 38544, 38564, 38568, 37074, 36864, 37564, 36977, 37286, 36617, 37643, 37565, 37627, 37629, 37613, 36938, 38220, 37645, 37646, 37647, 37648, 37649, 37650, 37651, 37652, 37609, 37638, 37644, 37612, 37637, 35524, 37640, 37635, 37656, 37622, 37118, 37101, 37626, 37641, 37642, 37636, 37639, 36859, 36858, 36857, 37618, 37567, 37677, 37568, 36498, 37607, 38249, 38025, 38026, 37731, 37730, 36644, 37569, 35654, 35534, 37036, 37292, 37296, 35528, 36862, 36861, 36860, 37614, 37302, 37606, 37305, 35717, 37566, 37563, 37608, 37624, 37625, 37623, 37797, 36067, 35529, 37604, 37603, 37605, 37628, 36804, 37809, 36071, 35525, 37261, 37270, 37276, 37273, 37285, 37289, 37299, 38267, 38233, 38057, 38058, 38075, 38073, 38076, 38072, 38074, 35427, 38077, 39168, 34476, 38157, 38406, 38261, 38408, 35421, 38407, 38082, 38086, 38079, 38031, 38061, 38059, 38081, 38078, 38085, 38083, 38080, 38092, 38091, 38090, 38087, 38088, 38096, 38256, 35415, 35407, 38097, 38093, 38084, 38089, 35401, 38638, 35357, 35310, 38444, 38128, 38481, 38445, 38446, 35285, 35259, 36792, 36757, 35254, 36679, 38402, 35251, 38393, 35156, 38394, 35067, 35032, 36542, 36532, 36483, 34971, 36301, 36215, 35983, 34895, 35559, 35543, 35537, 38596, 38398, 38396, 38586, 38550, 37506, 37655, 38138, 38123, 38108, 38062, 38064, 38063, 38418, 38103, 38602, 38098, 38100, 38102, 38480, 38099, 38101, 38479, 38604, 38312, 38600, 35110, 35107, 35087, 38297, 37959, 38399, 38400, 38105, 36075, 34889, 35653, 34827, 34709, 34580, 38419, 38775, 37131, 36910, 36867, 36380, 36358, 36351, 35720, 35586, 38395, 38404, 38262, 38403, 37063, 38405, 38095, 38257, 36966, 36963, 36605, 36556, 35244, 35228, 36550, 38174, 38169, 38197, 38198, 34437, 38219, 38171, 38167, 38166, 38168, 38170, 36545, 35533, 34482, 38397, 38298, 38299, 38303, 38304, 38258, 38126, 38000, 38132, 38133, 38131, 36135, 38185, 38204, 37882, 38362, 35540, 34515, 37304, 37301, 37295, 37291, 37260, 37269, 37275, 37272, 37284, 37288, 37298, 38266, 38459, 39167, 34435, 38639, 38685, 38691, 38689, 35419, 38687, 34434, 34428, 38693, 35413, 35405, 35362, 38637, 35356, 35308, 38699, 35261, 35258, 36769, 36737, 35253, 36677, 38582, 35249, 38628, 35155, 38625, 35066, 35018, 36537, 36510, 36431, 34930, 36284, 36189, 35910, 34893, 35546, 35542, 35536, 38597, 38633, 39001, 38585, 38549, 37505, 38760, 38758, 35109, 35091, 35086, 38296, 37958, 38769, 38771, 36074, 34875, 35652, 34801, 34612, 34579, 38776, 37130, 36904, 36866, 36360, 36357, 36303, 35719, 35568, 38631, 38679, 38683, 38675, 37039, 38681, 38677, 36965, 36949, 36574, 36554, 35243, 35180, 36547, 38722, 38727, 38725, 38724, 38726, 38723, 36544, 35532, 34480, 40533, 36128, 36504, 38635, 35539, 34484, 40165, 37303, 37300, 37294, 37290, 37259, 37268, 37274, 37271, 37283, 37287, 37297, 38265, 38460, 39166, 34425, 38640, 38692, 38690, 35417, 38688, 34393, 34360, 38694, 35410, 35403, 35358, 38156, 35355, 35306, 38700, 35260, 35256, 36763, 36726, 35252, 36648, 38583, 35246, 38629, 35145, 38626, 35051, 34993, 36533, 36484, 36390, 34921, 36235, 36168, 35895, 34891, 35544, 35541, 35535, 38598, 38632, 39000, 38431, 38390, 37504, 38761, 38759, 35108, 35088, 35085, 38106, 37957, 38770, 38772, 36072, 34847, 35588, 34798, 34581, 34533, 38777, 37128, 36875, 36865, 36359, 36352, 36302, 35718, 35560, 38630, 38680, 38684, 38676, 37037, 38682, 38678, 36964, 36923, 36573, 36553, 35242, 35157, 36546, 38721, 38737, 38735, 38734, 38736, 38733, 36543, 42078, 34477, 39137, 36076, 36503, 38634, 35538, 34483, 37246, 37258, 37255, 35492, 35438, 35441, 35514, 35511, 35447, 37252, 37249, 35216, 35278, 35270, 35265, 35262, 35705, 35686, 35683, 35680, 35692, 35711, 35724, 34442, 35695, 35774, 35436, 37243, 37267, 37264, 35350, 35347, 35671, 35689, 36473, 37240, 37237, 34566, 35429, 34649, 34648, 34650, 37192, 37201, 35740, 37234, 35708, 35702, 35743, 35734, 35746, 35665, 35662, 35721, 35714, 35728, 35668, 35699, 35674, 35731, 35737, 37245, 37257, 37254, 35468, 35439, 35442, 35515, 35512, 35448, 37251, 37248, 35268, 35279, 35271, 35266, 35263, 35706, 35687, 35684, 35681, 35693, 35712, 35725, 34443, 35696, 35775, 35433, 37242, 37266, 37263, 35351, 35348, 35672, 35690, 36474, 37239, 37236, 35615, 35425, 35655, 35658, 37191, 37194, 35741, 37233, 35709, 35703, 35744, 35735, 35747, 35666, 35663, 35722, 35715, 35729, 35669, 35700, 35675, 35732, 35738, 37244, 37256, 37253, 35459, 35440, 35443, 35516, 35513, 35449, 37250, 37247, 35269, 35280, 35272, 35267, 35264, 35707, 35688, 35685, 35682, 35694, 35713, 35726, 35749, 35697, 35776, 35431, 37241, 37265, 37262, 35352, 35349, 35673, 35691, 36475, 37238, 37235, 35616, 35423, 35656, 35659, 37168, 37193, 35742, 37202, 35710, 35704, 35745, 35736, 35748, 35667, 35664, 35723, 35716, 35730, 35670, 35701, 35676, 35733, 35739, 37172, 37917, 37964, 38016, 38023, 38042, 38044, 38045, 38295, 38471, 35116, 37214, 38030, 36597, 38121, 37601, 38485, 38472, 38006, 37984, 37671, 36908, 36909, 38338, 38337, 38491, 37966, 38339, 38328, 38248, 40295, 40281, 36912, 39372, 36598, 36609, 36633, 36701, 37695, 37698, 37799, 38757, 38995, 39371, 37228, 37229, 37531, 37532, 38199, 38421, 38429, 38430, 38548, 38556, 40160, 40607, 40413, 40405, 35050, 39048, 36853, 36980, 37186, 38223, 40703, 35146, 35876, 35878, 35043, 38589, 34386, 34387, 34489, 37801, 37845, 38191, 40725, 34532, 36823, 36824, 38285, 38392, 38579, 38584, 38667, 35360, 35359, 38462, 38483, 38292, 38271, 40246, 38434, 38435, 38436, 38401, 38784, 38785, 35531, 35530, 40198, 40436, 40443, 40446, 37919, 36064, 35027, 34490, 36991, 37000, 37205, 37211, 37509, 37510, 37512, 37523, 37527, 37538, 37539, 37541, 37542, 37552, 37707, 37745, 37746, 37763, 37764, 37765, 37781, 37829, 37844, 37881, 38047, 38048, 38052, 38056, 37826, 37827, 37832, 37857, 37871, 37878, 37893, 37894, 37952, 37976, 38001, 40625, 39746, 39747, 39751, 39794, 39814, 39863, 39899, 40001, 40029, 40041, 40042, 40043, 40044, 40055, 40081, 40083, 40091, 40100, 40135, 40142, 40146, 40417, 40419, 40421, 40423, 40429, 40626, 40627, 40628, 40870, 37306, 37307, 37308, 37309, 37310, 37311, 37312, 37313, 37314, 37315, 37316, 37317, 37318, 37319, 37320, 37321, 37322, 37323, 37324, 37325, 37326, 37327, 37328, 37329, 37330, 37331, 37332, 37333, 37334, 37335, 37336, 37337, 37338, 37339, 37340, 37341, 37342, 37343, 37344, 37345, 37346, 37347, 37348, 37349, 37350, 37351, 37352, 37353, 37354, 37355, 37356, 37357, 37358, 37359, 37360, 37361, 37362, 37363, 37364, 37365, 37366, 37367, 37368, 37369, 37370, 37371, 37372, 37373, 37374, 37375, 37376, 37377, 37378, 37379, 37380, 37381, 37382, 37383, 37384, 37385, 37386, 37387, 37388, 37389, 37390, 37391, 37392, 37393, 37394, 37395, 37396, 37397, 37398, 37399, 37400, 37401, 37402, 37403, 37404, 37405, 37406, 37407, 37408, 37409, 37410, 37411, 37412, 37413, 37414, 37415, 37416, 37417, 37418, 37419, 37420, 37421, 37422, 37423, 37424, 37425, 37426, 37427, 37428, 37429, 37430, 37431, 37432, 37433, 37434, 37435, 37436, 37437, 37438, 37439, 37440, 37441, 37442, 37443, 37444, 37445, 37446, 37447, 37448, 37449, 37450, 37451, 37452, 37453, 37454, 37455, 37456, 37457, 37458, 37459, 37460, 37461, 37462, 37463, 37464, 37465, 37466, 37467, 37468, 37469, 37470, 37471, 37472, 37473, 37474, 37475, 37476, 37477, 37478, 37479, 37480, 37481, 37482, 37483, 37484, 37485, 37486, 37525, 37526, 37530, 37535, 37610, 37611, 37615, 37616, 37617, 37619, 37620, 37621, 37630, 37631, 37632, 37633, 37634, 37653, 37654, 37657, 37658, 37678, 37691, 37693, 37699, 37700, 37703, 37721, 37722, 37732, 37734, 37749, 37750, 37751, 37752, 37766, 37767, 37768, 37769, 37770, 37771, 37772, 37773, 37775, 37787, 37788, 37790, 37798, 37800, 37820, 37825, 37831, 37860, 37869, 37883, 37898, 37932, 37937, 37944, 37982, 37983, 38011, 38012, 38013, 38014, 38019, 38020, 38021, 38043, 38049, 38050, 38053, 38067, 38094, 38116, 38129, 38130, 38134, 38137, 38139, 38151, 38158, 38162, 38164, 38180, 38207, 38216, 38226, 38230, 38236, 38260, 38264, 38273, 38289, 38291, 38310, 38320, 38321, 38322, 38349, 38350, 38351, 38352, 38353, 38361, 38367, 38386, 38388, 38486, 38495, 38496, 38497, 38503, 38527, 38528, 38529, 38546, 38547, 38552, 38566, 38572, 38580, 38581, 38587, 38588, 38590, 38601, 38605, 38606, 38607, 38608, 38609, 38610, 38641, 38686, 38695, 38698, 38701, 38702, 38710, 38716, 38717, 38773, 38774, 38778, 38786, 38787, 38788, 38789, 38790, 38825, 38830, 38831, 38839, 38843, 38846, 38857, 38860, 38863, 38870, 38877, 38882, 38883, 38900, 38901, 38903, 38905, 38906, 38907, 38919, 38920, 38921, 38970, 38971, 38972, 38973, 38974, 38975, 39011, 39012, 39013, 39021, 39023, 39045, 39046, 39047, 39055, 39057, 39058, 39060, 39089, 39090, 39091, 39101, 39103, 39120, 39121, 39122, 39123, 39125, 39130, 39131, 39132, 39135, 39158, 39189, 39190, 39217, 39229, 39230, 39231, 39232, 39233, 39234, 39252, 39253, 39259, 39263, 39264, 39265, 39271, 39273, 39275, 39283, 39284, 39285, 39286, 39287, 39288, 39289, 39296, 39299, 39300, 39301, 39302, 39303, 39304, 39305, 39306, 39307, 39309, 39310, 39311, 39328, 39343, 39349, 39355, 39356, 39361, 39362, 39368, 39386, 39396, 39420, 39421, 39448, 39454, 39462, 39466, 39508, 39581, 39623, 39624, 39632, 39633, 39639, 39647, 39648, 39654, 39672, 39675, 39678, 39682, 39683, 39686, 39691, 39692, 39695, 39703, 39707, 39711, 39712, 39713, 39714, 39715, 39716, 39717, 39735, 39743, 39744, 39755, 39757, 39758, 39759, 39760, 39763, 39798, 39799, 39805, 39807, 39815, 39817, 39818, 39819, 39820, 39821, 39823, 39825, 39826, 39827, 39836, 39837, 39841, 39842, 39852, 39856, 39860, 39861, 39864, 39872, 39888, 39891, 39901, 39902, 39903, 39910, 39920, 39922, 39934, 39938, 39940, 39944, 39945, 39967, 39968, 39969, 39970, 39973, 39975, 39976, 39977, 40006, 40010, 40037, 40038, 40039, 40057, 40097, 40098, 40101, 40102, 40103, 40104, 40110, 40120, 40122, 40124, 40125, 40138, 40141, 40143, 40144, 40145, 40151, 40175, 40176, 40182, 40184, 40187, 40188, 40189, 40191, 40192, 40195, 40196, 40199, 40203, 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40211, 40212, 40213, 40214, 40215, 40216, 40217, 40218, 40220, 40222, 40225, 40231, 40241, 40253, 40256, 40257, 40260, 40263, 40264, 40265, 40274, 40279, 40301, 40305, 40312, 40329, 40352, 40354, 40356, 40361, 40363, 40368, 40373, 40374, 40387, 40388, 40391, 40392, 40404, 40414, 40415, 40416, 40418, 40420, 40422, 40424, 40425, 40426, 40428, 40435, 40437, 40438, 40441, 40468, 40469, 40470, 40471, 40472, 40478, 40479, 40481, 40492, 40502, 40506, 40606, 40617, 40670, 40671, 40672, 40673, 40674, 40675, 40681, 40682, 40683, 40684, 40704, 40721, 40724, 40842, 41839, 43280, 43281, 43282, 40624); + + +-- `gameobject_questitem`.`VerifiedBuild` + +ALTER TABLE `gameobject_questitem` + ADD COLUMN `VerifiedBuild` SMALLINT(5) NOT NULL DEFAULT '0'; + +UPDATE `gameobject_questitem` SET `VerifiedBuild` = -12340 WHERE `GameObjectEntry` = 202083; +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 15354 WHERE `GameObjectEntry` = 175984; +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 15595 WHERE `GameObjectEntry` = 202193; +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 16992 WHERE `GameObjectEntry` = 202192; +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 17371 WHERE `GameObjectEntry` = 188509; + +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 11685 WHERE `GameObjectEntry` IN (191125, 187082); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 17658 WHERE `GameObjectEntry` IN (178188, 187191); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 15211 WHERE `GameObjectEntry` IN (181073, 202947, 202948); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = -1 WHERE `GameObjectEntry` IN (184839, 194328, 194956, 190363, 194326, 194329, 194330); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 17538 WHERE `GameObjectEntry` IN (147077, 147076, 147075, 180609, 180610, 180611, 184633, 188216, 190217); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 11159 WHERE `GameObjectEntry` IN (2563, 3200, 150080, 151951, 174596, 177491, 178609, 178645, 178647, 178649, 178671, 178745, 178746, 179665, 180050, 180051, 180052, 180797, 181578, 184378, 184691, 184830, 185574, 126342, 142976, 142977, 142978, 142979, 142980, 177325, 177396, 178667, 178668, 178669, 178805, 178924, 180715, 180719, 180743, 180746, 180747, 180748, 180793, 180796, 180798, 180799, 180844, 184561, 185926, 187193, 187235, 185520, 180024, 185582, 180654, 187567, 187194, 188444, 187236, 193960, 194159, 193967, 193426, 194789, 194324, 192265, 194462, 194338, 194339, 194821, 191179, 181853, 194325, 195669); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 11403 WHERE `GameObjectEntry` IN (1989, 1990, 73941, 102413, 153468, 164881, 174602, 174608, 174610, 175075, 176157, 176306, 179547, 180755, 180756, 180757, 180759, 180760, 180761, 180762, 180763, 180764, 180767, 180769, 180770, 180772, 180773, 180774, 180775, 180776, 180777, 180778, 180868, 180869, 180870, 180871, 180872, 180873, 180878, 180879, 180880, 180881, 180882, 180883, 180885, 181014, 181015, 181016, 181017, 181018, 181019, 181020, 181022, 181025, 181055, 181060, 183983, 140360, 175076, 178725, 180758, 180765, 180857, 180874, 180875, 180884, 180888, 180909, 180910, 181027, 182259, 185916, 165587, 191300, 190678, 190792, 192517, 187575, 187668, 200300, 200332, 200333, 200334, 200335, 200336, 200337, 200338, 201289, 201752, 201778, 201906, 201940, 202105, 201716, 202169); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 11723 WHERE `GameObjectEntry` IN (33, 34, 35, 331, 333, 334, 965, 1165, 1557, 1599, 1604, 1605, 1607, 1609, 1610, 1729, 1730, 1740, 1760, 1836, 1838, 1840, 1844, 1868, 1898, 1926, 1997, 1999, 2004, 2061, 2066, 2667, 2704, 2711, 2741, 2743, 2846, 2867, 2904, 180653, 3890, 3899, 3909, 3911, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 4406, 6752, 7510, 7923, 9630, 10076, 17157, 17183, 18342, 18343, 18596, 18603, 19024, 19025, 19027, 19534, 19538, 19539, 19540, 19549, 19552, 19586, 19596, 19599, 19862, 19875, 19878, 19879, 19901, 20850, 20870, 20881, 20939, 20985, 20989, 21004, 21053, 21054, 21055, 21056, 21069, 21070, 21071, 21072, 21088, 21089, 21128, 21308, 22229, 22230, 22231, 22234, 22248, 22253, 22257, 26482, 31442, 31511, 32372, 32882, 32883, 32884, 35251, 35252, 36645, 48521, 48543, 48568, 48569, 48571, 48572, 48574, 48575, 61929, 74138, 74146, 90567, 92065, 92252, 92388, 92420, 102988, 102991, 102992, 102993, 102994, 102995, 103003, 103815, 109515, 111148, 112192, 112888, 113529, 113531, 113769, 113771, 124388, 124389, 126260, 130358, 136945, 136946, 138496, 138497, 140105, 141069, 141859, 141980, 141981, 142127, 142179, 142194, 142345, 144180, 144181, 147435, 148513, 148514, 148515, 148731, 148732, 148734, 148737, 148738, 148740, 148744, 148745, 148766, 148838, 148883, 148937, 148976, 148996, 148997, 148998, 149020, 149022, 149047, 149410, 149420, 149480, 149481, 149482, 149483, 150086, 150140, 151286, 152098, 153123, 153205, 153359, 153360, 153463, 153577, 160839, 161456, 161487, 161489, 164690, 164758, 164820, 164824, 164826, 164827, 164888, 164890, 164891, 164927, 165559, 167285, 167286, 167291, 171648, 171649, 171939, 173266, 173326, 174604, 174606, 174614, 174615, 174684, 174686, 174708, 174714, 175227, 175264, 175336, 175487, 175488, 175571, 175584, 175589, 175704, 175707, 175765, 175766, 175767, 175889, 175890, 175925, 176091, 176158, 176159, 176161, 176165, 176184, 176188, 176191, 176198, 176206, 176225, 176226, 176230, 176274, 176280, 176283, 176284, 176288, 176289, 176356, 176511, 176513, 176514, 176515, 176634, 176784, 176809, 176810, 176811, 176812, 176813, 176814, 176815, 176816, 176817, 176818, 176819, 176820, 176821, 176822, 176823, 176824, 176825, 176826, 176827, 176828, 176829, 176830, 176831, 176832, 176833, 176834, 176835, 176836, 176837, 176838, 176839, 176840, 176841, 176842, 176908, 176909, 176910, 176911, 176912, 176913, 176914, 176915, 176916, 176917, 176918, 176919, 176920, 176921, 176922, 177239, 177240, 177259, 177526, 177527, 177586, 177624, 177644, 177665, 177667, 177673, 177675, 177677, 177684, 177705, 177724, 177725, 177727, 177784, 177786, 177787, 177985, 178205, 178207, 178227, 178228, 178325, 178444, 180651, 180652, 178670, 179086, 179286, 179485, 179491, 179498, 179499, 179501, 179511, 179516, 179517, 179544, 179548, 179551, 179563, 179564, 179565, 179667, 179757, 179767, 179828, 179910, 179915, 180056, 180510, 180511, 180515, 180516, 180598, 180647, 180660, 180679, 180680, 180681, 180690, 180691, 180855, 181068, 181069, 181133, 181138, 181139, 181140, 181146, 181148, 181150, 181152, 181238, 181239, 181248, 181249, 181251, 181252, 181313, 181314, 181315, 181316, 181317, 181320, 181321, 181322, 181323, 181328, 181350, 181351, 181359, 181379, 181445, 181489, 181495, 181608, 181652, 181665, 181670, 181674, 181675, 181746, 181755, 181756, 181758, 181769, 181776, 181777, 181778, 181779, 181780, 181782, 181806, 181829, 181841, 181851, 181863, 181864, 181865, 181866, 181867, 181868, 181869, 181887, 181888, 181893, 181894, 181897, 181898, 181917, 181920, 181936, 181937, 181947, 181948, 181949, 181950, 181951, 181952, 181953, 181956, 181964, 181967, 181968, 181991, 181992, 181993, 181994, 181995, 181996, 181997, 181998, 181999, 182000, 182001, 182002, 182015, 182016, 182017, 182018, 182019, 182020, 182021, 182022, 182023, 182026, 182027, 182028, 182029, 182032, 182211, 182212, 182215, 182216, 182217, 182218, 182219, 182220, 182532, 182533, 182650, 182654, 182655, 182656, 182657, 182658, 182659, 182660, 182666, 182667, 182671, 182879, 182880, 182905, 182906, 182907, 182908, 182909, 182910, 182911, 182912, 182913, 182914, 182915, 182916, 182917, 182918, 182919, 182920, 182921, 182960, 182961, 182963, 182966, 183096, 183442, 183496, 183812, 183847, 184056, 184108, 184145, 184273, 184384, 184385, 184386, 184387, 184388, 184389, 184390, 184391, 184392, 184408, 184409, 184410, 184411, 184412, 184442, 184490, 184582, 184634, 184635, 184636, 184637, 184638, 184639, 184653, 184683, 184684, 184700, 184738, 184747, 184753, 184795, 184796, 184797, 184801, 184850, 184926, 184928, 184947, 184949, 184979, 185034, 185040, 185041, 185042, 185043, 185044, 185045, 185046, 185047, 185057, 185058, 185059, 185060, 185061, 185085, 185086, 185087, 185098, 185102, 185125, 185126, 185127, 185128, 185130, 185146, 185182, 185233, 185898, 185562, 185564, 185567, 185569, 185577, 185578, 185579, 185658, 185668, 185670, 185671, 185700, 185701, 185702, 185703, 185724, 185725, 185726, 185727, 185728, 185729, 185730, 185731, 185732, 185733, 185734, 185735, 185736, 185737, 185738, 185739, 185740, 185741, 185742, 185743, 185744, 185745, 185746, 185747, 185748, 185749, 185750, 185751, 185764, 185765, 185766, 185767, 185788, 185789, 185790, 185791, 185792, 185793, 185794, 185795, 185796, 185797, 185798, 185799, 185800, 185801, 185802, 185803, 185804, 185805, 185806, 185807, 185808, 185809, 185810, 185811, 185812, 185813, 185814, 185815, 185816, 185817, 185818, 185819, 185820, 185821, 185822, 185823, 185824, 185825, 185826, 185827, 185828, 185829, 185830, 185831, 185834, 185835, 185872, 185873, 185874, 185875, 185932, 185933, 185934, 185937, 1667, 1700, 1701, 1702, 1703, 1704, 1834, 1841, 1845, 1846, 1847, 1848, 1876, 1878, 1879, 1883, 1884, 1917, 2056, 3852, 3853, 3855, 3856, 3895, 3896, 3897, 3903, 3904, 3907, 3910, 18069, 18344, 18345, 20878, 20921, 20922, 20964, 92140, 92142, 112012, 142974, 170035, 170036, 170037, 170038, 170039, 170040, 170041, 170042, 170043, 170044, 170045, 170046, 174846, 174847, 176319, 176609, 176610, 176611, 176612, 179985, 1803, 1804, 1864, 1866, 1867, 1869, 1880, 1881, 1882, 1894, 1895, 1905, 1921, 1922, 1923, 1971, 2003, 2054, 2665, 3222, 3223, 3310, 3636, 3637, 3638, 3639, 3770, 6288, 20692, 20693, 20879, 20924, 20960, 22250, 22251, 22254, 22255, 22258, 22259, 22260, 22261, 22262, 37051, 37089, 37090, 37091, 37092, 37093, 37094, 37095, 37096, 38028, 38030, 40197, 48441, 48449, 51681, 55535, 74077, 103749, 103770, 103771, 103772, 112194, 112195, 112196, 112197, 112198, 112199, 112202, 112216, 112217, 112223, 113540, 141610, 141611, 142121, 142123, 142124, 142690, 143397, 147436, 147437, 147438, 147439, 147440, 147441, 147442, 147443, 147444, 147445, 147446, 147447, 147448, 147449, 147450, 148666, 148672, 148673, 148676, 148679, 148681, 148685, 148687, 148688, 148689, 149017, 149018, 150081, 150713, 152324, 153399, 153482, 164728, 164818, 171619, 171622, 174882, 174883, 174884, 174885, 174886, 174887, 174888, 174889, 174890, 174891, 174892, 174893, 174894, 174895, 174896, 174897, 174898, 174899, 174900, 174901, 174902, 174903, 174904, 174905, 174906, 174907, 174908, 174909, 174910, 174911, 174934, 174935, 174936, 174937, 174938, 174939, 174940, 174941, 174942, 174945, 175233, 176166, 176267, 176268, 176271, 176273, 176287, 176291, 176293, 176305, 176885, 176891, 176999, 177146, 177147, 177148, 177149, 177257, 177258, 177275, 177276, 177368, 177844, 179307, 179308, 179504, 179505, 179507, 179508, 179748, 179749, 179750, 179751, 179752, 179753, 179754, 179755, 179756, 179758, 179759, 179760, 179761, 179762, 179763, 179764, 179765, 179766, 179768, 179769, 179770, 179771, 179945, 180105, 180124, 180346, 180367, 180418, 180443, 180454, 180604, 180606, 180607, 180608, 180619, 180620, 180642, 180718, 180745, 180795, 180850, 180854, 180860, 180861, 180864, 180865, 181012, 181013, 181109, 181327, 181352, 181356, 181357, 181362, 181640, 181965, 181988, 182063, 182088, 182091, 182607, 183443, 183494, 183495, 184568, 184658, 185117, 185118, 185169, 185541, 185965, 113770, 113768, 185939, 185052, 185053, 185051, 185054, 184329, 184327, 184326, 184328, 184069, 184325, 184596, 184597, 184324, 184697, 184956, 185673, 185672, 185698, 185697, 185704, 185706, 185665, 185707, 185699, 185696, 185666, 185674, 185705, 185522, 185519, 185893, 181832, 185659, 185657, 185669, 185694, 185692, 185656, 185693, 185695, 185675, 185663, 185660, 185661, 185662, 185664, 185667, 185455, 186482, 186338, 185454, 185438, 186648, 187377, 186733, 186272, 186322, 186418, 186465, 180863, 181053, 186469, 186425, 186288, 186315, 187379, 187378, 186667, 186658, 186739, 186430, 186671, 187380, 186672, 186623, 187021, 187084, 186633, 186634, 185907, 188048, 188050, 187929, 187961, 187948, 187970, 187975, 187930, 188152, 187947, 188478, 190396, 190394, 187916, 187920, 187924, 187931, 187936, 187940, 187988, 187989, 188049, 188137, 188138, 187244, 187249, 188460, 190182, 190184, 190186, 190187, 190551, 190837, 191085, 191346, 191510, 191774, 191775, 191776, 192693, 193272, 188265, 188270, 188271, 192472, 192476, 186404, 186444, 186445, 186446, 186466, 186467, 186468, 186806, 187105, 187189, 187250, 187251, 187383, 187384, 187385, 187386, 187679, 187771, 187981, 188066, 188367, 188434, 188450, 188462, 188504, 189305, 189330, 189970, 190336, 190337, 190338, 190339, 190340, 190341, 190342, 190354, 190510, 190514, 190523, 190539, 190656, 190732, 190736, 190737, 190738, 190812, 190813, 190815, 190835, 190838, 190839, 190840, 190841, 190948, 190949, 191458, 191778, 191779, 191789, 191791, 192243, 192261, 192451, 192505, 192506, 192538, 193207, 193407, 193409, 193410, 193411, 193412, 193413, 193420, 193560, 193948, 193955, 193956, 187680, 193975, 193206, 193216, 193217, 193219, 193218, 193215, 193425, 193447, 193440, 193449, 193450, 193451, 193452, 193453, 193454, 193455, 193441, 193442, 193443, 193444, 193445, 193446, 193448, 193427, 193456, 193629, 193628, 193414, 193415, 194004, 194002, 190718, 190707, 190719, 190717, 192612, 190814, 191842, 192075, 192525, 191841, 191794, 192558, 192917, 192127, 193794, 193941, 192257, 192132, 193973, 192262, 191579, 193092, 187451, 192258, 191147, 187077, 194543, 194519, 194555, 192786, 2884, 194628, 184955, 192259, 195632, 192492, 195574, 195318, 201367, 201368, 195573, 201388, 193635, 193692, 193654, 193634, 193640, 193647, 193682, 193632, 193655, 193663, 193673, 193683, 193693, 193694, 193630, 193695, 193659, 193661, 193662, 193644, 193645, 193651, 193652, 193653, 193656, 193657, 193658, 193688, 193689, 193690, 193684, 193686, 193672, 193677, 193685, 193638, 193631, 193639, 193666, 193687, 193680, 193681, 193650, 193660, 193667, 193691, 193633, 193678, 193671, 193674, 193675, 193676, 193646, 193648, 193649, 193636, 193664, 193665, 193679, 193637, 193642, 193643, 193668, 193669, 193670, 193641, 193961, 194123, 195671, 202180, 202212, 179832, 194935, 195670, 21145, 21146, 21147, 21148, 180713, 201872, 194047, 202275, 195116, 188076, 185871, 202080, 187967, 188143, 188144, 190682, 191320, 180687, 187917, 187937, 187941, 187942, 187949, 187962, 188153, 188154, 188187, 185581, 187919, 187935, 187955, 187960, 193590, 193591, 193592, 193593, 193594, 194036, 194040, 194048, 194049, 201718, 201794, 201797, 201844, 201922, 201937); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = -18019 WHERE `GameObjectEntry` IN (22713, 22714, 22715, 22721, 22716, 22731, 22730, 22729, 22728, 22726, 22725, 22723, 22722, 22717, 22724, 22877, 32566, 32565, 32564, 32563, 32562, 31506, 31505, 29779, 29778, 29739, 29738, 29737, 29736, 29735, 29734, 29733, 29732, 29731, 29730, 29729, 29728, 29727, 29726, 29725, 29724, 29723, 29722, 29721, 29720, 29719, 29718, 29698, 29160, 29159, 29158, 29157, 29156, 29153, 28068, 28067, 22907, 22906, 22905, 22903, 22901, 22900, 22899, 22898, 22897, 22896, 22895, 22893, 22892, 22891, 22890, 22889, 22888, 22878, 22876, 22875, 22874, 22873, 22872, 22871, 22870, 22869, 22868, 22867, 22866, 22862, 22861, 22859, 22857, 22851, 22850, 22848, 22847, 22846, 22845, 22844, 22843, 22842, 22841, 22840, 22839, 22838, 22837, 22793, 22792, 22791, 22790, 22789, 22787, 22786, 22784, 22781, 22780, 22779, 22778, 22720, 22718, 22702, 22701, 22700, 22699, 22698, 22697, 22696, 22695, 22694, 22788, 22782, 22693, 187854, 187855, 187856, 187857, 187858, 187859, 187860, 187862, 187863, 187864, 187865, 187866, 187867, 187868, 187870, 187871, 187872, 187873, 187874, 187861, 22692, 22691, 22690, 22689, 22688, 22687, 22686, 22683, 22682, 22681, 22678, 22677, 22637, 22636, 22635, 22634, 22633, 22632, 22631, 22630, 22629, 22628, 22627, 22626, 22625, 22624, 22620, 22611, 22610, 22609, 22608, 22607, 22586, 22583, 22574, 22573, 22572, 22571, 22570, 20668, 19867, 19866, 19838, 19837, 19836, 19835, 19834, 19832, 16395, 13948, 3687, 3275, 3274, 3272, 3271, 3218, 2903, 275, 2873, 2865, 2864, 2863, 2862, 2861, 2699, 2698, 2697, 2696, 2694, 2693, 2692, 2531, 32567, 32568, 33360, 35758, 37200, 48797, 2705, 2686, 1670, 1603, 22703, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3858, 3859, 3860, 3861, 3863, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3961, 3965, 3966, 21270, 21271, 21752, 20919, 32575, 32576, 32577, 32586, 32587, 32588, 32589, 56817, 60967, 60968, 60969, 60970, 60971, 102414, 103629, 103660, 103708, 103819, 107044, 107045, 107046, 107047, 142171, 142180, 142700, 142716, 143381, 144013, 144051, 144052, 144056, 144569, 146087, 147278, 147280, 147281, 147524, 147538, 147784, 147785, 147788, 147789, 147790, 147791, 147794, 147795, 147796, 147797, 147798, 147799, 147816, 147817, 148422, 148501, 152598, 152604, 152605, 152606, 160464, 161483, 161484, 161519, 161520, 164724, 164738, 164799, 164892, 165678, 165760, 166807, 172619, 174824, 174825, 174952, 175295, 175296, 175297, 175299, 175301, 175309, 175333, 175337, 175338, 175371, 175585, 176088, 176094, 176096, 176097, 176111, 176118, 176119, 176120, 176121, 176122, 176123, 176124, 176125, 176126, 176127, 176128, 176129, 176130, 176131, 176132, 176133, 176134, 176135, 176136, 176137, 176138, 176139, 176140, 176141, 176193, 176453, 176512, 176563, 176564, 176565, 177232, 177306, 177344, 177492, 177528, 177584, 177666, 177744, 177745, 177748, 177788, 178206, 178225, 178405, 178439, 178546, 178548, 178550, 178604, 178606, 178608, 178672, 178704, 178706, 178708, 178709, 178710, 178712, 178713, 178727, 178728, 178729, 178907, 179145, 179146, 179165, 179166, 179167, 179398, 179399, 179400, 179401, 179402, 179403, 179404, 179417, 179675, 179677, 179701, 179746, 180204, 180205, 180343, 180375, 180504, 180505, 180506, 180659, 180673, 180867, 181046, 181047, 181048, 181049, 181050, 181052, 181059, 181094, 181096, 181113, 181164, 181371, 181377, 181479, 181601, 181630, 181648, 181743, 181781, 181958, 181960, 182074, 182108, 182140, 182141, 182142, 182143, 182176, 182187, 182188, 182368, 182530, 182816, 182974, 182975, 182976, 182977, 182978, 182979, 182980, 182993, 183000, 183012, 183016, 183019, 183144, 183307, 183434, 183451, 183452, 183453, 183462, 183463, 183464, 183982, 184002, 184079, 184162, 184288, 184353, 184363, 184365, 184379, 184457, 184562, 184606, 184609, 184642, 184643, 184704, 184746, 184817, 184820, 184823, 184826, 184829, 184841, 184907, 184911, 184929, 184943, 184951, 184997, 185020, 185135, 185140, 185141, 185142, 185143, 185144, 185207, 185215, 185293, 185295, 185299, 185306, 185307, 185310, 185311, 185323, 185880, 185902, 186249, 186299, 186310, 186323, 186324, 186336, 186424, 186464, 186484, 186487, 186599, 186613, 186624, 186846, 186847, 186853, 186928, 186952, 186959, 186982, 187076, 187081, 187107, 187108, 187232, 187330, 187331, 187382, 187458, 187666, 187681, 187705, 187706, 187763, 187800, 187849, 187893, 187894, 187904, 188011, 188019, 188052, 188053, 188054, 188055, 188086, 188105, 188155, 188161, 188175, 188358, 188369, 188420, 188510, 188564, 188660, 188661, 188662, 188664, 188672, 188679, 188690, 188694, 188698, 188707, 188708, 189331, 189541, 189612, 189613, 189624, 189625, 189626, 189627, 189628, 189629, 189845, 189846, 189901, 189902, 189928, 189929, 189984, 190033, 190154, 190155, 190202, 190224, 190364, 190499, 190501, 190545, 190642, 190648, 190649, 190650, 190651, 190652, 190708, 190739, 190781, 190782, 190916, 191122, 191124, 191141, 191192, 191233, 191522, 191823, 192011, 192165, 192462, 192535, 192540, 192560, 193004, 193090, 193387, 193580, 193788, 193947, 193993, 194241, 194291, 194425, 195328, 195329, 195330, 201590, 201796, 60972, 60973, 60974, 60975, 60976, 60977, 60978, 60979, 60980, 60981, 60982, 60983, 60984, 60985, 60986, 60987, 60988, 60989, 60990, 60991, 60992, 60993, 60994, 60995, 60996, 60997, 60998, 60999, 61000, 61001, 61002, 61003, 61004, 61005, 61006, 61007, 61008, 61009, 61010, 61011, 61012, 61013, 61014, 61015, 61016, 61017, 61018, 61019, 61020, 61021, 61022, 61023, 61024, 61025, 61026, 61027, 61028, 61029, 61030, 61031, 61032, 61033, 61034, 64855, 67239, 69420, 103573, 111208, 111209, 111210, 111211, 111213, 111214, 111218, 111219, 111263, 111264, 111267, 111270, 111272, 111273, 111274, 111275, 111276, 111277, 111278, 111279, 111952, 111953, 111954, 111955, 111956, 111960, 111961, 111962, 111963, 111966, 111967, 111970, 111971, 111975, 111980, 111982, 111983, 111984, 112001, 112003, 112004, 112005, 112006, 112008, 112010, 112011, 112013, 112021, 112022, 112025, 112031, 112032, 112034, 112038, 112075, 112076, 112080, 112081, 112101, 112102, 112103, 112105, 112108, 112109, 112110, 112111, 112116, 112117, 112119, 112121, 112125, 112126, 112130, 112131, 112134, 112135, 112151, 112152, 112155, 112156, 112157, 112158, 112159, 112161, 112162, 112165, 112169, 112170, 112171, 112172, 112174, 112175, 112176, 112180, 112242, 112243, 112244, 112245, 112247, 112248, 112250, 112251, 112253, 112254, 112255, 112256, 112257, 112258, 112259, 112262, 112263, 112265, 112266, 112269, 112271, 112272, 112273, 112274, 112275, 112278, 112280, 112281, 112282, 112292, 112293, 112294, 112295, 112296, 112299, 112300, 112313, 112323, 112324, 112326, 112328, 112330, 112331, 112332, 113530, 113532, 132834, 136924, 138494, 138495, 138605, 138606, 138607, 138608, 138609, 138610, 138611, 138612, 138613, 140371, 140907, 141075, 142011, 142012, 142032, 142033, 142074, 142080, 142203, 143198, 143219, 143220, 143231, 147818, 147819, 147820, 147822, 148502, 148518, 148520, 148521, 148522, 148524, 148525, 148526, 148527, 148530, 148531, 148533, 148534, 148537, 148539, 148542, 148543, 148546, 148548, 148553, 148558, 148559, 148562, 148564, 148565, 148566, 148568, 148570, 148571, 148584, 148588, 148590, 148592, 148593, 148594, 148595, 148596, 148597, 148598, 148599, 148601, 148602, 148603, 148604, 148607, 148608, 148609, 148610, 148611, 148613, 148614, 148615, 148616, 148617, 148618, 148619, 148620, 148621, 148623, 148624, 148625, 148626, 148627, 148628, 148630, 148631, 148632, 148633, 148634, 148645, 148829, 150139, 152079, 153191, 153192, 153193, 153219, 153222, 153223, 153224, 153236, 153237, 153238, 153452, 153456, 153588, 160465, 160841, 160843, 160854, 160855, 160856, 160857, 160858, 160859, 160860, 160861, 160862, 160863, 160864, 160865, 161512, 161558, 164727, 164782, 164841, 164878, 165547, 165548, 165579, 166806, 169994, 169995, 170003, 170004, 170005, 170006, 170007, 170008, 170009, 170010, 170011, 170012, 170013, 170014, 170015, 170016, 170017, 170018, 170019, 170020, 170021, 170022, 170023, 170024, 170025, 170026, 170027, 170028, 170029, 170030, 170031, 170032, 170051, 170052, 170069, 170070, 170071, 170072, 170074, 170352, 171844, 171924, 174681, 174688, 174689, 174690, 174691, 174692, 174693, 174694, 174695, 174696, 174697, 174784, 174785, 174786, 174787, 174788, 174789, 174790, 174791, 174844, 174845, 174850, 174851, 174853, 174854, 174855, 174856, 174928, 174929, 174930, 174931, 174970, 174971, 174972, 174973, 174990, 174991, 174992, 174993, 174999, 175000, 175031, 175032, 175033, 175034, 175035, 175036, 175037, 175038, 175039, 175040, 175041, 175042, 175043, 175044, 175047, 175048, 175049, 175050, 175051, 175052, 175053, 175054, 175055, 175056, 175057, 175058, 175059, 175060, 175061, 175062, 175063, 175064, 175067, 175068, 175069, 175070, 175152, 175175, 175176, 175303, 175304, 175339, 175340, 175341, 175342, 175343, 175344, 175345, 175346, 175347, 175348, 175349, 175538, 175728, 175755, 175768, 175769, 175783, 175790, 176366, 176585, 176593, 177230, 177282, 177465, 177487, 177488, 177489, 177545, 177546, 177547, 177548, 177676, 177680, 177944, 178086, 178305, 178344, 178387, 178392, 178552, 178555, 178624, 178648, 178787, 179168, 179169, 179170, 179171, 179172, 179173, 179174, 179175, 179176, 179177, 179178, 179179, 179180, 179181, 179182, 179183, 179184, 179185, 179186, 179187, 179188, 179189, 179190, 179191, 179192, 179193, 179194, 179195, 179196, 179197, 179198, 179199, 179200, 179201, 179202, 179203, 179204, 179205, 179206, 179207, 179208, 179209, 179210, 179211, 179212, 179213, 179214, 179215, 179216, 179217, 179218, 179219, 179220, 179221, 179405, 179406, 179407, 179408, 179409, 179410, 179411, 179412, 179413, 179414, 179415, 179416, 179480, 179524, 179678, 179679, 179680, 179683, 179684, 179685, 179689, 179691, 179692, 179705, 179772, 179773, 179774, 179775, 179776, 179777, 179829, 179868, 179869, 179870, 179894, 179966, 179971, 179974, 180027, 180028, 180033, 180054, 180084, 180586, 180587, 180588, 180589, 180590, 180591, 180592, 180593, 180594, 180595, 180596, 180597, 180599, 180641, 180672, 180697, 180701, 180705, 180706, 180709, 180710, 180787, 180906, 181023, 181026, 181028, 181070, 181114, 181118, 181128, 181129, 181141, 181149, 181226, 181237, 181244, 181245, 181246, 181258, 181289, 181309, 181364, 181497, 181502, 181503, 181504, 181505, 181506, 181507, 181508, 181509, 181571, 181623, 181641, 181642, 181739, 181744, 181747, 181751, 181772, 181850, 181881, 181911, 181919, 182025, 182036, 182057, 182087, 182099, 182111, 182112, 182120, 182163, 182186, 182254, 182255, 182366, 182403, 182404, 182453, 182454, 182455, 182456, 182457, 182458, 182459, 182460, 182461, 182462, 182463, 182464, 182465, 182466, 182467, 182468, 182469, 182470, 182471, 182472, 182473, 182474, 182475, 182476, 182477, 182478, 182479, 182480, 182481, 182482, 182531, 182590, 182792, 182793, 182855, 182981, 182982, 182983, 182984, 182985, 182986, 182987, 182988, 182989, 182990, 182991, 182992, 182995, 182996, 182997, 182998, 182999, 183001, 183002, 183003, 183004, 183011, 183013, 183014, 183015, 183017, 183018, 183020, 183021, 183100, 183102, 183106, 183156, 183283, 183308, 183309, 183310, 183311, 183312, 183328, 183352, 183353, 183354, 183387, 183388, 183389, 183400, 183405, 183440, 183448, 183505, 183506, 183508, 183509, 183765, 183766, 183769, 183851, 183969, 184282, 184283, 184413, 184432, 184441, 184452, 184464, 184479, 184480, 184481, 184482, 184483, 184484, 184485, 184486, 184487, 184592, 184593, 184610, 184623, 184690, 184695, 184696, 184703, 184723, 184754, 184755, 184756, 184757, 184758, 184759, 184760, 184761, 184762, 184763, 184764, 184765, 184766, 184767, 184768, 184769, 184770, 184771, 184772, 184773, 184774, 184775, 184776, 184777, 184778, 184779, 184780, 184781, 184782, 184783, 184784, 184785, 184786, 184787, 184788, 184789, 184790, 184791, 184792, 184805, 184806, 184824, 184831, 184832, 184845, 184854, 184855, 184856, 184857, 184861, 184864, 184865, 184866, 184905, 184924, 184942, 185001, 185002, 185003, 185016, 185017, 185021, 185022, 185171, 185176, 185187, 185188, 185189, 185291, 185308, 185312, 185326, 185327, 185328, 185329, 185330, 185331, 185332, 185333, 185334, 185335, 185336, 185337, 185338, 185339, 185340, 185341, 185342, 185343, 185344, 185345, 185346, 185347, 185348, 185349, 185350, 185351, 185352, 185353, 185354, 185355, 185356, 185357, 185358, 185359, 185360, 185361, 185362, 185363, 185364, 185365, 185366, 185367, 185368, 185369, 185370, 185371, 185372, 185373, 185374, 185375, 185376, 185377, 185378, 185379, 185380, 185381, 185382, 185383, 185384, 185385, 185386, 185387, 185388, 185389, 185390, 185391, 185392, 185393, 185468, 185469, 185470, 185496, 185542, 185546, 185552, 185586, 185587, 185588, 185589, 185594, 185864, 185865, 185866, 185867, 185868, 185869, 185870, 185895, 185910, 185925, 185966, 186150, 186151, 186159, 186219, 186222, 186223, 186239, 186246, 186247, 186254, 186281, 186282, 186289, 186290, 186291, 186292, 186293, 186294, 186295, 186296, 186297, 186298, 186316, 186396, 186489, 186561, 186597, 186606, 186621, 186655, 186673, 186674, 186675, 186676, 186721, 186722, 186723, 186724, 186725, 186742, 186743, 186746, 186747, 186749, 186829, 186848, 186849, 186854, 186855, 186856, 186857, 186941, 186945, 186973, 186974, 186975, 186983, 187031, 187079, 187083, 187109, 187118, 187190, 187233, 187234, 187262, 187263, 187289, 187293, 187332, 187336, 187340, 187342, 187391, 187429, 187430, 187445, 187472, 187473, 187474, 187475, 187476, 187477, 187478, 187479, 187480, 187481, 187482, 187483, 187484, 187485, 187486, 187487, 187488, 187489, 187490, 187491, 187492, 187493, 187494, 187495, 187496, 187497, 187566, 187657, 187678, 187688, 187691, 187692, 187696, 187702, 187718, 187775, 187776, 187777, 187778, 187779, 187780, 187781, 187782, 187783, 187784, 187785, 187786, 187787, 187788, 187789, 187790, 187791, 187792, 187793, 187794, 187795, 187796, 187797, 187798, 187799, 187801, 187802, 187803, 187804, 187805, 187806, 187807, 187808, 187809, 187810, 187811, 187812, 187813, 187814, 187815, 187816, 187817, 187818, 187819, 187820, 187821, 187822, 187823, 187824, 187825, 187826, 187827, 187828, 187829, 187830, 187831, 187832, 187833, 187834, 187835, 187836, 187837, 187838, 187839, 187840, 187841, 187842, 187843, 187844, 187845, 187846, 187847, 187848, 187890, 187910, 187911, 187976, 187977, 188051, 188056, 188057, 188058, 188059, 188060, 188061, 188062, 188068, 188070, 188096, 188158, 188159, 188162, 188179, 188180, 188181, 188182, 188183, 188184, 188185, 188189, 188190, 188217, 188218, 188219, 188220, 188221, 188222, 188223, 188224, 188225, 188226, 188228, 188232, 188233, 188234, 188235, 188340, 188341, 188343, 188429, 188430, 188433, 188436, 188437, 188438, 188439, 188440, 188447, 188449, 188466, 188467, 188468, 188484, 188513, 188520, 188536, 188555, 188558, 188559, 188589, 188592, 188597, 188598, 188638, 188639, 188640, 188641, 188642, 188643, 188644, 188645, 188654, 188696, 188701, 188704, 188709, 188752, 188753, 189050, 189314, 189332, 189333, 189334, 189335, 189336, 189337, 189338, 189339, 189340, 189341, 189342, 189343, 189344, 189345, 189346, 189347, 189348, 189349, 189350, 189351, 189352, 189353, 189354, 189355, 189356, 189357, 189358, 189359, 189360, 189361, 189362, 189363, 189364, 189365, 189366, 189367, 189368, 189369, 189370, 189371, 189372, 189373, 189374, 189375, 189376, 189377, 189378, 189379, 189380, 189381, 189382, 189383, 189384, 189385, 189386, 189387, 189388, 189389, 189390, 189391, 189392, 189393, 189394, 189395, 189396, 189397, 189398, 189399, 189400, 189401, 189402, 189403, 189404, 189405, 189406, 189407, 189408, 189409, 189410, 189411, 189412, 189413, 189414, 189415, 189416, 189417, 189418, 189419, 189420, 189421, 189422, 189423, 189424, 189425, 189426, 189427, 189428, 189429, 189430, 189431, 189432, 189433, 189434, 189435, 189436, 189437, 189438, 189439, 189440, 189441, 189442, 189443, 189444, 189445, 189446, 189447, 189448, 189449, 189450, 189451, 189452, 189453, 189454, 189455, 189456, 189457, 189458, 189459, 189460, 189461, 189462, 189463, 189464, 189465, 189466, 189467, 189468, 189469, 189470, 189471, 189472, 189473, 189474, 189475, 189476, 189477, 189478, 189479, 189480, 189481, 189482, 189483, 189484, 189485, 189486, 189487, 189488, 189489, 189490, 189491, 189492, 189493, 189494, 189495, 189496, 189497, 189498, 189499, 189500, 189501, 189502, 189503, 189504, 189505, 189506, 189507, 189508, 189509, 189510, 189511, 189512, 189513, 189514, 189515, 189516, 189517, 189518, 189519, 189520, 189521, 189522, 189523, 189524, 189525, 189526, 189527, 189528, 189529, 189530, 189531, 189532, 189533, 189534, 189535, 189536, 189537, 189538, 189539, 189540, 189542, 189543, 189544, 189545, 189546, 189547, 189548, 189549, 189550, 189551, 189552, 189553, 189554, 189555, 189556, 189557, 189558, 189559, 189560, 189561, 189562, 189563, 189564, 189565, 189566, 189567, 189568, 189569, 189570, 189571, 189572, 189573, 189574, 189575, 189576, 189577, 189578, 189579, 189580, 189581, 189582, 189583, 189584, 189585, 189586, 189587, 189588, 189589, 189590, 189591, 189592, 189593, 189594, 189595, 189596, 189597, 189598, 189599, 189600, 189601, 189602, 189603, 189604, 189605, 189606, 189607, 189608, 189609, 189610, 189611, 189614, 189615, 189616, 189617, 189618, 189619, 189620, 189621, 189622, 189623, 189630, 189631, 189632, 189633, 189634, 189635, 189636, 189637, 189638, 189639, 189640, 189641, 189642, 189643, 189644, 189645, 189646, 189647, 189648, 189649, 189650, 189651, 189652, 189653, 189654, 189655, 189656, 189657, 189658, 189659, 189660, 189661, 189662, 189663, 189664, 189665, 189666, 189667, 189668, 189669, 189670, 189671, 189672, 189673, 189674, 189675, 189676, 189677, 189678, 189679, 189680, 189681, 189682, 189683, 189684, 189685, 189686, 189687, 189688, 189689, 189690, 189691, 189692, 189693, 189694, 189695, 189696, 189697, 189698, 189699, 189700, 189701, 189702, 189703, 189704, 189705, 189706, 189707, 189708, 189709, 189710, 189711, 189712, 189713, 189714, 189715, 189716, 189717, 189718, 189719, 189720, 189721, 189722, 189723, 189724, 189725, 189726, 189727, 189728, 189729, 189730, 189731, 189732, 189733, 189734, 189735, 189736, 189737, 189738, 189739, 189740, 189741, 189742, 189743, 189744, 189745, 189746, 189747, 189748, 189749, 189750, 189751, 189752, 189753, 189754, 189755, 189756, 189757, 189758, 189759, 189760, 189761, 189762, 189763, 189764, 189765, 189766, 189767, 189768, 189769, 189770, 189771, 189772, 189773, 189774, 189775, 189776, 189777, 189778, 189779, 189780, 189781, 189782, 189783, 189784, 189785, 189786, 189787, 189788, 189789, 189790, 189791, 189792, 189793, 189794, 189795, 189796, 189797, 189798, 189799, 189800, 189801, 189802, 189803, 189804, 189805, 189806, 189807, 189808, 189809, 189810, 189811, 189812, 189813, 189814, 189815, 189816, 189817, 189818, 189819, 189820, 189821, 189822, 189823, 189824, 189825, 189826, 189827, 189828, 189829, 189830, 189831, 189832, 189833, 189834, 189835, 189836, 189837, 189838, 189839, 189840, 189841, 189842, 189843, 189844, 189847, 189848, 189849, 189850, 189851, 189852, 189853, 189854, 189855, 189856, 189857, 189858, 189859, 189860, 189861, 189862, 189863, 189864, 189865, 189866, 189867, 189868, 189869, 189870, 189871, 189872, 189873, 189874, 189875, 189876, 189877, 189878, 189879, 189880, 189881, 189882, 189883, 189884, 189885, 189886, 189887, 189888, 189889, 189890, 189891, 189892, 189893, 189894, 189895, 189896, 189897, 189898, 189899, 189900, 189903, 189904, 189905, 189906, 189907, 189908, 189909, 189910, 189911, 189912, 189913, 189914, 189915, 189916, 189917, 189918, 189919, 189920, 189921, 189922, 189923, 189924, 189925, 189926, 189927, 189930, 189931, 189932, 189933, 189934, 189935, 189936, 189937, 189938, 189939, 189940, 189941, 189942, 189943, 189944, 189945, 189946, 189947, 189948, 189949, 189950, 189951, 190024, 190188, 190203, 190204, 190205, 190206, 190207, 190213, 190215, 190226, 190227, 190228, 190229, 190230, 190231, 190331, 190365, 190494, 190511, 190564, 190573, 190575, 190576, 190577, 190591, 190592, 190593, 190604, 190609, 190615, 190634, 190659, 190664, 190686, 190743, 190751, 190780, 190783, 190816, 190817, 190897, 190918, 190943, 190945, 191183, 191280, 191281, 191282, 191283, 191284, 191285, 191286, 191289, 191290, 191291, 191319, 191331, 191342, 191343, 191344, 191367, 191446, 191610, 191727, 191730, 191765, 191767, 191784, 191785, 191811, 191816, 191818, 192027, 192045, 192074, 192149, 192409, 192516, 192580, 192581, 192650, 192692, 192712, 192875, 192876, 192877, 192878, 192879, 1719, 3221, 17148, 17149, 17150, 17151, 17152, 37100, 42080, 42081, 42082, 42083, 42084, 42085, 42086, 42087, 42088, 42089, 42090, 42091, 42092, 42093, 42094, 178544, 184352, 186715, 186716, 186732, 186751, 186752, 187347, 187895, 190382, 190383, 190384, 190397, 190398, 190443, 194348, 194951, 194984, 184718, 184722, 180671, 180856, 193977, 193978, 180055, 175622); +UPDATE `gameobject_questitem` SET `VerifiedBuild` = 12340 WHERE `GameObjectEntry` IN (31, 32, 36, 37, 41, 47, 52, 54, 55, 56, 57, 58, 59, 60, 61, 68, 76, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 256, 257, 259, 261, 263, 264, 269, 270, 271, 272, 276, 287, 288, 290, 298, 299, 301, 302, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 321, 324, 369, 372, 375, 376, 377, 378, 381, 386, 387, 388, 389, 711, 759, 1162, 1166, 1560, 1561, 1562, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1585, 1587, 1593, 1594, 1595, 1596, 1597, 1598, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1627, 1628, 1630, 1631, 1638, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1663, 1664, 1665, 1666, 1668, 1669, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1685, 1686, 1690, 1692, 1698, 1699, 1710, 1720, 1721, 1722, 1723, 1726, 1727, 1728, 1731, 1732, 1733, 1734, 1735, 1736, 1743, 1744, 1745, 1748, 1749, 1759, 1761, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1809, 1810, 1811, 1814, 1815, 1816, 1822, 1824, 1825, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1835, 1837, 1843, 1849, 1850, 1851, 1852, 1857, 1870, 1873, 1874, 1875, 1885, 1886, 1887, 1888, 1889, 1890, 1896, 1897, 1908, 1912, 1914, 1915, 1928, 1936, 1937, 1938, 1939, 1940, 1941, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1959, 1960, 1961, 1962, 1964, 1967, 1969, 1970, 1973, 1977, 1981, 1985, 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2005, 2006, 2007, 2008, 2010, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2030, 2031, 2032, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2057, 2059, 2062, 2068, 2076, 2082, 2083, 2084, 2086, 2087, 2096, 2098, 2099, 2100, 2101, 2102, 2105, 2106, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2119, 2120, 2122, 2123, 2124, 2125, 2127, 2128, 2129, 2131, 2133, 2134, 2136, 2138, 2139, 2140, 2141, 2142, 2143, 2145, 2146, 2150, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2169, 2171, 2173, 2175, 2176, 2177, 2178, 2179, 2181, 2182, 2186, 2187, 2189, 2190, 2191, 2289, 2335, 2371, 2489, 2551, 2552, 2553, 2554, 2555, 2556, 2558, 2560, 2561, 2572, 2573, 2574, 2575, 2576, 2652, 2653, 2656, 2657, 2658, 2664, 2670, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2687, 2688, 2689, 2690, 2691, 2695, 2701, 2702, 2703, 2707, 2708, 2709, 2710, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2722, 2724, 2726, 2727, 2728, 2729, 2732, 2734, 2739, 2740, 2742, 2744, 2842, 2843, 2844, 2845, 2848, 2849, 2850, 2852, 2855, 2857, 2858, 2866, 2868, 2870, 2871, 2875, 2883, 2891, 2892, 2893, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2933, 2968, 2969, 2971, 2972, 2973, 2974, 2975, 2976, 3076, 3084, 3085, 3089, 3187, 3189, 3190, 3192, 3194, 3195, 3198, 3199, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3224, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3235, 3236, 3237, 3238, 3239, 3240, 3249, 3251, 3252, 3253, 3260, 3264, 3270, 3276, 3286, 3290, 3296, 3298, 3301, 3303, 3308, 3315, 3523, 3524, 3525, 3640, 3642, 3643, 3644, 3646, 3656, 3658, 3659, 3660, 3661, 3662, 3685, 3689, 3690, 3691, 186880, 3693, 3694, 3695, 3702, 3703, 3704, 3705, 3706, 3707, 3714, 3715, 3719, 3722, 3724, 3725, 3726, 3727, 3729, 3730, 3737, 3740, 3743, 3760, 3761, 3763, 3764, 3767, 3768, 3769, 3772, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3815, 3816, 3817, 3818, 3819, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3847, 3848, 3849, 3850, 3851, 3888, 3892, 3893, 3901, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3960, 3962, 3967, 3968, 3972, 4072, 4087, 4088, 4089, 4090, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4120, 4121, 4122, 4123, 4132, 4133, 4134, 4138, 4141, 4149, 4166, 4170, 4171, 4608, 5619, 5620, 5621, 5622, 6289, 6290, 6291, 6292, 6751, 6906, 6907, 6908, 9847, 10082, 10083, 10192, 10193, 10194, 10195, 10196, 10197, 10198, 10199, 10200, 10201, 10202, 10203, 10204, 10205, 10206, 10207, 10208, 10209, 10210, 10211, 10212, 10213, 10214, 10215, 10216, 10217, 10218, 10219, 10220, 10221, 10222, 10223, 10224, 10388, 11713, 11714, 11898, 11899, 12144, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12654, 12665, 12666, 12893, 12894, 12895, 12896, 12900, 12903, 13348, 13349, 13350, 13351, 13352, 13353, 13354, 13355, 13356, 13357, 13358, 13359, 13360, 13405, 13406, 13407, 13408, 13409, 13410, 13411, 13412, 13872, 13873, 13891, 13949, 13965, 15068, 15069, 16393, 16394, 16396, 16397, 16398, 16399, 16400, 17153, 17154, 17155, 17156, 17182, 17184, 17185, 17188, 17189, 17249, 17250, 17251, 17252, 17253, 17254, 17255, 17256, 17257, 17258, 17259, 17260, 17261, 17262, 17263, 17264, 17265, 17266, 17267, 17268, 17269, 17270, 17271, 17272, 17273, 17274, 17275, 17276, 17277, 17278, 17279, 17280, 17281, 17282, 17783, 18033, 18034, 18035, 18036, 18045, 18046, 18047, 18048, 18049, 18050, 18051, 18052, 18053, 18054, 18055, 18056, 18057, 18058, 18059, 18060, 18061, 18062, 18076, 18077, 18083, 18087, 18089, 18090, 18895, 18899, 18934, 18971, 18972, 18973, 19015, 19016, 183421, 19019, 19020, 19021, 19022, 19028, 19030, 19033, 19283, 19284, 19535, 19541, 19542, 19544, 19545, 19546, 19547, 19548, 19550, 19551, 19553, 19554, 19555, 19556, 19557, 19564, 19565, 19566, 19567, 19568, 19572, 19573, 19574, 19575, 19576, 19577, 19578, 19579, 19580, 19581, 19583, 19585, 19590, 19591, 19594, 19595, 19597, 19598, 19600, 19602, 19603, 19839, 19840, 19841, 19842, 19843, 19844, 19845, 19846, 19847, 19848, 19849, 19850, 19851, 19852, 19853, 19854, 19855, 19856, 19857, 19859, 19861, 19863, 19868, 19869, 19870, 19871, 19872, 19873, 19874, 19876, 19877, 19897, 19902, 19903, 19904, 19905, 19906, 20351, 20352, 20356, 20358, 20359, 20447, 20649, 20650, 20651, 20652, 20653, 20654, 20655, 20656, 20657, 20689, 20691, 20694, 20724, 20725, 20726, 20727, 20806, 20807, 20808, 20829, 20830, 20849, 20869, 20871, 20877, 20899, 20920, 20923, 20925, 20962, 20965, 20966, 20968, 20969, 20975, 20977, 20981, 20982, 20986, 20990, 20991, 20992, 21007, 21008, 21009, 21042, 21052, 21057, 21058, 21059, 21060, 21061, 21062, 21063, 21064, 21065, 21066, 21067, 21068, 21073, 21074, 21075, 21076, 21077, 21078, 21079, 21080, 21081, 21082, 21083, 21084, 21085, 21086, 21087, 21099, 21117, 21118, 21119, 21120, 21121, 21277, 21282, 21327, 21459, 21509, 21530, 21581, 21582, 21583, 21678, 21679, 21680, 21701, 22205, 22207, 22208, 22216, 22217, 22218, 22219, 22220, 22221, 22222, 22223, 22245, 22246, 22530, 22531, 22533, 22534, 22535, 22536, 22537, 22538, 22540, 22541, 22543, 22544, 22545, 22546, 22547, 22549, 22550, 22563, 22564, 22565, 22566, 22567, 22578, 22579, 22580, 22581, 22582, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22598, 22599, 22600, 22602, 22603, 22604, 22605, 22606, 22622, 22623, 22638, 22640, 22641, 22642, 22644, 22646, 22657, 22659, 22660, 22661, 22662, 22665, 22666, 22667, 22668, 22670, 22671, 22672, 22673, 22674, 22684, 22685, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22732, 22733, 22735, 22737, 22738, 22739, 22740, 22742, 22743, 22745, 22746, 22747, 22748, 22749, 22750, 22752, 22753, 22772, 22773, 22774, 22775, 22776, 22777, 22783, 22803, 22804, 22806, 22811, 22812, 22813, 22831, 22832, 22833, 22834, 22835, 22836, 22854, 22855, 22856, 22858, 22860, 22864, 22865, 22879, 22880, 22882, 22883, 22884, 22885, 22886, 22887, 22894, 22902, 22904, 22908, 22909, 22910, 22911, 22912, 22913, 22914, 22915, 22916, 22917, 22918, 22919, 22920, 22921, 22922, 22923, 22924, 22925, 22926, 22927, 22928, 22929, 23013, 23014, 23015, 23016, 23017, 23018, 23295, 23296, 23299, 23300, 23301, 23302, 23303, 23304, 23305, 23572, 23575, 23577, 24388, 24389, 24390, 24391, 24392, 24393, 24394, 24395, 24396, 24398, 24399, 24400, 24401, 24402, 24403, 24404, 24405, 24406, 24407, 24408, 24409, 24410, 24411, 24412, 24413, 24414, 24415, 24416, 24417, 24418, 24419, 24420, 24421, 24422, 24423, 24424, 24425, 24426, 24427, 24428, 24429, 24430, 24431, 24432, 24433, 24434, 24435, 24436, 24437, 24438, 24439, 24440, 24441, 24442, 24443, 24444, 24445, 24446, 24447, 24448, 24449, 24450, 24451, 24452, 24453, 24454, 24455, 24456, 24457, 24458, 24459, 24460, 24461, 24462, 24463, 24464, 24465, 24466, 24467, 24468, 24469, 24470, 24471, 24472, 24473, 24474, 24475, 24476, 24477, 24478, 24479, 24480, 24481, 24482, 24483, 24484, 24485, 24486, 24487, 24488, 24489, 24490, 24491, 24492, 24494, 24495, 24496, 24497, 24498, 24499, 24506, 24507, 24508, 24509, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24519, 24520, 24521, 24522, 24523, 24524, 24525, 24526, 24527, 24528, 24529, 24530, 24531, 24532, 24533, 24534, 24535, 24536, 24537, 24538, 24539, 24540, 24541, 24542, 24543, 24544, 24545, 24546, 24547, 24548, 24549, 24550, 24551, 24552, 24553, 24554, 24555, 24556, 24557, 24558, 24559, 24560, 24561, 24562, 24563, 24564, 24565, 24566, 24567, 24568, 24569, 24570, 24571, 24572, 24573, 24574, 24575, 24576, 24577, 24578, 24579, 24580, 24581, 24582, 24583, 24584, 24585, 24586, 24587, 24588, 24589, 24590, 24591, 24592, 24593, 24594, 24595, 24596, 24597, 24598, 24599, 24600, 24601, 24602, 24603, 24604, 24605, 24606, 24607, 24608, 24609, 24610, 24611, 24612, 24613, 24614, 24615, 24616, 24617, 24618, 24619, 24620, 24621, 24622, 24623, 24624, 24625, 24626, 24627, 24628, 24629, 24630, 24631, 24632, 24633, 24634, 24635, 24636, 24637, 24638, 24639, 24640, 24641, 24642, 24643, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24651, 24652, 24653, 24654, 24655, 24656, 24657, 24658, 24659, 24660, 24661, 24662, 24663, 24664, 24665, 24666, 24667, 24668, 24669, 24670, 24671, 24672, 24673, 24674, 24675, 24676, 24677, 24678, 24679, 24680, 24681, 24682, 24683, 24684, 24685, 24686, 24687, 24688, 24689, 24690, 24691, 24692, 24693, 24694, 24695, 24696, 24697, 24698, 24699, 24700, 24701, 24702, 24703, 24704, 24705, 24706, 24715, 24717, 24718, 24719, 24720, 24721, 24745, 24746, 24758, 24759, 24760, 24761, 24762, 24763, 24764, 24765, 24776, 24777, 24798, 25328, 25329, 25330, 25331, 25332, 25333, 25336, 25337, 25338, 25339, 25340, 25341, 25346, 25347, 25348, 25349, 25350, 25351, 25353, 25354, 26449, 26494, 26495, 26496, 26499, 28024, 28027, 28028, 28029, 28030, 28031, 28032, 28033, 28034, 28035, 28036, 28037, 28038, 28039, 28040, 28041, 28042, 28043, 28044, 28045, 28046, 28047, 28048, 28049, 28050, 28051, 28052, 28053, 28054, 28055, 28056, 28069, 28071, 28072, 28603, 28604, 28605, 28606, 28607, 28608, 28609, 28610, 28611, 28612, 28613, 29150, 29151, 29740, 29741, 29742, 29743, 29744, 29745, 29746, 29747, 29748, 29749, 29750, 29751, 29752, 29753, 29754, 29755, 29756, 29757, 29758, 29759, 29760, 29761, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 29776, 29777, 29780, 29781, 29782, 29783, 29784, 30854, 30855, 30856, 31407, 31408, 31409, 31410, 31411, 31504, 31507, 31508, 31509, 31572, 31573, 31574, 31575, 31576, 31577, 31578, 31579, 31580, 32107, 32109, 32110, 32349, 32355, 32358, 32383, 32385, 32389, 32391, 32404, 32416, 32424, 32425, 32427, 32429, 32431, 32569, 32570, 32571, 32572, 32573, 32574, 32578, 32580, 32581, 32582, 32583, 32584, 32585, 32590, 32591, 32592, 32593, 32594, 32595, 32833, 32834, 32835, 32842, 32843, 32844, 32845, 32846, 32847, 32848, 32849, 32850, 32851, 32852, 32853, 32854, 32855, 32856, 32857, 32858, 32859, 32860, 32861, 32862, 32863, 32878, 32879, 32880, 32881, 32885, 33998, 33999, 34012, 34013, 34025, 34026, 34027, 34028, 34029, 34030, 34031, 34032, 34033, 34034, 34035, 34036, 34037, 34038, 34167, 34168, 34360, 34571, 34572, 35591, 35593, 36070, 36071, 36072, 36073, 36077, 36078, 36079, 36080, 36082, 36083, 36085, 36086, 36090, 36091, 36092, 36093, 36094, 36095, 36096, 36098, 36102, 36105, 36113, 36118, 36126, 36127, 36396, 36397, 36398, 36738, 36977, 36979, 36980, 36981, 36982, 36983, 36984, 36985, 36986, 36987, 36988, 36989, 36996, 36997, 36998, 37025, 37026, 37027, 37028, 37029, 37030, 37031, 37032, 37033, 37034, 37035, 37036, 37037, 37038, 37097, 37098, 37099, 37118, 37478, 38147, 38148, 38491, 38492, 38493, 38494, 38495, 40199, 40201, 40303, 41186, 41191, 41193, 41195, 43116, 43117, 43118, 43119, 43120, 43121, 43122, 47296, 47297, 48403, 48404, 48405, 48406, 48407, 48408, 48409, 48410, 48411, 48412, 48414, 48415, 48420, 48421, 48422, 48423, 48427, 48428, 48430, 48431, 48432, 48433, 48434, 48435, 48436, 48437, 48438, 48439, 48440, 48442, 48443, 48444, 48445, 48446, 48447, 48448, 48450, 48451, 48452, 48453, 48454, 48455, 48457, 48458, 48460, 48462, 48463, 48464, 48466, 48469, 48470, 48471, 48472, 48473, 48474, 48475, 48477, 48478, 48479, 48480, 48481, 48482, 48487, 48488, 48489, 48490, 48491, 48494, 48495, 48496, 48497, 48498, 48499, 48500, 48501, 48502, 48503, 48504, 48505, 48506, 48507, 48508, 48509, 48510, 48511, 48512, 48513, 48514, 48515, 48516, 48517, 48518, 48519, 48520, 48522, 48523, 48524, 48525, 48526, 48527, 48528, 48529, 48530, 48531, 48532, 48533, 48534, 48535, 48536, 48537, 48538, 48539, 48540, 48541, 48542, 48544, 48545, 48546, 48547, 48548, 48549, 48550, 48551, 48552, 48553, 48554, 48555, 48556, 48557, 48558, 48559, 48560, 48561, 48562, 48563, 48564, 48565, 48566, 48570, 48573, 49485, 49486, 49487, 50445, 50446, 50447, 50448, 50449, 50450, 50468, 50469, 50484, 50485, 50486, 50487, 50488, 50489, 50490, 50491, 50492, 50493, 50494, 50495, 50496, 50497, 50498, 50499, 50500, 50501, 50502, 50503, 50504, 50505, 50506, 50507, 50508, 50509, 50510, 50511, 50512, 50513, 50514, 50515, 50516, 50517, 50518, 50519, 50520, 50521, 50522, 50523, 50524, 50525, 50526, 50527, 50528, 50529, 50530, 50531, 50532, 50533, 50534, 50535, 50536, 50537, 50538, 50547, 50548, 50549, 50803, 50804, 50805, 50830, 50910, 50935, 50936, 50937, 50961, 50982, 50983, 50984, 50985, 50987, 50988, 51702, 51703, 51704, 51705, 51706, 51707, 51708, 52175, 52176, 55250, 55615, 55616, 55774, 56809, 56810, 56818, 56819, 56820, 56821, 56897, 56898, 56901, 56903, 56905, 56910, 56911, 57708, 58369, 58388, 58389, 58595, 58596, 58597, 58598, 58599, 58600, 58601, 58602, 58603, 58604, 58605, 58606, 58607, 58608, 58609, 58610, 58611, 58612, 58613, 58614, 58615, 58616, 58617, 58618, 58619, 58620, 58621, 58622, 58623, 58624, 58625, 58626, 58627, 58629, 59517, 59518, 59529, 59530, 59845, 59846, 59847, 59848, 59850, 59851, 59852, 59853, 59854, 59855, 59856, 59857, 59858, 59859, 59860, 59861, 59862, 59863, 59864, 59865, 60393, 60394, 60395, 60438, 60439, 60440, 61035, 61036, 61037, 61038, 61039, 61051, 61053, 61054, 61055, 61056, 61057, 61058, 61059, 61061, 61062, 61063, 61064, 61067, 61068, 61070, 61071, 61072, 61073, 61074, 61075, 61076, 61077, 61078, 61079, 61080, 61081, 61082, 61083, 61084, 61085, 61086, 61088, 61089, 61090, 61093, 61094, 61095, 61096, 61097, 61098, 61099, 61100, 61101, 61102, 61918, 61919, 61920, 61921, 61922, 61923, 61924, 61925, 61927, 61928, 61934, 61935, 61936, 61952, 61953, 63195, 63196, 63197, 63198, 63674, 64856, 64857, 64858, 64859, 64860, 64861, 64862, 64863, 65407, 66780, 67234, 68865, 69422, 69426, 69427, 69432, 69435, 70517, 73940, 74075, 74078, 74091, 74135, 74439, 74440, 74441, 74442, 74444, 74445, 74446, 74447, 74448, 74727, 74728, 74729, 74730, 75293, 75295, 75296, 75297, 75298, 75299, 75300, 77813, 80022, 80023, 82136, 82137, 82138, 82139, 82140, 83763, 85556, 85562, 85563, 86492, 89634, 89635, 89931, 90566, 90858, 91138, 91672, 91673, 91692, 91706, 91737, 92011, 92013, 92015, 92066, 92067, 92099, 92141, 92419, 92423, 92426, 92427, 92489, 92490, 92524, 92525, 92526, 92527, 92528, 92529, 92530, 92531, 92532, 92533, 92534, 92535, 92536, 92537, 92538, 92539, 92540, 92541, 92542, 92543, 92544, 92545, 92546, 92547, 92548, 92549, 92550, 92551, 92552, 92693, 92694, 92695, 92696, 92699, 92700, 92703, 93192, 94039, 94185, 94186, 94189, 94190, 95449, 97700, 97701, 97801, 98343, 98347, 98348, 98349, 98350, 98351, 98354, 100028, 101751, 101831, 101832, 101833, 101834, 101850, 101851, 101852, 101853, 101854, 102984, 102985, 102986, 102989, 102990, 102996, 102997, 102998, 102999, 103000, 103001, 103002, 103004, 103005, 103006, 103007, 103009, 103010, 103011, 103012, 103015, 103016, 103574, 103600, 103628, 103663, 103664, 103687, 103694, 103695, 103711, 103727, 103728, 103729, 103748, 103793, 103794, 103795, 103796, 103797, 103798, 103799, 103800, 103801, 103802, 103811, 103812, 103820, 103821, 104555, 104564, 104569, 104574, 104575, 104591, 104593, 104600, 105169, 105170, 105171, 105172, 105174, 105175, 105176, 105188, 105568, 105570, 105576, 105578, 105579, 105581, 106318, 106319, 106325, 106326, 106327, 106335, 106336, 106528, 106529, 106638, 106641, 107037, 107039, 107040, 107041, 107042, 110233, 110235, 110236, 111094, 111095, 111202, 111203, 111204, 111205, 111206, 111207, 111212, 111215, 111216, 111217, 111220, 111221, 111222, 111223, 111224, 111225, 111226, 111227, 111255, 111257, 111258, 111259, 111260, 111261, 111268, 111269, 111271, 111942, 111943, 111945, 111946, 111948, 111949, 111950, 111969, 111973, 111974, 111979, 112042, 112043, 112044, 112045, 112048, 112049, 112050, 112061, 112073, 112074, 112079, 112092, 112095, 112096, 112097, 112098, 112100, 112112, 112115, 112123, 112128, 112129, 112200, 112201, 112204, 112205, 112215, 112231, 112232, 112234, 112235, 112236, 112237, 112238, 112239, 112241, 112301, 112302, 112303, 112305, 112308, 112309, 112310, 112311, 112312, 112316, 112317, 112318, 112319, 112321, 112322, 112877, 112898, 112899, 112900, 112901, 112902, 112903, 112904, 112905, 112906, 112907, 112948, 113528, 113568, 113569, 113570, 113571, 113572, 113574, 113575, 113576, 113577, 113752, 113753, 113754, 113755, 113756, 113757, 113791, 120584, 121264, 122088, 123207, 123208, 123209, 123210, 123211, 123212, 123213, 123214, 123215, 123216, 123217, 123244, 123309, 123310, 123328, 123329, 123330, 123331, 123332, 123333, 123334, 123355, 123462, 123463, 123848, 124072, 124367, 124368, 124369, 124370, 124371, 124372, 124374, 125475, 125477, 126046, 126049, 126050, 126051, 126052, 126053, 126158, 126312, 126313, 126314, 126335, 126337, 126338, 126339, 126340, 126341, 126345, 128196, 128293, 128308, 128403, 129127, 129206, 130125, 130126, 130511, 130666, 130667, 130668, 131474, 131978, 131979, 133234, 133466, 133467, 133468, 133469, 136101, 136922, 136923, 136925, 136926, 136927, 136928, 136929, 136930, 136931, 136947, 136948, 136949, 136950, 136951, 136952, 136954, 136955, 136957, 136959, 136961, 136962, 136963, 136964, 137644, 137646, 137647, 138316, 138317, 138318, 138492, 138498, 138614, 139852, 140109, 140110, 140111, 140112, 140213, 140214, 140358, 140372, 140911, 140971, 141070, 141071, 141072, 141073, 141074, 141596, 141612, 141812, 141832, 141838, 141839, 141844, 141851, 141852, 141853, 141857, 141858, 141860, 141869, 141931, 141979, 142018, 142019, 142020, 142021, 142036, 142071, 142075, 142076, 142088, 142089, 142091, 142093, 142094, 142095, 142102, 142109, 142110, 142111, 142117, 142122, 142139, 142140, 142141, 142142, 142143, 142144, 142145, 142151, 142172, 142175, 142176, 142181, 142184, 142185, 142186, 142187, 142188, 142189, 142191, 142195, 142207, 142211, 142213, 142214, 142218, 142219, 142339, 142340, 142341, 142343, 142344, 142475, 142476, 142477, 142487, 142488, 142689, 142692, 142693, 142694, 142696, 142697, 142702, 142703, 142704, 142705, 142706, 142707, 142712, 142713, 142714, 142715, 142837, 142838, 142851, 142871, 142872, 142873, 142874, 142911, 142912, 142914, 142915, 142916, 142958, 142961, 142964, 142971, 142972, 143230, 143242, 143243, 143244, 143245, 143246, 143247, 143249, 143250, 143251, 143253, 143254, 143255, 143256, 143273, 143295, 143296, 143297, 143298, 143299, 143301, 143314, 143317, 143318, 143319, 143320, 143321, 143322, 143323, 143324, 143325, 143326, 143328, 143333, 143334, 143336, 143337, 143338, 143342, 143343, 143344, 143345, 143346, 143347, 143348, 143349, 143362, 143363, 143398, 143399, 143979, 143980, 143981, 143982, 143983, 143984, 143985, 143987, 143988, 143989, 143990, 144011, 144050, 144053, 144054, 144055, 144063, 144064, 144065, 144066, 144067, 144068, 144070, 144071, 144072, 144073, 144111, 144112, 144125, 144126, 144127, 144128, 144129, 144130, 144131, 144159, 144162, 144179, 146079, 146080, 146081, 146084, 146085, 146086, 146088, 146089, 146090, 146091, 146096, 146441, 147036, 147037, 147038, 147039, 147040, 147041, 147042, 147043, 147044, 147045, 147046, 147047, 147048, 147049, 147279, 147282, 147283, 147284, 147285, 147516, 147517, 147536, 147537, 147557, 147742, 147743, 147744, 147745, 147746, 147747, 147748, 147749, 147750, 147751, 147752, 147753, 147754, 147755, 147756, 147757, 147758, 147759, 147760, 147761, 147762, 147763, 147764, 147765, 147766, 147767, 147768, 147769, 147770, 147771, 147786, 147787, 147793, 147823, 147824, 147825, 147826, 147827, 147828, 147829, 147830, 148418, 148423, 148424, 148425, 148426, 148436, 148437, 148498, 148499, 148503, 148504, 148506, 148511, 148512, 148516, 148540, 148544, 148547, 148549, 148550, 148551, 148554, 148556, 148557, 148567, 148658, 148659, 148660, 148661, 148662, 148663, 148664, 148665, 148668, 148669, 148670, 148671, 148674, 148675, 148677, 148680, 148682, 148683, 148684, 148686, 148691, 148692, 148693, 148694, 148695, 148696, 148697, 148707, 148714, 148725, 148728, 148729, 148730, 148733, 148735, 148741, 148742, 148743, 148746, 148747, 148748, 148749, 148750, 148752, 148753, 148754, 148755, 148756, 148757, 148758, 148759, 148760, 148762, 148763, 148764, 148765, 148767, 148768, 148769, 148773, 148774, 148830, 148831, 148832, 148833, 148834, 148835, 148836, 148837, 148843, 148846, 148850, 148857, 148865, 148866, 148884, 148885, 148886, 148887, 148888, 148889, 148891, 148892, 148893, 148894, 148895, 148898, 148899, 148900, 148901, 148902, 148903, 148904, 148905, 148906, 148909, 148910, 148911, 148912, 148913, 148914, 148915, 149024, 149025, 149026, 149027, 149028, 149029, 149030, 149031, 149032, 149036, 149038, 149045, 149046, 149048, 149051, 149412, 149413, 149417, 149418, 149419, 149423, 149424, 149431, 149432, 149433, 149502, 150075, 150079, 150087, 150137, 150138, 151952, 151953, 151954, 151955, 151956, 151957, 151958, 151959, 151960, 151961, 151962, 151963, 151964, 151965, 151966, 151967, 151968, 151969, 151970, 151971, 151972, 151973, 151974, 151975, 151976, 151977, 151978, 151979, 151980, 151981, 151982, 151983, 151984, 152032, 152033, 152034, 152036, 152037, 152038, 152039, 152041, 152042, 152080, 152094, 152095, 152097, 152325, 152326, 152327, 152328, 152329, 152330, 152331, 152332, 152574, 152575, 152576, 152577, 152578, 152579, 152580, 152583, 152584, 152585, 152586, 152614, 152620, 152621, 152622, 152631, 153124, 153125, 153126, 153157, 153158, 153159, 153160, 153203, 153204, 153220, 153221, 153239, 153240, 153241, 153242, 153451, 153453, 153454, 153459, 153460, 153469, 153470, 153471, 153472, 153473, 153556, 153576, 153578, 153695, 153716, 154357, 156561, 157636, 157637, 157816, 157817, 157818, 157819, 157820, 157923, 157936, 157968, 157969, 158545, 158580, 160411, 160413, 160414, 160415, 160416, 160421, 160426, 160436, 160437, 160438, 160439, 160440, 160441, 160442, 160443, 160444, 160445, 160468, 160469, 160470, 160836, 160840, 160845, 160846, 160847, 160848, 160849, 160850, 160851, 160866, 160867, 160868, 160869, 160870, 160871, 161460, 161461, 161462, 161476, 161477, 161478, 161479, 161480, 161488, 161495, 161504, 161505, 161516, 161521, 161525, 161526, 161527, 161536, 161557, 161752, 162024, 163313, 163645, 164618, 164638, 164639, 164658, 164659, 164660, 164661, 164662, 164688, 164689, 164704, 164725, 164726, 164729, 164778, 164779, 164780, 164781, 164798, 164821, 164822, 164823, 164825, 164838, 164839, 164840, 164867, 164868, 164870, 164871, 164872, 164873, 164874, 164875, 164876, 164877, 164879, 164880, 164882, 164885, 164886, 164887, 164908, 164909, 164910, 164911, 164953, 164954, 164955, 164956, 164957, 164958, 165549, 165554, 165557, 165558, 165578, 165618, 165619, 165620, 165621, 165637, 165658, 165738, 165739, 165740, 165741, 165742, 165743, 165744, 165745, 165746, 165747, 165748, 165749, 165750, 165751, 166863, 166872, 167287, 167290, 169216, 169217, 169243, 169264, 169265, 169266, 169267, 169268, 169269, 169270, 169271, 169272, 169273, 169274, 169275, 169276, 169277, 169278, 169279, 169280, 169281, 169282, 169283, 169284, 169285, 169287, 169288, 169289, 169290, 169291, 169292, 169293, 169294, 169966, 169967, 169968, 169969, 170001, 170002, 170055, 170056, 170057, 170058, 170059, 170060, 170061, 170062, 170063, 170064, 170065, 170066, 170073, 170347, 170348, 170349, 170350, 170351, 170353, 170354, 170355, 170439, 170453, 170524, 170555, 170556, 170557, 170558, 170559, 170561, 170562, 170563, 170570, 170571, 170572, 170573, 170574, 170575, 170576, 170577, 170578, 170579, 170580, 170581, 170582, 170583, 170584, 170592, 170607, 171524, 171525, 171526, 171527, 171528, 171529, 171530, 171531, 171532, 171533, 171534, 171535, 171536, 171537, 171538, 171539, 171540, 171541, 171542, 171543, 171544, 171545, 171546, 171547, 171548, 171549, 171550, 171551, 171552, 171553, 171554, 171555, 171556, 171557, 171558, 171559, 171560, 171561, 171562, 171563, 171564, 171565, 171566, 171569, 171570, 171571, 171572, 171573, 171574, 171575, 171576, 171577, 171578, 171579, 171580, 171581, 171582, 171583, 171584, 171585, 171586, 171587, 171588, 171589, 171590, 171591, 171592, 171593, 171594, 171595, 171596, 171597, 171598, 171599, 171600, 171601, 171602, 171603, 171604, 171605, 171606, 171607, 171608, 171609, 171610, 171611, 171612, 171613, 171614, 171615, 171616, 171617, 171618, 171623, 171624, 171625, 171626, 171627, 171628, 171629, 171630, 171631, 171632, 171633, 171634, 171635, 171636, 171638, 171639, 171640, 171641, 171642, 171643, 171644, 171645, 171646, 171647, 171650, 171651, 171652, 171653, 171654, 171655, 171656, 171657, 171658, 171659, 171660, 171661, 171664, 171665, 171666, 171667, 171668, 171669, 171670, 171671, 171672, 171673, 171678, 171679, 171680, 171681, 171682, 171683, 171684, 171685, 171686, 171687, 171688, 171689, 171690, 171691, 171692, 171693, 171694, 171695, 171696, 171697, 171698, 171699, 171700, 171701, 171702, 171703, 171704, 171705, 171706, 171707, 171708, 171709, 171710, 171711, 171712, 171713, 171714, 171715, 171716, 171717, 171722, 171723, 171724, 171725, 171726, 171727, 171728, 171729, 171730, 171731, 171732, 171733, 171734, 171735, 171736, 171737, 171738, 171739, 171740, 171741, 171742, 171743, 171744, 171745, 171746, 171747, 171748, 171749, 171750, 171751, 171752, 171753, 171754, 171755, 171756, 171757, 171758, 171759, 171760, 171761, 171762, 171763, 171764, 171765, 171766, 171767, 171768, 171769, 171770, 171771, 171772, 171773, 171774, 171775, 171776, 171938, 171941, 171942, 172911, 172941, 172942, 172944, 172945, 172946, 172947, 172948, 172949, 172950, 172951, 172952, 172953, 172954, 172955, 172956, 172957, 172958, 172959, 172960, 172961, 172962, 172963, 172964, 172965, 172966, 172967, 172968, 172969, 172970, 172971, 172972, 172973, 172974, 172975, 172976, 172977, 172978, 172979, 172980, 172981, 172982, 172983, 172984, 172985, 172986, 172987, 172988, 172989, 172990, 172991, 172992, 172993, 172994, 172995, 172996, 172997, 173006, 173007, 173008, 173009, 173010, 173011, 173012, 173013, 173014, 173015, 173016, 173017, 173018, 173019, 173020, 173021, 173022, 173023, 173024, 173025, 173026, 173027, 173028, 173029, 173030, 173031, 173032, 173033, 173034, 173035, 173036, 173037, 173038, 173039, 173040, 173041, 173042, 173043, 173044, 173045, 173046, 173047, 173048, 173049, 173050, 173051, 173052, 173053, 173054, 173055, 173056, 173057, 173058, 173059, 173060, 173061, 173062, 173063, 173064, 173065, 173066, 173067, 173068, 173069, 173070, 173071, 173072, 173073, 173074, 173075, 173076, 173077, 173078, 173079, 173080, 173081, 173082, 173083, 173084, 173085, 173086, 173087, 173088, 173089, 173090, 173091, 173092, 173093, 173094, 173095, 173096, 173097, 173098, 173099, 173100, 173101, 173102, 173103, 173104, 173105, 173106, 173107, 173108, 173109, 173110, 173111, 173112, 173113, 173114, 173115, 173116, 173117, 173118, 173119, 173120, 173121, 173122, 173123, 173125, 173127, 173128, 173129, 173130, 173131, 173132, 173133, 173134, 173135, 173136, 173137, 173138, 173139, 173140, 173141, 173142, 173143, 173144, 173145, 173146, 173147, 173148, 173149, 173150, 173151, 173152, 173153, 173154, 173155, 173156, 173157, 173158, 173159, 173160, 173161, 173162, 173163, 173164, 173165, 173166, 173167, 173168, 173169, 173170, 173171, 173172, 173173, 173174, 173175, 173176, 173177, 173178, 173179, 173184, 173185, 173186, 173190, 173194, 173195, 173197, 173198, 173199, 173200, 173202, 173203, 173204, 173205, 173206, 173207, 173208, 173209, 173210, 173211, 173212, 173213, 173214, 173215, 173216, 173217, 173218, 173219, 173220, 173221, 173222, 173223, 173224, 173225, 173226, 173232, 173234, 173265, 173284, 173324, 173327, 174045, 174553, 174554, 174559, 174565, 174594, 174595, 174597, 174598, 174600, 174601, 174603, 174605, 174607, 174626, 174682, 174683, 174698, 174709, 174712, 174713, 174728, 174729, 174730, 174744, 174746, 174792, 174848, 174849, 174857, 174858, 174859, 174862, 174863, 174872, 174873, 174874, 174881, 174953, 174954, 174955, 174956, 174957, 174958, 174959, 174960, 174961, 174962, 174963, 174964, 174965, 174966, 174967, 174974, 174975, 174976, 174977, 174978, 174979, 174980, 174981, 174982, 174983, 174984, 174985, 174986, 174987, 174994, 174995, 174996, 174997, 174998, 175001, 175002, 175003, 175004, 175005, 175006, 175007, 175008, 175009, 175010, 175011, 175012, 175013, 175014, 175015, 175016, 175017, 175018, 175019, 175020, 175021, 175022, 175023, 175024, 175025, 175026, 175027, 175028, 175029, 175030, 175078, 175080, 175084, 175085, 175104, 175124, 175146, 175153, 175165, 175166, 175167, 175180, 175181, 175185, 175186, 175187, 175194, 175195, 175196, 175197, 175198, 175199, 175200, 175207, 175226, 175230, 175244, 175245, 175246, 175247, 175248, 175249, 175265, 175266, 175267, 175268, 175269, 175270, 175271, 175272, 175284, 175285, 175294, 175302, 175307, 175308, 175312, 175313, 175314, 175315, 175316, 175317, 175318, 175319, 175320, 175321, 175324, 175329, 175330, 175331, 175334, 175335, 175350, 175351, 175352, 175354, 175355, 175356, 175358, 175359, 175368, 175369, 175370, 175372, 175373, 175374, 175375, 175376, 175377, 175380, 175382, 175383, 175384, 175385, 175404, 175405, 175407, 175433, 175434, 175435, 175438, 175440, 175444, 175449, 175459, 175461, 175462, 175466, 175467, 175469, 175470, 175471, 175472, 175474, 175477, 175478, 175479, 175481, 175483, 175484, 175490, 175491, 175492, 175524, 175528, 175529, 175530, 175531, 175532, 175533, 175534, 175535, 175536, 175537, 175544, 175564, 175565, 175566, 175567, 175570, 175586, 175587, 175588, 175591, 175592, 175593, 175594, 175595, 175596, 175597, 175598, 175599, 175600, 175601, 175602, 175603, 175604, 175605, 175606, 175607, 175608, 175609, 175610, 175611, 175612, 175613, 175614, 175615, 175616, 175617, 175618, 175619, 175620, 175621, 175628, 175629, 175632, 175654, 175655, 175656, 175657, 175658, 175659, 175663, 175664, 175665, 175666, 175667, 175668, 175669, 175670, 175671, 175672, 175673, 175674, 175675, 175679, 175680, 175681, 175682, 175683, 175684, 175685, 175686, 175687, 175688, 175689, 175705, 175706, 175708, 175724, 175725, 175726, 175727, 175729, 175730, 175731, 175732, 175733, 175734, 175735, 175736, 175737, 175738, 175739, 175740, 175741, 175742, 175743, 175744, 175745, 175746, 175747, 175748, 175749, 175750, 175751, 175752, 175753, 175754, 175756, 175757, 175758, 175759, 175760, 175761, 175762, 175763, 175764, 175771, 175772, 175773, 175774, 175775, 175776, 175777, 175778, 175779, 175780, 175781, 175784, 175785, 175786, 175787, 175788, 175789, 175791, 175795, 175796, 175797, 175798, 175800, 175801, 175802, 175844, 175845, 175846, 175847, 175848, 175849, 175850, 175851, 175852, 175853, 175854, 175855, 175856, 175885, 175886, 175888, 175891, 175892, 175893, 175894, 175924, 175926, 175927, 175928, 175933, 175944, 175946, 175947, 175948, 175949, 175950, 175965, 175966, 175967, 175968, 175969, 175970, 176004, 176005, 176006, 176007, 176008, 176009, 176010, 176011, 176012, 176013, 176014, 176015, 176016, 176017, 176018, 176019, 176020, 176021, 176022, 176023, 176024, 176025, 176026, 176027, 176028, 176029, 176030, 176031, 176032, 176033, 176034, 176035, 176036, 176037, 176038, 176039, 176040, 176041, 176042, 176043, 176044, 176045, 176046, 176047, 176048, 176049, 176050, 176051, 176052, 176053, 176054, 176055, 176056, 176057, 176058, 176059, 176060, 176061, 176062, 176063, 176064, 176065, 176066, 176067, 176068, 176069, 176070, 176071, 176072, 176073, 176074, 176075, 176076, 176077, 176078, 176079, 176080, 176081, 176082, 176083, 176084, 176085, 176087, 176089, 176090, 176092, 176093, 176098, 176099, 176100, 176101, 176102, 176103, 176104, 176105, 176106, 176107, 176108, 176109, 176112, 176115, 176116, 176142, 176143, 176145, 176150, 176151, 176160, 176163, 176164, 176186, 176187, 176189, 176190, 176192, 176194, 176195, 176196, 176197, 176200, 176201, 176202, 176203, 176204, 176207, 176208, 176209, 176210, 176211, 176213, 176214, 176215, 176216, 176224, 176227, 176228, 176229, 176231, 176232, 176233, 176234, 176235, 176236, 176237, 176238, 176239, 176240, 176241, 176242, 176243, 176244, 176245, 176247, 176248, 176249, 176264, 176266, 176272, 176281, 176285, 176286, 176290, 176292, 176295, 176296, 176304, 176310, 176311, 176312, 176313, 176314, 176315, 176316, 176317, 176324, 176325, 176327, 176344, 176346, 176348, 176349, 176350, 176351, 176352, 176353, 176360, 176361, 176364, 176365, 176389, 176390, 176392, 176393, 176404, 176424, 176425, 176426, 176427, 176428, 176429, 176430, 176431, 176432, 176433, 176434, 176435, 176436, 176437, 176438, 176439, 176440, 176441, 176442, 176445, 176446, 176447, 176448, 176449, 176450, 176451, 176452, 176454, 176455, 176456, 176457, 176458, 176459, 176460, 176461, 176462, 176463, 176464, 176484, 176485, 176486, 176487, 176488, 176489, 176490, 176491, 176492, 176493, 176495, 176496, 176497, 176498, 176499, 176500, 176501, 176504, 176516, 176517, 176518, 176519, 176520, 176521, 176544, 176545, 176546, 176547, 176549, 176550, 176551, 176552, 176553, 176554, 176555, 176556, 176557, 176558, 176559, 176560, 176561, 176562, 176573, 176574, 176576, 176577, 176578, 176579, 176580, 176581, 176582, 176583, 176584, 176586, 176587, 176588, 176589, 176591, 176594, 176624, 176625, 176626, 176627, 176628, 176629, 176630, 176631, 176632, 176633, 176635, 176665, 176666, 176667, 176668, 176669, 176670, 176671, 176672, 176673, 176674, 176675, 176676, 176677, 176678, 176679, 176680, 176681, 176682, 176683, 176684, 176685, 176686, 176687, 176688, 176689, 176690, 176691, 176692, 176693, 176694, 176705, 176745, 176746, 176747, 176748, 176751, 176752, 176753, 176767, 176768, 176785, 176790, 176791, 176792, 176793, 176794, 176795, 176797, 176798, 176843, 176844, 176845, 176846, 176847, 176848, 176849, 176850, 176851, 176852, 176853, 176854, 176855, 176863, 176865, 176894, 176895, 176897, 176898, 176901, 176905, 176907, 176924, 176944, 176945, 176946, 176947, 176948, 176949, 176950, 176951, 176952, 176953, 176954, 176955, 176956, 176957, 176959, 176960, 176961, 176964, 176965, 176967, 176968, 176969, 176970, 176973, 176981, 176982, 176985, 176987, 176988, 176989, 176990, 176991, 177000, 177002, 177003, 177004, 177005, 177006, 177007, 177008, 177009, 177010, 177011, 177012, 177013, 177014, 177015, 177016, 177017, 177018, 177019, 177020, 177021, 177022, 177023, 177024, 177025, 177026, 177044, 177045, 177047, 177048, 177049, 177064, 177105, 177106, 177109, 177112, 177116, 177117, 177118, 177119, 177131, 177132, 177133, 177135, 177140, 177145, 177164, 177185, 177186, 177187, 177188, 177193, 177194, 177198, 177199, 177200, 177201, 177202, 177203, 177204, 177205, 177207, 177208, 177209, 177211, 177212, 177213, 177215, 177217, 177219, 177220, 177221, 177222, 177224, 177226, 177227, 177233, 177241, 177243, 177244, 177245, 177246, 177247, 177248, 177249, 177250, 177251, 177252, 177253, 177254, 177255, 177256, 177261, 177264, 177265, 177266, 177267, 177268, 177269, 177270, 177272, 177274, 177278, 177279, 177280, 177281, 177284, 177285, 177286, 177287, 177289, 177307, 177365, 177369, 177370, 177371, 177372, 177373, 177374, 177375, 177376, 177377, 177378, 177379, 177380, 177381, 177382, 177383, 177384, 177385, 177387, 177388, 177397, 177398, 177399, 177400, 177404, 177417, 177444, 177464, 177484, 177485, 177490, 177494, 177495, 177496, 177497, 177498, 177499, 177500, 177501, 177502, 177503, 177504, 177505, 177506, 177507, 177508, 177509, 177510, 177511, 177512, 177513, 177514, 177524, 177525, 177544, 177604, 177606, 177664, 177668, 177681, 177683, 177704, 177706, 177726, 177750, 177764, 177785, 177789, 177792, 177793, 177794, 177804, 177805, 177806, 177807, 177808, 177824, 177884, 177904, 177905, 177926, 177927, 177928, 177929, 177964, 177984, 177986, 177987, 177988, 177989, 177990, 177991, 177992, 177993, 177994, 177995, 177996, 177997, 177998, 177999, 178000, 178001, 178002, 178003, 178004, 178005, 178006, 178007, 178008, 178009, 178010, 178011, 178012, 178013, 178014, 178015, 178016, 178017, 178018, 178019, 178020, 178021, 178022, 178023, 178024, 178025, 178026, 178027, 178028, 178029, 178030, 178031, 178032, 178033, 178034, 178035, 178036, 178037, 178038, 178039, 178040, 178041, 178042, 178043, 178044, 178045, 178046, 178047, 178048, 178084, 178085, 178087, 178088, 178089, 178090, 178104, 178105, 178106, 178107, 178108, 178125, 178144, 178145, 178146, 178147, 178164, 178184, 178185, 178186, 178187, 178189, 178190, 178191, 178192, 178193, 178194, 178195, 178204, 178224, 178226, 178244, 178245, 178246, 178247, 178264, 178265, 178304, 178364, 178365, 178386, 178388, 178389, 178394, 178404, 178442, 178504, 178525, 178526, 178553, 178559, 178560, 178561, 178562, 178563, 178564, 178565, 178566, 178567, 178568, 178569, 178570, 178571, 178572, 178573, 178646, 178666, 178684, 178685, 178764, 178765, 178784, 178785, 178824, 178825, 178826, 178827, 178828, 178829, 178831, 178832, 178833, 178834, 178844, 178845, 178864, 178884, 178904, 178905, 178908, 178925, 178927, 178929, 178932, 178940, 178943, 178947, 178948, 178955, 178956, 178957, 178958, 178964, 178965, 178984, 179004, 179005, 179006, 179007, 179008, 179025, 179044, 179064, 179065, 179066, 179084, 179109, 179115, 179116, 179119, 179125, 179144, 179148, 179224, 179264, 179287, 179304, 179305, 179306, 179344, 179345, 179365, 179419, 179424, 179425, 179426, 179435, 179436, 179437, 179438, 179439, 179440, 179441, 179442, 179443, 179444, 179446, 179450, 179454, 179458, 179465, 179467, 179468, 179469, 179472, 179486, 179487, 179488, 179489, 179490, 179492, 179493, 179494, 179496, 179497, 179502, 179503, 179506, 179526, 179528, 179532, 179533, 179545, 179549, 179552, 179553, 179554, 179555, 179556, 179557, 179558, 179559, 179560, 179584, 179585, 179595, 179596, 179664, 179666, 179697, 179703, 179706, 179707, 179724, 179725, 179726, 179727, 179728, 179729, 179730, 179731, 179732, 179733, 179734, 179735, 179736, 179737, 179738, 179739, 179740, 179741, 179742, 179743, 179744, 179747, 179778, 179779, 179780, 179781, 179782, 179784, 179786, 179785, 179804, 179826, 179827, 179830, 179831, 179844, 179862, 179871, 179874, 179879, 179880, 179881, 179885, 179888, 179895, 179896, 179899, 179904, 179905, 179906, 179907, 179908, 179909, 179913, 179914, 179916, 179917, 179918, 179919, 179920, 179921, 179922, 179924, 179944, 179964, 179965, 179967, 179968, 179969, 179970, 179972, 179973, 179975, 179976, 179977, 179984, 180005, 180006, 180007, 180025, 180026, 180029, 180030, 180031, 180032, 180034, 180035, 180036, 180037, 180038, 180039, 180040, 180041, 180042, 180043, 180044, 180045, 180046, 180047, 180048, 180049, 180053, 180057, 180256, 180255, 180102, 180101, 180064, 180065, 180066, 180067, 180068, 180069, 180070, 180071, 180072, 180073, 180074, 180077, 180078, 180079, 180085, 180088, 180093, 180095, 180096, 180098, 180099, 180087, 180061, 180060, 180104, 180125, 180144, 180145, 180146, 180147, 180148, 180164, 180165, 180166, 180167, 180168, 180184, 180215, 180218, 180219, 180220, 180222, 180223, 180224, 180225, 180226, 180227, 180228, 180229, 180244, 180247, 180059, 180058, 180322, 180323, 180327, 180335, 180358, 180362, 180364, 180365, 180366, 180369, 180376, 180377, 180378, 180379, 180380, 180381, 180382, 180383, 180384, 180386, 180391, 180392, 180394, 180395, 180396, 180397, 180398, 180399, 180400, 180403, 180417, 180421, 180422, 180423, 180424, 180434, 180435, 180442, 180448, 180451, 180497, 180502, 180503, 180512, 180514, 180524, 180526, 180529, 180534, 180570, 180573, 180575, 180582, 180583, 180600, 180632, 180633, 180640, 180655, 180656, 180657, 180658, 180662, 180663, 180664, 180665, 180666, 180667, 180682, 180683, 180684, 180685, 180712, 180728, 180750, 180751, 180752, 180766, 180768, 180771, 180788, 180851, 180858, 180859, 180866, 180898, 180899, 180900, 180901, 180902, 180904, 184503, 184502, 180913, 180915, 180916, 180917, 180918, 180919, 180920, 180921, 180991, 180993, 180994, 180996, 180997, 180998, 180999, 181000, 181001, 181002, 181003, 181004, 181005, 181006, 181007, 181008, 181009, 181011, 181021, 181029, 181030, 181031, 181032, 181042, 181054, 181062, 181063, 181064, 181065, 181066, 181067, 181075, 181076, 181077, 181078, 181079, 181080, 181081, 181082, 181098, 181103, 181104, 181107, 181110, 181119, 181120, 181121, 181123, 181124, 181125, 181126, 181130, 181131, 181143, 181144, 181145, 181147, 181151, 181153, 181157, 181166, 181168, 181169, 181170, 181175, 181176, 181177, 181178, 181179, 181180, 181181, 181182, 181183, 181184, 181185, 181186, 181187, 181188, 181189, 181195, 181197, 181198, 181199, 181200, 181201, 181202, 181203, 181209, 181210, 181211, 181212, 181213, 181217, 181218, 181219, 181220, 181221, 181231, 181232, 181233, 181234, 181235, 181236, 181240, 181241, 181242, 181243, 181250, 181257, 181270, 181271, 181272, 181273, 181275, 181276, 181277, 181278, 181279, 181280, 181281, 181282, 181283, 181284, 181286, 181291, 181300, 181302, 181305, 181307, 181310, 181311, 181312, 181318, 181319, 181324, 181325, 181329, 181331, 181332, 181333, 181334, 181335, 181336, 181337, 181354, 181355, 181358, 181360, 181361, 181367, 181368, 181369, 181370, 181372, 181376, 181378, 181380, 181381, 181385, 181387, 181388, 181389, 181390, 181391, 181392, 181393, 181396, 181401, 181427, 181431, 181433, 181435, 181436, 181437, 181438, 181439, 181440, 181441, 181442, 181446, 181448, 181449, 181450, 181451, 181452, 181453, 181455, 181456, 181475, 181478, 181480, 181481, 181483, 181484, 181485, 181486, 181487, 181490, 181491, 181493, 181494, 181496, 181555, 181556, 181557, 181569, 181570, 181572, 181573, 181574, 181575, 181579, 181580, 181581, 181582, 181583, 181584, 181585, 181587, 181589, 181590, 181591, 181592, 181593, 181594, 181595, 181596, 181598, 181600, 181603, 181605, 181606, 181616, 181617, 181618, 181619, 181620, 181621, 181622, 181624, 181625, 181626, 181637, 181638, 181644, 181645, 181646, 181650, 181651, 181653, 181654, 181655, 181656, 181657, 181658, 181659, 181660, 181663, 181664, 181672, 181680, 181681, 181683, 181686, 181687, 181690, 181691, 181692, 181693, 181694, 181696, 181697, 181698, 181699, 181711, 181712, 181713, 181714, 181715, 181716, 181720, 181721, 181722, 181723, 181724, 181725, 181726, 181727, 181728, 181729, 181730, 181731, 181732, 181733, 181734, 181735, 181736, 181737, 181738, 181745, 181748, 181757, 181760, 181761, 181762, 181763, 181764, 181765, 181766, 181767, 181768, 181770, 181771, 181773, 181775, 181787, 181788, 181789, 181790, 181791, 181792, 181793, 181794, 181795, 181796, 181798, 181800, 181802, 181805, 181807, 181808, 181809, 181811, 181812, 181813, 181814, 181815, 181816, 181817, 181818, 181819, 181820, 181821, 181822, 181823, 181825, 181826, 181827, 181830, 181833, 181837, 181839, 181845, 181846, 181847, 181848, 181849, 181854, 181870, 181871, 181872, 181873, 181874, 181875, 181876, 181877, 181878, 181883, 181884, 181885, 181886, 181889, 181890, 181891, 181892, 181895, 181899, 181900, 181901, 181909, 181913, 181915, 181916, 181918, 181921, 181922, 181923, 181924, 181925, 181926, 181927, 181928, 181932, 181933, 181934, 181935, 181938, 181939, 181940, 181941, 181942, 181943, 181944, 181945, 181946, 181954, 181955, 181959, 181963, 181969, 181970, 181971, 181972, 181973, 181974, 181975, 181976, 181977, 181980, 181981, 181982, 181985, 181986, 181989, 181990, 182003, 182004, 182005, 182012, 182013, 182014, 182024, 182031, 182050, 182051, 182053, 182054, 182055, 182056, 182058, 182059, 182062, 182064, 182065, 182066, 182069, 182070, 182073, 182075, 182076, 182077, 182078, 182079, 182080, 182081, 182082, 182089, 182090, 182092, 182093, 182095, 182096, 182097, 182100, 182101, 182102, 182103, 182104, 182105, 182106, 182107, 182109, 182113, 182114, 182115, 182116, 182117, 182118, 182119, 182122, 182123, 182124, 182125, 182126, 182127, 182128, 182129, 182130, 182131, 182132, 182133, 182134, 182135, 182136, 182137, 182138, 182139, 182145, 182146, 182147, 182148, 182149, 182150, 182151, 182152, 182153, 182154, 182155, 182156, 182157, 182158, 182159, 182160, 182161, 182162, 182164, 182165, 182166, 182167, 182168, 182169, 182170, 182171, 182172, 182173, 182174, 182175, 182177, 182178, 182179, 182180, 182181, 182182, 182183, 182184, 182185, 182189, 182190, 182191, 182192, 182193, 182194, 182196, 182197, 182198, 182199, 182200, 182203, 182205, 182206, 182209, 182210, 182221, 182222, 182223, 182251, 182252, 182253, 182256, 182257, 182258, 182261, 182262, 182263, 182264, 182265, 182266, 182267, 182269, 182270, 182271, 182272, 182273, 182274, 182275, 182276, 182277, 182278, 182279, 182280, 182281, 182282, 182283, 182284, 182285, 182286, 182287, 182288, 182289, 182290, 182291, 182292, 182293, 182294, 182295, 182296, 182297, 182298, 182299, 182300, 182301, 182302, 182303, 182304, 182305, 182306, 182307, 182308, 182309, 182310, 182311, 182312, 182313, 182314, 182315, 182316, 182317, 182318, 182319, 182320, 182321, 182322, 182323, 182324, 182325, 182326, 182327, 182328, 182329, 182330, 182331, 182332, 182333, 182334, 182335, 182336, 182337, 182338, 182339, 182340, 182341, 182343, 182344, 182345, 182346, 182347, 182348, 182349, 182350, 182351, 182352, 182353, 182354, 182355, 182356, 182357, 182359, 182360, 182361, 182362, 182363, 182364, 182365, 182369, 182370, 182371, 182372, 182373, 182374, 182375, 182376, 182377, 182378, 182379, 182380, 182381, 182382, 182383, 182384, 182385, 182391, 182392, 182393, 182394, 182395, 182396, 182397, 182398, 182399, 182400, 182401, 182402, 182406, 182407, 182408, 182409, 182410, 182411, 182412, 182413, 182414, 182415, 182416, 182417, 182418, 182419, 182420, 182421, 182422, 182423, 182424, 182425, 182426, 182427, 182428, 182429, 182430, 182431, 182432, 182433, 182434, 182435, 182436, 182437, 182438, 182439, 182440, 182441, 182442, 182443, 182444, 182445, 182446, 182447, 182448, 182449, 182450, 182451, 182452, 182484, 182486, 182487, 182488, 182489, 182490, 182491, 182492, 182493, 182494, 182495, 182496, 182497, 182498, 182499, 182500, 182501, 182502, 182503, 182504, 182511, 182512, 182513, 182514, 182515, 182516, 182517, 182518, 182519, 182520, 182521, 182522, 182523, 182524, 182525, 182527, 182528, 182529, 182534, 182535, 182536, 182537, 182538, 182541, 182542, 184501, 184500, 182548, 182547, 182549, 182552, 182553, 182554, 182555, 182556, 182557, 182558, 182559, 182560, 182561, 182563, 182564, 182565, 182566, 182567, 182568, 182569, 182570, 182571, 182573, 182574, 182575, 182576, 182577, 182578, 182579, 182580, 182581, 182582, 182583, 182584, 182585, 182587, 182588, 182589, 182591, 182592, 182593, 182594, 182595, 182596, 182597, 182598, 182599, 182600, 182601, 182605, 182606, 182608, 182609, 182612, 182613, 182614, 182615, 182616, 182617, 182618, 182619, 182620, 182623, 182624, 182625, 182626, 182627, 182628, 182629, 182630, 182631, 182632, 182633, 182634, 182635, 182636, 182637, 182638, 182639, 182640, 182641, 182642, 182643, 182644, 182645, 182646, 182647, 182648, 182649, 182668, 182669, 182670, 182672, 182673, 182674, 182681, 182682, 182704, 182711, 182725, 182726, 182729, 182730, 182731, 182732, 182733, 182737, 182738, 182739, 182740, 182744, 182745, 182746, 182748, 182749, 182750, 182751, 182752, 182753, 182754, 182755, 182756, 182757, 182758, 182760, 182762, 182764, 182765, 182766, 182767, 182768, 182769, 182770, 182771, 182773, 182774, 182775, 182776, 182777, 182778, 182779, 182784, 182785, 182788, 182789, 182794, 182796, 182797, 182798, 182799, 182800, 182804, 182807, 182808, 182809, 182810, 182811, 182817, 182828, 182829, 182830, 182833, 182834, 182835, 182836, 182839, 182840, 182841, 182842, 182843, 182844, 182849, 182850, 182851, 182852, 182853, 182854, 182860, 182861, 182862, 182863, 182864, 182865, 182866, 182867, 182868, 182869, 182870, 182871, 182872, 182873, 182874, 182875, 182876, 182877, 182878, 182881, 182882, 182883, 182884, 182885, 182886, 182887, 182888, 182889, 182890, 182891, 182892, 182893, 182894, 182895, 182896, 182897, 182898, 182899, 182900, 182901, 182902, 182903, 182904, 182922, 182923, 182924, 182925, 182926, 182927, 182928, 182929, 182934, 182935, 182936, 182937, 182938, 182939, 182940, 182941, 182942, 182943, 182944, 182945, 182946, 182947, 182948, 182949, 182950, 182951, 182952, 182953, 182954, 182955, 182956, 182957, 182958, 182959, 182962, 182964, 182965, 182967, 182968, 182969, 182970, 182971, 182972, 182973, 182994, 183005, 183006, 183007, 183008, 183009, 183010, 183022, 183023, 183024, 183025, 183026, 183027, 183028, 183029, 183030, 183031, 183032, 183033, 183034, 183035, 183036, 183037, 183038, 183039, 183040, 183042, 183043, 183044, 183045, 183046, 183047, 183048, 183049, 183051, 183097, 183098, 183099, 183104, 183105, 183111, 183112, 183113, 183114, 183116, 183117, 183118, 183119, 183120, 183121, 183122, 183123, 183124, 183125, 183126, 183127, 183128, 183129, 183130, 183131, 183132, 183134, 183135, 183136, 183137, 183138, 183139, 183140, 183141, 183142, 183143, 183146, 183147, 183148, 183149, 183151, 183152, 183153, 183154, 183155, 183158, 183159, 183160, 183161, 183162, 183163, 183164, 183165, 183166, 183167, 183168, 183169, 183170, 183171, 183177, 183180, 183189, 183190, 183191, 183192, 183193, 183194, 183195, 183196, 183197, 183198, 183199, 183200, 183201, 183202, 183203, 183204, 183205, 183206, 183207, 183208, 183209, 183210, 183211, 183212, 183213, 183214, 183215, 183216, 183218, 183231, 183232, 183233, 183234, 183235, 183236, 183237, 183238, 183239, 183240, 183241, 183242, 183243, 183244, 183245, 183246, 183247, 183248, 183249, 183250, 183251, 183252, 183253, 183254, 183255, 183256, 183257, 183258, 183259, 183260, 183261, 183262, 183263, 183264, 183265, 183266, 183267, 183268, 183269, 183270, 183271, 183272, 183273, 183274, 183275, 183276, 183277, 183284, 183286, 183287, 183288, 183289, 183290, 183291, 183292, 183293, 183294, 183295, 183296, 183297, 183298, 183299, 183300, 183313, 183317, 183318, 183319, 183320, 183321, 183322, 183323, 183324, 183325, 183326, 183327, 183333, 183338, 183339, 183340, 183341, 183342, 183343, 183344, 183345, 183346, 183347, 183348, 183349, 183350, 183351, 183355, 183362, 183363, 183364, 183365, 183366, 183367, 183368, 183369, 183370, 183371, 183372, 183373, 183374, 183375, 183376, 183377, 183378, 183379, 183380, 183381, 183382, 183383, 183384, 183385, 183386, 183393, 183394, 183395, 183396, 183397, 183398, 183399, 183401, 183402, 183408, 183410, 183411, 183412, 183413, 183414, 183415, 183418, 183419, 183420, 183422, 183423, 183424, 183425, 183427, 183428, 183429, 183430, 183431, 183432, 183433, 183435, 183436, 183437, 183438, 183439, 183441, 183444, 183446, 183447, 183450, 183454, 183455, 183456, 183457, 183458, 183459, 183460, 183461, 183465, 183467, 183468, 183469, 183470, 183471, 183472, 183473, 183474, 183475, 183476, 183477, 183478, 183479, 183480, 183481, 183482, 183483, 183484, 183485, 183486, 183487, 183491, 183492, 183493, 183497, 183498, 183499, 183500, 183501, 183502, 183503, 183504, 183507, 183510, 183511, 183514, 183515, 183516, 183517, 183518, 183519, 183520, 183521, 183522, 183523, 183524, 183525, 183526, 183527, 183528, 183529, 183530, 183531, 183532, 183533, 183534, 183535, 183536, 183537, 183538, 183539, 183540, 183541, 183542, 183543, 183544, 183545, 183546, 183547, 183548, 183549, 183550, 183551, 183552, 183553, 183554, 183555, 183556, 183557, 183558, 183559, 183560, 183561, 183562, 183563, 183564, 183565, 183566, 183567, 183568, 183569, 183570, 183571, 183572, 183573, 183574, 183575, 183576, 183577, 183578, 183579, 183580, 183581, 183582, 183583, 183584, 183585, 183586, 183587, 183588, 183589, 183590, 183591, 183592, 183593, 183594, 183595, 183596, 183597, 183598, 183599, 183600, 183601, 183602, 183603, 183604, 183605, 183606, 183607, 183608, 183609, 183610, 183611, 183612, 183613, 183614, 183615, 183616, 183617, 183618, 183619, 183620, 183621, 183622, 183623, 183624, 183625, 183626, 183627, 183628, 183629, 183630, 183631, 183632, 183633, 183634, 183635, 183636, 183637, 183638, 183639, 183640, 183641, 183642, 183643, 183644, 183645, 183646, 183647, 183648, 183649, 183650, 183651, 183652, 183653, 183654, 183655, 183656, 183657, 183658, 183659, 183660, 183661, 183662, 183663, 183664, 183665, 183666, 183667, 183668, 183669, 183670, 183671, 183672, 183673, 183674, 183675, 183676, 183677, 183678, 183679, 183680, 183681, 183682, 183683, 183684, 183685, 183686, 183687, 183688, 183689, 183690, 183691, 183692, 183693, 183694, 183703, 183712, 183713, 183714, 183740, 183741, 183742, 183743, 183744, 183745, 183746, 183747, 183748, 183749, 183750, 183751, 183752, 183753, 183754, 183755, 183757, 183758, 183759, 183760, 183761, 183767, 183768, 183770, 183771, 183773, 183774, 183775, 183776, 183777, 183778, 183779, 183780, 183781, 183782, 183783, 183787, 183788, 183789, 183791, 183793, 183795, 183796, 183797, 183799, 183800, 183805, 183806, 183807, 183808, 183811, 183813, 183814, 183816, 183818, 183820, 183821, 183823, 183824, 183825, 183826, 183827, 183828, 183829, 183830, 183831, 183832, 183833, 183834, 183835, 183836, 183837, 183838, 183839, 183840, 183841, 183842, 183843, 183844, 183845, 183846, 183848, 183849, 183850, 183852, 183853, 183854, 183855, 183856, 183857, 183858, 183859, 183860, 183861, 183862, 183863, 183864, 183865, 183866, 183867, 183868, 183869, 183870, 183871, 183872, 183873, 183874, 183875, 183877, 183878, 183879, 183880, 183881, 183882, 183883, 183889, 183890, 183891, 183893, 183894, 183895, 183896, 183897, 183898, 183899, 183900, 183901, 183902, 183903, 183904, 183905, 183906, 183907, 183908, 183909, 183910, 183911, 183912, 183913, 183914, 183915, 183916, 183917, 183918, 183919, 183920, 183921, 183922, 183923, 183924, 183925, 183926, 183927, 183931, 183932, 183933, 183934, 183935, 183936, 183940, 183941, 183942, 183943, 183944, 183945, 183946, 183947, 183949, 183950, 183955, 183956, 183957, 183961, 183962, 183963, 183964, 183965, 183968, 183970, 183971, 183972, 183973, 183977, 183978, 183979, 183980, 183984, 183985, 183986, 183987, 183988, 183991, 183992, 183993, 183994, 183995, 183996, 183997, 184003, 184004, 184005, 184006, 184009, 184010, 184011, 184012, 184013, 184014, 184015, 184016, 184017, 184018, 184019, 184020, 184021, 184022, 184023, 184024, 184025, 184026, 184027, 184028, 184029, 184030, 184031, 184032, 184033, 184034, 184035, 184036, 184037, 184038, 184039, 184040, 184041, 184042, 184043, 184044, 184045, 184046, 184047, 184048, 184049, 184050, 184051, 184052, 184053, 184054, 184055, 184057, 184058, 184059, 184060, 184061, 184062, 184063, 184064, 184065, 184066, 184067, 184068, 184070, 184071, 184072, 184073, 184074, 184076, 184077, 184078, 184084, 184085, 184090, 184091, 184092, 184093, 184094, 184095, 184096, 184097, 184098, 184099, 184100, 184101, 184102, 184103, 184104, 184105, 184109, 184114, 184115, 184117, 184121, 184122, 184123, 184124, 184125, 184126, 184127, 184128, 184129, 184130, 184131, 184132, 184133, 184134, 184135, 184136, 184137, 184138, 184139, 184140, 184143, 184144, 184147, 184148, 184149, 184150, 184151, 184152, 184153, 184154, 184155, 184156, 184157, 184158, 184159, 184160, 184164, 184173, 184174, 184175, 184176, 184179, 184180, 184181, 184182, 184183, 184184, 184185, 184186, 184187, 184188, 184189, 184190, 184191, 184192, 184193, 184194, 184195, 184196, 184197, 184198, 184199, 184200, 184201, 184202, 184206, 184207, 184208, 184209, 184210, 184211, 184212, 184213, 184214, 184224, 184225, 184226, 184229, 184230, 184231, 184232, 184233, 184234, 184235, 184236, 184237, 184238, 184239, 184240, 184241, 184242, 184243, 184244, 184245, 184246, 184248, 184249, 184250, 184252, 184253, 184254, 184255, 184256, 184257, 184258, 184259, 184260, 184261, 184262, 184263, 184264, 184265, 184266, 184267, 184268, 184269, 184270, 184271, 184272, 184274, 184275, 184276, 184277, 184278, 184279, 184280, 184281, 184284, 184285, 184286, 184289, 184290, 184291, 184292, 184293, 184294, 184295, 184296, 184297, 184298, 184300, 184303, 184304, 184305, 184306, 184307, 184308, 184310, 184311, 184312, 184313, 184314, 184315, 184316, 184317, 184318, 184319, 184330, 184331, 184332, 184339, 184340, 184341, 184342, 184343, 184344, 184345, 184346, 184347, 184348, 184349, 184350, 184351, 184354, 184355, 184356, 184357, 184358, 184359, 184360, 184361, 184362, 184364, 184366, 184367, 184368, 184369, 184370, 184371, 184372, 184373, 184374, 184375, 184376, 184377, 184383, 184393, 184395, 184396, 184397, 184398, 184399, 184400, 184401, 184402, 184403, 184404, 184405, 184406, 184407, 184414, 184415, 184416, 184418, 184419, 184420, 184421, 184422, 184423, 184424, 184425, 184426, 184427, 184428, 184429, 184430, 184431, 184433, 184434, 184436, 184437, 184438, 184439, 184443, 184447, 184448, 184450, 184453, 184454, 184455, 184456, 184458, 184462, 184463, 184465, 184466, 184467, 184470, 184471, 184472, 184473, 184474, 184475, 184477, 184478, 184488, 184494, 184495, 184496, 184497, 184498, 184499, 182546, 182543, 180912, 180911, 184504, 184507, 184508, 184509, 184510, 184511, 184512, 184513, 184514, 184515, 184516, 184517, 184518, 184519, 184520, 184521, 184522, 184523, 184526, 184527, 184530, 184531, 184532, 184533, 184534, 184535, 184536, 184537, 184538, 184539, 184540, 184541, 184542, 184543, 184544, 184545, 184546, 184547, 184548, 184549, 184550, 184551, 184552, 184553, 184554, 184555, 184556, 184557, 184558, 184559, 184560, 184563, 184564, 184565, 184566, 184567, 184578, 184579, 184580, 184581, 184583, 184584, 184585, 184586, 184588, 184589, 184590, 184591, 184594, 184607, 184608, 184612, 184613, 184615, 184624, 184625, 184626, 184627, 184628, 184629, 184630, 184631, 184652, 184655, 184656, 184657, 184660, 184663, 184664, 184665, 184666, 184667, 184668, 184669, 184670, 184671, 184672, 184673, 184674, 184675, 184676, 184677, 184678, 184679, 184680, 184681, 184682, 184685, 184686, 184687, 184688, 184689, 184694, 184701, 184702, 184705, 184706, 184707, 184708, 184709, 184710, 184711, 184712, 184714, 184715, 184716, 184717, 184721, 184724, 184725, 184726, 184727, 184728, 184729, 184730, 184731, 184732, 184734, 184735, 184736, 184737, 184740, 184741, 184742, 184743, 184744, 184745, 184752, 184793, 184794, 184799, 184800, 184802, 184807, 184808, 184809, 184810, 184811, 184812, 184813, 184814, 184815, 184825, 184827, 184833, 184834, 184835, 184836, 184837, 184838, 184840, 184842, 184843, 184852, 184853, 184859, 184860, 184867, 184868, 184869, 184870, 184871, 184872, 184906, 184908, 184909, 184912, 184922, 184923, 184944, 184945, 184946, 184948, 184950, 184964, 184965, 184966, 184967, 184968, 184969, 184970, 184971, 184972, 184973, 184974, 184975, 184976, 184977, 184978, 184980, 184982, 184983, 184984, 184985, 184986, 184987, 184988, 184989, 184990, 184991, 184992, 184993, 184994, 184995, 184996, 184998, 184999, 185000, 185004, 185005, 185006, 185007, 185008, 185009, 185010, 185015, 185018, 185019, 185023, 185024, 185025, 185026, 185027, 185028, 185029, 185030, 185031, 185033, 185035, 185036, 185037, 185038, 185039, 185056, 185062, 185063, 185064, 185065, 185066, 185067, 185068, 185069, 185070, 185071, 185072, 185073, 185074, 185075, 185076, 185077, 185078, 185079, 185080, 185081, 185082, 185083, 185084, 185088, 185089, 185090, 185091, 185092, 185093, 185094, 185095, 185096, 185097, 185099, 185100, 185101, 185103, 185104, 185105, 185107, 185108, 185109, 185110, 185111, 185112, 185113, 185119, 185120, 185123, 185124, 185129, 185131, 185132, 185134, 185136, 185137, 185138, 185139, 185147, 185148, 185152, 185153, 185154, 185155, 185156, 185157, 185158, 185159, 185160, 185161, 185162, 185163, 185164, 185165, 185166, 185167, 185168, 185172, 185173, 185174, 185175, 185177, 185178, 185179, 185180, 185181, 185183, 185184, 185185, 185190, 185191, 185192, 185193, 185194, 185195, 185196, 185197, 185198, 185200, 185201, 185202, 185203, 185204, 185205, 185206, 185208, 185210, 185212, 185213, 185214, 185216, 185217, 185218, 185219, 185220, 185224, 185225, 185234, 185235, 185236, 185237, 185238, 185239, 185240, 185241, 185242, 185243, 185244, 185245, 185246, 185247, 185248, 185249, 185250, 185251, 185252, 185253, 185254, 185255, 185256, 185257, 185258, 185259, 185260, 185261, 185262, 185263, 185264, 185265, 185266, 185267, 185268, 185269, 185270, 185271, 185272, 185273, 185274, 185275, 185276, 185277, 185278, 185279, 185280, 185281, 185282, 185283, 185284, 185285, 185286, 185287, 185288, 185289, 185290, 185294, 185296, 185298, 185301, 185302, 185303, 185309, 185314, 185317, 185318, 185319, 185324, 185325, 185394, 185395, 185396, 185397, 185398, 185399, 185400, 185401, 185402, 185403, 185404, 185405, 185406, 185407, 185408, 185409, 185410, 185411, 185412, 185413, 185414, 185415, 185416, 185417, 185418, 185419, 185420, 185421, 185422, 185423, 185424, 185425, 185426, 185427, 185428, 185429, 185430, 185431, 185432, 185433, 185459, 185472, 185473, 185477, 185497, 185499, 185500, 185502, 185505, 185506, 185507, 185508, 185509, 185510, 185511, 185528, 185877, 185878, 185881, 185899, 185900, 185903, 185928, 185944, 185954, 185967, 185968, 185969, 185970, 185972, 185973, 185974, 185975, 185977, 185978, 185979, 185980, 185981, 185982, 185983, 185984, 185985, 185986, 185987, 185988, 185989, 185990, 185991, 185992, 185993, 185994, 185997, 185998, 185999, 186000, 186001, 186002, 186003, 186004, 186005, 186006, 186007, 186008, 186009, 186010, 186011, 186012, 186013, 186014, 186015, 186016, 186017, 186018, 186019, 186020, 186023, 186026, 186027, 186028, 186029, 186031, 186032, 186033, 186036, 186037, 186038, 186039, 186040, 186041, 186042, 186043, 186044, 186045, 186046, 186047, 186048, 186050, 186051, 186053, 186054, 186055, 186056, 186057, 186058, 186059, 186060, 186061, 186062, 186063, 186064, 186065, 186066, 186067, 186068, 186069, 186071, 186072, 186073, 186074, 186075, 186076, 186077, 186078, 186079, 186080, 186081, 186082, 186083, 186084, 186085, 186086, 186087, 186088, 186089, 186090, 186091, 186092, 186093, 186094, 186095, 186096, 186097, 186098, 186099, 186100, 186101, 186102, 186103, 186104, 186105, 186106, 186107, 186108, 186109, 186110, 186111, 186112, 186113, 186114, 186115, 186116, 186117, 186118, 186119, 186124, 186125, 186126, 186127, 186128, 186129, 186130, 186131, 186134, 186143, 186144, 186145, 186146, 186147, 186148, 186179, 186180, 186181, 186182, 183930, 184146, 184713, 185465, 185466, 185467, 185529, 185530, 185531, 185532, 185533, 185534, 185535, 185536, 185537, 185538, 185539, 185543, 185544, 185545, 185549, 185555, 185571, 185572, 185573, 185592, 185593, 185602, 185604, 185605, 185606, 185607, 185608, 185609, 185610, 185611, 185612, 185613, 185614, 185615, 185616, 185617, 185618, 185619, 185620, 185621, 185622, 185623, 185624, 185625, 185626, 185627, 185628, 185629, 185630, 185631, 185632, 185633, 185634, 185635, 185636, 185637, 185638, 185639, 185640, 185641, 185642, 185643, 185644, 185645, 185646, 185647, 185648, 185649, 185650, 185651, 185652, 185653, 185654, 185655, 185676, 185677, 185678, 185679, 185680, 185681, 185682, 185683, 185684, 185685, 185686, 185687, 185688, 185689, 185690, 185691, 185752, 185753, 185754, 185755, 185832, 185833, 185836, 185837, 185838, 185839, 185844, 185846, 185847, 185852, 185853, 185854, 185855, 185861, 185890, 185894, 185906, 185911, 185913, 185927, 185929, 185930, 185931, 185935, 185936, 185938, 185945, 185971, 185995, 185996, 186021, 186022, 186024, 186025, 186030, 186034, 186035, 186049, 186070, 186120, 186121, 186122, 186123, 186133, 185918, 185917, 180100, 180090, 180089, 180091, 180075, 180076, 181636, 186139, 186140, 185547, 185553, 185551, 303, 305, 379, 380, 382, 1632, 1687, 1688, 1689, 1691, 1693, 1694, 1695, 1696, 1697, 1705, 1706, 1707, 1708, 1709, 1711, 1712, 1713, 1714, 1715, 1808, 1839, 1842, 1853, 1854, 1855, 1856, 1858, 1860, 1865, 1872, 1909, 1916, 2001, 2002, 2027, 2028, 2029, 2048, 2049, 2050, 2051, 2052, 3220, 3857, 3891, 3894, 3898, 3900, 3902, 3905, 3906, 3908, 4115, 4116, 4117, 4118, 4119, 4135, 4136, 4137, 18065, 18066, 18067, 18068, 18070, 18071, 18072, 18073, 18074, 18075, 18079, 18643, 19017, 19018, 20831, 20872, 20972, 20976, 20978, 20979, 20980, 23570, 24727, 28070, 28073, 28074, 28075, 29152, 29154, 29155, 32596, 40200, 48413, 48416, 48417, 48418, 48419, 48424, 48425, 48426, 48429, 48459, 48461, 48465, 48467, 48468, 48476, 48483, 48484, 48485, 48486, 48492, 48493, 48567, 48576, 69282, 92143, 97802, 97803, 101855, 103751, 104589, 105173, 111254, 111256, 111262, 111265, 111266, 140931, 141862, 141863, 142103, 142208, 142209, 142210, 142212, 142215, 142216, 142217, 142970, 142973, 143991, 144132, 144133, 147792, 148844, 148845, 148847, 148848, 148849, 148851, 148852, 148853, 148854, 148855, 148856, 148858, 148859, 148860, 148861, 148862, 148863, 148864, 148917, 152040, 165622, 165623, 165624, 165625, 165626, 165627, 165628, 165629, 165630, 165631, 165632, 165633, 175144, 175145, 175545, 176604, 176605, 176606, 176607, 176608, 176617, 176618, 176619, 177084, 177196, 179085, 179500, 180086, 180094, 180252, 180393, 181326, 181804, 183817, 184080, 184081, 184082, 184083, 184141, 184142, 184171, 184172, 184215, 184216, 184221, 184222, 184223, 184320, 184380, 184381, 184382, 184493, 184528, 184529, 184616, 184617, 184618, 184646, 184662, 184719, 184720, 184873, 184874, 184875, 184876, 184877, 184878, 184879, 184880, 184881, 184882, 184883, 184884, 184885, 184886, 184887, 184888, 184889, 184890, 184891, 184892, 184893, 184894, 184895, 184896, 184897, 184898, 184899, 184900, 184901, 184902, 184903, 184904, 185498, 185501, 185976, 186137, 186138, 186141, 186142, 186560, 176269, 180092, 180097, 185521, 185952, 175298, 175310, 175287, 175288, 175289, 175290, 175291, 175292, 175293, 175305, 182068, 1633, 1634, 1639, 1643, 1644, 1645, 1662, 1801, 1802, 1805, 1806, 1807, 1812, 1813, 1817, 1818, 1819, 1820, 1821, 1826, 1859, 1877, 1891, 1892, 1893, 1901, 1902, 1903, 1904, 1906, 1911, 1930, 1931, 1932, 1957, 1958, 1972, 1975, 1976, 1979, 1984, 2033, 2034, 2035, 2036, 2037, 2038, 2055, 2334, 2336, 2661, 2663, 2666, 2907, 2970, 2977, 2978, 3196, 3197, 3225, 3234, 3246, 3254, 3256, 3258, 3262, 3266, 3306, 3307, 3311, 3314, 3716, 3717, 3718, 3723, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3963, 3964, 6286, 6287, 12897, 12898, 12899, 12901, 12902, 12904, 12907, 12908, 12909, 17190, 17191, 17284, 18043, 18063, 18064, 18084, 18085, 18340, 18341, 18644, 18645, 18900, 18901, 18930, 18935, 18936, 19558, 19559, 19560, 19561, 19562, 19563, 19569, 19570, 19571, 19858, 20738, 20739, 20810, 20873, 20874, 20875, 20876, 20900, 20926, 20961, 20963, 20970, 21127, 22569, 22576, 22577, 22639, 22647, 22648, 22649, 22650, 22651, 22652, 22654, 22658, 22664, 22719, 22727, 22734, 22736, 22741, 22744, 22751, 22754, 22755, 23571, 23573, 23574, 23879, 23880, 23881, 24723, 24724, 24725, 24726, 24728, 24729, 181627, 181628, 35594, 35595, 35596, 35597, 35598, 35844, 38029, 40298, 40299, 40301, 41185, 41187, 41188, 41189, 41190, 41192, 41194, 50831, 50986, 50989, 51948, 51949, 51950, 61040, 61041, 61042, 61043, 61044, 61045, 61046, 61047, 61048, 61049, 61050, 61052, 61060, 61065, 61066, 61069, 61087, 61091, 61092, 69421, 69423, 69424, 69425, 69428, 69429, 69430, 69431, 69433, 69434, 69436, 69437, 69438, 74076, 74443, 88496, 88497, 88498, 91738, 92098, 92424, 92458, 94183, 94184, 94187, 94188, 94191, 101748, 101749, 101750, 101811, 101812, 101835, 101836, 101837, 101838, 101839, 101840, 101841, 101842, 101843, 101844, 101845, 101846, 101847, 101848, 101849, 103713, 103750, 103773, 105569, 110231, 110232, 110234, 111149, 112051, 112052, 112053, 112054, 112055, 112058, 112059, 112060, 112062, 112065, 112066, 112070, 112071, 112072, 112881, 136932, 136933, 136934, 136935, 136936, 136937, 136938, 136939, 136940, 136941, 136942, 136943, 136944, 136965, 136966, 140113, 140211, 140212, 140357, 140359, 140373, 140374, 140375, 140376, 140378, 140379, 140380, 140381, 140382, 140383, 140384, 140385, 140386, 140387, 140388, 140389, 140390, 140391, 140392, 140393, 140394, 140395, 140396, 140397, 140398, 140399, 140400, 140401, 140402, 140403, 140439, 141813, 141840, 141841, 141843, 141845, 141861, 141871, 141971, 141972, 142073, 142077, 142078, 142079, 142090, 142101, 142118, 142119, 142131, 142196, 142197, 142198, 142342, 142691, 142695, 142965, 142966, 142967, 142968, 142969, 143986, 147065, 148419, 148420, 148421, 148736, 148739, 148751, 148761, 148771, 148772, 148781, 148782, 148790, 148795, 148796, 148801, 148807, 148811, 148812, 148813, 148814, 148815, 148816, 148817, 148818, 148840, 148841, 148876, 148877, 148878, 148879, 148880, 148956, 148957, 148958, 148959, 148960, 149019, 149021, 149049, 150082, 152035, 152043, 152044, 152045, 152046, 152581, 152582, 152587, 152608, 152618, 152619, 153350, 153464, 153516, 153579, 153580, 153581, 153582, 153583, 153584, 153723, 158546, 158547, 158548, 158549, 158550, 158551, 158552, 158553, 158554, 158555, 158556, 158557, 158558, 158559, 158560, 158561, 158562, 158563, 158564, 158565, 158566, 158567, 158568, 158569, 158570, 158571, 158572, 158576, 158579, 158581, 158582, 158583, 158584, 158585, 158599, 158608, 158674, 158678, 158679, 158680, 160409, 160410, 160418, 160419, 160420, 161457, 161458, 161459, 161522, 161523, 161524, 164819, 167284, 167288, 167289, 169996, 169997, 169998, 169999, 170000, 170440, 170441, 170442, 170443, 170444, 170445, 170446, 170447, 170448, 170449, 170450, 170451, 170452, 170454, 170455, 170456, 170457, 170458, 170459, 170460, 170461, 170462, 170463, 170464, 170465, 170466, 170467, 170468, 170469, 170470, 170471, 170472, 170473, 170474, 170475, 170476, 170477, 170478, 170479, 170480, 170481, 170482, 170483, 170484, 170485, 170486, 170487, 170488, 170489, 170490, 170491, 170492, 170493, 170494, 170495, 170496, 170497, 170498, 170499, 170500, 170501, 170502, 170503, 170504, 170505, 170506, 170507, 170508, 170509, 170510, 170511, 170512, 170513, 170514, 170515, 170516, 170517, 170518, 170519, 170520, 170521, 170522, 170523, 170525, 170526, 170527, 170528, 170529, 170530, 170531, 170532, 170533, 170534, 170535, 170536, 170537, 170538, 170539, 170540, 170541, 170542, 170543, 170544, 170545, 170546, 170547, 170548, 170549, 170550, 170551, 170552, 170553, 170554, 170560, 170564, 170565, 170566, 170567, 170568, 170569, 173180, 173181, 173182, 173183, 173187, 173188, 173189, 173191, 173192, 173193, 173196, 174407, 174408, 174409, 174410, 174411, 174412, 174413, 174414, 174415, 174416, 174417, 174418, 174419, 174420, 174421, 174422, 174423, 174424, 174425, 174426, 174427, 174428, 174429, 174430, 174431, 174432, 174433, 174434, 174435, 174436, 174437, 174438, 174439, 174440, 174441, 174442, 174443, 174444, 174445, 174446, 174447, 174448, 174449, 174450, 174451, 174452, 174453, 174454, 174455, 174456, 174457, 174458, 174459, 174460, 174461, 174462, 174463, 174464, 174465, 174466, 174467, 174468, 174469, 174470, 174471, 174472, 174473, 174474, 174475, 174476, 174477, 174478, 174479, 174480, 174481, 174482, 174483, 174484, 174485, 174486, 174487, 174488, 174489, 174490, 174491, 174492, 174493, 174494, 174495, 174496, 174497, 174498, 174499, 174500, 174501, 174502, 174503, 174504, 174505, 174506, 174507, 174508, 174509, 174510, 174511, 174512, 174513, 174514, 174515, 174516, 174517, 174518, 174519, 174520, 174521, 174522, 174523, 174524, 174525, 174526, 174527, 174528, 174529, 174530, 174531, 174532, 174533, 174534, 174535, 174536, 174537, 174538, 174539, 174540, 174541, 174542, 174543, 174544, 174545, 174546, 174547, 174548, 174549, 174550, 174551, 174552, 174555, 174556, 174557, 174558, 174560, 174561, 174562, 174563, 174564, 174566, 174699, 174745, 174875, 174876, 174877, 174878, 174879, 174880, 174932, 174933, 174943, 174944, 175179, 175286, 175306, 175353, 175357, 175379, 175381, 175432, 175436, 175437, 175439, 175441, 175442, 175443, 175445, 175447, 175450, 175454, 175455, 175457, 175458, 175460, 175463, 175630, 175631, 175799, 175811, 175824, 175825, 175857, 175858, 175929, 175930, 175931, 175932, 176113, 176217, 176270, 176275, 176276, 176277, 176278, 176279, 176282, 176294, 176307, 176308, 176309, 176318, 176326, 176443, 176444, 176506, 176507, 176508, 176509, 176636, 176637, 176638, 176639, 176640, 176641, 176642, 176643, 176645, 176749, 176787, 176796, 176799, 176800, 176801, 176804, 176805, 176806, 176807, 176808, 176886, 176887, 176888, 176889, 176892, 176896, 176899, 176904, 176906, 176958, 176966, 176971, 176972, 176978, 176979, 176980, 176983, 176984, 176986, 176992, 176993, 176994, 176998, 177104, 177107, 177108, 177110, 177111, 177113, 177114, 177115, 177120, 177121, 177122, 177123, 177124, 177125, 177126, 177127, 177128, 177129, 177130, 177134, 177136, 177137, 177138, 177139, 177141, 177142, 177143, 177144, 177150, 177151, 177152, 177153, 177154, 177155, 177165, 177189, 177192, 177195, 177197, 177225, 177262, 177263, 177273, 177277, 177288, 177292, 177293, 177326, 177327, 177366, 177367, 177405, 177406, 177408, 177409, 177410, 177411, 177412, 177413, 178393, 178524, 178935, 178936, 178944, 178945, 178946, 179104, 179105, 179106, 179107, 179108, 179110, 179111, 179112, 179113, 179114, 179117, 179118, 179120, 179121, 179122, 179284, 179285, 179310, 179364, 179384, 179385, 179386, 179387, 179388, 179389, 179390, 179391, 179392, 179393, 179394, 179395, 179396, 179397, 179445, 179449, 179453, 179466, 179470, 179471, 179481, 179482, 179483, 179484, 179509, 179510, 179513, 179550, 179704, 179846, 179863, 179864, 179875, 179876, 179877, 179878, 179882, 179886, 179887, 180248, 180324, 180325, 180326, 180328, 180329, 180330, 180331, 180332, 180333, 180334, 180337, 180338, 180339, 180340, 180341, 180342, 180345, 180347, 180348, 180349, 180350, 180351, 180352, 180353, 180368, 180370, 180371, 180372, 180373, 180374, 180419, 180420, 180436, 180438, 180439, 180440, 180441, 180452, 180455, 180456, 180461, 180466, 180473, 180474, 180475, 180476, 180477, 180478, 180479, 180480, 180501, 180518, 180539, 180544, 180549, 180554, 180559, 180564, 180631, 180634, 180635, 180636, 180661, 180698, 180699, 180700, 180703, 180704, 180707, 180708, 180720, 180721, 180722, 180723, 180724, 180725, 180726, 180727, 180729, 180730, 180731, 180733, 180736, 180737, 180738, 180739, 180740, 180741, 180749, 180753, 180754, 180862, 180905, 180914, 181071, 181099, 181108, 181134, 181135, 181206, 181225, 181228, 181230, 181247, 181402, 181403, 181404, 181405, 181444, 181447, 181477, 181510, 181511, 181512, 181513, 181514, 181515, 181516, 181517, 181518, 181519, 181520, 181521, 181522, 181523, 181524, 181525, 181526, 181527, 181528, 181529, 181530, 181531, 181532, 181533, 181534, 181535, 181536, 181537, 181538, 181539, 181540, 181541, 181542, 181543, 181544, 181545, 181546, 181547, 181548, 181549, 181550, 181551, 181552, 181576, 181577, 181597, 181629, 181631, 181633, 181634, 181635, 181639, 181643, 181649, 181671, 181676, 181677, 181678, 181679, 181682, 181695, 181824, 182011, 182060, 182061, 182072, 182094, 182098, 182483, 182539, 182540, 183050, 183356, 183490, 183407, 183948, 184075, 184119, 184177, 184178, 184203, 184204, 184205, 184217, 184218, 184219, 184220, 184227, 184228, 184322, 184449, 184569, 184570, 184571, 184572, 184573, 184574, 184595, 184614, 184632, 184661, 184698, 184699, 184844, 184849, 184913, 184914, 184915, 184916, 184917, 184918, 184919, 184920, 184921, 184954, 185106, 185170, 185211, 185221, 185222, 185226, 185292, 185304, 185322, 185460, 185461, 185462, 185463, 185464, 185481, 185483, 185512, 185550, 185708, 185709, 185710, 185711, 185712, 185713, 185714, 185715, 185716, 185717, 185718, 185719, 185720, 185721, 185722, 185723, 185768, 185769, 185770, 185771, 185772, 185773, 185774, 185775, 185776, 185777, 185778, 185779, 185780, 185781, 185782, 185783, 185784, 185785, 185786, 185787, 185882, 185919, 185920, 185921, 185922, 185923, 185924, 185962, 185964, 186135, 186136, 186153, 186218, 186253, 190002, 190003, 190005, 190006, 181306, 180794, 184644, 186264, 184816, 184645, 184647, 186174, 186177, 186176, 186178, 185959, 185963, 185756, 185848, 185851, 185759, 185849, 185757, 185758, 185850, 185915, 185600, 185453, 185448, 185452, 185451, 184804, 184803, 185443, 185444, 185442, 185445, 185446, 185447, 185439, 185440, 185441, 185450, 185449, 184640, 186717, 186252, 186331, 186680, 186229, 186681, 186682, 186173, 186714, 186221, 186189, 186709, 186185, 186187, 186186, 186257, 186260, 186259, 186184, 186183, 186255, 186256, 187265, 185863, 186265, 186312, 185321, 179473, 185845, 185842, 185761, 185762, 185763, 185843, 185841, 185840, 185760, 181085, 181072, 186472, 185554, 186475, 186807, 180779, 186738, 185434, 187115, 202833, 186407, 184863, 186302, 186280, 184858, 186307, 186284, 186251, 186728, 186860, 187035, 186858, 186622, 187036, 187037, 187359, 186811, 186812, 186303, 186305, 186304, 186306, 186859, 186731, 186730, 187370, 187294, 186406, 186285, 186286, 187329, 187299, 186175, 185595, 185590, 187372, 186972, 187291, 187292, 175149, 175151, 175150, 175148, 187295, 180643, 187337, 187296, 186432, 186273, 186283, 186278, 186243, 186423, 186266, 186451, 186301, 186287, 186450, 187273, 187272, 186441, 186240, 186332, 186334, 186241, 186242, 186233, 186230, 186426, 186231, 186232, 186463, 186329, 186330, 186335, 187252, 182071, 187290, 186729, 186631, 186629, 186630, 185480, 185478, 185584, 185601, 185479, 186152, 186262, 185905, 186261, 185892, 185482, 185487, 185489, 185490, 185488, 185485, 185486, 185883, 185886, 185887, 185884, 185888, 185885, 182260, 185946, 184287, 3872, 3875, 3877, 3871, 3878, 3886, 3873, 3874, 3870, 174860, 3883, 3876, 3885, 3865, 174861, 3864, 3866, 185557, 186419, 186420, 186422, 187254, 187390, 186896, 186897, 186901, 186899, 186900, 186903, 186904, 186902, 187267, 188215, 188127, 188126, 187058, 187057, 187056, 187335, 187073, 187039, 187990, 187764, 187979, 187896, 187770, 188065, 188064, 188165, 188166, 188177, 187215, 187214, 187207, 187206, 187217, 188075, 187216, 188415, 188523, 188524, 188421, 188119, 187226, 187227, 187228, 187229, 187224, 187225, 187221, 187220, 187223, 187222, 187218, 187219, 188132, 187111, 187112, 187345, 187333, 188081, 187080, 187078, 187431, 187428, 187120, 187355, 187354, 187371, 188171, 188178, 188172, 188118, 187766, 187578, 187765, 188173, 187357, 187356, 187363, 187123, 187264, 187260, 187113, 187114, 187116, 188214, 3881, 3884, 3882, 3880, 188123, 189993, 189994, 3879, 3869, 3867, 187055, 185223, 187572, 187573, 188021, 187653, 187576, 187667, 188020, 187971, 187973, 187952, 188352, 188174, 187963, 187945, 187959, 187708, 187957, 187953, 187946, 187966, 187918, 188157, 188156, 188151, 187969, 187944, 187951, 187954, 187914, 187457, 189989, 190351, 186865, 186745, 188067, 188142, 188073, 188072, 187882, 188077, 186685, 186808, 186809, 186478, 190022, 190386, 188498, 190367, 190368, 190395, 188508, 186737, 186217, 187564, 187923, 187926, 187928, 187932, 187934, 187938, 181688, 181689, 186238, 186835, 186836, 186837, 186838, 186839, 186840, 186841, 186842, 186843, 186844, 187256, 187258, 187259, 187316, 187558, 187560, 187568, 187851, 187889, 187980, 188131, 188160, 188169, 188521, 188692, 190193, 190194, 190287, 190352, 190536, 190556, 190557, 190680, 190681, 190683, 190684, 190709, 190710, 190711, 190712, 190713, 190714, 190715, 190942, 191164, 191364, 191374, 191375, 191376, 191377, 191378, 191379, 191380, 191381, 191382, 191383, 191384, 191385, 191503, 191504, 191505, 191506, 191507, 191508, 191538, 191539, 191540, 191541, 191746, 191747, 191748, 191790, 192052, 192686, 192688, 193963, 193981, 175177, 175178, 185563, 187074, 187085, 187188, 187239, 187240, 187245, 187246, 187247, 187248, 187268, 187275, 187276, 187277, 187278, 187283, 187284, 187285, 187297, 187298, 187300, 187301, 187302, 187303, 187312, 187313, 187314, 187315, 187321, 187322, 187325, 187326, 187327, 187328, 187339, 187341, 187343, 187346, 187348, 187349, 187350, 187351, 187364, 187367, 187376, 187387, 187388, 187561, 187565, 187577, 187655, 187658, 187659, 187660, 187661, 187662, 187663, 187664, 187670, 187671, 187673, 187675, 187676, 187677, 187683, 187684, 187685, 187686, 187687, 187689, 187703, 187772, 187773, 187850, 187852, 187879, 187880, 187881, 187884, 187885, 187886, 187897, 187898, 187899, 187900, 187901, 187902, 187909, 187985, 188012, 188013, 188015, 188016, 188017, 188018, 188022, 188024, 188025, 188026, 188027, 188030, 188031, 188032, 188033, 188034, 188035, 188036, 188038, 188039, 188040, 188041, 188042, 188043, 188044, 188084, 188085, 188087, 188088, 188089, 188107, 188112, 188120, 188141, 188163, 188164, 188227, 188229, 188230, 188236, 188237, 188342, 188344, 188346, 188347, 188348, 188353, 188354, 188355, 188356, 188357, 188359, 188362, 188363, 188364, 188371, 188372, 188373, 188379, 188380, 188381, 188382, 188383, 188390, 188391, 188392, 188393, 188394, 188395, 188396, 188397, 188398, 188399, 188400, 188401, 188402, 188403, 188404, 188407, 188408, 188409, 188410, 188411, 188412, 188413, 188414, 188416, 188418, 188419, 188423, 188424, 188432, 188441, 188445, 188446, 188448, 188454, 188457, 188474, 188475, 188476, 188489, 188491, 188494, 188495, 188496, 188511, 188514, 188531, 188534, 188539, 188543, 188544, 188546, 188548, 188549, 188550, 188551, 188560, 188561, 188562, 188563, 188581, 188582, 188583, 188584, 188585, 188586, 188587, 188594, 188604, 188605, 188606, 188607, 188612, 188625, 188626, 188627, 188628, 188629, 188630, 188631, 188632, 188633, 188634, 188635, 188636, 188637, 188646, 188649, 188650, 188651, 188652, 188653, 188655, 188656, 188657, 188658, 188659, 188663, 188671, 188673, 188675, 188676, 188678, 188699, 188706, 188712, 188713, 189287, 189289, 189293, 189295, 189304, 189306, 189307, 189315, 189316, 189317, 189329, 189973, 189978, 189979, 189992, 189996, 189997, 190019, 190025, 190032, 190120, 190128, 190130, 190131, 190133, 190143, 190147, 190148, 190150, 190151, 190152, 190153, 190160, 190169, 190173, 190179, 190180, 190189, 190190, 190236, 190274, 190276, 190278, 190279, 190282, 190285, 190286, 190288, 190289, 190290, 190291, 190292, 190293, 190294, 190353, 190356, 190357, 190358, 190370, 190372, 190374, 190375, 190376, 190377, 190378, 190546, 190547, 190548, 190950, 190951, 190952, 190953, 190954, 190955, 190956, 190957, 190958, 190961, 190962, 190963, 190964, 190965, 190966, 190967, 190968, 190969, 190970, 190971, 190972, 190973, 190974, 190975, 190976, 190977, 190978, 190979, 190980, 190981, 190982, 190983, 190984, 190985, 190986, 190987, 190988, 190989, 190990, 190991, 190992, 190993, 190994, 190995, 190996, 190997, 190998, 190999, 191001, 191002, 191003, 191004, 191005, 191070, 191072, 191088, 191089, 191090, 191093, 191094, 191095, 191096, 191097, 191098, 191099, 191142, 191217, 191219, 191225, 191226, 191227, 191228, 191303, 191304, 191332, 191334, 191335, 191336, 191337, 191338, 191339, 191340, 191370, 191486, 191487, 191488, 191489, 191490, 191491, 191492, 191493, 191494, 191495, 191496, 191497, 191548, 191697, 191698, 191699, 191799, 191808, 191809, 192030, 192031, 192032, 192033, 192034, 192035, 192036, 192046, 192048, 192051, 192140, 192148, 192153, 192154, 192155, 192156, 192157, 192158, 192507, 192508, 192613, 192671, 192672, 192673, 192674, 192773, 193019, 193166, 193191, 193192, 193193, 193904, 194005, 194006, 194025, 194026, 1684, 185435, 185437, 186236, 186370, 186371, 186391, 186397, 186403, 186427, 186431, 186433, 186434, 186435, 186436, 186437, 186438, 186440, 186442, 186443, 186447, 186448, 186449, 186452, 186470, 186485, 186490, 186491, 186492, 186493, 186494, 186498, 186499, 186500, 186501, 186502, 186503, 186504, 186505, 186508, 186509, 186512, 186513, 186514, 186515, 186516, 186521, 186522, 186523, 186524, 186525, 186527, 186528, 186529, 186530, 186531, 186532, 186533, 186534, 186535, 186536, 186537, 186538, 186539, 186540, 186541, 186542, 186543, 186544, 186545, 186546, 186547, 186548, 186549, 186550, 186551, 186552, 186553, 186554, 186555, 186559, 186562, 186565, 186566, 186567, 186568, 186569, 186570, 186571, 186572, 186573, 186574, 186575, 186577, 186578, 186579, 186580, 186586, 186587, 186591, 186595, 186601, 186602, 186603, 186604, 186605, 186616, 186617, 186618, 186619, 186620, 186632, 186639, 186641, 186642, 186643, 186644, 186645, 186646, 186647, 186651, 186652, 186654, 186656, 186657, 186659, 186660, 186661, 186662, 186665, 186678, 186679, 186684, 186687, 186695, 186696, 186697, 186698, 186699, 186700, 186701, 186702, 186703, 186704, 186705, 186706, 186707, 186708, 186711, 186712, 186757, 186758, 186759, 186760, 186761, 186762, 186770, 186805, 186827, 186828, 186830, 186831, 186832, 186861, 186862, 186863, 186864, 186883, 186894, 186895, 186905, 186907, 186908, 186910, 186911, 186912, 186913, 186914, 186915, 186916, 186917, 186918, 186919, 186920, 186921, 186922, 186923, 186924, 186938, 186946, 186949, 186950, 186953, 186954, 186955, 186960, 186961, 186962, 186963, 187022, 187023, 187026, 187027, 187032, 187038, 187255, 187261, 187317, 187318, 187319, 187320, 187984, 187986, 188106, 188108, 188136, 188186, 188231, 188238, 188244, 188245, 188246, 188247, 188248, 188249, 188250, 188251, 188252, 188253, 188254, 188256, 188257, 188258, 188259, 188260, 188261, 188262, 188263, 188264, 188272, 188273, 188274, 188275, 188276, 188277, 188278, 188279, 188280, 188281, 188282, 188283, 188284, 188285, 188286, 188287, 188288, 188289, 188290, 188291, 188292, 188293, 188294, 188295, 188296, 188297, 188298, 188299, 188300, 188301, 188302, 188303, 188304, 188305, 188306, 188307, 188308, 188309, 188310, 188311, 188312, 188313, 188314, 188315, 188316, 188317, 188318, 188319, 188320, 188321, 188322, 188323, 188324, 188325, 188326, 188327, 188328, 188329, 188333, 188334, 188335, 188336, 188337, 188338, 188339, 188351, 188360, 188365, 188366, 188368, 188375, 188376, 188377, 188378, 188428, 188443, 188451, 188452, 188453, 188455, 188458, 188461, 188464, 188465, 188469, 188471, 188472, 188473, 188479, 188480, 188481, 188483, 188487, 188492, 188493, 188499, 188500, 188501, 188502, 188503, 188505, 188506, 188515, 188516, 188517, 188518, 188530, 188535, 188541, 188554, 188556, 188557, 188572, 188573, 188574, 188575, 188596, 188600, 188601, 188608, 188609, 188610, 188611, 188613, 188614, 188615, 188616, 188617, 188618, 188619, 188620, 188621, 188622, 188623, 188624, 188665, 188666, 188667, 188668, 188670, 188691, 188695, 188697, 188702, 188703, 188705, 188710, 189290, 189310, 189313, 189320, 189323, 189325, 189326, 189327, 189328, 189958, 189959, 189960, 189967, 189968, 189969, 189972, 189976, 189977, 189980, 189981, 189983, 189991, 190004, 190014, 190015, 190016, 190021, 190026, 190027, 190028, 190029, 190030, 190031, 190092, 190118, 190119, 190165, 190167, 190170, 190172, 190175, 190192, 190197, 190198, 190199, 190208, 190209, 190210, 190211, 190212, 190219, 190220, 190221, 190222, 190223, 190350, 190361, 190362, 190369, 190371, 190373, 190401, 190447, 190453, 190454, 190455, 190495, 190496, 190497, 190500, 190504, 190507, 190508, 190512, 190524, 190525, 190526, 190527, 190533, 190537, 190540, 190559, 190578, 190579, 190580, 190581, 190587, 190590, 190598, 190599, 190600, 190616, 190621, 190622, 190635, 190636, 190637, 190638, 190639, 190644, 190645, 190646, 190660, 190661, 190688, 190700, 190701, 190702, 190762, 190764, 190765, 190766, 190768, 190779, 191019, 191133, 191136, 191163, 191184, 191185, 191186, 191187, 191188, 191189, 191193, 191194, 191195, 191196, 191197, 191198, 191199, 191200, 191202, 191209, 191210, 191222, 191235, 191236, 191244, 191253, 191254, 191255, 191258, 191259, 191260, 191276, 191277, 191278, 191316, 191329, 191341, 191345, 191369, 191414, 191460, 191461, 191462, 191502, 191511, 191512, 191513, 191514, 191515, 191516, 191517, 191519, 191521, 191530, 191531, 191532, 191533, 191534, 191537, 191544, 191545, 191549, 191552, 191553, 191567, 191568, 191574, 191576, 191608, 191647, 191660, 191661, 191676, 191677, 191678, 191679, 191700, 191701, 191702, 191703, 191704, 191714, 191715, 191749, 191750, 191751, 191752, 191753, 191770, 191773, 191793, 191795, 191796, 191797, 191798, 191800, 191801, 191802, 191803, 191804, 191805, 191806, 191807, 191810, 191814, 191815, 191833, 191834, 191835, 191840, 191843, 191844, 191845, 191850, 191854, 191855, 191857, 191858, 191859, 191862, 191863, 191864, 191865, 191866, 191867, 191870, 191872, 191873, 191874, 191875, 191876, 191941, 191942, 191957, 192010, 192012, 192013, 192019, 192020, 192021, 192022, 192023, 192024, 192025, 192026, 192028, 192029, 192037, 192044, 192049, 192050, 192057, 192058, 192059, 192072, 192085, 192086, 192087, 192102, 192103, 192120, 192121, 192122, 192126, 192134, 192171, 192172, 192183, 192184, 192185, 192219, 192227, 192228, 192229, 192230, 192231, 192232, 192233, 192234, 192241, 192242, 192399, 192491, 192493, 192494, 192495, 192509, 192510, 192541, 192542, 192543, 192544, 192545, 192546, 192556, 192557, 192562, 192563, 192582, 192583, 192584, 192588, 192589, 192590, 192591, 192592, 192593, 192594, 192595, 192596, 192597, 192598, 192599, 192600, 192601, 192602, 192603, 192604, 192605, 192606, 192607, 192608, 192609, 192610, 192611, 192717, 192718, 192720, 192721, 192737, 192738, 192739, 192740, 192818, 192820, 192824, 192828, 192830, 192831, 192832, 192859, 192860, 192908, 192909, 192910, 192911, 192912, 192952, 193020, 193082, 193083, 193202, 193205, 193220, 193221, 193223, 193225, 193229, 193241, 193242, 193243, 193390, 193402, 193604, 193608, 193609, 193610, 193791, 193915, 193972, 193985, 193987, 193994, 193997, 194008, 194010, 194013, 194016, 194019, 188241, 188242, 188243, 188266, 188267, 188268, 188269, 188330, 188331, 188332, 188345, 188507, 189298, 191201, 191241, 191242, 191243, 191245, 191257, 164759, 164760, 164761, 164762, 164763, 164764, 164765, 164766, 164767, 188167, 188168, 188170, 190671, 191083, 186935, 187237, 187369, 187373, 187389, 188100, 188101, 188102, 188103, 188113, 188133, 188140, 190171, 190567, 190959, 191386, 191387, 191388, 191389, 191390, 191391, 191392, 191393, 191394, 191395, 191396, 191410, 191509, 191543, 191625, 191627, 191628, 191629, 191643, 191644, 191672, 191705, 191706, 191707, 191718, 191754, 191755, 191756, 191757, 191758, 191813, 191820, 191824, 191825, 191827, 191828, 191829, 192061, 192062, 192063, 192123, 192135, 192138, 192139, 192161, 192162, 192178, 192264, 192469, 192470, 192471, 192477, 192478, 192479, 192480, 192481, 192482, 192483, 192484, 192485, 192486, 192522, 192523, 192547, 192548, 192575, 192576, 192577, 192578, 192774, 192784, 192785, 192787, 192797, 192798, 192799, 192800, 192801, 192802, 192803, 192804, 192805, 192858, 192861, 192862, 192913, 192914, 192915, 192916, 192919, 192932, 192933, 193007, 193024, 193025, 193027, 193028, 193030, 193041, 193042, 193058, 193060, 193199, 193200, 193201, 193400, 193401, 193424, 193468, 193469, 193470, 193471, 193476, 193480, 193481, 193482, 193483, 193484, 193485, 193486, 193487, 193488, 193489, 193490, 193491, 193492, 193493, 193494, 193495, 193496, 193497, 193516, 193517, 193518, 193519, 193520, 193530, 193531, 193532, 193533, 193534, 193535, 193536, 193537, 193538, 193539, 193540, 193541, 193542, 193543, 193544, 193545, 193546, 193547, 193548, 193549, 193550, 193551, 193552, 193553, 193554, 193555, 193556, 193557, 193558, 193559, 193562, 193563, 193565, 193566, 193579, 193582, 193583, 193584, 193585, 193586, 193600, 193601, 193602, 193607, 193616, 193618, 193620, 193622, 193767, 193789, 193790, 193792, 193793, 193846, 193847, 193848, 193849, 193850, 193851, 193852, 193853, 193854, 193855, 193856, 193857, 193858, 193859, 193860, 193861, 193862, 193863, 193864, 193865, 193866, 193867, 193868, 193869, 193870, 193871, 193872, 193873, 193874, 193875, 193876, 193877, 193878, 193879, 193880, 193881, 193882, 193883, 193884, 193885, 193886, 193887, 193888, 193889, 193890, 193891, 193892, 193893, 193894, 193895, 193939, 193943, 193982, 193983, 193984, 194009, 194027, 183306, 186258, 186325, 186326, 186390, 186457, 186459, 186479, 186480, 186481, 186486, 186495, 186496, 186497, 186506, 186507, 186510, 186511, 186517, 186518, 186519, 186520, 186526, 186556, 186557, 186558, 186585, 186598, 186600, 186607, 186608, 186609, 186610, 186611, 186612, 186640, 186649, 186650, 186653, 186663, 186664, 186666, 186688, 186689, 186690, 186691, 186692, 186693, 186694, 186718, 186756, 186798, 186813, 186814, 186885, 186886, 186909, 186925, 186926, 186927, 186929, 186930, 186933, 186934, 186936, 186937, 186943, 186944, 186956, 186957, 186958, 186964, 187033, 187075, 187106, 187117, 187184, 187185, 187186, 187187, 187238, 187241, 187242, 187243, 187279, 187280, 187281, 187282, 187286, 187287, 187304, 187305, 187306, 187307, 187324, 187338, 187352, 187353, 187381, 187432, 187433, 187446, 187447, 187448, 187449, 187450, 187452, 187453, 187454, 187455, 187456, 187460, 187461, 187462, 187463, 187464, 187465, 187466, 187467, 187468, 187469, 187470, 187471, 187498, 187499, 187500, 187501, 187502, 187503, 187504, 187505, 187506, 187507, 187508, 187509, 187510, 187511, 187512, 187513, 187514, 187515, 187516, 187517, 187518, 187519, 187520, 187521, 187522, 187523, 187524, 187525, 187526, 187527, 187579, 187580, 187581, 187582, 187584, 187586, 187587, 187588, 187589, 187590, 187591, 187592, 187593, 187594, 187595, 187596, 187597, 187598, 187599, 187600, 187601, 187669, 187690, 187693, 187694, 187695, 187697, 187710, 187711, 187712, 187713, 187714, 187715, 187719, 187720, 187721, 187722, 187723, 187724, 187725, 187726, 187727, 187728, 187729, 187730, 187731, 187732, 187733, 187734, 187735, 187736, 187737, 187738, 187739, 187740, 187741, 187742, 187743, 187744, 187745, 187746, 187747, 187748, 187749, 187750, 187751, 187752, 187753, 187754, 187755, 187756, 187757, 187758, 187759, 187760, 187761, 187762, 187774, 187875, 187903, 187905, 187908, 187912, 187915, 187982, 187983, 187987, 187995, 187996, 187997, 187998, 187999, 188000, 188001, 188002, 188003, 188004, 188005, 188006, 188007, 188008, 188010, 188014, 188028, 188029, 188037, 188091, 188092, 188104, 188109, 188370, 188386, 188387, 188388, 188389, 188405, 188406, 188422, 188425, 188426, 188442, 188463, 188486, 188488, 188522, 188525, 188526, 188527, 188528, 188537, 188542, 188545, 188547, 188565, 188566, 188567, 188568, 188569, 188570, 188571, 188576, 188577, 188578, 188579, 188580, 188593, 188595, 188599, 188677, 188682, 188683, 188684, 188685, 188686, 188687, 188711, 188715, 189288, 189291, 189292, 189294, 189299, 189300, 189301, 189302, 189308, 189311, 189312, 189318, 189319, 189321, 189322, 189324, 189963, 189964, 189965, 189966, 189971, 189975, 189985, 189986, 190017, 190018, 190020, 190023, 190094, 190095, 190117, 190121, 190122, 190123, 190124, 190125, 190126, 190127, 190129, 190132, 190134, 190135, 190136, 190137, 190138, 190156, 190159, 190174, 190176, 190191, 190225, 190275, 190280, 190281, 190283, 190284, 190332, 190334, 190335, 190399, 190402, 190444, 190445, 190446, 190456, 190457, 190458, 190459, 190460, 190461, 190462, 190463, 190464, 190465, 190466, 190467, 190468, 190469, 190470, 190471, 190472, 190473, 190474, 190476, 190477, 190478, 190479, 190480, 190481, 190482, 190483, 190484, 190488, 190498, 190505, 190506, 190513, 190515, 190522, 190534, 190535, 190538, 190541, 190542, 190543, 190550, 190554, 190555, 190568, 190569, 190570, 190572, 190574, 190582, 190584, 190586, 190589, 190594, 190595, 190596, 190597, 190602, 190603, 190618, 190619, 190620, 190623, 190629, 190630, 190633, 190647, 190657, 190662, 190663, 190687, 190691, 190695, 190697, 190698, 190699, 190704, 190716, 190720, 190722, 190723, 190724, 190726, 190727, 190731, 190752, 190753, 190763, 190767, 190769, 190778, 190784, 190785, 190789, 190790, 190791, 190793, 190795, 190796, 190797, 190799, 190800, 190801, 190802, 190803, 190804, 190805, 190806, 190807, 190808, 190809, 190810, 190811, 190834, 190836, 190842, 190843, 190857, 190858, 190859, 190860, 190861, 190862, 190863, 190864, 190865, 190866, 190867, 190868, 190869, 190870, 190871, 190872, 190873, 190874, 190875, 190876, 190877, 190878, 190879, 190880, 190881, 190882, 190883, 190884, 190885, 190886, 190887, 190888, 190889, 190890, 190891, 190892, 190893, 190894, 190895, 190896, 190898, 190899, 190900, 190901, 190902, 190903, 190904, 190905, 190906, 190907, 190908, 190909, 190910, 190911, 190912, 190913, 190914, 190915, 190917, 190919, 190920, 190921, 190922, 190923, 190924, 190925, 190926, 190927, 190928, 190929, 190930, 190931, 190932, 190933, 190934, 190935, 190936, 190937, 190938, 190939, 190940, 190941, 190944, 190946, 190947, 190960, 191006, 191007, 191008, 191009, 191010, 191011, 191012, 191013, 191014, 191015, 191016, 191018, 191028, 191029, 191030, 191071, 191073, 191074, 191075, 191076, 191077, 191078, 191079, 191080, 191081, 191082, 191084, 191086, 191087, 191092, 191102, 191103, 191104, 191105, 191106, 191107, 191108, 191109, 191110, 191111, 191112, 191113, 191114, 191115, 191116, 191117, 191118, 191119, 191120, 191121, 191126, 191144, 191148, 191155, 191156, 191157, 191158, 191159, 191160, 191161, 191162, 191165, 191166, 191167, 191168, 191169, 191170, 191171, 191172, 191173, 191174, 191175, 191176, 191177, 191178, 191180, 191181, 191182, 191190, 191191, 191203, 191204, 191205, 191206, 191207, 191208, 191223, 191224, 191229, 191230, 191237, 191238, 191239, 191240, 191256, 191261, 191262, 191263, 191264, 191265, 191266, 191267, 191268, 191269, 191270, 191271, 191287, 191288, 191292, 191293, 191294, 191295, 191296, 191301, 191302, 191305, 191306, 191307, 191308, 191309, 191310, 191311, 191313, 191314, 191315, 191317, 191318, 191324, 191325, 191326, 191327, 191328, 191330, 191333, 191347, 191349, 191351, 191371, 191407, 191411, 191412, 191413, 191415, 191416, 191440, 191444, 191445, 191457, 191459, 191463, 191464, 191465, 191466, 191467, 191468, 191469, 191470, 191471, 191472, 191473, 191474, 191475, 191476, 191477, 191478, 191479, 191480, 191481, 191482, 191527, 191529, 191535, 191536, 191542, 191547, 191554, 191555, 191556, 191557, 191558, 191559, 191560, 191562, 191563, 191564, 191565, 191566, 191575, 191577, 191580, 191581, 191582, 191583, 191584, 191585, 191586, 191587, 191588, 191589, 191590, 191606, 191609, 191612, 191613, 191614, 191615, 191616, 191617, 191618, 191622, 191623, 191630, 191631, 191632, 191633, 191634, 191635, 191636, 191637, 191638, 191639, 191641, 191642, 191645, 191646, 191648, 191649, 191650, 191652, 191653, 191654, 191655, 191656, 191657, 191658, 191659, 191662, 191663, 191664, 191665, 191667, 191669, 191670, 191671, 191674, 191675, 191680, 191681, 191682, 191683, 191684, 191686, 191687, 191688, 191708, 191722, 191723, 191726, 191728, 191729, 191731, 191732, 191733, 191734, 191735, 191741, 191745, 191760, 191761, 191766, 191768, 191769, 191780, 191781, 191782, 191783, 191788, 191817, 191826, 191832, 191836, 191837, 191838, 191839, 191846, 191847, 191848, 191849, 191851, 191852, 191853, 191856, 191860, 191861, 191868, 191869, 191871, 191886, 191887, 191888, 191889, 191890, 191891, 191892, 191893, 191894, 191895, 191896, 191897, 191898, 191899, 191900, 191901, 191902, 191903, 191904, 191909, 191910, 191911, 191912, 191913, 191914, 191915, 191916, 191917, 191918, 191919, 191924, 191925, 191926, 191927, 191928, 191929, 191930, 191931, 191932, 191933, 191934, 191935, 191939, 191940, 191943, 191945, 191946, 191947, 191948, 191949, 191950, 191951, 191952, 191953, 191954, 191955, 191956, 191958, 191959, 191960, 191964, 191965, 191966, 191974, 191975, 191980, 191981, 191983, 191984, 191986, 191987, 191988, 191989, 191990, 191991, 191992, 191993, 191994, 191995, 191997, 191998, 191999, 192002, 192003, 192004, 192017, 192038, 192053, 192054, 192060, 192064, 192065, 192066, 192067, 192068, 192069, 192070, 192083, 192084, 192088, 192089, 192090, 192091, 192092, 192093, 192094, 192095, 192096, 192097, 192098, 192099, 192109, 192110, 192111, 192112, 192113, 192114, 192115, 192116, 192117, 192118, 192119, 192125, 192128, 192129, 192130, 192131, 192136, 192137, 192150, 192152, 192159, 192160, 192163, 192164, 192166, 192170, 192173, 192174, 192175, 192176, 192177, 192180, 192181, 192186, 192187, 192188, 192189, 192190, 192191, 192192, 192193, 192194, 192195, 192196, 192197, 192198, 192199, 192200, 192201, 192202, 192203, 192204, 192205, 192206, 192207, 192208, 192209, 192210, 192211, 192212, 192213, 192214, 192215, 192216, 192217, 192218, 192220, 192221, 192222, 192223, 192224, 192225, 192235, 192236, 192237, 192238, 192239, 192240, 192252, 192253, 192256, 192263, 192267, 192268, 192271, 192272, 192275, 192276, 192279, 192281, 192282, 192286, 192287, 192288, 192291, 192292, 192299, 192304, 192305, 192306, 192307, 192308, 192309, 192310, 192312, 192313, 192314, 192316, 192317, 192318, 192319, 192320, 192321, 192322, 192323, 192324, 192325, 192326, 192327, 192328, 192329, 192330, 192331, 192332, 192333, 192334, 192335, 192377, 192387, 192388, 192389, 192390, 192391, 192392, 192395, 192396, 192397, 192398, 192400, 192401, 192424, 192425, 192426, 192427, 192428, 192440, 192442, 192443, 192444, 192449, 192450, 192452, 192453, 192465, 192466, 192467, 192468, 192474, 192475, 192487, 192489, 192490, 192498, 192499, 192500, 192501, 192502, 192503, 192504, 192511, 192512, 192513, 192514, 192518, 192519, 192520, 192526, 192527, 192528, 192529, 192530, 192531, 192536, 192539, 192549, 192553, 192554, 192555, 192564, 192565, 192566, 192567, 192568, 192569, 192570, 192571, 192572, 192573, 192579, 192585, 192614, 192615, 192616, 192617, 192618, 192619, 192620, 192621, 192622, 192625, 192628, 192629, 192632, 192633, 192635, 192651, 192652, 192653, 192654, 192663, 192664, 192665, 192666, 192676, 192677, 192678, 192679, 192680, 192681, 192682, 192685, 192687, 192689, 192690, 192691, 192697, 192704, 192705, 192706, 192707, 192708, 192709, 192710, 192713, 192714, 192715, 192716, 192719, 192734, 192735, 192736, 192741, 192742, 192743, 192775, 192776, 192783, 192788, 192806, 192807, 192808, 192809, 192810, 192811, 192812, 192813, 192814, 192815, 192816, 192817, 192819, 192821, 192822, 192823, 192825, 192826, 192827, 192833, 192835, 192836, 192838, 192839, 192840, 192841, 192842, 192843, 192844, 192845, 192846, 192847, 192848, 192849, 192850, 192851, 192852, 192853, 192854, 192855, 192856, 192863, 192864, 192866, 192867, 192868, 192869, 192870, 192871, 192872, 192874, 192880, 192881, 192882, 192883, 192884, 192885, 192886, 192887, 192888, 192889, 192890, 192891, 192892, 192893, 192894, 192895, 192896, 192903, 192904, 192905, 192907, 192918, 192920, 192921, 192922, 192923, 192924, 192925, 192926, 192927, 192928, 192929, 192930, 192931, 192934, 192935, 192936, 192937, 192938, 192941, 192942, 192943, 192944, 192945, 192946, 192947, 192948, 192949, 192950, 192951, 192953, 192954, 192955, 192956, 192957, 192958, 192959, 192960, 192961, 192962, 192963, 192964, 192965, 192966, 192967, 192968, 192969, 192970, 192971, 192972, 192973, 192974, 192975, 192976, 192977, 192978, 192979, 192980, 192981, 192982, 192983, 192985, 192986, 192987, 192988, 192989, 192990, 192991, 192992, 192993, 192994, 192995, 192996, 192997, 192999, 193000, 193001, 193002, 193003, 193029, 193039, 193040, 193043, 193044, 193045, 193049, 193050, 193051, 193052, 193053, 193057, 193059, 193061, 193062, 193071, 193080, 193081, 193084, 193085, 193086, 193087, 193088, 193089, 193093, 193094, 193096, 193097, 193098, 193099, 193100, 193101, 193102, 193103, 193104, 193105, 193106, 193107, 193108, 193109, 193124, 193125, 193126, 193128, 193129, 193130, 193131, 193132, 193133, 193134, 193135, 193136, 193137, 193138, 193147, 193148, 193149, 193150, 193151, 193152, 193153, 193154, 193155, 193156, 193157, 193158, 193159, 193162, 193163, 193164, 193165, 193167, 193168, 193171, 193172, 193173, 193174, 193175, 193176, 193177, 193178, 193179, 193180, 193182, 193183, 193184, 193185, 193188, 193189, 193190, 193196, 193197, 193198, 193208, 193209, 193210, 193211, 193212, 193213, 193214, 193222, 193224, 193226, 193227, 193228, 193230, 193231, 193232, 193233, 193234, 193235, 193236, 193237, 193238, 193239, 193240, 193244, 193245, 193246, 193247, 193248, 193249, 193250, 193251, 193252, 193253, 193254, 193255, 193256, 193257, 193258, 193259, 193260, 193261, 193262, 193263, 193264, 193265, 193266, 193267, 193268, 193269, 193270, 193271, 193273, 193274, 193275, 193276, 193277, 193278, 193279, 193280, 193281, 193282, 193283, 193284, 193285, 193286, 193287, 193288, 193289, 193290, 193291, 193292, 193293, 193294, 193295, 193296, 193297, 193298, 193299, 193300, 193301, 193302, 193303, 193304, 193305, 193306, 193307, 193308, 193309, 193310, 193311, 193312, 193313, 193314, 193315, 193316, 193317, 193318, 193319, 193320, 193321, 193322, 193323, 193324, 193325, 193326, 193327, 193328, 193329, 193330, 193331, 193332, 193333, 193334, 193335, 193336, 193337, 193338, 193339, 193340, 193341, 193342, 193343, 193344, 193345, 193346, 193347, 193348, 193349, 193350, 193351, 193352, 193353, 193354, 193355, 193356, 193357, 193358, 193359, 193360, 193361, 193362, 193363, 193364, 193365, 193366, 193367, 193368, 193369, 193370, 193371, 193372, 193373, 193374, 193375, 193376, 193377, 193378, 193379, 193380, 193381, 193382, 193383, 193384, 193385, 193386, 193388, 193389, 193391, 193392, 193393, 193394, 193395, 193396, 193397, 193398, 193399, 193406, 193422, 193423, 193428, 193429, 193430, 193431, 193432, 193433, 193434, 193435, 193436, 193437, 193438, 193439, 193561, 193564, 193578, 193587, 193588, 193597, 193598, 193599, 193603, 193611, 193615, 193617, 193619, 193624, 193625, 193626, 193627, 193696, 193697, 193698, 193699, 193700, 193701, 193702, 193703, 193704, 193705, 193706, 193707, 193708, 193709, 193710, 193711, 193712, 193713, 193714, 193715, 193716, 193717, 193718, 193719, 193720, 193721, 193722, 193723, 193724, 193725, 193726, 193727, 193728, 193729, 193730, 193731, 193732, 193733, 193734, 193735, 193736, 193737, 193738, 193739, 193740, 193741, 193742, 193743, 193744, 193745, 193746, 193747, 193748, 193749, 193750, 193751, 193752, 193753, 193754, 193755, 193756, 193757, 193758, 193759, 193760, 193761, 193762, 193763, 193764, 193765, 193766, 193768, 193769, 193770, 193771, 193772, 193781, 193782, 193783, 193784, 193785, 193786, 193787, 193795, 193796, 193896, 193897, 193898, 193899, 193900, 193901, 193902, 193903, 193906, 193907, 193909, 193910, 193911, 193912, 193913, 193914, 193916, 193917, 193918, 193919, 193920, 193921, 193922, 193923, 193924, 193925, 193926, 193927, 193928, 193929, 193930, 193931, 193932, 193933, 193934, 193935, 193936, 193940, 193942, 193944, 193945, 193946, 193949, 193950, 193951, 193962, 193964, 193988, 193990, 193995, 194011, 194012, 194017, 194018, 194020, 194021, 194022, 194029, 194082, 194083, 194086, 190509, 190777, 192151, 193969, 193970, 193971, 192865, 192378, 192379, 192363, 192372, 192355, 192358, 192354, 192834, 192285, 193160, 193161, 192371, 192359, 192338, 192284, 192339, 193139, 193140, 193141, 193142, 193143, 193144, 193145, 192362, 193146, 192350, 192351, 193127, 192366, 192367, 192368, 192356, 192488, 192369, 192364, 192370, 192352, 192349, 192353, 192254, 192255, 192626, 192336, 192357, 192375, 192373, 192374, 192376, 192360, 193121, 193119, 193120, 193122, 193123, 193110, 193111, 193112, 193113, 193114, 193115, 193116, 193117, 193118, 192361, 190475, 192290, 192461, 192460, 192711, 193991, 190643, 190625, 190624, 190503, 190502, 190561, 190558, 190562, 190563, 190560, 190601, 190696, 193056, 193968, 190487, 192283, 192434, 192280, 192435, 192289, 192459, 192273, 192418, 192417, 192416, 192458, 193169, 192627, 192269, 192429, 192430, 192414, 192431, 192277, 192829, 193195, 190614, 190613, 190612, 191365, 191123, 191619, 191620, 192574, 191626, 191624, 192077, 192724, 192730, 192731, 192722, 192723, 192726, 192727, 192728, 192729, 192725, 192524, 192071, 193589, 193596, 192078, 192080, 192463, 192081, 192082, 191763, 191762, 192246, 192249, 192244, 192250, 192248, 192251, 192657, 192658, 192769, 192770, 192771, 192772, 192245, 192247, 192767, 192768, 193952, 192473, 192124, 193822, 193823, 193824, 193826, 193827, 193825, 193800, 193810, 193813, 193814, 193815, 193816, 193817, 193818, 193820, 193821, 193801, 193802, 193808, 193809, 193831, 193832, 193834, 193837, 193840, 193836, 193811, 193812, 193803, 193804, 193833, 193828, 193829, 193830, 193477, 193527, 193524, 193472, 193473, 193474, 193475, 193478, 193479, 193523, 193511, 193525, 193526, 193528, 193514, 193510, 193515, 193521, 193502, 193503, 193504, 193505, 193506, 193466, 193467, 193522, 193512, 193529, 193513, 193498, 193499, 193500, 193501, 193508, 193509, 193507, 193843, 193844, 193845, 193838, 193839, 193841, 193842, 193797, 193799, 193835, 193819, 193805, 193806, 193807, 193798, 194023, 194024, 193980, 193403, 193404, 193405, 189961, 189962, 193614, 193612, 193613, 193203, 193091, 193204, 192407, 192274, 192406, 192278, 193989, 193996, 191605, 193170, 193055, 194108, 194097, 194099, 194162, 194147, 194115, 192675, 193070, 193908, 194120, 194121, 194126, 194129, 192643, 192642, 191877, 192079, 192260, 193986, 193958, 187674, 187707, 187704, 188689, 194468, 194467, 194278, 194323, 194941, 194940, 194937, 194938, 194939, 194942, 194943, 194944, 194945, 194946, 194540, 194539, 194537, 194538, 194588, 194600, 194599, 194601, 195129, 194606, 194605, 194608, 194604, 194607, 194602, 194603, 194489, 194526, 194492, 194618, 194591, 194592, 194593, 194598, 194594, 194527, 194528, 194531, 194589, 194590, 194595, 194487, 194488, 194530, 194622, 194596, 194597, 194532, 194529, 194967, 194976, 194977, 194970, 194567, 194610, 194611, 194533, 194306, 194982, 194981, 194965, 194966, 194974, 194979, 194969, 194972, 194973, 194975, 194978, 194980, 194968, 194964, 194971, 194568, 194820, 194609, 194788, 194524, 194490, 194523, 194525, 194998, 194839, 194840, 194841, 194843, 194827, 194849, 194850, 194851, 194852, 194853, 194842, 194844, 194845, 194846, 194863, 194864, 194865, 194866, 194867, 194868, 194869, 194870, 194872, 194873, 194874, 194875, 194876, 194877, 194878, 194879, 194881, 194882, 194847, 194848, 194854, 194855, 194857, 194880, 194858, 194859, 194860, 194861, 194862, 194896, 194897, 194898, 194899, 194900, 194901, 194883, 194884, 194885, 194886, 194887, 194888, 194889, 194890, 194891, 194892, 194893, 194894, 194856, 194871, 194895, 194909, 194908, 194679, 192270, 192415, 194236, 194235, 194481, 194484, 194569, 194665, 194412, 194415, 194705, 194405, 194404, 194402, 194506, 194403, 194406, 194407, 194408, 194409, 194410, 194413, 194414, 194416, 194401, 194375, 194411, 194400, 194371, 194663, 194664, 194370, 194704, 194630, 194905, 194707, 194706, 194398, 194399, 194666, 194377, 194631, 194261, 194262, 194556, 194253, 194232, 194767, 194715, 194716, 194910, 194911, 194148, 194565, 194554, 194553, 194750, 194773, 194316, 194542, 194541, 194255, 194213, 194659, 194275, 194356, 195013, 194534, 194043, 194634, 194441, 194636, 194637, 194442, 194635, 194675, 194559, 194264, 194560, 194558, 194557, 194915, 195047, 194907, 194308, 194201, 194300, 194173, 194904, 194437, 194914, 194902, 194775, 194749, 194748, 194740, 194741, 194742, 194743, 194744, 194745, 194747, 194746, 194913, 194739, 194776, 194774, 194912, 194341, 188128, 187921, 194054, 195036, 194625, 194547, 194548, 194545, 194546, 195034, 195033, 195035, 194158, 193905, 194365, 194393, 194046, 194042, 194394, 194283, 191312, 194952, 194276, 194361, 191640, 192266, 194959, 194960, 192423, 194479, 187958, 193965, 193966, 194660, 194662, 194661, 194677, 194676, 194544, 194836, 194837, 194838, 194832, 194833, 194834, 194835, 194364, 194466, 194954, 194953, 194658, 194237, 194678, 194535, 193031, 193037, 193033, 193032, 193036, 193034, 193035, 194127, 194128, 194955, 195032, 194687, 194684, 194680, 194681, 194682, 194683, 194685, 194686, 194691, 195029, 194693, 194694, 195030, 195031, 194688, 194689, 194695, 195046, 194200, 194690, 194357, 194352, 194239, 194238, 194307, 194151, 194696, 194692, 194155, 194274, 194281, 194044, 194045, 194034, 194035, 195147, 194578, 194579, 194580, 194581, 194582, 194583, 194584, 194585, 194586, 194587, 194055, 194277, 194282, 185879, 194962, 194280, 186417, 186416, 186415, 186414, 186413, 186412, 186411, 186410, 186409, 186408, 194340, 195259, 195273, 195256, 195257, 195266, 195253, 195533, 195428, 195532, 195427, 195255, 195141, 195264, 195260, 195263, 195310, 195589, 195590, 195591, 195597, 195302, 195419, 195213, 195214, 195420, 195593, 195594, 195596, 195595, 195421, 195498, 195592, 195598, 195422, 195464, 195344, 195346, 196468, 196469, 196470, 196467, 195308, 195610, 195614, 195615, 195603, 195604, 195620, 195608, 195606, 195616, 195609, 195022, 195700, 195436, 195452, 195451, 195703, 195316, 195701, 195332, 195315, 195698, 195699, 195439, 195396, 195121, 195705, 195276, 195706, 195496, 195495, 195494, 195223, 195437, 195491, 195702, 195131, 195133, 195158, 195154, 195144, 195335, 195424, 195425, 195132, 195232, 195151, 195334, 195235, 195337, 195237, 195336, 195320, 196413, 195153, 195371, 195130, 195313, 195314, 195331, 195393, 195333, 195339, 195156, 195207, 195210, 195402, 195208, 195403, 195209, 195377, 195376, 195618, 195605, 195617, 195619, 195612, 195613, 195611, 195468, 195530, 195529, 195607, 195139, 195140, 195481, 195480, 195479, 195478, 195648, 195649, 196398, 195477, 195486, 195485, 195650, 195647, 195460, 195186, 195709, 195323, 195374, 195710, 195324, 195375, 195633, 195631, 195274, 195319, 195571, 195572, 191884, 194342, 195527, 195265, 195254, 195467, 195305, 195555, 195560, 195558, 195561, 195309, 195557, 195562, 195554, 195142, 194279, 195457, 195458, 200293, 200292, 200294, 200295, 195459, 195585, 196417, 195338, 195155, 195326, 195398, 195412, 195413, 195414, 195415, 195416, 195417, 195418, 195411, 195410, 195149, 195342, 195341, 195340, 195392, 195391, 194092, 194963, 195218, 195682, 190549, 195352, 195429, 195353, 195629, 195624, 195625, 195626, 195628, 195627, 195559, 195145, 195219, 194577, 194576, 194395, 195150, 195152, 195399, 195037, 192380, 195586, 195556, 195343, 195397, 194152, 195157, 194313, 194314, 194327, 194752, 194822, 195635, 195695, 196391, 196392, 196485, 196871, 196872, 197341, 197342, 197343, 200296, 200297, 201299, 201300, 201301, 201384, 201385, 201563, 201583, 201592, 201593, 201596, 201599, 201600, 201742, 201747, 201756, 201759, 201760, 201761, 201762, 201763, 201764, 201765, 201766, 201767, 201771, 201772, 201773, 201774, 201776, 201777, 201811, 201812, 201825, 201848, 201849, 201850, 201855, 201857, 201885, 201892, 201893, 201894, 201895, 201896, 201897, 201898, 201910, 201911, 201934, 201935, 201936, 201960, 201961, 201969, 201976, 202079, 202100, 202101, 202178, 202184, 202209, 202210, 202211, 202218, 202220, 202236, 202239, 202242, 202243, 202244, 202245, 202278, 202302, 202315, 202316, 202317, 202318, 202337, 202347, 202348, 202349, 202350, 202391, 202392, 202393, 202394, 196840, 201369, 201370, 201371, 201372, 201373, 201374, 201375, 201376, 201377, 201378, 201379, 201380, 201381, 201382, 201383, 201584, 201612, 201613, 201614, 201615, 201616, 201617, 201618, 201741, 201746, 201755, 201814, 201815, 201816, 201817, 201818, 201846, 201847, 201880, 201886, 201887, 201888, 201889, 201919, 201920, 202102, 202103, 202181, 202182, 202183, 202223, 202234, 202235, 202240, 202246, 202277, 201295, 201296, 201297, 201298, 201931, 201932, 201933, 201598, 201709, 202168, 202336, 187366, 187869, 188114, 188115, 188116, 202357, 202081, 202265, 202266, 201580, 194957, 181057, 201581, 201710, 201834, 201858, 201868, 201869, 201873, 201874, 202443, 202616, 202106, 195528, 201959, 202339, 194423, 194424, 195011, 202082, 202862, 202078, 202141, 202142, 202143, 202144, 202161, 202188, 202189, 202190, 202437, 202238, 201722, 202396, 202177, 202338, 202436, 202438, 195394, 187892, 187922, 201875, 202241, 202340, 194331, 187939, 188129, 195000, 187933, 187974, 188188, 188192, 194038, 194039, 202794, 203003, 203004, 203005, 203006, 203007, 203034, 203035, 203036, 203037, 203079, 203080, 203624, 203959, 203960, 203961, 203962, 204051, 204052, 204053, 204054, 202795, 202796, 202179, 194498, 202564, 202713, 202834, 202835, 202839, 202879, 202880, 202881, 202882, 202883, 202885, 202886, 202888, 202889, 202890, 202891, 202892, 202893, 194958, 188470, 190214, 194501, 202845, 202924, 202925, 202926, 202932, 202933, 202898, 186850, 186851, 186852, 202733, 202760, 202767, 202872, 202922, 186763, 180211, 180213, 202931); From 4013500d24317d0100c4d625a20814ab531960ec Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 12 Sep 2015 16:24:09 +0200 Subject: [PATCH 006/524] Core/Quests: Fix issue reported by static analysis Coverity defect ID: 1323839 --- src/server/game/Quests/QuestDef.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index eea0fd72e8..a40619b41f 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -102,6 +102,9 @@ Quest::Quest(Field* questRecord) for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) ObjectiveText[i] = questRecord[100+i].GetString(); + EmoteOnIncomplete = 0; + EmoteOnComplete = 0; + //int32 VerifiedBuild = questRecord[104].GetInt32(); _reqItemsCount = 0; From 4cdab0cdcb7081d3b99736a189f7e8a9280fda59 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 12 Sep 2015 16:44:34 +0200 Subject: [PATCH 007/524] Scripts/Ulduar: Fix issue reported by static analysis Coverity defect ID: 1316690 --- src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 818bb0041a..6958b5d78a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -749,8 +749,8 @@ class boss_elder_brightleaf : public CreatureScript case EVENT_SOLAR_FLARE: { uint8 stackAmount = 0; - if (me->GetAura(SPELL_FLUX_AURA)) - stackAmount = me->GetAura(SPELL_FLUX_AURA)->GetStackAmount(); + if (Aura* aura = me->GetAura(SPELL_FLUX_AURA)) + stackAmount = aura->GetStackAmount(); me->CastCustomSpell(SPELL_SOLAR_FLARE, SPELLVALUE_MAX_TARGETS, stackAmount, me, false); events.ScheduleEvent(EVENT_SOLAR_FLARE, urand(5000, 10000)); break; From 497aa4425bd8a84acb7f5ebcf03692ef96a64c06 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sat, 12 Sep 2015 18:51:11 +0200 Subject: [PATCH 008/524] Core/Scripts: fixed startup errors Closes #14730 --- sql/updates/world/2015_12_09_00_world.sql | 5 + .../Ulduar/Ulduar/boss_flame_leviathan.cpp | 164 +++++++----------- .../Ulduar/Ulduar/instance_ulduar.cpp | 14 ++ .../scripts/Northrend/Ulduar/Ulduar/ulduar.h | 23 +++ src/server/scripts/Spells/spell_generic.cpp | 42 +++++ 5 files changed, 148 insertions(+), 100 deletions(-) create mode 100644 sql/updates/world/2015_12_09_00_world.sql diff --git a/sql/updates/world/2015_12_09_00_world.sql b/sql/updates/world/2015_12_09_00_world.sql new file mode 100644 index 0000000000..cfa8399c35 --- /dev/null +++ b/sql/updates/world/2015_12_09_00_world.sql @@ -0,0 +1,5 @@ +UPDATE `creature_template` SET `ScriptName`='npc_brann_bronzebeard_ulduar_intro' WHERE `entry`=33579; +DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=48750 AND `spell_effect`=48770; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_burning_depths_necrolyte_image'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(48750, 'spell_gen_burning_depths_necrolyte_image'); 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 61d6441317..b31436f656 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -97,9 +97,6 @@ enum Creatures NPC_MIMIRON_TARGET_BEACON = 33369, NPC_HODIR_TARGET_BEACON = 33108, NPC_FREYA_TARGET_BEACON = 33366, - NPC_LOREKEEPER = 33686, // Hard mode starter - NPC_BRANZ_BRONZBEARD = 33579, - NPC_DELORAH = 33701, NPC_ULDUAR_GAUNTLET_GENERATOR = 33571, // Trigger tied to towers }; @@ -1167,9 +1164,49 @@ class npc_freya_ward_summon : public CreatureScript } }; -//npc lore keeper -#define GOSSIP_ITEM_1 "Activate secondary defensive systems" -#define GOSSIP_ITEM_2 "Confirmed" +enum BrannBronzebeardGossips +{ + GOSSIP_MENU_BRANN_BRONZEBEARD = 10355, + GOSSIP_OPTION_BRANN_BRONZEBEARD = 0 +}; + +class npc_brann_bronzebeard_ulduar_intro : public CreatureScript +{ + public: + npc_brann_bronzebeard_ulduar_intro() : CreatureScript("npc_brann_bronzebeard_ulduar_intro") { } + + struct npc_brann_bronzebeard_ulduar_introAI : public ScriptedAI + { + npc_brann_bronzebeard_ulduar_introAI(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + } + + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override + { + if (menuId == GOSSIP_MENU_BRANN_BRONZEBEARD && gossipListId == GOSSIP_OPTION_BRANN_BRONZEBEARD) + { + player->PlayerTalkClass->SendCloseGossip(); + if (Creature* loreKeeper = _instance->GetCreature(DATA_LORE_KEEPER_OF_NORGANNON)) + loreKeeper->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + } + } + + private: + InstanceScript* _instance; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI(creature); + } +}; + +enum LoreKeeperGossips +{ + GOSSIP_MENU_LORE_KEEPER = 10477, + GOSSIP_OPTION_LORE_KEEPER = 0 +}; class npc_lorekeeper : public CreatureScript { @@ -1180,6 +1217,7 @@ class npc_lorekeeper : public CreatureScript { npc_lorekeeperAI(Creature* creature) : ScriptedAI(creature) { + _instance = creature->GetInstanceScript(); } void DoAction(int32 action) override @@ -1187,66 +1225,42 @@ class npc_lorekeeper : public CreatureScript // Start encounter if (action == ACTION_SPAWN_VEHICLES) { - for (int32 i = 0; i < RAID_MODE(2, 5); ++i) + for (uint8 i = 0; i < RAID_MODE(2, 5); ++i) DoSummon(VEHICLE_SIEGE, PosSiege[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN); - for (int32 i = 0; i < RAID_MODE(2, 5); ++i) + for (uint8 i = 0; i < RAID_MODE(2, 5); ++i) DoSummon(VEHICLE_CHOPPER, PosChopper[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN); - for (int32 i = 0; i < RAID_MODE(2, 5); ++i) + for (uint8 i = 0; i < RAID_MODE(2, 5); ++i) DoSummon(VEHICLE_DEMOLISHER, PosDemolisher[i], 3000, TEMPSUMMON_CORPSE_TIMED_DESPAWN); - return; } } - }; - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->CLOSE_GOSSIP_MENU(); - InstanceScript* instance = creature->GetInstanceScript(); - if (!instance) - return true; - - switch (action) + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override { - case GOSSIP_ACTION_INFO_DEF+1: - player->PrepareGossipMenu(creature); - instance->instance->LoadGrid(364, -16); //make sure leviathan is loaded + if (menuId == GOSSIP_MENU_LORE_KEEPER && gossipListId == GOSSIP_OPTION_LORE_KEEPER) + { + player->PlayerTalkClass->SendCloseGossip(); + _instance->instance->LoadGrid(364, -16); // make sure leviathan is loaded - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - if (Creature* leviathan = instance->instance->GetCreature(instance->GetGuidData(BOSS_LEVIATHAN))) + if (Creature* leviathan = _instance->instance->GetCreature(_instance->GetGuidData(BOSS_LEVIATHAN))) { leviathan->AI()->DoAction(ACTION_START_HARD_MODE); - creature->SetVisible(false); - creature->AI()->DoAction(ACTION_SPAWN_VEHICLES); // spawn the vehicles - if (Creature* Delorah = creature->FindNearestCreature(NPC_DELORAH, 1000, true)) + me->SetVisible(false); + DoAction(ACTION_SPAWN_VEHICLES); // spawn the vehicles + if (Creature* delorah = _instance->GetCreature(DATA_DELLORAH)) { - if (Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true)) + if (Creature* brann = _instance->GetCreature(DATA_BRANN_BRONZEBEARD_INTRO)) { - Delorah->GetMotionMaster()->MovePoint(0, Branz->GetPositionX()-4, Branz->GetPositionY(), Branz->GetPositionZ()); - /// @todo Delorah->AI()->Talk(xxxx, Branz->GetGUID()); when reached at branz + delorah->GetMotionMaster()->MovePoint(0, brann->GetPositionX() - 4, brann->GetPositionY(), brann->GetPositionZ()); + /// @todo delorah->AI()->Talk(xxxx, brann->GetGUID()); when reached at branz } } } - break; + } } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - InstanceScript* instance = creature->GetInstanceScript(); - if (instance && instance->GetData(BOSS_LEVIATHAN) != DONE && player) - { - player->PrepareGossipMenu(creature); - - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - } - return true; - } + private: + InstanceScript* _instance; + }; CreatureAI* GetAI(Creature* creature) const override { @@ -1254,56 +1268,6 @@ class npc_lorekeeper : public CreatureScript } }; -//enable hardmode -////npc_brann_bronzebeard this requires more work involving area triggers. if reached this guy speaks through his radio.. -//#define GOSSIP_ITEM_1 "xxxxx" -//#define GOSSIP_ITEM_2 "xxxxx" -// -/* -class npc_brann_bronzebeard : public CreatureScript -{ -public: - npc_brann_bronzebeard() : CreatureScript("npc_brann_bronzebeard") { } - - //bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override - //{ - // player->PlayerTalkClass->ClearMenus(); - // switch (action) - // { - // case GOSSIP_ACTION_INFO_DEF+1: - // if (player) - // { - // player->PrepareGossipMenu(creature); - // - // player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - // player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - // } - // break; - // case GOSSIP_ACTION_INFO_DEF+2: - // if (player) - // player->CLOSE_GOSSIP_MENU(); - // if (Creature* Lorekeeper = creature->FindNearestCreature(NPC_LOREKEEPER, 1000, true)) //lore keeper of lorgannon - // Lorekeeper->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - // break; - // } - // return true; - //} - //bool OnGossipHello(Player* player, Creature* creature) override - //{ - // InstanceScript* instance = creature->GetInstanceScript(); - // if (instance && instance->GetData(BOSS_LEVIATHAN) !=DONE) - // { - // player->PrepareGossipMenu(creature); - // - // player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - // player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - // } - // return true; - //} - // -} -*/ - class go_ulduar_tower : public GameObjectScript { public: @@ -1836,8 +1800,8 @@ void AddSC_boss_flame_leviathan() new npc_hodirs_fury(); new npc_freyas_ward(); new npc_freya_ward_summon(); + new npc_brann_bronzebeard_ulduar_intro(); new npc_lorekeeper(); - // new npc_brann_bronzebeard(); new go_ulduar_tower(); new achievement_three_car_garage_demolisher(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 0c7df100f6..f2edfa816a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -54,6 +54,15 @@ MinionData const minionData[] = { 0, 0, } }; +ObjectData const creatureData[] = +{ + { NPC_BRANN_BRONZEBEARD_INTRO, DATA_BRANN_BRONZEBEARD_INTRO }, + { NPC_LORE_KEEPER_OF_NORGANNON, DATA_LORE_KEEPER_OF_NORGANNON }, + { NPC_HIGH_EXPLORER_DELLORAH, DATA_DELLORAH }, + { NPC_BRONZEBEARD_RADIO, DATA_BRONZEBEARD_RADIO }, + { 0, 0, } +}; + class instance_ulduar : public InstanceMapScript { public: @@ -68,6 +77,7 @@ class instance_ulduar : public InstanceMapScript LoadDoorData(doorData); LoadMinionData(minionData); + LoadObjectData(creatureData, nullptr); _algalonTimer = 61; _maxArmorItemLevel = 0; @@ -420,6 +430,8 @@ class instance_ulduar : public InstanceMapScript algalon->AI()->JustSummoned(creature); break; } + + InstanceScript::OnCreatureCreate(creature); } void OnCreatureRemove(Creature* creature) override @@ -446,6 +458,8 @@ class instance_ulduar : public InstanceMapScript default: break; } + + InstanceScript::OnCreatureRemove(creature); } void OnGameObjectCreate(GameObject* gameObject) override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index 9f640c410e..834ab32864 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -80,6 +80,23 @@ enum UlduarNPCs NPC_YOGG_SARON = 33288, NPC_ALGALON = 32871, + // Flame Leviathan + NPC_ULDUAR_COLOSSUS = 33237, + NPC_BRANN_BRONZEBEARD_INTRO = 33579, + NPC_BRANN_BRONZEBEARD_FLYING_MACHINE = 34119, + NPC_BRANN_S_FLYING_MACHINE = 34120, + NPC_ARCHMAGE_PENTARUS = 33624, + NPC_ARCHMAGE_RHYDIAN = 33696, + NPC_LORE_KEEPER_OF_NORGANNON = 33686, + NPC_HIGH_EXPLORER_DELLORAH = 33701, + NPC_BRONZEBEARD_RADIO = 34054, + NPC_FLAME_LEVIATHAN = 33113, + NPC_FLAME_LEVIATHAN_SEAT = 33114, + NPC_FLAME_LEVIATHAN_TURRET = 33139, + NPC_LEVIATHAN_DEFENSE_TURRET = 33142, + NPC_OVERLOAD_CONTROL_DEVICE = 33143, + NPC_ORBITAL_SUPPORT = 34286, + // Mimiron NPC_LEVIATHAN_MKII = 33432, NPC_VX_001 = 33651, @@ -382,6 +399,12 @@ enum UlduarData DATA_UNIVERSE_GLOBE, DATA_ALGALON_TRAPDOOR, DATA_BRANN_BRONZEBEARD_ALG, + + // Misc + DATA_BRANN_BRONZEBEARD_INTRO, + DATA_LORE_KEEPER_OF_NORGANNON, + DATA_DELLORAH, + DATA_BRONZEBEARD_RADIO }; enum UlduarWorldStates diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 68c115f9fa..0ab7c2fcb5 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -614,6 +614,47 @@ class spell_gen_burn_brutallus : public SpellScriptLoader } }; +// 48750 - Burning Depths Necrolyte Image +class spell_gen_burning_depths_necrolyte_image : public SpellScriptLoader +{ + public: + spell_gen_burning_depths_necrolyte_image() : SpellScriptLoader("spell_gen_burning_depths_necrolyte_image") { } + + class spell_gen_burning_depths_necrolyte_image_AuraScript : public AuraScript + { + PrepareAuraScript(spell_gen_burning_depths_necrolyte_image_AuraScript); + + bool Validate(SpellInfo const* spellInfo) override + { + if (!sSpellMgr->GetSpellInfo(uint32(spellInfo->Effects[EFFECT_2].CalcValue()))) + return false; + return true; + } + + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + caster->CastSpell(GetTarget(), uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue())); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue()), GetCasterGUID()); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_gen_burning_depths_necrolyte_image_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_gen_burning_depths_necrolyte_image_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_gen_burning_depths_necrolyte_image_AuraScript(); + } +}; + enum CannibalizeSpells { SPELL_CANNIBALIZE_TRIGGERED = 20578 @@ -4093,6 +4134,7 @@ void AddSC_generic_spell_scripts() new spell_gen_break_shield("spell_gen_break_shield"); new spell_gen_break_shield("spell_gen_tournament_counterattack"); new spell_gen_burn_brutallus(); + new spell_gen_burning_depths_necrolyte_image(); new spell_gen_cannibalize(); new spell_gen_chaos_blast(); new spell_gen_clone(); From 2056961aae208c5da094f3bf8fbca599b5ebac40 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 12 Sep 2015 20:15:34 +0200 Subject: [PATCH 009/524] Core/Players: Changed multi-segment taxi paths to fly nearby flight masters along the way, not directly through them * Taxi cost on multi-segment paths is now charged per segment when it is started --- src/common/Common.h | 1 + src/server/game/DataStores/DBCStores.cpp | 2 +- src/server/game/DataStores/DBCStructure.h | 15 +-- src/server/game/Entities/Player/Player.cpp | 33 +++--- src/server/game/Entities/Player/Player.h | 2 + src/server/game/Globals/ObjectMgr.cpp | 14 +-- src/server/game/Handlers/TaxiHandler.cpp | 66 +++-------- src/server/game/Maps/TransportMgr.cpp | 8 +- src/server/game/Maps/TransportMgr.h | 2 +- src/server/game/Movement/MotionMaster.cpp | 3 +- .../WaypointMovementGenerator.cpp | 111 ++++++++++++++---- .../WaypointMovementGenerator.h | 36 +++--- src/server/game/Movement/Waypoints/Path.h | 100 ---------------- 13 files changed, 162 insertions(+), 231 deletions(-) delete mode 100644 src/server/game/Movement/Waypoints/Path.h diff --git a/src/common/Common.h b/src/common/Common.h index 09d64acc79..4c209f89ec 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -39,6 +39,7 @@ #include #include #include +#include #include "Debugging/Errors.h" diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index d9061dfb10..e268b376b3 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -570,7 +570,7 @@ void LoadDBCStores(const std::string& dataPath) // fill data for (uint32 i = 1; i < sTaxiPathNodeStore.GetNumRows(); ++i) if (TaxiPathNodeEntry const* entry = sTaxiPathNodeStore.LookupEntry(i)) - sTaxiPathNodesByPath[entry->PathID].set(entry->NodeIndex, entry); + sTaxiPathNodesByPath[entry->PathID][entry->NodeIndex] = entry; // Initialize global taxinodes mask // include existed nodes that have at least single not spell base (scripted) path diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index c680494cd7..092ef71414 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -22,13 +22,8 @@ #include "Common.h" #include "DBCEnums.h" #include "Define.h" -#include "Path.h" #include "Util.h" -#include -#include -#include - // Structures using to access raw DBC data and required packing to portability #pragma pack(push, 1) @@ -2211,15 +2206,7 @@ struct TaxiPathBySourceAndDestination typedef std::map TaxiPathSetForSource; typedef std::map TaxiPathSetBySource; -struct TaxiPathNodePtr -{ - TaxiPathNodePtr() : i_ptr(NULL) { } - TaxiPathNodePtr(TaxiPathNodeEntry const* ptr) : i_ptr(ptr) { } - TaxiPathNodeEntry const* i_ptr; - operator TaxiPathNodeEntry const& () const { return *i_ptr; } -}; - -typedef Path TaxiPathNodeList; +typedef std::vector TaxiPathNodeList; typedef std::vector TaxiPathNodesByPath; #define TaxiMaskSize 14 diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 25531760b6..a1d04e4f89 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -21158,6 +21158,7 @@ bool Player::ActivateTaxiPathTo(std::vector const& nodes, Creature* npc // fill destinations path tail uint32 sourcepath = 0; uint32 totalcost = 0; + uint32 firstcost = 0; uint32 prevnode = sourcenode; uint32 lastnode = 0; @@ -21176,6 +21177,8 @@ bool Player::ActivateTaxiPathTo(std::vector const& nodes, Creature* npc } totalcost += cost; + if (i == 1) + firstcost = cost; if (prevnode == sourcenode) sourcepath = path; @@ -21214,8 +21217,6 @@ bool Player::ActivateTaxiPathTo(std::vector const& nodes, Creature* npc } //Checks and preparations done, DO FLIGHT - ModifyMoney(-(int32)totalcost); - UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, totalcost); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_FLIGHT_PATHS_TAKEN, 1); // prevent stealth flight @@ -21226,11 +21227,15 @@ bool Player::ActivateTaxiPathTo(std::vector const& nodes, Creature* npc TaxiNodesEntry const* lastPathNode = sTaxiNodesStore.LookupEntry(nodes[nodes.size()-1]); ASSERT(lastPathNode); m_taxi.ClearTaxiDestinations(); + ModifyMoney(-(int32)totalcost); + UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, totalcost); TeleportTo(lastPathNode->map_id, lastPathNode->x, lastPathNode->y, lastPathNode->z, GetOrientation()); return false; } else { + ModifyMoney(-(int32)firstcost); + UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, firstcost); GetSession()->SendActivateTaxiReply(ERR_TAXIOK); GetSession()->SendDoFlight(mount_display_id, sourcepath); } @@ -21281,30 +21286,30 @@ void Player::ContinueTaxiFlight() float distPrev = MAP_SIZE*MAP_SIZE; float distNext = - (nodeList[0].LocX-GetPositionX())*(nodeList[0].LocX-GetPositionX())+ - (nodeList[0].LocY-GetPositionY())*(nodeList[0].LocY-GetPositionY())+ - (nodeList[0].LocZ-GetPositionZ())*(nodeList[0].LocZ-GetPositionZ()); + (nodeList[0]->LocX - GetPositionX())*(nodeList[0]->LocX - GetPositionX()) + + (nodeList[0]->LocY - GetPositionY())*(nodeList[0]->LocY - GetPositionY()) + + (nodeList[0]->LocZ - GetPositionZ())*(nodeList[0]->LocZ - GetPositionZ()); for (uint32 i = 1; i < nodeList.size(); ++i) { - TaxiPathNodeEntry const& node = nodeList[i]; - TaxiPathNodeEntry const& prevNode = nodeList[i-1]; + TaxiPathNodeEntry const* node = nodeList[i]; + TaxiPathNodeEntry const* prevNode = nodeList[i-1]; // skip nodes at another map - if (node.MapID != GetMapId()) + if (node->MapID != GetMapId()) continue; distPrev = distNext; distNext = - (node.LocX-GetPositionX())*(node.LocX-GetPositionX())+ - (node.LocY-GetPositionY())*(node.LocY-GetPositionY())+ - (node.LocZ-GetPositionZ())*(node.LocZ-GetPositionZ()); + (node->LocX - GetPositionX())*(node->LocX - GetPositionX()) + + (node->LocY - GetPositionY())*(node->LocY - GetPositionY()) + + (node->LocZ - GetPositionZ())*(node->LocZ - GetPositionZ()); float distNodes = - (node.LocX-prevNode.LocX)*(node.LocX-prevNode.LocX)+ - (node.LocY-prevNode.LocY)*(node.LocY-prevNode.LocY)+ - (node.LocZ-prevNode.LocZ)*(node.LocZ-prevNode.LocZ); + (node->LocX - prevNode->LocX)*(node->LocX - prevNode->LocX) + + (node->LocY - prevNode->LocY)*(node->LocY - prevNode->LocY) + + (node->LocZ - prevNode->LocZ)*(node->LocZ - prevNode->LocZ); if (distNext + distPrev < distNodes) { diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index a031840a1d..94d0fa5697 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -952,6 +952,8 @@ class PlayerTaxi m_TaxiDestinations.pop_front(); return GetTaxiDestination(); } + + std::deque const& GetPath() const { return m_TaxiDestinations; } bool empty() const { return m_TaxiDestinations.empty(); } friend std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 9ed8dc1cf7..345cda2269 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3990,7 +3990,7 @@ void ObjectMgr::LoadQuests() "ItemDrop1, ItemDrop2, ItemDrop3, ItemDrop4, ItemDropQuantity1, ItemDropQuantity2, ItemDropQuantity3, ItemDropQuantity4, " // 87 88 89 90 91 92 93 94 95 96 97 98 "RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, " - // 99 100 101 102 103 + // 99 100 101 102 103 "Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4" " FROM quest_template"); if (!result) @@ -4011,7 +4011,7 @@ void ObjectMgr::LoadQuests() } while (result->NextRow()); std::map usedMailTemplates; - + // Load `quest_details` // 0 1 2 3 4 5 6 7 8 result = WorldDatabase.Query("SELECT ID, Emote1, Emote2, Emote3, Emote4, EmoteDelay1, EmoteDelay2, EmoteDelay3, EmoteDelay4 FROM quest_details"); @@ -5090,13 +5090,13 @@ void ObjectMgr::LoadEventScripts() { for (size_t node_idx = 0; node_idx < sTaxiPathNodesByPath[path_idx].size(); ++node_idx) { - TaxiPathNodeEntry const& node = sTaxiPathNodesByPath[path_idx][node_idx]; + TaxiPathNodeEntry const* node = sTaxiPathNodesByPath[path_idx][node_idx]; - if (node.ArrivalEventID) - evt_scripts.insert(node.ArrivalEventID); + if (node->ArrivalEventID) + evt_scripts.insert(node->ArrivalEventID); - if (node.DepartureEventID) - evt_scripts.insert(node.DepartureEventID); + if (node->DepartureEventID) + evt_scripts.insert(node->DepartureEventID); } } diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index af0f5b0fc7..a671250c17 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -24,7 +24,6 @@ #include "Log.h" #include "ObjectMgr.h" #include "Player.h" -#include "Path.h" #include "WaypointMovementGenerator.h" void WorldSession::HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvData) @@ -212,7 +211,7 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPacket& recvData) MovementInfo movementInfo; // used only for proper packet read ReadMovementInfo(recvData, &movementInfo); - recvData.read_skip(); // unk + recvData.read_skip(); // spline id // in taxi flight packet received in 2 case: // 1) end taxi path in far (multi-node) flight @@ -220,59 +219,32 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPacket& recvData) // we need process only (1) uint32 curDest = GetPlayer()->m_taxi.GetTaxiDestination(); - if (!curDest) - return; - - TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest); - - // far teleport case - if (curDestNode && curDestNode->map_id != GetPlayer()->GetMapId()) + if (curDest) { - if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) + TaxiNodesEntry const* curDestNode = sTaxiNodesStore.LookupEntry(curDest); + + // far teleport case + if (curDestNode && curDestNode->map_id != GetPlayer()->GetMapId()) { - // short preparations to continue flight - FlightPathMovementGenerator* flight = (FlightPathMovementGenerator*)(GetPlayer()->GetMotionMaster()->top()); - - flight->SetCurrentNodeAfterTeleport(); - TaxiPathNodeEntry const& node = flight->GetPath()[flight->GetCurrentNode()]; - flight->SkipCurrentNode(); - - GetPlayer()->TeleportTo(curDestNode->map_id, node.LocX, node.LocY, node.LocZ, GetPlayer()->GetOrientation()); - } - return; - } - - uint32 destinationnode = GetPlayer()->m_taxi.NextTaxiDestination(); - if (destinationnode > 0) // if more destinations to go - { - // current source node for next destination - uint32 sourcenode = GetPlayer()->m_taxi.GetTaxiSource(); - - // Add to taximask middle hubs in taxicheat mode (to prevent having player with disabled taxicheat and not having back flight path) - if (GetPlayer()->isTaxiCheater()) - { - if (GetPlayer()->m_taxi.SetTaximaskNode(sourcenode)) + if (GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) { - WorldPacket data(SMSG_NEW_TAXI_PATH, 0); - _player->GetSession()->SendPacket(&data); + // short preparations to continue flight + FlightPathMovementGenerator* flight = (FlightPathMovementGenerator*)(GetPlayer()->GetMotionMaster()->top()); + + flight->SetCurrentNodeAfterTeleport(); + TaxiPathNodeEntry const* node = flight->GetPath()[flight->GetCurrentNode()]; + flight->SkipCurrentNode(); + + GetPlayer()->TeleportTo(curDestNode->map_id, node->LocX, node->LocY, node->LocZ, GetPlayer()->GetOrientation()); } } - TC_LOG_DEBUG("network", "WORLD: Taxi has to go from %u to %u", sourcenode, destinationnode); - - uint32 mountDisplayId = sObjectMgr->GetTaxiMountDisplayId(sourcenode, GetPlayer()->GetTeam()); - - uint32 path, cost; - sObjectMgr->GetTaxiPath(sourcenode, destinationnode, path, cost); - - if (path && mountDisplayId) - SendDoFlight(mountDisplayId, path, 1); // skip start fly node - else - GetPlayer()->m_taxi.ClearTaxiDestinations(); // clear problematic path and next return; } - else - GetPlayer()->m_taxi.ClearTaxiDestinations(); // not destinations, clear source node + + // at this point only 1 node is expected (final destination) + if (GetPlayer()->m_taxi.GetPath().size() != 1) + return; GetPlayer()->CleanupAfterTaxiFlight(); GetPlayer()->SetFallInformation(0, GetPlayer()->GetPositionZ()); diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index dadc2eeeac..e5815a415e 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -112,7 +112,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl Movement::PointsArray splinePath, allPoints; bool mapChange = false; for (size_t i = 0; i < path.size(); ++i) - allPoints.push_back(G3D::Vector3(path[i].LocX, path[i].LocY, path[i].LocZ)); + allPoints.push_back(G3D::Vector3(path[i]->LocX, path[i]->LocY, path[i]->LocZ)); // Add extra points to allow derivative calculations for all path nodes allPoints.insert(allPoints.begin(), allPoints.front().lerp(allPoints[1], -0.2f)); @@ -128,8 +128,8 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl { if (!mapChange) { - TaxiPathNodeEntry const& node_i = path[i]; - if (i != path.size() - 1 && (node_i.Flags & 1 || node_i.MapID != path[i + 1].MapID)) + TaxiPathNodeEntry const* node_i = path[i]; + if (i != path.size() - 1 && (node_i->Flags & 1 || node_i->MapID != path[i + 1]->MapID)) { keyFrames.back().Teleport = true; mapChange = true; @@ -142,7 +142,7 @@ void TransportMgr::GeneratePath(GameObjectTemplate const* goInfo, TransportTempl k.InitialOrientation = Position::NormalizeOrientation(std::atan2(h.y, h.x) + float(M_PI)); keyFrames.push_back(k); - splinePath.push_back(G3D::Vector3(node_i.LocX, node_i.LocY, node_i.LocZ)); + splinePath.push_back(G3D::Vector3(node_i->LocX, node_i->LocY, node_i->LocZ)); transport->mapsUsed.insert(k.Node->MapID); } } diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index fff7b9d8af..c273ea7fb1 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -37,7 +37,7 @@ typedef std::unordered_map > TransportInstanceMap; struct KeyFrame { - explicit KeyFrame(TaxiPathNodeEntry const& _node) : Index(0), Node(&_node), InitialOrientation(0.0f), + explicit KeyFrame(TaxiPathNodeEntry const* node) : Index(0), Node(node), InitialOrientation(0.0f), DistSinceStop(-1.0f), DistUntilStop(-1.0f), DistFromPrev(-1.0f), TimeFrom(0.0f), TimeTo(0.0f), Teleport(false), ArriveTime(0), DepartureTime(0), Spline(NULL), NextDistFromPrev(0.0f), NextArriveTime(0) { diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index b69322f572..2bcb4aeb3b 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -563,7 +563,8 @@ void MotionMaster::MoveTaxiFlight(uint32 path, uint32 pathnode) if (path < sTaxiPathNodesByPath.size()) { TC_LOG_DEBUG("misc", "%s taxi to (Path %u node %u)", _owner->GetName().c_str(), path, pathnode); - FlightPathMovementGenerator* mgen = new FlightPathMovementGenerator(sTaxiPathNodesByPath[path], pathnode); + FlightPathMovementGenerator* mgen = new FlightPathMovementGenerator(pathnode); + mgen->LoadPath(_owner->ToPlayer()); Mutate(mgen, MOTION_SLOT_CONTROLLED); } else diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index f91fc1985d..8c61c96dfd 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -245,17 +245,64 @@ bool WaypointMovementGenerator::GetResetPos(Creature*, float& x, float uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const { - if (i_currentNode >= i_path->size()) - return i_path->size(); + if (i_currentNode >= i_path.size()) + return i_path.size(); - uint32 curMapId = (*i_path)[i_currentNode].MapID; - for (uint32 i = i_currentNode; i < i_path->size(); ++i) - { - if ((*i_path)[i].MapID != curMapId) + uint32 curMapId = i_path[i_currentNode]->MapID; + for (uint32 i = i_currentNode; i < i_path.size(); ++i) + if (i_path[i]->MapID != curMapId) return i; - } - return i_path->size(); + return i_path.size(); +} + +#define SKIP_SPLINE_POINT_DISTANCE_SQ (40.0f * 40.0f) + +bool IsNodeIncludedInShortenedPath(TaxiPathNodeEntry const* p1, TaxiPathNodeEntry const* p2) +{ + return p1->MapID != p2->MapID || std::pow(p1->LocX - p2->LocX, 2) + std::pow(p1->LocY - p2->LocY, 2) > SKIP_SPLINE_POINT_DISTANCE_SQ; +} + +void FlightPathMovementGenerator::LoadPath(Player* player) +{ + _pointsForPathSwitch.clear(); + std::deque const& taxi = player->m_taxi.GetPath(); + for (uint32 src = 0, dst = 1; dst < taxi.size(); src = dst++) + { + uint32 path, cost; + sObjectMgr->GetTaxiPath(taxi[src], taxi[dst], path, cost); + if (path > sTaxiPathNodesByPath.size()) + return; + + TaxiPathNodeList const& nodes = sTaxiPathNodesByPath[path]; + if (!nodes.empty()) + { + TaxiPathNodeEntry const* start = nodes[0]; + TaxiPathNodeEntry const* end = nodes[nodes.size() - 1]; + bool passedPreviousSegmentProximityCheck = false; + for (uint32 i = 0; i < nodes.size(); ++i) + { + sMapMgr->CreateMap(nodes[i]->MapID, player)->SummonCreature(1, { nodes[i]->LocX, nodes[i]->LocY, nodes[i]->LocZ, 0.0f })->SetLevel(i ? i : 1); + + if (passedPreviousSegmentProximityCheck || !src || i_path.empty() || IsNodeIncludedInShortenedPath(i_path[i_path.size() - 1], nodes[i])) + { + if ((!src || (IsNodeIncludedInShortenedPath(start, nodes[i]) && i >= 2)) && + (dst == taxi.size() - 1 || (IsNodeIncludedInShortenedPath(end, nodes[i]) && i < nodes.size() - 1))) + { + passedPreviousSegmentProximityCheck = true; + i_path.push_back(nodes[i]); + } + } + else + { + i_path.pop_back(); + --_pointsForPathSwitch.back().PathIndex; + } + } + } + + _pointsForPathSwitch.push_back({ uint32(i_path.size() - 1), int32(cost) }); + } } void FlightPathMovementGenerator::DoInitialize(Player* player) @@ -296,7 +343,7 @@ void FlightPathMovementGenerator::DoReset(Player* player) uint32 end = GetPathAtMapEnd(); for (uint32 i = GetCurrentNode(); i != end; ++i) { - G3D::Vector3 vertice((*i_path)[i].LocX, (*i_path)[i].LocY, (*i_path)[i].LocZ); + G3D::Vector3 vertice(i_path[i]->LocX, i_path[i]->LocY, i_path[i]->LocZ); init.Path().push_back(vertice); } init.SetFirstPointId(GetCurrentNode()); @@ -313,9 +360,21 @@ bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/) bool departureEvent = true; do { - DoEventIfAny(player, (*i_path)[i_currentNode], departureEvent); + DoEventIfAny(player, i_path[i_currentNode], departureEvent); + while (!_pointsForPathSwitch.empty() && _pointsForPathSwitch.front().PathIndex <= i_currentNode) + { + _pointsForPathSwitch.pop_front(); + player->m_taxi.NextTaxiDestination(); + if (!_pointsForPathSwitch.empty()) + { + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_FOR_TRAVELLING, _pointsForPathSwitch.front().Cost); + player->ModifyMoney(-_pointsForPathSwitch.front().Cost); + } + } + if (pointId == i_currentNode) break; + if (i_currentNode == _preloadTargetNode) PreloadEndGrid(); i_currentNode += (uint32)departureEvent; @@ -324,18 +383,18 @@ bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/) while (true); } - return i_currentNode < (i_path->size()-1); + return i_currentNode < (i_path.size() - 1); } void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport() { - if (i_path->empty()) + if (i_path.empty() || i_currentNode >= i_path.size()) return; - uint32 map0 = (*i_path)[0].MapID; - for (size_t i = 1; i < i_path->size(); ++i) + uint32 map0 = i_path[i_currentNode]->MapID; + for (size_t i = i_currentNode + 1; i < i_path.size(); ++i) { - if ((*i_path)[i].MapID != map0) + if (i_path[i]->MapID != map0) { i_currentNode = i; return; @@ -343,19 +402,21 @@ void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport() } } -void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry const& node, bool departure) +void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry const* node, bool departure) { - if (uint32 eventid = departure ? node.DepartureEventID : node.ArrivalEventID) + if (uint32 eventid = departure ? node->DepartureEventID : node->ArrivalEventID) { - TC_LOG_DEBUG("maps.script", "Taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node.NodeIndex, node.PathID, player->GetName().c_str()); + TC_LOG_DEBUG("maps.script", "Taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node->NodeIndex, node->PathID, player->GetName().c_str()); player->GetMap()->ScriptsStart(sEventScripts, eventid, player, player); } } bool FlightPathMovementGenerator::GetResetPos(Player*, float& x, float& y, float& z) { - const TaxiPathNodeEntry& node = (*i_path)[i_currentNode]; - x = node.LocX; y = node.LocY; z = node.LocZ; + TaxiPathNodeEntry const* node = i_path[i_currentNode]; + x = node->LocX; + y = node->LocY; + z = node->LocZ; return true; } @@ -363,11 +424,11 @@ void FlightPathMovementGenerator::InitEndGridInfo() { /*! Storage to preload flightmaster grid at end of flight. For multi-stop flights, this will be reinitialized for each flightmaster at the end of each spline (or stop) in the flight. */ - uint32 nodeCount = (*i_path).size(); //! Number of nodes in path. - _endMapId = (*i_path)[nodeCount - 1].MapID; //! MapId of last node + uint32 nodeCount = i_path.size(); //! Number of nodes in path. + _endMapId = i_path[nodeCount - 1]->MapID; //! MapId of last node _preloadTargetNode = nodeCount - 3; - _endGridX = (*i_path)[nodeCount - 1].LocX; - _endGridY = (*i_path)[nodeCount - 1].LocY; + _endGridX = i_path[nodeCount - 1]->LocX; + _endGridY = i_path[nodeCount - 1]->LocY; } void FlightPathMovementGenerator::PreloadEndGrid() @@ -378,7 +439,7 @@ void FlightPathMovementGenerator::PreloadEndGrid() // Load the grid if (endMap) { - TC_LOG_DEBUG("misc", "Preloading rid (%f, %f) for map %u at node index %u/%u", _endGridX, _endGridY, _endMapId, _preloadTargetNode, (uint32)(i_path->size()-1)); + TC_LOG_DEBUG("misc", "Preloading rid (%f, %f) for map %u at node index %u/%u", _endGridX, _endGridY, _endMapId, _preloadTargetNode, (uint32)(i_path.size() - 1)); endMap->LoadGrid(_endGridX, _endGridY); } else diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h index eb8533159a..6cddd68ec1 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h @@ -27,13 +27,8 @@ #include "MovementGenerator.h" #include "WaypointManager.h" -#include "Path.h" - #include "Player.h" -#include -#include - #define FLIGHT_TRAVEL_UPDATE 100 #define STOP_TIME_FOR_PLAYER 3 * MINUTE * IN_MILLISECONDS // 3 Minutes #define TIMEDIFF_NEXT_WP 250 @@ -45,8 +40,6 @@ class PathMovementBase PathMovementBase() : i_path(NULL), i_currentNode(0) { } virtual ~PathMovementBase() { }; - // template pattern, not defined .. override required - void LoadPath(T &); uint32 GetCurrentNode() const { return i_currentNode; } protected: @@ -110,30 +103,30 @@ class WaypointMovementGenerator : public MovementGeneratorMedium< Crea * and hence generates ground and activities for the player. */ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, FlightPathMovementGenerator >, - public PathMovementBase + public PathMovementBase { public: - explicit FlightPathMovementGenerator(TaxiPathNodeList const& pathnodes, uint32 startNode = 0) + explicit FlightPathMovementGenerator(uint32 startNode = 0) { - i_path = &pathnodes; i_currentNode = startNode; _endGridX = 0.0f; _endGridY = 0.0f; _endMapId = 0; _preloadTargetNode = 0; } + void LoadPath(Player* player); void DoInitialize(Player*); void DoReset(Player*); void DoFinalize(Player*); bool DoUpdate(Player*, uint32); MovementGeneratorType GetMovementGeneratorType() const override { return FLIGHT_MOTION_TYPE; } - TaxiPathNodeList const& GetPath() { return *i_path; } + TaxiPathNodeList const& GetPath() { return i_path; } uint32 GetPathAtMapEnd() const; - bool HasArrived() const { return (i_currentNode >= i_path->size()); } + bool HasArrived() const { return (i_currentNode >= i_path.size()); } void SetCurrentNodeAfterTeleport(); void SkipCurrentNode() { ++i_currentNode; } - void DoEventIfAny(Player* player, TaxiPathNodeEntry const& node, bool departure); + void DoEventIfAny(Player* player, TaxiPathNodeEntry const* node, bool departure); bool GetResetPos(Player*, float& x, float& y, float& z); @@ -141,9 +134,18 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig void PreloadEndGrid(); private: - float _endGridX; //! X coord of last node location - float _endGridY; //! Y coord of last node location - uint32 _endMapId; //! map Id of last node location - uint32 _preloadTargetNode; //! node index where preloading starts + + float _endGridX; //! X coord of last node location + float _endGridY; //! Y coord of last node location + uint32 _endMapId; //! map Id of last node location + uint32 _preloadTargetNode; //! node index where preloading starts + + struct TaxiNodeChangeInfo + { + uint32 PathIndex; + int32 Cost; + }; + + std::deque _pointsForPathSwitch; //! node indexes and costs where TaxiPath changes }; #endif diff --git a/src/server/game/Movement/Waypoints/Path.h b/src/server/game/Movement/Waypoints/Path.h deleted file mode 100644 index bb8abc37eb..0000000000 --- a/src/server/game/Movement/Waypoints/Path.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2008-2015 TrinityCore - * Copyright (C) 2005-2009 MaNGOS - * - * 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 TRINITYCORE_PATH_H -#define TRINITYCORE_PATH_H - -#include "Common.h" -#include - -struct PathNode -{ - PathNode(): x(0.0f), y(0.0f), z(0.0f) { } - PathNode(float _x, float _y, float _z): x(_x), y(_y), z(_z) { } - float x, y, z; -}; -template - -class Path -{ - public: - size_t size() const { return i_nodes.size(); } - bool empty() const { return i_nodes.empty(); } - void resize(unsigned int sz) { i_nodes.resize(sz); } - void clear() { i_nodes.clear(); } - void erase(uint32 idx) { i_nodes.erase(i_nodes.begin()+idx); } - void crop(unsigned int start, unsigned int end) - { - while (start && !i_nodes.empty()) - { - i_nodes.pop_front(); - --start; - } - - while (end && !i_nodes.empty()) - { - i_nodes.pop_back(); - --end; - } - } - - float GetTotalLength(uint32 start, uint32 end) const - { - float len = 0.0f; - for (uint32 idx=start+1; idx < end; ++idx) - { - PathNode const& node = i_nodes[idx]; - PathNode const& prev = i_nodes[idx-1]; - float xd = node.x - prev.x; - float yd = node.y - prev.y; - float zd = node.z - prev.z; - len += std::sqrt(xd*xd + yd*yd + zd*zd); - } - return len; - } - - float GetTotalLength() const { return GetTotalLength(0, size()); } - - float GetPassedLength(uint32 curnode, float x, float y, float z) const - { - float len = GetTotalLength(0, curnode); - - if (curnode > 0) - { - PathNode const& node = i_nodes[curnode-1]; - float xd = x - node.x; - float yd = y - node.y; - float zd = z - node.z; - len += std::sqrt(xd*xd + yd*yd + zd*zd); - } - - return len; - } - - PathNode& operator[](size_t idx) { return i_nodes[idx]; } - PathNode const& operator[](size_t idx) const { return i_nodes[idx]; } - - void set(size_t idx, PathElem elem) { i_nodes[idx] = elem; } - - protected: - std::deque i_nodes; -}; - -typedef Path SimplePath; - -#endif From 2923dd5badc2bb0381653b533a11cd8cb29fd737 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 12 Sep 2015 21:21:03 +0200 Subject: [PATCH 010/524] Default initialize i_path instead of using NULL --- .../Movement/MovementGenerators/WaypointMovementGenerator.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h index 6cddd68ec1..caf76b5ea1 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h @@ -37,7 +37,7 @@ template class PathMovementBase { public: - PathMovementBase() : i_path(NULL), i_currentNode(0) { } + PathMovementBase() : i_path(), i_currentNode(0) { } virtual ~PathMovementBase() { }; uint32 GetCurrentNode() const { return i_currentNode; } From 2138726e61f83eea76634372e8cb1b4452e0f84d Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 12 Sep 2015 22:55:44 +0200 Subject: [PATCH 011/524] Removed wip leftovers --- .../Movement/MovementGenerators/WaypointMovementGenerator.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 8c61c96dfd..8a5ac387f1 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -282,8 +282,6 @@ void FlightPathMovementGenerator::LoadPath(Player* player) bool passedPreviousSegmentProximityCheck = false; for (uint32 i = 0; i < nodes.size(); ++i) { - sMapMgr->CreateMap(nodes[i]->MapID, player)->SummonCreature(1, { nodes[i]->LocX, nodes[i]->LocY, nodes[i]->LocZ, 0.0f })->SetLevel(i ? i : 1); - if (passedPreviousSegmentProximityCheck || !src || i_path.empty() || IsNodeIncludedInShortenedPath(i_path[i_path.size() - 1], nodes[i])) { if ((!src || (IsNodeIncludedInShortenedPath(start, nodes[i]) && i >= 2)) && From a90ae075c9de330b40d570aa172708486c0566c4 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 13 Sep 2015 18:37:53 +0200 Subject: [PATCH 012/524] Scripts/Naxxramas: Fixed bugs with Sapphiron encounter: - Sapphiron will now properly re-engage if the previous attempt ended while he was in flight. - Sapphiron will now properly be hovering while in the air phase instead of standing idly on the ground. - Move Frost Resistance achievement check from custom script to spell 60539 (Sapphiron Achievement Check), thanks to @Shauren for the heads up. --- .../Northrend/Naxxramas/boss_sapphiron.cpp | 80 +++++++++---------- 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index ee482c23d1..02a7aa570e 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -43,6 +43,7 @@ enum Spells SPELL_BERSERK = 26662, SPELL_DIES = 29357, SPELL_CHILL = 28547, + SPELL_CHECK_RESISTS = 60539, }; enum Phases @@ -67,7 +68,8 @@ enum Events EVENT_EXPLOSION, EVENT_LAND, EVENT_GROUND, - EVENT_BIRTH + EVENT_BIRTH, + EVENT_CHECK_RESISTS }; enum Misc @@ -90,10 +92,9 @@ class boss_sapphiron : public CreatureScript struct boss_sapphironAI : public BossAI { boss_sapphironAI(Creature* creature) : - BossAI(creature, BOSS_SAPPHIRON), _map(me->GetMap()) + BossAI(creature, BOSS_SAPPHIRON), _iceboltCount(0), _map(me->GetMap()) { Initialize(); - _iceboltCount = 0; } void Initialize() @@ -101,7 +102,6 @@ class boss_sapphiron : public CreatureScript _phase = PHASE_NULL; _canTheHundredClub = true; - _checkFrostResistTimer = 5 * IN_MILLISECONDS; } void InitializeAI() override @@ -123,7 +123,16 @@ class boss_sapphiron : public CreatureScript _Reset(); if (_phase == PHASE_FLIGHT) + { ClearIceBlock(); + me->SetReactState(REACT_AGGRESSIVE); + if (me->IsHovering()) + { + me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); + me->SetHover(false); + } + me->SetDisableGravity(false); + } Initialize(); } @@ -134,22 +143,30 @@ class boss_sapphiron : public CreatureScript me->CastSpell(me, SPELL_FROST_AURA, true); + DoCast(me, SPELL_CHECK_RESISTS); + events.ScheduleEvent(EVENT_CHECK_RESISTS, 30 * IN_MILLISECONDS); events.ScheduleEvent(EVENT_BERSERK, 15 * MINUTE * IN_MILLISECONDS); EnterPhaseGround(); - - CheckPlayersFrostResist(); } void SpellHitTarget(Unit* target, SpellInfo const* spell) override { - if (spell->Id == SPELL_ICEBOLT) + switch(spell->Id) { - IceBlockMap::iterator itr = _iceblocks.find(target->GetGUID()); - if (itr != _iceblocks.end() && !itr->second) + case SPELL_ICEBOLT: { - if (GameObject* iceblock = me->SummonGameObject(GO_ICEBLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, 0, 0, 0, 0, 25)) - itr->second = iceblock->GetGUID(); + IceBlockMap::iterator itr = _iceblocks.find(target->GetGUID()); + if (itr != _iceblocks.end() && !itr->second) + { + if (GameObject* iceblock = me->SummonGameObject(GO_ICEBLOCK, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, 0, 0, 0, 0, 25)) + itr->second = iceblock->GetGUID(); + } + break; } + case SPELL_CHECK_RESISTS: + if (target && target->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE) + _canTheHundredClub = false; + break; } } @@ -157,8 +174,6 @@ class boss_sapphiron : public CreatureScript { _JustDied(); me->CastSpell(me, SPELL_DIES, true); - - CheckPlayersFrostResist(); } void MovementInform(uint32 /*type*/, uint32 id) override @@ -176,22 +191,6 @@ class boss_sapphiron : public CreatureScript } } - void CheckPlayersFrostResist() - { - if (_canTheHundredClub && _map && _map->IsRaid()) - { - Map::PlayerList const &players = _map->GetPlayers(); - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (itr->GetSource()->GetResistance(SPELL_SCHOOL_FROST) > MAX_FROST_RESISTANCE) - { - _canTheHundredClub = false; - break; - } - } - } - } - void EnterPhaseGround() { _phase = PHASE_GROUND; @@ -235,23 +234,16 @@ class boss_sapphiron : public CreatureScript if ((_phase != PHASE_BIRTH && !UpdateVictim()) || !CheckInRoom()) return; - if (_canTheHundredClub) - { - if (_checkFrostResistTimer <= diff) - { - CheckPlayersFrostResist(); - _checkFrostResistTimer = 5 * IN_MILLISECONDS; - } - else - _checkFrostResistTimer -= diff; - } - if (_phase == PHASE_GROUND) { while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { + case EVENT_CHECK_RESISTS: + DoCast(me, SPELL_CHECK_RESISTS); + events.ScheduleEvent(EVENT_CHECK_RESISTS, 30 * IN_MILLISECONDS); + return; case EVENT_BERSERK: Talk(EMOTE_ENRAGE); DoCast(me, SPELL_BERSERK); @@ -270,7 +262,6 @@ class boss_sapphiron : public CreatureScript return; case EVENT_BLIZZARD: { - //DoCastAOE(SPELL_SUMMON_BLIZZARD); if (Creature* summon = DoSummon(NPC_BLIZZARD, me, 0.0f, urand(25, 30) * IN_MILLISECONDS, TEMPSUMMON_TIMED_DESPAWN)) summon->GetMotionMaster()->MoveRandom(40); events.ScheduleEvent(EVENT_BLIZZARD, RAID_MODE(20, 7) * IN_MILLISECONDS, 0, PHASE_GROUND); @@ -300,9 +291,14 @@ class boss_sapphiron : public CreatureScript { switch (eventId) { + case EVENT_CHECK_RESISTS: + DoCast(me, SPELL_CHECK_RESISTS); + events.ScheduleEvent(EVENT_CHECK_RESISTS, 30 * IN_MILLISECONDS); + return; case EVENT_LIFTOFF: Talk(EMOTE_AIR_PHASE); me->SetDisableGravity(true); + me->SetHover(true); events.ScheduleEvent(EVENT_ICEBOLT, 1500); _iceboltCount = RAID_MODE(2, 3); return; @@ -346,6 +342,7 @@ class boss_sapphiron : public CreatureScript case EVENT_LAND: me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); Talk(EMOTE_GROUND_PHASE); + me->SetHover(false); me->SetDisableGravity(false); events.ScheduleEvent(EVENT_GROUND, 1500); return; @@ -406,7 +403,6 @@ class boss_sapphiron : public CreatureScript uint32 _iceboltCount; IceBlockMap _iceblocks; bool _canTheHundredClub; - uint32 _checkFrostResistTimer; Map* _map; }; From 807deaccef7f811007d750709645496fc93a8b63 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 13 Sep 2015 20:30:06 +0200 Subject: [PATCH 013/524] Scripts/Naxxramas: Fixes to Patchwerk AI: - Hateful Strike can only target the highest 1 (10m)/ 2 (25m) threat targets that aren't the current target. Out of these targets, Hateful Strike hits the highest current HP target. - Hateful Strike now properly adds threat to all targets eligible for it, plus the current target if it is in melee range. Actual threat amount is not from sniffs - please update this if you have conclusive retail data. - Cleaned up some millisecond constants and variable names. --- .../Northrend/Naxxramas/boss_patchwerk.cpp | 68 ++++++++++++++----- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index f584218135..2ca55ee570 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -49,6 +49,11 @@ enum Misc ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT = 10286 }; +enum HatefulThreatAmounts +{ + HATEFUL_THREAT_AMT = 1000, +}; + class boss_patchwerk : public CreatureScript { public: @@ -92,8 +97,8 @@ public: _EnterCombat(); Enraged = false; Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_HATEFUL, 1000); - events.ScheduleEvent(EVENT_BERSERK, 360000); + events.ScheduleEvent(EVENT_HATEFUL, 1 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_BERSERK, 6 * MINUTE * IN_MILLISECONDS); instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_MAKE_QUICK_WERK_OF_HIM_STARTING_EVENT); } @@ -111,37 +116,68 @@ public: { case EVENT_HATEFUL: { - //Cast Hateful strike on the player with the highest - //amount of HP within melee distance - uint32 MostHP = 0; - Unit* pMostHPTarget = NULL; + // Hateful Strike targets the highest non-MT threat in melee range on 10man + // and the higher HP target out of the two highest non-MT threats in melee range on 25man + float MostThreat = 0.0f; + Unit* secondThreatTarget = NULL; + Unit* thirdThreatTarget = NULL; + std::list::const_iterator i = me->getThreatManager().getThreatList().begin(); for (; i != me->getThreatManager().getThreatList().end(); ++i) - { + { // find second highest Unit* target = (*i)->getTarget(); - if (target->IsAlive() && target != me->GetVictim() && target->GetHealth() > MostHP && me->IsWithinMeleeRange(target)) + if (target->IsAlive() && target != me->GetVictim() && (*i)->getThreat() >= MostThreat && me->IsWithinMeleeRange(target)) { - MostHP = target->GetHealth(); - pMostHPTarget = target; + MostThreat = (*i)->getThreat(); + secondThreatTarget = target; } } - if (!pMostHPTarget) - pMostHPTarget = me->GetVictim(); + if (secondThreatTarget && Is25ManRaid()) + { // find third highest + MostThreat = 0.0f; + i = me->getThreatManager().getThreatList().begin(); + for (; i != me->getThreatManager().getThreatList().end(); ++i) + { + Unit* target = (*i)->getTarget(); + if (target->IsAlive() && target != me->GetVictim() && target != secondThreatTarget && (*i)->getThreat() >= MostThreat && me->IsWithinMeleeRange(target)) + { + MostThreat = (*i)->getThreat(); + thirdThreatTarget = target; + } + } + } - DoCast(pMostHPTarget, SPELL_HATEFUL_STRIKE, true); + Unit* pHatefulTarget = NULL; + if (!thirdThreatTarget) + pHatefulTarget = secondThreatTarget; + else if (secondThreatTarget) + pHatefulTarget = (secondThreatTarget->GetHealth() < thirdThreatTarget->GetHealth()) ? thirdThreatTarget : secondThreatTarget; - events.ScheduleEvent(EVENT_HATEFUL, 1000); + if (!pHatefulTarget) + pHatefulTarget = me->GetVictim(); + + DoCast(pHatefulTarget, SPELL_HATEFUL_STRIKE, true); + + // add threat to highest threat targets + if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim())) + me->getThreatManager().addThreat(me->GetVictim(), HATEFUL_THREAT_AMT); + if (secondThreatTarget) + me->getThreatManager().addThreat(secondThreatTarget, HATEFUL_THREAT_AMT); + if (thirdThreatTarget) + me->getThreatManager().addThreat(thirdThreatTarget, HATEFUL_THREAT_AMT); // this will only ever be used in 25m + + events.ScheduleEvent(EVENT_HATEFUL, 1 * IN_MILLISECONDS); break; } case EVENT_BERSERK: DoCast(me, SPELL_BERSERK, true); Talk(EMOTE_BERSERK); - events.ScheduleEvent(EVENT_SLIME, 2000); + events.ScheduleEvent(EVENT_SLIME, 2 * IN_MILLISECONDS); break; case EVENT_SLIME: DoCastVictim(SPELL_SLIME_BOLT, true); - events.ScheduleEvent(EVENT_SLIME, 2000); + events.ScheduleEvent(EVENT_SLIME, 2 * IN_MILLISECONDS); break; } } From bbaa7f0d7341d692b58930ebb96b7b46b391c75c Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Mon, 14 Sep 2015 23:08:33 +0200 Subject: [PATCH 014/524] Scripts/Commands enhance .ticket complete command --- src/server/scripts/Commands/cs_ticket.cpp | 27 ++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index 5fc3cc618e..b609dfe18d 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -113,7 +113,7 @@ public: // If assigned to different player other than current, leave //! Console can override though - Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL; + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr; if (player && ticket->IsAssignedNotTo(player->GetGUID())) { handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId(), target.c_str()); @@ -146,7 +146,7 @@ public: // Ticket should be assigned to the player who tries to close it. // Console can override though - Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL; + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr; if (player && ticket->IsAssignedNotTo(player->GetGUID())) { handler->PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->GetId()); @@ -190,7 +190,7 @@ public: // Cannot comment ticket assigned to someone else //! Console excluded - Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL; + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr; if (player && ticket->IsAssignedNotTo(player->GetGUID())) { handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); @@ -220,7 +220,9 @@ public: if (!*args) return false; - uint32 ticketId = atoi(args); + char* ticketIdStr = strtok((char*)args, " "); + uint32 ticketId = atoi(ticketIdStr); + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) { @@ -228,6 +230,21 @@ public: return true; } + char* response = strtok(NULL, "\n"); + if (response) + { + // Cannot add response to ticket, assigned to someone else + //! Console excluded + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); + return true; + } + + ticket->AppendResponse(response); + } + if (Player* player = ticket->GetPlayer()) ticket->SendResponse(player->GetSession()); @@ -476,7 +493,7 @@ public: // Cannot add response to ticket, assigned to someone else //! Console excluded - Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL; + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr; if (player && ticket->IsAssignedNotTo(player->GetGUID())) { handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); From b1d773f3d50a45051066281f2e1c5f3407fd424c Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sat, 12 Sep 2015 10:55:28 +0200 Subject: [PATCH 015/524] Core/Misc: rename some variables after latest backports --- ...ld_335.sql => 2015_09_14_00_world_335.sql} | 0 .../game/Entities/Creature/GossipDef.cpp | 32 ++--- src/server/game/Entities/Player/Player.cpp | 26 ++-- src/server/game/Globals/ObjectMgr.cpp | 126 +++++++++--------- src/server/game/Handlers/CharacterHandler.cpp | 2 +- src/server/game/Quests/QuestDef.cpp | 46 +++---- src/server/game/Quests/QuestDef.h | 66 ++++----- 7 files changed, 149 insertions(+), 149 deletions(-) rename sql/updates/world/{2015_09_12_00_world_335.sql => 2015_09_14_00_world_335.sql} (100%) diff --git a/sql/updates/world/2015_09_12_00_world_335.sql b/sql/updates/world/2015_09_14_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_12_00_world_335.sql rename to sql/updates/world/2015_09_14_00_world_335.sql diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 63be8d0673..db67f1f74f 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -381,10 +381,10 @@ void PlayerMenu::SendQuestGiverStatus(uint8 questStatus, ObjectGuid npcGUID) con void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGUID, bool activateAccept) const { - std::string questTitle = quest->GetTitle(); - std::string questDetails = quest->GetDetails(); - std::string questObjectives = quest->GetObjectives(); - std::string questEndText = quest->GetEndText(); + std::string questTitle = quest->GetTitle(); + std::string questDetails = quest->GetDetails(); + std::string questObjectives = quest->GetObjectives(); + std::string questAreaDescription = quest->GetAreaDescription(); int32 locale = _session->GetSessionDbLocaleIndex(); if (locale >= 0) @@ -394,7 +394,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU ObjectMgr::GetLocaleString(localeData->Title, locale, questTitle); ObjectMgr::GetLocaleString(localeData->Details, locale, questDetails); ObjectMgr::GetLocaleString(localeData->Objectives, locale, questObjectives); - ObjectMgr::GetLocaleString(localeData->EndText, locale, questEndText); + ObjectMgr::GetLocaleString(localeData->AreaDescription, locale, questAreaDescription); } } @@ -489,11 +489,11 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const { - std::string questTitle = quest->GetTitle(); - std::string questDetails = quest->GetDetails(); - std::string questObjectives = quest->GetObjectives(); - std::string questEndText = quest->GetEndText(); - std::string questCompletedText = quest->GetCompletedText(); + std::string questTitle = quest->GetTitle(); + std::string questDetails = quest->GetDetails(); + std::string questObjectives = quest->GetObjectives(); + std::string questAreaDescription = quest->GetAreaDescription(); + std::string questCompletedText = quest->GetCompletedText(); std::string questObjectiveText[QUEST_OBJECTIVES_COUNT]; for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) @@ -507,7 +507,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const ObjectMgr::GetLocaleString(localeData->Title, locale, questTitle); ObjectMgr::GetLocaleString(localeData->Details, locale, questDetails); ObjectMgr::GetLocaleString(localeData->Objectives, locale, questObjectives); - ObjectMgr::GetLocaleString(localeData->EndText, locale, questEndText); + ObjectMgr::GetLocaleString(localeData->AreaDescription, locale, questAreaDescription); ObjectMgr::GetLocaleString(localeData->CompletedText, locale, questCompletedText); for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) @@ -585,9 +585,9 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const for (uint8 i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) // unk (0) data << int32(quest->RewardFactionValueIdOverride[i]); - data << uint32(quest->GetPointMapId()); - data << float(quest->GetPointX()); - data << float(quest->GetPointY()); + data << uint32(quest->GetPOIContinent()); + data << float(quest->GetPOIx()); + data << float(quest->GetPOIy()); data << uint32(quest->GetPointOpt()); if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) @@ -596,7 +596,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const data << questTitle; data << questObjectives; data << questDetails; - data << questEndText; + data << questAreaDescription; data << questCompletedText; // display in quest objectives window once all objectives are completed for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) @@ -607,7 +607,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const data << uint32(quest->RequiredNpcOrGo[i]); data << uint32(quest->RequiredNpcOrGoCount[i]); - data << uint32(quest->RequiredSourceItemId[i]); + data << uint32(quest->ItemDrop[i]); data << uint32(0); // req source count? } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 25531760b6..a4f55d0c25 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15060,15 +15060,15 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) uint32 qtime = 0; if (quest->HasSpecialFlag(QUEST_SPECIAL_FLAGS_TIMED)) { - uint32 limittime = quest->GetLimitTime(); + uint32 timeAllowed = quest->GetTimeAllowed(); // shared timed quest if (questGiver && questGiver->GetTypeId() == TYPEID_PLAYER) - limittime = questGiver->ToPlayer()->getQuestStatusMap()[quest_id].Timer / IN_MILLISECONDS; + timeAllowed = questGiver->ToPlayer()->getQuestStatusMap()[quest_id].Timer / IN_MILLISECONDS; AddTimedQuest(quest_id); - questStatusData.Timer = limittime * IN_MILLISECONDS; - qtime = static_cast(time(NULL)) + limittime; + questStatusData.Timer = timeAllowed * IN_MILLISECONDS; + qtime = static_cast(time(NULL)) + timeAllowed; } else questStatusData.Timer = 0; @@ -15158,10 +15158,10 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) { - if (quest->RequiredSourceItemId[i]) + if (quest->ItemDrop[i]) { - uint32 count = quest->RequiredSourceItemCount[i]; - DestroyItemCount(quest->RequiredSourceItemId[i], count ? count : 9999, true); + uint32 count = quest->ItemDropQuantity[i]; + DestroyItemCount(quest->ItemDrop[i], count ? count : 9999, true); } } @@ -15368,9 +15368,9 @@ void Player::FailQuest(uint32 questId) // Destroy items received on starting the quest. DestroyItemCount(quest->RequiredItemId[i], quest->RequiredItemCount[i], true, true); for (uint8 i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) - if (quest->RequiredSourceItemId[i] > 0 && quest->RequiredSourceItemCount[i] > 0) + if (quest->ItemDrop[i] > 0 && quest->ItemDropQuantity[i] > 0) // Destroy items received during the quest. - DestroyItemCount(quest->RequiredSourceItemId[i], quest->RequiredSourceItemCount[i], true, true); + DestroyItemCount(quest->ItemDrop[i], quest->ItemDropQuantity[i], true, true); } } @@ -15552,7 +15552,7 @@ bool Player::SatisfyQuestClass(Quest const* qInfo, bool msg) const bool Player::SatisfyQuestRace(Quest const* qInfo, bool msg) { - uint32 reqraces = qInfo->GetRequiredRaces(); + uint32 reqraces = qInfo->GetAllowableRaces(); if (reqraces == 0) return true; if ((reqraces & getRaceMask()) == 0) @@ -16673,7 +16673,7 @@ bool Player::HasQuestForItem(uint32 itemid) const for (uint8 j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j) { // examined item is a source item - if (qinfo->RequiredSourceItemId[j] == itemid) + if (qinfo->ItemDrop[j] == itemid) { ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(itemid); @@ -16682,9 +16682,9 @@ bool Player::HasQuestForItem(uint32 itemid) const return true; // allows custom amount drop when not 0 - if (qinfo->RequiredSourceItemCount[j]) + if (qinfo->ItemDropQuantity[j]) { - if (GetItemCount(itemid, true) < qinfo->RequiredSourceItemCount[j]) + if (GetItemCount(itemid, true) < qinfo->ItemDropQuantity[j]) return true; } else if (GetItemCount(itemid, true) < pProto->GetMaxStackSize()) return true; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 9ed8dc1cf7..7b701f681b 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3971,7 +3971,7 @@ void ObjectMgr::LoadQuests() // 9 10 11 12 "RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, " // 13 14 15 16 17 18 19 20 - "RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardBonusMoney, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, " + "RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardBonusMoney, RewardDisplaySpell, RewardDisplaySpell, RewardHonor, RewardKillHonor, " // 21 22 23 24 25 26 "StartItem, Flags, RewardTitle, RequiredPlayerKills, RewardTalents, RewardArenaPoints, " // 27 28 29 30 31 32 33 34 @@ -4215,13 +4215,13 @@ void ObjectMgr::LoadQuests() qinfo->RequiredClasses = 0; } } - // RequiredRaces, can be 0/RACEMASK_ALL_PLAYABLE to allow any race - if (qinfo->RequiredRaces) + // AllowableRaces, can be 0/RACEMASK_ALL_PLAYABLE to allow any race + if (qinfo->AllowableRaces) { - if (!(qinfo->RequiredRaces & RACEMASK_ALL_PLAYABLE)) + if (!(qinfo->AllowableRaces & RACEMASK_ALL_PLAYABLE)) { - TC_LOG_ERROR("sql.sql", "Quest %u does not contain any playable races in `RequiredRaces` (%u), value set to 0 (all races).", qinfo->GetQuestId(), qinfo->RequiredRaces); - qinfo->RequiredRaces = 0; + TC_LOG_ERROR("sql.sql", "Quest %u does not contain any playable races in `AllowableRaces` (%u), value set to 0 (all races).", qinfo->GetQuestId(), qinfo->AllowableRaces); + qinfo->AllowableRaces = 0; } } // RequiredSkillId, can be 0 @@ -4323,26 +4323,26 @@ void ObjectMgr::LoadQuests() // quest can't reward this title } - if (qinfo->SourceItemId) + if (qinfo->StartItem) { - if (!sObjectMgr->GetItemTemplate(qinfo->SourceItemId)) + if (!sObjectMgr->GetItemTemplate(qinfo->StartItem)) { - TC_LOG_ERROR("sql.sql", "Quest %u has `SourceItemId` = %u but item with entry %u does not exist, quest can't be done.", - qinfo->GetQuestId(), qinfo->SourceItemId, qinfo->SourceItemId); - qinfo->SourceItemId = 0; // quest can't be done for this requirement + TC_LOG_ERROR("sql.sql", "Quest %u has `StartItem` = %u but item with entry %u does not exist, quest can't be done.", + qinfo->GetQuestId(), qinfo->StartItem, qinfo->StartItem); + qinfo->StartItem = 0; // quest can't be done for this requirement } - else if (qinfo->SourceItemIdCount == 0) + else if (qinfo->StartItemCount == 0) { - TC_LOG_ERROR("sql.sql", "Quest %u has `SourceItemId` = %u but `SourceItemIdCount` = 0, set to 1 but need fix in DB.", - qinfo->GetQuestId(), qinfo->SourceItemId); - qinfo->SourceItemIdCount = 1; // update to 1 for allow quest work for backward compatibility with DB + TC_LOG_ERROR("sql.sql", "Quest %u has `StartItem` = %u but `StartItemCount` = 0, set to 1 but need fix in DB.", + qinfo->GetQuestId(), qinfo->StartItem); + qinfo->StartItemCount = 1; // update to 1 for allow quest work for backward compatibility with DB } } - else if (qinfo->SourceItemIdCount>0) + else if (qinfo->StartItemCount>0) { - TC_LOG_ERROR("sql.sql", "Quest %u has `SourceItemId` = 0 but `SourceItemIdCount` = %u, useless value.", - qinfo->GetQuestId(), qinfo->SourceItemIdCount); - qinfo->SourceItemIdCount=0; // no quest work changes in fact + TC_LOG_ERROR("sql.sql", "Quest %u has `StartItem` = 0 but `StartItemCount` = %u, useless value.", + qinfo->GetQuestId(), qinfo->StartItemCount); + qinfo->StartItemCount=0; // no quest work changes in fact } if (qinfo->SourceSpellid) @@ -4393,22 +4393,22 @@ void ObjectMgr::LoadQuests() for (uint8 j = 0; j < QUEST_SOURCE_ITEM_IDS_COUNT; ++j) { - uint32 id = qinfo->RequiredSourceItemId[j]; + uint32 id = qinfo->ItemDrop[j]; if (id) { if (!sObjectMgr->GetItemTemplate(id)) { - TC_LOG_ERROR("sql.sql", "Quest %u has `RequiredSourceItemId%d` = %u but item with entry %u does not exist, quest can't be done.", + TC_LOG_ERROR("sql.sql", "Quest %u has `ItemDrop%d` = %u but item with entry %u does not exist, quest can't be done.", qinfo->GetQuestId(), j+1, id, id); // no changes, quest can't be done for this requirement } } else { - if (qinfo->RequiredSourceItemCount[j]>0) + if (qinfo->ItemDropQuantity[j]>0) { - TC_LOG_ERROR("sql.sql", "Quest %u has `RequiredSourceItemId%d` = 0 but `RequiredSourceItemCount%d` = %u.", - qinfo->GetQuestId(), j+1, j+1, qinfo->RequiredSourceItemCount[j]); + TC_LOG_ERROR("sql.sql", "Quest %u has `ItemDrop%d` = 0 but `ItemDropQuantity%d` = %u.", + qinfo->GetQuestId(), j+1, j+1, qinfo->ItemDropQuantity[j]); // no changes, quest ignore this data } } @@ -4529,55 +4529,55 @@ void ObjectMgr::LoadQuests() } } - if (qinfo->RewardSpell) + if (qinfo->RewardDisplaySpell) + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardDisplaySpell); + + if (!spellInfo) + { + TC_LOG_ERROR("sql.sql", "Quest %u has `RewardDisplaySpell` = %u but spell %u does not exist, spell removed as display reward.", + qinfo->GetQuestId(), qinfo->RewardDisplaySpell, qinfo->RewardDisplaySpell); + qinfo->RewardDisplaySpell = 0; // no spell reward will display for this quest + } + + else if (!SpellMgr::IsSpellValid(spellInfo)) + { + TC_LOG_ERROR("sql.sql", "Quest %u has `RewardDisplaySpell` = %u but spell %u is broken, quest will not have a spell reward.", + qinfo->GetQuestId(), qinfo->RewardDisplaySpell, qinfo->RewardDisplaySpell); + qinfo->RewardDisplaySpell = 0; // no spell reward will display for this quest + } + + else if (GetTalentSpellCost(qinfo->RewardDisplaySpell)) + { + TC_LOG_ERROR("sql.sql", "Quest %u has `RewardDisplaySpell` = %u but spell %u is talent, quest will not have a spell reward.", + qinfo->GetQuestId(), qinfo->RewardDisplaySpell, qinfo->RewardDisplaySpell); + qinfo->RewardDisplaySpell = 0; // no spell reward will display for this quest + } + } + + if (qinfo->RewardSpell > 0) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardSpell); if (!spellInfo) { - TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u does not exist, spell removed as display reward.", + TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u does not exist, quest will not have a spell reward.", qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell); - qinfo->RewardSpell = 0; // no spell reward will display for this quest + qinfo->RewardSpell = 0; // no spell will be cast on player } else if (!SpellMgr::IsSpellValid(spellInfo)) { TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u is broken, quest will not have a spell reward.", qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell); - qinfo->RewardSpell = 0; // no spell reward will display for this quest + qinfo->RewardSpell = 0; // no spell will be cast on player } else if (GetTalentSpellCost(qinfo->RewardSpell)) { - TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u is talent, quest will not have a spell reward.", + TC_LOG_ERROR("sql.sql", "Quest %u has `RewardDisplaySpell` = %u but spell %u is talent, quest will not have a spell reward.", qinfo->GetQuestId(), qinfo->RewardSpell, qinfo->RewardSpell); - qinfo->RewardSpell = 0; // no spell reward will display for this quest - } - } - - if (qinfo->RewardSpellCast > 0) - { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(qinfo->RewardSpellCast); - - if (!spellInfo) - { - TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpellCast` = %u but spell %u does not exist, quest will not have a spell reward.", - qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast); - qinfo->RewardSpellCast = 0; // no spell will be cast on player - } - - else if (!SpellMgr::IsSpellValid(spellInfo)) - { - TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpellCast` = %u but spell %u is broken, quest will not have a spell reward.", - qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast); - qinfo->RewardSpellCast = 0; // no spell will be cast on player - } - - else if (GetTalentSpellCost(qinfo->RewardSpellCast)) - { - TC_LOG_ERROR("sql.sql", "Quest %u has `RewardSpell` = %u but spell %u is talent, quest will not have a spell reward.", - qinfo->GetQuestId(), qinfo->RewardSpellCast, qinfo->RewardSpellCast); - qinfo->RewardSpellCast = 0; // no spell will be cast on player + qinfo->RewardSpell = 0; // no spell will be cast on player } } @@ -4602,14 +4602,14 @@ void ObjectMgr::LoadQuests() usedMailTemplates[qinfo->RewardMailTemplateId] = qinfo->GetQuestId(); } - if (qinfo->NextQuestIdChain) + if (qinfo->RewardNextQuest) { - QuestMap::iterator qNextItr = _questTemplates.find(qinfo->NextQuestIdChain); + QuestMap::iterator qNextItr = _questTemplates.find(qinfo->RewardNextQuest); if (qNextItr == _questTemplates.end()) { - TC_LOG_ERROR("sql.sql", "Quest %u has `NextQuestIdChain` = %u but quest %u does not exist, quest chain will not work.", - qinfo->GetQuestId(), qinfo->NextQuestIdChain, qinfo->NextQuestIdChain); - qinfo->NextQuestIdChain = 0; + TC_LOG_ERROR("sql.sql", "Quest %u has `RewardNextQuest` = %u but quest %u does not exist, quest chain will not work.", + qinfo->GetQuestId(), qinfo->RewardNextQuest, qinfo->RewardNextQuest); + qinfo->RewardNextQuest = 0; } else qNextItr->second->prevChainQuests.push_back(qinfo->GetQuestId()); @@ -4644,7 +4644,7 @@ void ObjectMgr::LoadQuests() if (qinfo->ExclusiveGroup) mExclusiveQuestGroups.insert(std::pair(qinfo->ExclusiveGroup, qinfo->GetQuestId())); - if (qinfo->LimitTime) + if (qinfo->TimeAllowed) qinfo->SetSpecialFlag(QUEST_SPECIAL_FLAGS_TIMED); if (qinfo->RequiredPlayerKills) qinfo->SetSpecialFlag(QUEST_SPECIAL_FLAGS_PLAYER_KILL); @@ -4720,7 +4720,7 @@ void ObjectMgr::LoadQuestLocales() AddLocaleString(fields[1 + 11 * (i - 1) + 2].GetString(), locale, data.Objectives); AddLocaleString(fields[1 + 11 * (i - 1) + 3].GetString(), locale, data.OfferRewardText); AddLocaleString(fields[1 + 11 * (i - 1) + 4].GetString(), locale, data.RequestItemsText); - AddLocaleString(fields[1 + 11 * (i - 1) + 5].GetString(), locale, data.EndText); + AddLocaleString(fields[1 + 11 * (i - 1) + 5].GetString(), locale, data.AreaDescription); AddLocaleString(fields[1 + 11 * (i - 1) + 6].GetString(), locale, data.CompletedText); for (uint8 k = 0; k < 4; ++k) diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 11b31d98cc..b6e8d3c3ed 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1942,7 +1942,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) { Quest const* quest = iter->second; uint32 newRaceMask = (team == TEAM_ALLIANCE) ? RACEMASK_ALLIANCE : RACEMASK_HORDE; - if (!(quest->GetRequiredRaces() & newRaceMask)) + if (!(quest->GetAllowableRaces() & newRaceMask)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE_BY_QUEST); stmt->setUInt32(0, lowGuid); diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index eea0fd72e8..4fce8d9add 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -29,21 +29,21 @@ Quest::Quest(Field* questRecord) ZoneOrSort = questRecord[4].GetInt16(); Type = questRecord[5].GetUInt16(); SuggestedPlayers = questRecord[6].GetUInt8(); - LimitTime = questRecord[7].GetUInt32(); - RequiredRaces = questRecord[8].GetUInt16(); + TimeAllowed = questRecord[7].GetUInt32(); + AllowableRaces = questRecord[8].GetUInt16(); RequiredFactionId1 = questRecord[9].GetUInt16(); RequiredFactionId2 = questRecord[10].GetUInt16(); RequiredFactionValue1 = questRecord[11].GetInt32(); RequiredFactionValue2 = questRecord[12].GetInt32(); - NextQuestIdChain = questRecord[13].GetUInt32(); - RewardXPId = questRecord[14].GetUInt8(); - RewardOrRequiredMoney = questRecord[15].GetInt32(); - RewardMoneyMaxLevel = questRecord[16].GetUInt32(); - RewardSpell = questRecord[17].GetUInt32(); - RewardSpellCast = questRecord[18].GetInt32(); + RewardNextQuest = questRecord[13].GetUInt32(); + RewardXPDifficulty = questRecord[14].GetUInt8(); + RewardMoney = questRecord[15].GetInt32(); + RewardBonusMoney = questRecord[16].GetUInt32(); + RewardDisplaySpell = questRecord[17].GetUInt32(); + RewardSpell = questRecord[18].GetInt32(); RewardHonor = questRecord[19].GetUInt32(); - RewardHonorMultiplier = questRecord[20].GetFloat(); - SourceItemId = questRecord[21].GetUInt32(); + RewardKillHonor = questRecord[20].GetFloat(); + StartItem = questRecord[21].GetUInt32(); Flags = questRecord[22].GetUInt32(); RewardTitleId = questRecord[23].GetUInt8(); RequiredPlayerKills = questRecord[24].GetUInt8(); @@ -69,14 +69,14 @@ Quest::Quest(Field* questRecord) RewardFactionValueIdOverride[i] = questRecord[49+i*3].GetInt32(); } - PointMapId = questRecord[62].GetUInt16(); - PointX = questRecord[63].GetFloat(); - PointY = questRecord[64].GetFloat(); - PointOption = questRecord[65].GetUInt32(); + POIContinent = questRecord[62].GetUInt16(); + POIx = questRecord[63].GetFloat(); + POIy = questRecord[64].GetFloat(); + POIPriority = questRecord[65].GetUInt32(); Title = questRecord[66].GetString(); Objectives = questRecord[67].GetString(); Details = questRecord[68].GetString(); - EndText = questRecord[69].GetString(); + AreaDescription = questRecord[69].GetString(); CompletedText = questRecord[70].GetString(); for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) @@ -86,10 +86,10 @@ Quest::Quest(Field* questRecord) RequiredNpcOrGoCount[i] = questRecord[75+i].GetUInt16(); for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) - RequiredSourceItemId[i] = questRecord[79+i].GetUInt32(); + ItemDrop[i] = questRecord[79+i].GetUInt32(); for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) - RequiredSourceItemCount[i] = questRecord[83+i].GetUInt16(); + ItemDropQuantity[i] = questRecord[83+i].GetUInt16(); for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) RequiredItemId[i] = questRecord[87+i].GetUInt32(); @@ -169,7 +169,7 @@ void Quest::LoadQuestTemplateAddon(Field* fields) RequiredMaxRepFaction = fields[12].GetUInt16(); RequiredMinRepValue = fields[13].GetInt32(); RequiredMaxRepValue = fields[14].GetInt32(); - SourceItemIdCount = fields[15].GetUInt8(); + StartItemCount = fields[15].GetUInt8(); SpecialFlags = fields[16].GetUInt8(); if (SpecialFlags & QUEST_SPECIAL_FLAGS_AUTO_ACCEPT) @@ -191,7 +191,7 @@ uint32 Quest::XPValue(Player* player) const else if (diffFactor > 10) diffFactor = 10; - uint32 xp = diffFactor * xpentry->Exp[RewardXPId] / 10; + uint32 xp = diffFactor * xpentry->Exp[RewardXPDifficulty] / 10; if (xp <= 100) xp = 5 * ((xp + 2) / 5); else if (xp <= 500) @@ -210,11 +210,11 @@ uint32 Quest::XPValue(Player* player) const int32 Quest::GetRewOrReqMoney() const { // RequiredMoney: the amount is the negative copper sum. - if (RewardOrRequiredMoney <= 0) - return RewardOrRequiredMoney; + if (RewardMoney <= 0) + return RewardMoney; // RewardMoney: the positive amount - return int32(RewardOrRequiredMoney * sWorld->getRate(RATE_MONEY_QUEST)); + return int32(RewardMoney * sWorld->getRate(RATE_MONEY_QUEST)); } uint32 Quest::GetRewMoneyMaxLevel() const @@ -224,7 +224,7 @@ uint32 Quest::GetRewMoneyMaxLevel() const return 0; // Else, return the rewarded copper sum modified by the rate - return uint32(RewardMoneyMaxLevel * sWorld->getRate(RATE_MONEY_MAX_LEVEL_QUEST)); + return uint32(RewardBonusMoney * sWorld->getRate(RATE_MONEY_MAX_LEVEL_QUEST)); } bool Quest::IsAutoAccept() const diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 78fd065e9b..91b4a3181f 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -182,7 +182,7 @@ struct QuestLocale StringVector Objectives; StringVector OfferRewardText; StringVector RequestItemsText; - StringVector EndText; + StringVector AreaDescription; StringVector CompletedText; std::vector< StringVector > ObjectiveText; }; @@ -217,7 +217,7 @@ class Quest int32 GetQuestLevel() const { return Level; } uint32 GetType() const { return Type; } uint32 GetRequiredClasses() const { return RequiredClasses; } - uint32 GetRequiredRaces() const { return RequiredRaces; } + uint32 GetAllowableRaces() const { return AllowableRaces; } uint32 GetRequiredSkill() const { return RequiredSkillId; } uint32 GetRequiredSkillValue() const { return RequiredSkillPoints; } uint32 GetRepObjectiveFaction() const { return RequiredFactionId1; } @@ -229,38 +229,38 @@ class Quest uint32 GetRequiredMaxRepFaction() const { return RequiredMaxRepFaction; } int32 GetRequiredMaxRepValue() const { return RequiredMaxRepValue; } uint32 GetSuggestedPlayers() const { return SuggestedPlayers; } - uint32 GetLimitTime() const { return LimitTime; } + uint32 GetTimeAllowed() const { return TimeAllowed; } int32 GetPrevQuestId() const { return PrevQuestId; } int32 GetNextQuestId() const { return NextQuestId; } int32 GetExclusiveGroup() const { return ExclusiveGroup; } - uint32 GetNextQuestInChain() const { return NextQuestIdChain; } + uint32 GetNextQuestInChain() const { return RewardNextQuest; } uint32 GetCharTitleId() const { return RewardTitleId; } uint32 GetPlayersSlain() const { return RequiredPlayerKills; } uint32 GetBonusTalents() const { return RewardTalents; } int32 GetRewArenaPoints() const {return RewardArenaPoints; } - uint32 GetXPId() const { return RewardXPId; } - uint32 GetSrcItemId() const { return SourceItemId; } - uint32 GetSrcItemCount() const { return SourceItemIdCount; } + uint32 GetXPId() const { return RewardXPDifficulty; } + uint32 GetSrcItemId() const { return StartItem; } + uint32 GetSrcItemCount() const { return StartItemCount; } uint32 GetSrcSpell() const { return SourceSpellid; } std::string const& GetTitle() const { return Title; } std::string const& GetDetails() const { return Details; } std::string const& GetObjectives() const { return Objectives; } std::string const& GetOfferRewardText() const { return OfferRewardText; } std::string const& GetRequestItemsText() const { return RequestItemsText; } - std::string const& GetEndText() const { return EndText; } + std::string const& GetAreaDescription() const { return AreaDescription; } std::string const& GetCompletedText() const { return CompletedText; } int32 GetRewOrReqMoney() const; uint32 GetRewHonorAddition() const { return RewardHonor; } - float GetRewHonorMultiplier() const { return RewardHonorMultiplier; } + float GetRewHonorMultiplier() const { return RewardKillHonor; } uint32 GetRewMoneyMaxLevel() const; // use in XP calculation at client - uint32 GetRewSpell() const { return RewardSpell; } - int32 GetRewSpellCast() const { return RewardSpellCast; } + uint32 GetRewSpell() const { return RewardDisplaySpell; } + int32 GetRewSpellCast() const { return RewardSpell; } uint32 GetRewMailTemplateId() const { return RewardMailTemplateId; } uint32 GetRewMailDelaySecs() const { return RewardMailDelay; } - uint32 GetPointMapId() const { return PointMapId; } - float GetPointX() const { return PointX; } - float GetPointY() const { return PointY; } - uint32 GetPointOpt() const { return PointOption; } + uint32 GetPOIContinent() const { return POIContinent; } + float GetPOIx() const { return POIx; } + float GetPOIy() const { return POIy; } + uint32 GetPointOpt() const { return POIPriority; } uint32 GetIncompleteEmote() const { return EmoteOnIncomplete; } uint32 GetCompleteEmote() const { return EmoteOnComplete; } bool IsRepeatable() const { return SpecialFlags & QUEST_SPECIAL_FLAGS_REPEATABLE; } @@ -281,8 +281,8 @@ class Quest std::string ObjectiveText[QUEST_OBJECTIVES_COUNT]; uint32 RequiredItemId[QUEST_ITEM_OBJECTIVES_COUNT]; uint32 RequiredItemCount[QUEST_ITEM_OBJECTIVES_COUNT]; - uint32 RequiredSourceItemId[QUEST_SOURCE_ITEM_IDS_COUNT]; - uint32 RequiredSourceItemCount[QUEST_SOURCE_ITEM_IDS_COUNT]; + uint32 ItemDrop[QUEST_SOURCE_ITEM_IDS_COUNT]; + uint32 ItemDropQuantity[QUEST_SOURCE_ITEM_IDS_COUNT]; int32 RequiredNpcOrGo[QUEST_OBJECTIVES_COUNT]; // >0 Creature <0 Gameobject uint32 RequiredNpcOrGoCount[QUEST_OBJECTIVES_COUNT]; uint32 RewardChoiceItemId[QUEST_REWARD_CHOICES_COUNT]; @@ -322,38 +322,38 @@ class Quest uint32 MinLevel; int32 Level; uint32 Type; - uint32 RequiredRaces; + uint32 AllowableRaces; uint32 RequiredFactionId1; int32 RequiredFactionValue1; uint32 RequiredFactionId2; int32 RequiredFactionValue2; uint32 SuggestedPlayers; - uint32 LimitTime; + uint32 TimeAllowed; uint32 Flags; uint32 RewardTitleId; uint32 RequiredPlayerKills; uint32 RewardTalents; int32 RewardArenaPoints; - uint32 NextQuestIdChain; - uint32 RewardXPId; - uint32 SourceItemId; + uint32 RewardNextQuest; + uint32 RewardXPDifficulty; + uint32 StartItem; std::string Title; std::string Details; std::string Objectives; std::string OfferRewardText; std::string RequestItemsText; - std::string EndText; + std::string AreaDescription; std::string CompletedText; uint32 RewardHonor; - float RewardHonorMultiplier; - int32 RewardOrRequiredMoney; - uint32 RewardMoneyMaxLevel; - uint32 RewardSpell; - int32 RewardSpellCast; - uint32 PointMapId; - float PointX; - float PointY; - uint32 PointOption; + float RewardKillHonor; + int32 RewardMoney; + uint32 RewardBonusMoney; + uint32 RewardDisplaySpell; + int32 RewardSpell; + uint32 POIContinent; + float POIx; + float POIy; + uint32 POIPriority; uint32 EmoteOnIncomplete; uint32 EmoteOnComplete; @@ -372,7 +372,7 @@ class Quest int32 RequiredMinRepValue = 0; uint32 RequiredMaxRepFaction = 0; int32 RequiredMaxRepValue = 0; - uint32 SourceItemIdCount = 0; + uint32 StartItemCount = 0; uint32 SpecialFlags = 0; // custom flags, not sniffed/WDB }; From 8e5a65649c5e175d630acca8377bdabe22158f66 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 15 Sep 2015 10:45:48 +0200 Subject: [PATCH 016/524] Rename 2015_12_09_00_world.sql to 2015_09_12_00_world.sql --- .../world/{2015_12_09_00_world.sql => 2015_09_12_00_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_12_09_00_world.sql => 2015_09_12_00_world.sql} (100%) diff --git a/sql/updates/world/2015_12_09_00_world.sql b/sql/updates/world/2015_09_12_00_world.sql similarity index 100% rename from sql/updates/world/2015_12_09_00_world.sql rename to sql/updates/world/2015_09_12_00_world.sql From b58f585da2a07c573c969023c11af6ebdc43234a Mon Sep 17 00:00:00 2001 From: MitchesD Date: Tue, 15 Sep 2015 10:46:09 +0200 Subject: [PATCH 017/524] Rename 2015_09_14_00_world_335.sql to 2015_09_15_00_world_335.sql --- .../{2015_09_14_00_world_335.sql => 2015_09_15_00_world_335.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_09_14_00_world_335.sql => 2015_09_15_00_world_335.sql} (100%) diff --git a/sql/updates/world/2015_09_14_00_world_335.sql b/sql/updates/world/2015_09_15_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_14_00_world_335.sql rename to sql/updates/world/2015_09_15_00_world_335.sql From 21644e556d5bea4cbd54c1503dd80b104fa8a22f Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 15 Sep 2015 11:45:24 +0200 Subject: [PATCH 018/524] DB/Creature: Fix one big exploit on UP --- sql/updates/world/2015_09_15_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_09_15_01_world.sql diff --git a/sql/updates/world/2015_09_15_01_world.sql b/sql/updates/world/2015_09_15_01_world.sql new file mode 100644 index 0000000000..c524b8087b --- /dev/null +++ b/sql/updates/world/2015_09_15_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|4194304 WHERE entry IN (26861,30788); From 1321427901c239f7977cc35deda1161aca98f085 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 15 Sep 2015 16:58:30 +0200 Subject: [PATCH 019/524] Core/Unit: Fixed incorrect value sent in highest threat unit update --- 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 0978adc181..598bc5f847 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -17277,7 +17277,7 @@ void Unit::SendChangeCurrentVictimOpcode(HostileReference* pHostileReference) for (ThreatContainer::StorageType::const_iterator itr = tlist.begin(); itr != tlist.end(); ++itr) { data << (*itr)->getUnitGuid().WriteAsPacked(); - data << uint32((*itr)->getThreat()); + data << uint32((*itr)->getThreat() * 100); } SendMessageToSet(&data, false); } From 748b6a313107ce7a91f336768201c633a4291867 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 15 Sep 2015 21:39:11 +0200 Subject: [PATCH 020/524] DB/Gameobject: Fix doors being clickable in the Tempest Keep. Faction and flags are from sniffs. --- sql/updates/world/2015_09_15_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_09_15_02_world.sql diff --git a/sql/updates/world/2015_09_15_02_world.sql b/sql/updates/world/2015_09_15_02_world.sql new file mode 100644 index 0000000000..017cbd0d7e --- /dev/null +++ b/sql/updates/world/2015_09_15_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `gameobject_template` SET `faction`=1375, `flags`=32 WHERE `entry` IN (184322, 184324, 184325, 184326, 184327, 184328, 184329); From df55a7139929dac7179f1cbdc9f6d143d48d85d1 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 15 Sep 2015 22:32:50 +0200 Subject: [PATCH 021/524] DB/Creature: Fix another exploit on UP --- sql/updates/world/2015_09_15_03_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_09_15_03_world.sql diff --git a/sql/updates/world/2015_09_15_03_world.sql b/sql/updates/world/2015_09_15_03_world.sql new file mode 100644 index 0000000000..89e40a643d --- /dev/null +++ b/sql/updates/world/2015_09_15_03_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|2048 WHERE entry IN (26861,30788); From 16b42a40605c253dc0d4705aac03e9c6da58fd20 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 16 Sep 2015 08:14:15 +0200 Subject: [PATCH 022/524] DB/Creature: Fix 2 exploits more --- sql/updates/world/2015_09_16_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_09_16_00_world.sql diff --git a/sql/updates/world/2015_09_16_00_world.sql b/sql/updates/world/2015_09_16_00_world.sql new file mode 100644 index 0000000000..1e0da0ad8d --- /dev/null +++ b/sql/updates/world/2015_09_16_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|2048|8192 WHERE entry IN (26861,30788,29304,31370); From 9a43dd35cdd40228db5b8519b53ca5b6438c3c18 Mon Sep 17 00:00:00 2001 From: Nyeriah Date: Wed, 16 Sep 2015 18:45:03 -0300 Subject: [PATCH 023/524] Core/ObjectMgr: Fix loading quest's RewardSpells (spells rewarded on quest completion) --- src/server/game/Globals/ObjectMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 85d770e2ce..524bb44286 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3971,7 +3971,7 @@ void ObjectMgr::LoadQuests() // 9 10 11 12 "RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, " // 13 14 15 16 17 18 19 20 - "RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardBonusMoney, RewardDisplaySpell, RewardDisplaySpell, RewardHonor, RewardKillHonor, " + "RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardBonusMoney, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, " // 21 22 23 24 25 26 "StartItem, Flags, RewardTitle, RequiredPlayerKills, RewardTalents, RewardArenaPoints, " // 27 28 29 30 31 32 33 34 From c5cc7cca3e29e176b5ec0405a05c3db8e19c4e93 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 17 Sep 2015 17:30:48 +0200 Subject: [PATCH 024/524] DB/Misc: Fix typo in a tele command for Royal Exchange By MrSmite, closes #15531 --- sql/updates/world/2015_09_17_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_09_17_00_world.sql diff --git a/sql/updates/world/2015_09_17_00_world.sql b/sql/updates/world/2015_09_17_00_world.sql new file mode 100644 index 0000000000..db9da58751 --- /dev/null +++ b/sql/updates/world/2015_09_17_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `game_tele` SET `name`='TheRoyalExchange' WHERE `name`='TheRoyalExhange'; From 36d464d563b6380690e4f0137d2b7f5e90d3b3e0 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 20 Sep 2015 16:36:55 +0200 Subject: [PATCH 025/524] Scripts/Naxxramas: Fixed an incorrect spellid for Naxx10 Hateful Strike. --- sql/updates/world/2015_09_20_00_world.sql | 3 +++ src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 sql/updates/world/2015_09_20_00_world.sql diff --git a/sql/updates/world/2015_09_20_00_world.sql b/sql/updates/world/2015_09_20_00_world.sql new file mode 100644 index 0000000000..c71610a528 --- /dev/null +++ b/sql/updates/world/2015_09_20_00_world.sql @@ -0,0 +1,3 @@ +-- remove existing entries +DELETE FROM `spelldifficulty_dbc` WHERE id IN (28308,41926); +INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES (28308,28308,59192); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index 2ca55ee570..7c85c5f73b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -21,7 +21,7 @@ enum Spells { - SPELL_HATEFUL_STRIKE = 41926, + SPELL_HATEFUL_STRIKE = 28308, SPELL_FRENZY = 28131, SPELL_BERSERK = 26662, SPELL_SLIME_BOLT = 32309 @@ -33,7 +33,7 @@ enum Yells SAY_SLAY = 1, SAY_DEATH = 2, EMOTE_BERSERK = 3, - EMOTE_ENRAGE = 4 + EMOTE_FRENZY = 4 }; enum Events @@ -185,7 +185,7 @@ public: if (!Enraged && HealthBelowPct(5)) { DoCast(me, SPELL_FRENZY, true); - Talk(EMOTE_ENRAGE); + Talk(EMOTE_FRENZY); Enraged = true; } From ff71da2b05210c1d0ed088ef12b06bf4632ff830 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 21 Sep 2015 14:59:52 +0200 Subject: [PATCH 026/524] DB/Creature: Remove a wrong spawn of "[DND]Esprit 1" Closes #15555 --- sql/updates/world/2015_09_21_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_09_21_00_world.sql diff --git a/sql/updates/world/2015_09_21_00_world.sql b/sql/updates/world/2015_09_21_00_world.sql new file mode 100644 index 0000000000..03c7db23de --- /dev/null +++ b/sql/updates/world/2015_09_21_00_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature` WHERE `guid`=84939 AND `id`=22023; From 7b245a0b6b9902ebea98d2a945d4ee0e26a62681 Mon Sep 17 00:00:00 2001 From: StormBytePP Date: Mon, 21 Sep 2015 15:09:41 +0200 Subject: [PATCH 027/524] Core: Added ABORT() macro to prevent the usage of ASSERT(false) as a quick hack to crash the core misusing assert --- .../Collision/Management/MMapManager.cpp | 2 +- src/common/Debugging/Errors.cpp | 19 +++++++++++-------- src/common/Debugging/Errors.h | 4 ++++ src/common/Utilities/Util.h | 2 +- src/server/authserver/Realms/RealmList.cpp | 2 +- .../database/Database/DatabaseWorkerPool.h | 2 +- .../Battlegrounds/Zones/BattlegroundAB.cpp | 2 +- .../Battlegrounds/Zones/BattlegroundAV.cpp | 12 ++++++------ .../Battlegrounds/Zones/BattlegroundSA.cpp | 4 ++-- .../Entities/Creature/TemporarySummon.cpp | 2 +- .../game/Entities/GameObject/GameObject.h | 2 +- src/server/game/Entities/Item/Item.cpp | 2 +- src/server/game/Entities/Object/Object.cpp | 8 ++++---- src/server/game/Entities/Pet/Pet.h | 4 ++-- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Entities/Unit/Unit.cpp | 12 ++++++------ src/server/game/Maps/Map.cpp | 10 +++++----- src/server/game/Maps/MapInstanced.cpp | 6 +++--- src/server/game/Movement/Spline/Spline.h | 2 +- src/server/game/Scripting/ScriptMgr.cpp | 4 ++-- src/server/game/Spells/Auras/SpellAuras.cpp | 8 ++++---- src/server/game/Spells/Spell.cpp | 4 ++-- src/server/worldserver/Main.cpp | 2 +- 23 files changed, 62 insertions(+), 55 deletions(-) diff --git a/src/common/Collision/Management/MMapManager.cpp b/src/common/Collision/Management/MMapManager.cpp index a5685c65d9..00985e4fa1 100644 --- a/src/common/Collision/Management/MMapManager.cpp +++ b/src/common/Collision/Management/MMapManager.cpp @@ -230,7 +230,7 @@ namespace MMAP // if the grid is later reloaded, dtNavMesh::addTile will return error but no extra memory is used // we cannot recover from this error - assert out TC_LOG_ERROR("maps", "MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, x, y); - ASSERT(false); + ABORT(); } else { diff --git a/src/common/Debugging/Errors.cpp b/src/common/Debugging/Errors.cpp index cebd9d4cf2..f2da96b86b 100644 --- a/src/common/Debugging/Errors.cpp +++ b/src/common/Debugging/Errors.cpp @@ -29,8 +29,7 @@ void Assert(char const* file, int line, char const* function, char const* messag { fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message); - *((volatile int*)NULL) = 0; - exit(1); + abort(); } void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) @@ -44,8 +43,7 @@ void Assert(char const* file, int line, char const* function, char const* messag fflush(stderr); va_end(args); - *((volatile int*)NULL) = 0; - exit(1); + abort(); } void Fatal(char const* file, int line, char const* function, char const* message) @@ -54,16 +52,14 @@ void Fatal(char const* file, int line, char const* function, char const* message file, line, function, message); std::this_thread::sleep_for(std::chrono::seconds(10)); - *((volatile int*)NULL) = 0; - exit(1); + abort(); } void Error(char const* file, int line, char const* function, char const* message) { fprintf(stderr, "\n%s:%i in %s ERROR:\n %s\n", file, line, function, message); - *((volatile int*)NULL) = 0; - exit(1); + abort(); } void Warning(char const* file, int line, char const* function, char const* message) @@ -72,4 +68,11 @@ void Warning(char const* file, int line, char const* function, char const* messa file, line, function, message); } +void Abort(char const* file, int line, char const* function) +{ + fprintf(stderr, "\n%s:%i in %s ABORTED\n", + file, line, function); + abort(); +} + } // namespace Trinity diff --git a/src/common/Debugging/Errors.h b/src/common/Debugging/Errors.h index 4d4624b63d..edf56b2913 100644 --- a/src/common/Debugging/Errors.h +++ b/src/common/Debugging/Errors.h @@ -29,6 +29,8 @@ namespace Trinity DECLSPEC_NORETURN void Fatal(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; DECLSPEC_NORETURN void Error(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; + + DECLSPEC_NORETURN void Abort(char const* file, int line, char const* function) ATTR_NORETURN; void Warning(char const* file, int line, char const* function, char const* message); @@ -46,8 +48,10 @@ namespace Trinity #define WPFatal(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END #define WPError(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END #define WPWarning(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END +#define WPAbort() ASSERT_BEGIN do { Trinity::Abort(__FILE__, __LINE__, __FUNCTION__); } while(0) ASSERT_END #define ASSERT WPAssert +#define ABORT WPAbort template inline T* ASSERT_NOTNULL(T* pointer) { diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h index 3da1c80041..6a872b44a6 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -537,7 +537,7 @@ bool CompareValues(ComparisionType type, T val1, T val2) return val1 <= val2; default: // incorrect parameter - ASSERT(false); + ABORT(); return false; } } diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp index 59cb239206..f5461d5f42 100644 --- a/src/server/authserver/Realms/RealmList.cpp +++ b/src/server/authserver/Realms/RealmList.cpp @@ -145,7 +145,7 @@ void RealmList::UpdateRealms(bool init) catch (std::exception& ex) { TC_LOG_ERROR("server.authserver", "Realmlist::UpdateRealms has thrown an exception: %s", ex.what()); - ASSERT(false); + ABORT(); } } while (result->NextRow()); diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index f5002c6943..6a0cf71cca 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -482,7 +482,7 @@ class DatabaseWorkerPool else if (type == IDX_SYNCH) t = new T(*_connectionInfo); else - ASSERT(false); + ABORT(); _connections[type][i] = t; ++_connectionCount[type]; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 00b6862369..26b7f672cf 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -309,7 +309,7 @@ int32 BattlegroundAB::_GetNodeNameId(uint8 node) case BG_AB_NODE_LUMBER_MILL:return LANG_BG_AB_NODE_LUMBER_MILL; case BG_AB_NODE_GOLD_MINE: return LANG_BG_AB_NODE_GOLD_MINE; default: - ASSERT(false); + ABORT(); } return 0; } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index 9c654a1793..d4e51315e9 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -789,7 +789,7 @@ BG_AV_Nodes BattlegroundAV::GetNodeThroughObject(uint32 object) if (object == BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE) return BG_AV_NODES_SNOWFALL_GRAVE; TC_LOG_ERROR("bg.battleground", "BattlegroundAV: ERROR! GetPlace got a wrong object :("); - ASSERT(false); + ABORT(); return BG_AV_Nodes(0); } @@ -827,7 +827,7 @@ uint32 BattlegroundAV::GetObjectThroughNode(BG_AV_Nodes node) else if (m_Nodes[node].Owner == AV_NEUTRAL_TEAM) return BG_AV_OBJECT_FLAG_N_SNOWFALL_GRAVE; TC_LOG_ERROR("bg.battleground", "BattlegroundAV: Error! GetPlaceNode couldn't resolve node %i", node); - ASSERT(false); + ABORT(); return 0; } @@ -1402,22 +1402,22 @@ void BattlegroundAV::AssaultNode(BG_AV_Nodes node, uint16 team) if (m_Nodes[node].TotalOwner == team) { TC_LOG_FATAL("bg.battleground", "Assaulting team is TotalOwner of node"); - ASSERT(false); + ABORT(); } if (m_Nodes[node].Owner == team) { TC_LOG_FATAL("bg.battleground", "Assaulting team is owner of node"); - ASSERT(false); + ABORT(); } if (m_Nodes[node].State == POINT_DESTROYED) { TC_LOG_FATAL("bg.battleground", "Destroyed node is being assaulted"); - ASSERT(false); + ABORT(); } if (m_Nodes[node].State == POINT_ASSAULTED && m_Nodes[node].TotalOwner) //only assault an assaulted node if no totalowner exists { TC_LOG_FATAL("bg.battleground", "Assault on an not assaulted node with total owner"); - ASSERT(false); + ABORT(); } //the timer gets another time, if the previous owner was 0 == Neutral m_Nodes[node].Timer = (m_Nodes[node].PrevOwner)? BG_AV_CAPTIME : BG_AV_SNOWFALL_FIRSTCAP; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index f267bf7c6c..c7d8132053 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -744,7 +744,7 @@ bool BattlegroundSA::CanInteractWithObject(uint32 objectId) return false; break; default: - ASSERT(false); + ABORT(); break; } @@ -877,7 +877,7 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source) break; default: - ASSERT(false); + ABORT(); break; }; } diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 2a3e91b757..46422444bb 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -368,7 +368,7 @@ void Puppet::InitSummon() { Minion::InitSummon(); if (!SetCharmedBy(GetOwner(), CHARM_TYPE_POSSESS)) - ASSERT(false); + ABORT(); } void Puppet::Update(uint32 time) diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 7ef8ef2737..e12bec768f 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -680,7 +680,7 @@ class GameObject : public WorldObject, public GridObject, public Map // Owner already found and different than expected owner - remove object from old owner if (owner && GetOwnerGUID() && GetOwnerGUID() != owner) { - ASSERT(false); + ABORT(); } m_spawnedByDefault = false; // all object with owner is despawned after delay SetGuidValue(OBJECT_FIELD_CREATED_BY, owner); diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 141bac5e50..4f91423d76 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1070,7 +1070,7 @@ Item* Item::CreateItem(uint32 itemEntry, uint32 count, Player const* player) delete item; } else - ASSERT(false); + ABORT(); return NULL; } diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index fc55c09bff..6087e03b1b 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -67,7 +67,7 @@ WorldObject::~WorldObject() { TC_LOG_FATAL("misc", "WorldObject::~WorldObject Corpse Type: %d (%s) deleted but still in map!!", ToCorpse()->GetType(), GetGUID().ToString().c_str()); - ASSERT(false); + ABORT(); } ResetMap(); } @@ -80,14 +80,14 @@ Object::~Object() TC_LOG_FATAL("misc", "Object::~Object %s deleted but still in world!!", GetGUID().ToString().c_str()); if (isType(TYPEMASK_ITEM)) TC_LOG_FATAL("misc", "Item slot %u", ((Item*)this)->GetSlot()); - ASSERT(false); + ABORT(); RemoveFromWorld(); } if (m_objectUpdated) { TC_LOG_FATAL("misc", "Object::~Object %s deleted but still in update list!!", GetGUID().ToString().c_str()); - ASSERT(false); + ABORT(); sObjectAccessor->RemoveUpdateObject(this); } @@ -1795,7 +1795,7 @@ void WorldObject::SetMap(Map* map) if (m_currMap) { TC_LOG_FATAL("misc", "WorldObject::SetMap: obj %u new map %u %u, old map %u %u", (uint32)GetTypeId(), map->GetId(), map->GetInstanceId(), m_currMap->GetId(), m_currMap->GetInstanceId()); - ASSERT(false); + ABORT(); } m_currMap = map; m_mapId = map->GetId(); diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index b1d7fcaa28..e47bf22019 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -159,11 +159,11 @@ class Pet : public Guardian private: void SaveToDB(uint32, uint8, uint32) override // override of Creature::SaveToDB - must not be called { - ASSERT(false); + ABORT(); } void DeleteFromDB() override // override of Creature::DeleteFromDB - must not be called { - ASSERT(false); + ABORT(); } }; #endif diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9556a55c4e..e4e07cfeb5 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -20440,7 +20440,7 @@ void Player::StopCastingCharm() if (charm->GetCharmerGUID()) { TC_LOG_FATAL("entities.player", "Charmed unit has charmer %s", charm->GetCharmerGUID().ToString().c_str()); - ASSERT(false); + ABORT(); } else SetCharm(charm, false); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 598bc5f847..f8810c9d14 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3520,7 +3520,7 @@ void Unit::_UnapplyAura(AuraApplication * aurApp, AuraRemoveMode removeMode) else ++iter; } - ASSERT(false); + ABORT(); } void Unit::_RemoveNoStackAurasDueToAura(Aura* aura) @@ -3630,7 +3630,7 @@ void Unit::RemoveOwnedAura(Aura* aura, AuraRemoveMode removeMode) } } - ASSERT(false); + ABORT(); } Aura* Unit::GetOwnedAura(uint32 spellId, ObjectGuid casterGUID, ObjectGuid itemCasterGUID, uint8 reqEffMask, Aura* except) const @@ -9450,7 +9450,7 @@ void Unit::SetMinion(Minion *minion, bool apply) { OutDebugInfo(); (*itr)->OutDebugInfo(); - ASSERT(false); + ABORT(); } ASSERT((*itr)->GetTypeId() == TYPEID_UNIT); @@ -13604,7 +13604,7 @@ void Unit::RemoveFromWorld() if (GetCharmerGUID()) { TC_LOG_FATAL("entities.unit", "Unit %u has charmer guid when removed from world", GetEntry()); - ASSERT(false); + ABORT(); } if (Unit* owner = GetOwner()) @@ -13612,7 +13612,7 @@ void Unit::RemoveFromWorld() if (owner->m_Controlled.find(this) != owner->m_Controlled.end()) { TC_LOG_FATAL("entities.unit", "Unit %u is in controlled list of %u when removed from world", GetEntry(), owner->GetEntry()); - ASSERT(false); + ABORT(); } } @@ -15980,7 +15980,7 @@ void Unit::RemoveCharmedBy(Unit* charmer) { // TC_LOG_FATAL("entities.unit", "Unit::RemoveCharmedBy: this: " UI64FMTD " true charmer: " UI64FMTD " false charmer: " UI64FMTD, // GetGUID(), GetCharmerGUID(), charmer->GetGUID()); -// ASSERT(false); +// ABORT(); return; } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 354bbe4e26..c758d132d6 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2571,7 +2571,7 @@ inline void Map::setNGrid(NGridType *grid, uint32 x, uint32 y) if (x >= MAX_NUMBER_OF_GRIDS || y >= MAX_NUMBER_OF_GRIDS) { TC_LOG_ERROR("maps", "map::setNGrid() Invalid grid coordinates found: %d, %d!", x, y); - ASSERT(false); + ABORT(); } i_grids[x][y] = grid; } @@ -2630,7 +2630,7 @@ void Map::AddObjectToSwitchList(WorldObject* obj, bool on) else if (itr->second != on) i_objectsToSwitch.erase(itr); else - ASSERT(false); + ABORT(); } void Map::RemoveAllObjectsInRemoveList() @@ -2867,7 +2867,7 @@ bool InstanceMap::CanEnter(Player* player) if (player->GetMapRef().getTarget() == this) { TC_LOG_ERROR("maps", "InstanceMap::CanEnter - player %s(%u) already in map %d, %d, %d!", player->GetName().c_str(), player->GetGUIDLow(), GetId(), GetInstanceId(), GetSpawnMode()); - ASSERT(false); + ABORT(); return false; } @@ -2976,7 +2976,7 @@ bool InstanceMap::AddPlayerToMap(Player* player) TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %s %d, %d, %d, %d, %d, %d but he is in group %s and is bound to instance %d, %d, %d, %d, %d, %d!", player->GetName().c_str(), player->GetGUIDLow(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset(), group->GetLeaderGUID().ToString().c_str(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset()); if (groupBind) TC_LOG_ERROR("maps", "InstanceMap::Add: the group is bound to the instance %s %d, %d, %d, %d, %d, %d", GetMapName(), groupBind->save->GetMapId(), groupBind->save->GetInstanceId(), groupBind->save->GetDifficulty(), groupBind->save->GetPlayerCount(), groupBind->save->GetGroupCount(), groupBind->save->CanReset()); - //ASSERT(false); + //ABORT(); return false; } // bind to the group or keep using the group save @@ -3256,7 +3256,7 @@ bool BattlegroundMap::CanEnter(Player* player) if (player->GetMapRef().getTarget() == this) { TC_LOG_ERROR("maps", "BGMap::CanEnter - player %u is already in map!", player->GetGUIDLow()); - ASSERT(false); + ABORT(); return false; } diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp index e4632bb751..32c10cae16 100644 --- a/src/server/game/Maps/MapInstanced.cpp +++ b/src/server/game/Maps/MapInstanced.cpp @@ -194,13 +194,13 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save, if (!entry) { TC_LOG_ERROR("maps", "CreateInstance: no entry for map %d", GetId()); - ASSERT(false); + ABORT(); } const InstanceTemplate* iTemplate = sObjectMgr->GetInstanceTemplate(GetId()); if (!iTemplate) { TC_LOG_ERROR("maps", "CreateInstance: no instance template for map %d", GetId()); - ASSERT(false); + ABORT(); } // some instances only have one difficulty @@ -279,6 +279,6 @@ bool MapInstanced::DestroyInstance(InstancedMaps::iterator &itr) bool MapInstanced::CanEnter(Player* /*player*/) { - //ASSERT(false); + //ABORT(); return true; } diff --git a/src/server/game/Movement/Spline/Spline.h b/src/server/game/Movement/Spline/Spline.h index c8b7a19c94..59f514bed7 100644 --- a/src/server/game/Movement/Spline/Spline.h +++ b/src/server/game/Movement/Spline/Spline.h @@ -82,7 +82,7 @@ protected: typedef void (SplineBase::*InitMethtod)(const Vector3*, index_type, index_type); static InitMethtod initializers[ModesEnd]; - void UninitializedSpline() const { ASSERT(false);} + void UninitializedSpline() const { ABORT();} public: diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index aed829a7b5..0ece05f1d9 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -108,7 +108,7 @@ class ScriptRegistry TC_LOG_ERROR("scripts", "Script '%s' already assigned with the same script name, so the script can't work.", script->GetName().c_str()); - ASSERT(false); // Error that should be fixed ASAP. + ABORT(); // Error that should be fixed ASAP. } } else @@ -960,7 +960,7 @@ bool ScriptMgr::OnAreaTrigger(Player* player, AreaTriggerEntry const* trigger) Battleground* ScriptMgr::CreateBattleground(BattlegroundTypeId /*typeId*/) { /// @todo Implement script-side battlegrounds. - ASSERT(false); + ABORT(); return NULL; } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 4eea5eed03..e380373f4c 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -323,7 +323,7 @@ Aura* Aura::Create(SpellInfo const* spellproto, uint8 effMask, WorldObject* owne aura = new DynObjAura(spellproto, effMask, owner, caster, baseAmount, castItem, casterGUID); break; default: - ASSERT(false); + ABORT(); return NULL; } // aura can be removed in Unit::_AddAura call @@ -437,7 +437,7 @@ void Aura::_UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * auraA { TC_LOG_ERROR("spells", "Aura::_UnapplyForTarget, target:%u, caster:%u, spell:%u was not found in owners application map!", target->GetGUIDLow(), caster ? caster->GetGUIDLow() : 0, auraApp->GetBase()->GetSpellInfo()->Id); - ASSERT(false); + ABORT(); } // aura has to be already applied @@ -528,7 +528,7 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply) else { // ok, we have one unit twice in target map (impossible, but...) - ASSERT(false); + ABORT(); } } @@ -586,7 +586,7 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply) TC_LOG_FATAL("spells", "Aura %u: Owner %s (map %u) is not in the same map as target %s (map %u).", GetSpellInfo()->Id, GetOwner()->GetName().c_str(), GetOwner()->IsInWorld() ? GetOwner()->GetMap()->GetId() : uint32(-1), itr->first->GetName().c_str(), itr->first->IsInWorld() ? itr->first->GetMap()->GetId() : uint32(-1)); - ASSERT(false); + ABORT(); } itr->first->_CreateAuraApplication(this, itr->second); ++itr; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 03f14d1cdc..ca6946554d 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -6586,7 +6586,7 @@ SpellEvent::~SpellEvent() { TC_LOG_ERROR("spells", "~SpellEvent: %s %u tried to delete non-deletable spell %u. Was not deleted, causes memory leak.", (m_Spell->GetCaster()->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), m_Spell->GetCaster()->GetGUIDLow(), m_Spell->m_spellInfo->Id); - ASSERT(false); + ABORT(); } } @@ -7044,7 +7044,7 @@ bool Spell::CallScriptEffectHandlers(SpellEffIndex effIndex, SpellEffectHandleMo hookType = SPELL_SCRIPT_HOOK_EFFECT_HIT_TARGET; break; default: - ASSERT(false); + ABORT(); return false; } (*scritr)->_PrepareScriptCall(hookType); diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 10c41835a9..387fb156de 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -424,7 +424,7 @@ void FreezeDetectorHandler(const boost::system::error_code& error) else if (getMSTimeDiff(_lastChangeMsTime, curtime) > _maxCoreStuckTimeInMs) { TC_LOG_ERROR("server.worldserver", "World Thread hangs, kicking out server!"); - ASSERT(false); + ABORT(); } _freezeCheckTimer.expires_from_now(boost::posix_time::seconds(1)); From 4c0fb17c77a560be58945ce55633fee9fa01e05c Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 21 Sep 2015 15:15:03 +0200 Subject: [PATCH 028/524] DB/Npc: Fix Thomas Miller's text Closes #15530 --- sql/updates/world/2015_09_21_01_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2015_09_21_01_world.sql diff --git a/sql/updates/world/2015_09_21_01_world.sql b/sql/updates/world/2015_09_21_01_world.sql new file mode 100644 index 0000000000..a7bcbb124d --- /dev/null +++ b/sql/updates/world/2015_09_21_01_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=3518 AND `source_type`=0; +UPDATE `creature_template` SET `AIName`='' WHERE `entry`=3518; +UPDATE `waypoint_scripts` SET `dataint`=1102 WHERE `id`=273 ; From 70fc41b509a65df92ed82ea854cfca0a4d1033b9 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 21 Sep 2015 15:53:07 +0200 Subject: [PATCH 029/524] DB/SAI: Fixing some creatures spamming "calling for help" Closes #15526 By @Malcrom --- sql/updates/world/2015_09_21_02_world.sql | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 sql/updates/world/2015_09_21_02_world.sql diff --git a/sql/updates/world/2015_09_21_02_world.sql b/sql/updates/world/2015_09_21_02_world.sql new file mode 100644 index 0000000000..e79dddf769 --- /dev/null +++ b/sql/updates/world/2015_09_21_02_world.sql @@ -0,0 +1,32 @@ +-- +-- Defias Conjurer SAI "Comments and event_flags fix" +SET @ENTRY := 619; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,1000,1000,1800000,1800000,11,12544,1,0,0,0,0,1,0,0,0,0,0,0,0,"Defias Conjurer - Out of Combat - Cast 'Frost Armor'"), +(@ENTRY,0,1,0,0,0,100,0,0,0,2400,3800,11,9053,64,0,0,0,0,2,0,0,0,0,0,0,0,"Defias Conjurer - Combat CMC - Cast 'Fireball'"), +(@ENTRY,0,2,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Defias Conjurer - On Health - Flee for assist (No Repeat)"); + +-- Crushridge Warmonger SAI "Comments and event_flags fix" +SET @ENTRY := 2287; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,4,0,10,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Crushridge Warmonger - On Aggro - Say Line 0 (No Repeat)"), +(@ENTRY,0,1,0,2,0,100,1,0,50,0,0,39,15,1,0,0,0,0,1,0,0,0,0,0,0,0,"Crushridge Warmonger - Between 0-50% Health - Call For Help (No Repeat)"), +(@ENTRY,0,2,3,74,0,100,1,0,15,0,0,11,8269,1,0,0,0,0,9,0,0,0,0,0,0,0,"Crushridge Warmonger - On Friendly Between 0-15% Health - Cast 'Frenzy' (No Repeat)"), +(@ENTRY,0,3,0,61,0,100,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Crushridge Warmonger - On Friendly Between 0-15% Health - Say Line 1 (No Repeat)"); + +-- Dustbelcher Lord SAI "Line numbering and event_flags fix" +SET @ENTRY := 2719; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,0,0,100,0,7800,12100,11200,30000,11,9128,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dustbelcher Lord - In Combat - Cast 'Battle Shout'"), +(@ENTRY,0,1,0,0,0,100,0,6600,18700,30800,32400,11,13730,1,0,0,0,0,1,0,0,0,0,0,0,0,"Dustbelcher Lord - In Combat - Cast 'Demoralizing Shout'"), +(@ENTRY,0,2,0,2,0,100,1,0,50,0,0,39,15,1,0,0,0,0,1,0,0,0,0,0,0,0,"Dustbelcher Lord - Between 0-50% Health - Call For Help (No Repeat)"); + +-- Duggan Wildhammer & Sentinel Leader & Dal Bloodclaw SAI "event_flags fix" +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid` IN (10817,17210) AND `source_type`=0 AND `id`=2; +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid` IN (3987) AND `source_type`=0 AND `id`=1; From ee8c4bf077ee901fe7d4c967ff9f5c142055fc8a Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 21 Sep 2015 16:22:27 +0200 Subject: [PATCH 030/524] DB/Spell: Link Fear to Charge used by Spectral Chargers in Karazhan Closes #15488 --- sql/updates/world/2015_09_21_03_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2015_09_21_03_world.sql diff --git a/sql/updates/world/2015_09_21_03_world.sql b/sql/updates/world/2015_09_21_03_world.sql new file mode 100644 index 0000000000..aea8aaf43a --- /dev/null +++ b/sql/updates/world/2015_09_21_03_world.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 29320; +INSERT INTO `spell_linked_spell` VALUES (29320, 29321, 0, 'Charge-Fear'); From 5cf6b8cc86107c816731c57d8175afe755aa0cbd Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 21 Sep 2015 20:54:03 +0200 Subject: [PATCH 031/524] DB/Misc: Naxxramas pathing By @Malcrom --- sql/updates/world/2015_09_21_04_world.sql | 246 ++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 sql/updates/world/2015_09_21_04_world.sql diff --git a/sql/updates/world/2015_09_21_04_world.sql b/sql/updates/world/2015_09_21_04_world.sql new file mode 100644 index 0000000000..40792506d5 --- /dev/null +++ b/sql/updates/world/2015_09_21_04_world.sql @@ -0,0 +1,246 @@ +-- +UPDATE `gossip_menu_option` SET `action_menu_id`=9753 WHERE `menu_id`=9754; + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127753; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2926.023,`position_y`=-3200.403,`position_z`=273.3712 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2926.023,-3200.403,273.3712,0,0,0,0,100,0), +(@PATH,2,2931.457,-3188.328,273.3712,0,0,0,0,100,0), +(@PATH,3,2925.778,-3167.298,273.787,0,0,0,0,100,0), +(@PATH,4,2907.542,-3166.655,273.787,0,0,0,0,100,0), +(@PATH,5,2873.219,-3165.419,273.787,0,0,0,0,100,0), +(@PATH,6,2861.632,-3165.088,273.787,0,0,0,0,100,0), +(@PATH,7,2860.526,-3185.717,273.787,0,0,0,0,100,0), +(@PATH,8,2860.435,-3203.401,273.787,0,0,0,0,100,0), +(@PATH,9,2875.204,-3203.906,273.4088,0,0,0,0,100,0), +(@PATH,10,2892.834,-3204.38,273.3965,0,0,0,0,100,0), +(@PATH,11,2911.993,-3204.611,273.3846,0,0,0,0,100,0); + +DELETE FROM `creature_template_addon` WHERE `entry` =16400; + +-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT' +SET @NPC := 127631; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3223.018,`position_y`=-3218.725,`position_z`=316.3705 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '28370'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3223.018,-3218.725,316.3705,0,0,0,0,100,0), +(@PATH,2,3230.179,-3211.59,316.5933,0,0,0,0,100,0); + +-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT' +SET @NPC := 127632; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3208.167,`position_y`=-3234.595,`position_z`=315.4565 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '28370'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3208.167,-3234.595,315.4565,0,0,0,0,100,0), +(@PATH,2,3200.392,-3242.829,315.141,0,0,0,0,100,0); + +-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT' +SET @NPC := 127633; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3178.613,`position_y`=-3263.671,`position_z`=316.4281 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '28370'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3178.613,-3263.671,316.4281,0,0,0,0,100,0), +(@PATH,2,3174.119,-3267.95,316.7845,0,0,0,0,100,0); + +-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT' +SET @NPC := 127634; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3217.316,`position_y`=-3224.753,`position_z`=316.0583 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '28370'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3217.316,-3224.753,316.0583,0,0,0,0,100,0), +(@PATH,2,3209.847,-3232.841,315.5579,0,0,0,0,100,0); + +-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT' +SET @NPC := 127635; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3190.628,`position_y`=-3252.565,`position_z`=315.5675 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '28370'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3190.628,-3252.565,315.5675,0,0,0,0,100,0), +(@PATH,2,3196.852,-3246.524,315.0298,0,0,0,0,100,0); + +-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT' +SET @NPC := 127636; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3244.748,`position_y`=-3198.743,`position_z`=317.3646 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '28370'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3244.748,-3198.743,317.3646,0,0,0,0,100,0), +(@PATH,2,3236.25,-3205.753,316.6993,0,0,0,0,100,0); + +-- Pathing for Toxic Tunnel Entry: 16400 'TDB FORMAT' +SET @NPC := 127637; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3246.763,`position_y`=-3193.856,`position_z`=317.3302 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '28370'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3246.763,-3193.856,317.3302,0,0,0,0,100,0), +(@PATH,2,3252.532,-3188.566,318.1087,0,0,0,0,100,0); + +-- Pathing for Stitched Colossus Entry: 30071 'TDB FORMAT' +SET @NPC := 128058; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3454.427,`position_y`=-3187.954,`position_z`=294.6607 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3454.427,-3187.954,294.6607,0,0,0,0,100,0), +(@PATH,2,3453.837,-3215.978,284.005,0,0,0,0,100,0), +(@PATH,3,3453.848,-3237.722,272.597,0,0,0,0,100,0), +(@PATH,4,3453.705,-3262.583,267.5943,0,0,0,0,100,0), +(@PATH,5,3453.507,-3285.881,267.5923,0,0,0,0,100,0), +(@PATH,6,3450.008,-3299.009,267.593,0,0,0,0,100,0), +(@PATH,7,3434.539,-3314.597,267.592,0,0,0,0,100,0), +(@PATH,8,3423.135,-3338.302,267.593,0,0,0,0,100,0), +(@PATH,9,3430.531,-3358.816,267.592,0,0,0,0,100,0), +(@PATH,10,3450.598,-3369.066,267.5927,0,0,0,0,100,0), +(@PATH,11,3472.296,-3362.288,267.5991,0,0,0,0,100,0), +(@PATH,12,3483.6,-3341.974,267.5938,0,0,0,0,100,0), +(@PATH,13,3477.419,-3326.692,267.5933,0,0,0,0,100,0), +(@PATH,14,3466.747,-3312.542,267.5925,0,0,0,0,100,0), +(@PATH,15,3455.716,-3299.394,267.5929,0,0,0,0,100,0), +(@PATH,16,3453.988,-3285.853,267.5922,0,0,0,0,100,0), +(@PATH,17,3454.239,-3262.38,267.5943,0,0,0,0,100,0), +(@PATH,18,3454.453,-3237.651,272.6341,0,0,0,0,100,0), +(@PATH,19,3454.135,-3215.837,284.079,0,0,0,0,100,0); + +-- Pathing for Stitched Colossus Entry: 30071 'TDB FORMAT' +SET @NPC := 128057; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3331.301,`position_y`=-3008.488,`position_z`=294.6606 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3331.301,-3008.488,294.6606,0,0,0,0,100,0), +(@PATH,2,3352.705,-3027.659,294.6606,0,0,0,0,100,0), +(@PATH,3,3378.292,-3052.875,294.6657,0,0,0,0,100,0), +(@PATH,4,3400.806,-3075.215,294.6628,0,0,0,0,100,0), +(@PATH,5,3420.535,-3095.16,294.6607,0,0,0,0,100,0), +(@PATH,6,3423.608,-3104.254,294.6607,0,0,0,0,100,0), +(@PATH,7,3424.381,-3122.999,294.6599,0,0,0,0,100,0), +(@PATH,8,3428.679,-3145.677,294.659,0,0,0,0,100,0), +(@PATH,9,3444.718,-3157.384,294.6608,0,0,0,0,100,0), +(@PATH,10,3466.77,-3155.3,294.6603,0,0,0,0,100,0), +(@PATH,11,3481.494,-3139.173,294.6597,0,0,0,0,100,0), +(@PATH,12,3480.309,-3114.887,294.6596,0,0,0,0,100,0), +(@PATH,13,3467.193,-3102.655,294.6595,0,0,0,0,100,0), +(@PATH,14,3448.526,-3099.575,294.6612,0,0,0,0,100,0), +(@PATH,15,3428.409,-3099.175,294.6607,0,0,0,0,100,0), +(@PATH,16,3420.901,-3094.735,294.6607,0,0,0,0,100,0), +(@PATH,17,3401.064,-3074.813,294.6629,0,0,0,0,100,0), +(@PATH,18,3378.616,-3052.372,294.6658,0,0,0,0,100,0), +(@PATH,19,3352.98,-3027.292,294.6606,0,0,0,0,100,0), +(@PATH,20,3331.301,-3008.488,294.6606,0,0,0,0,100,0), +(@PATH,21,3311.187,-2990.615,294.6598,0,0,0,0,100,0), +(@PATH,22,3311.187,-2990.615,294.6598,2.505866,0,0,0,100,0), +(@PATH,23,3311.187,-2990.615,294.6598,2.251878,0,0,0,100,0), +(@PATH,24,3311.187,-2990.615,294.6598,3.254467,0,0,0,100,0), +(@PATH,25,3311.187,-2990.615,294.6598,5.113917,0,0,0,100,0); + +-- Pathing for Stitched Colossus Entry: 30071 'TDB FORMAT' +SET @NPC := 128056; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3425.885,`position_y`=-3100.784,`position_z`=294.6607 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3425.885,-3100.784,294.6607,0,0,0,0,100,0), +(@PATH,2,3400.279,-3075.093,294.6628,0,0,0,0,100,0), +(@PATH,3,3373.177,-3047.739,294.6664,0,0,0,0,100,0), +(@PATH,4,3344.838,-3019.543,294.6606,0,0,0,0,100,0), +(@PATH,5,3341.914,-3012.742,294.6606,0,0,0,0,100,0), +(@PATH,6,3339.663,-2995.398,294.6601,0,0,0,0,100,0), +(@PATH,7,3337.08,-2977.52,294.6604,0,0,0,0,100,0), +(@PATH,8,3323.939,-2963.499,294.6603,0,0,0,0,100,0), +(@PATH,9,3299.76,-2962.284,294.6606,0,0,0,0,100,0), +(@PATH,10,3286.439,-2972.35,294.6593,0,0,0,0,100,0), +(@PATH,11,3280.707,-2995.567,294.6606,0,0,0,0,100,0), +(@PATH,12,3288.473,-3011.645,294.6597,0,0,0,0,100,0), +(@PATH,13,3307.809,-3020.176,294.659,0,0,0,0,100,0), +(@PATH,14,3325.226,-3018.351,294.6606,0,0,0,0,100,0), +(@PATH,15,3338.513,-3016.632,294.6606,0,0,0,0,100,0), +(@PATH,16,3344.342,-3020.255,294.6606,0,0,0,0,100,0), +(@PATH,17,3372.666,-3048.441,294.6662,0,0,0,0,100,0), +(@PATH,18,3399.818,-3075.62,294.6627,0,0,0,0,100,0), +(@PATH,19,3425.406,-3101.135,294.6607,0,0,0,0,100,0), +(@PATH,20,3451.888,-3127.903,294.6607,0,0,0,0,100,0), +(@PATH,21,3451.888,-3127.903,294.6607,1.541391,0,0,0,100,0), +(@PATH,22,3456.634,-3133.219,294.6606,0,0,0,0,100,0), +(@PATH,23,3455.112,-3131.514,294.6606,6.06443,0,0,0,100,0), +(@PATH,24,3455.112,-3131.514,294.6606,4.858006,0,0,0,100,0), +(@PATH,25,3455.112,-3131.514,294.6606,2.345938,0,0,0,100,0); + +-- Pathing for Stitched Colossus Entry: 30071 'TDB FORMAT' +SET @NPC := 128054; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3250.639,`position_y`=-2986.463,`position_z`=294.6606 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3250.639,-2986.463,294.6606,0,0,0,0,100,0), +(@PATH,2,3218.217,-2985.765,281.2667,0,0,0,0,100,0), +(@PATH,3,3198.772,-2985.637,271.0636,0,0,0,0,100,0), +(@PATH,4,3178.061,-2985.433,267.5943,0,0,0,0,100,0), +(@PATH,5,3159.365,-2985.343,267.5929,0,0,0,0,100,0), +(@PATH,6,3139.7,-2981.853,267.5929,0,0,0,0,100,0), +(@PATH,7,3126.553,-2971.708,267.5919,0,0,0,0,100,0), +(@PATH,8,3114.558,-2959.215,267.5926,0,0,0,0,100,0), +(@PATH,9,3095.302,-2956.31,267.5921,0,0,0,0,100,0), +(@PATH,10,3078.464,-2964.795,267.5918,0,0,0,0,100,0), +(@PATH,11,3070.598,-2982.696,267.5929,0,0,0,0,100,0), +(@PATH,12,3076.846,-3004.052,267.592,0,0,0,0,100,0), +(@PATH,13,3096.726,-3015.381,267.5934,0,0,0,0,100,0), +(@PATH,14,3115.124,-3011.505,267.5921,0,0,0,0,100,0), +(@PATH,15,3127.605,-2998.091,267.5924,0,0,0,0,100,0), +(@PATH,16,3139.447,-2989.035,267.5929,0,0,0,0,100,0), +(@PATH,17,3159.26,-2985.907,267.5929,0,0,0,0,100,0), +(@PATH,18,3178.106,-2985.838,267.5943,0,0,0,0,100,0), +(@PATH,19,3198.909,-2986.179,271.1352,0,0,0,0,100,0), +(@PATH,20,3218.02,-2986.236,281.1633,0,0,0,0,100,0); + +-- Pathing for Shade of Naxxramas Entry: 16164 'TDB FORMAT' +SET @NPC := 127755; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2915.294,`position_y`=-3343.234,`position_z`=298.1457 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2915.294,-3343.234,298.1457,0,0,0,0,100,0), +(@PATH,2,2898.639,-3327.008,298.1457,0,0,0,0,100,0), +(@PATH,3,2915.294,-3343.234,298.1457,0,0,0,0,100,0), +(@PATH,4,2898.639,-3327.008,298.1457,0,0,0,0,100,0), +(@PATH,5,2915.294,-3343.234,298.1457,0,0,0,0,100,0), +(@PATH,6,2898.639,-3327.008,298.1457,0,0,0,0,100,0); + +-- Sludge Belcher SAI On Reset - Cast Disease Cloud was set to OOC +UPDATE `smart_scripts` SET `event_type`=25 WHERE `entryorguid`=16029 AND `source_type`=0 AND `id`=0; +-- These npc's should not be moving +UPDATE creature SET `spawndist`=0, `MovementType`=0 WHERE `guid` IN (128070,128071,128072,128073,128074,128067,130957); From bd61eb21a353c8342472b9a4b336a0c712d181dd Mon Sep 17 00:00:00 2001 From: Dr-J Date: Mon, 21 Sep 2015 19:57:43 +0100 Subject: [PATCH 032/524] DB/Misc: Sha'tari Skyguard Texts Missing texts for a number of npcs for players exhalted wit the Sha'tari skyguard also texts for return of bombing run / bomb them again Texts copied from parsed sniff as even though is set to output them creature texts are ommited from sql output. --- sql/updates/world/2015_09_21_05_world.sql | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 sql/updates/world/2015_09_21_05_world.sql diff --git a/sql/updates/world/2015_09_21_05_world.sql b/sql/updates/world/2015_09_21_05_world.sql new file mode 100644 index 0000000000..eccb800e8c --- /dev/null +++ b/sql/updates/world/2015_09_21_05_world.sql @@ -0,0 +1,41 @@ +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`in(23392,23257,23334,23208,23335,22982); + + +DELETE FROM `creature_text` WHERE `entry` in(23392,23257,23334,23208,23335,22982); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(23392, 0, 0, '$n is an officer and a $g gentleman : gentlewoman;.', 12, 0, 100, 0, 0, 0, 21940, 0, 'Skyguard Stable Master '), +(23257, 0, 0, 'Look who''s here. It''s $n, our top gun.', 12, 0, 100, 0, 0, 0, 21885, 0, 'Skyguard Windcharger'), +(23257, 0, 1, '$n, terror of the skies, how are you doing?', 12, 0, 100, 0, 0, 0, 21893, 0, 'Skyguard Windcharger'), +(23257, 0, 2, 'A-TEN-HUT, officer $n on the deck!', 12, 0, 100, 0, 0, 0, 21891, 0, 'Skyguard Windcharger'), +(23257, 0, 3, '$G Mister : Lady; $n, what an unexpected pleasure, $g sir : ma''am;.', 12, 0, 100, 0, 0, 0, 21890, 0, 'Skyguard Windcharger'), +(23257, 0, 4, 'Heh, the skies aren''t so friendly with $n flying them!', 12, 0, 100, 0, 0, 0, 21895, 0, 'Skyguard Windcharger'), +(23257, 0, 5, '$n, you and I should race sometime.', 12, 0, 100, 0, 0, 0, 21937, 0, 'Skyguard Windcharger'), +(23257, 0, 6, '$n, how''s your mount holding up? Pretty rough up there these days?', 12, 0, 100, 0, 0, 0, 21897, 0, 'Skyguard Windcharger'), +(23334, 0, 0, 'Maybe one day $n will teach us a few of $g his : her; tricks?', 12, 0, 100, 0, 0, 0, 21942, 0, 'Sky Commander Keller'), +(23208, 0, 0, 'Maybe one day $n will teach us a few of $g his : her; tricks?', 12, 0, 100, 0, 0, 0, 21942, 0, 'Skyguard Pyrotechnician'), +(23335, 0, 0, 'You''re a peach! I''ll make sure that the ray is properly cared for.', 12, 0, 100, 0, 0, 0, 21371, 0, 'Skyguard Khatie'), +(23335, 0, 1, 'Wow! Thanks for bringing it all the way back here. You didn''t have to do that.', 12, 0, 100, 0, 0, 0, 21370, 0, 'Skyguard Khatie'), +(22982, 0, 0, '$n, do you feel the need -- the need for speed?', 12, 0, 100, 0, 0, 0, 21886, 0, 'Skyguard Navigator'), +(22982, 0, 1, '$n, how''s your mount holding up? Pretty rough up there these days?', 12, 0, 100, 0, 0, 0, 21897, 0, 'Skyguard Navigator'), +(22982, 0, 3, 'Heh, the skies aren''t so friendly with $n flying them!', 12, 0, 100, 0, 0, 0, 21895, 0, 'Skyguard Navigator'), +(22982, 0, 4, '$n, terror of the skies, how are you doing?', 12, 0, 100, 0, 0, 0, 21893, 0, 'Skyguard Navigator'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(23392,23257,23334,23208,23335,22982) 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 +(23392, 0, 0, 0, 10, 0, 100, 0, 1, 10, 300000, 300000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Stable Master - OOC LOS - Say'), +(23257, 0, 0, 0, 10, 0, 100, 0, 1, 10, 150000, 150000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Stable Master - OOC LOS - Say'), +(23334, 0, 0, 0, 10, 0, 100, 0, 1, 10, 300000, 300000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Sky Commander Keller - OOC LOS - Say'), +(23208, 0, 0, 0, 10, 0, 100, 0, 1, 10, 300000, 300000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Pyrotechnician - OOC LOS - Say'), +(23335, 0, 0, 0, 10, 0, 100, 0, 1, 10, 300000, 300000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Khatie - OOC LOS - Say'), +(22982, 0, 0, 0, 10, 0, 100, 0, 1, 10, 150000, 150000, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Skyguard Navigator - OOC LOS - Say'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN(23392,23257,23334,23208,23335,22982); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 23392, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'), +(22, 1, 23257, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'), +(22, 1, 23334, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'), +(22, 1, 23208, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'), +(22, 1, 23335, 0, 0, 28, 0, 11023, 0, 0, 0, 0, 0, '', 'requires Bomb Them Again complete in quest log'), +(22, 1, 23335, 0, 1, 28, 0, 11010, 0, 0, 0, 0, 0, '', 'requires Bombing run complete in quest log'), +(22, 1, 23335, 0, 2, 28, 0, 11102, 0, 0, 0, 0, 0, '', 'requires Bombing run complete in quest log'), +(22, 1, 22982, 0, 0, 5, 0, 1031, 128, 0, 0, 0, 0, '', 'requires shatari skyguard exhalted'); From 6f3def5267c20d55135cbc76bd0723302751f199 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 21 Sep 2015 21:06:40 +0200 Subject: [PATCH 033/524] DB/Npc: North Sea Kraken A blizzlike script, only condition for the spell Flaming Spear and Tooth Explosion must be done once the condition (In Taxi) is implemented. --- sql/updates/world/2015_09_21_06_world.sql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 sql/updates/world/2015_09_21_06_world.sql diff --git a/sql/updates/world/2015_09_21_06_world.sql b/sql/updates/world/2015_09_21_06_world.sql new file mode 100644 index 0000000000..4e0ee5b222 --- /dev/null +++ b/sql/updates/world/2015_09_21_06_world.sql @@ -0,0 +1,18 @@ +-- +-- North Sea Kraken SAI +SET @ENTRY := 34925; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY*100 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,0,0,100,0,6000,9000,7000,9000,11,66514,0,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - IC - Cast Frost Breath'), +(@ENTRY,0,1,0,8,0,40,0,66588,0,0,0,80,@ENTRY*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - On Spell hit Flaming Spear - ActionList'), +(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,11,50142,2,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Cast Submerge'), +(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,18,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Add unitflag not selectable'), +(@ENTRY*100,9,2,0,0,0,100,0,3000,3000,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Turn Invisible'), +(@ENTRY*100,9,3, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 47, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - actionList - Turn Visible'), +(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,19,33554432,0,0,0,0,0,1,0,0,0,0,0,0,0,'North Sea Kraken - actionList - Remove unitflag not selectable'), +(@ENTRY, 0, 2, 3, 2, 0, 100, 1, 1, 6, 0, 0, 11, 66994, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - On Between 1 and 6% HP - Cast Kraken Tooth Explosion'), +(@ENTRY, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - Linked With Previous Event - Die'), +(@ENTRY, 0, 4, 0, 1, 0, 100, 0, 30000, 30000, 30000, 30000, 11, 68909, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - OOC - Cast Submerge '), +(@ENTRY, 0, 5, 0, 0, 0, 100, 0, 15000, 20000, 15000, 20000, 11, 66511, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Northsea Kraken - IC - Cast Whirl'), +(@ENTRY,0,6,0,8,0,100,0,66588,0,0,0,11,66717,2,0,0,0,0,7,0,0,0,0,0,0,0,'North Sea Kraken - On spell Hit - Cast Quest credit'); From aebf5a172a9e11ddae24282154f32fdc189a50c0 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 21 Sep 2015 21:24:25 +0200 Subject: [PATCH 034/524] DB/Quest: Take Down Tethyr! This will turn the kraken active once summoned until the waypoint is ended. --- sql/updates/world/2015_09_21_07_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2015_09_21_07_world.sql diff --git a/sql/updates/world/2015_09_21_07_world.sql b/sql/updates/world/2015_09_21_07_world.sql new file mode 100644 index 0000000000..ce126d3808 --- /dev/null +++ b/sql/updates/world/2015_09_21_07_world.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=23899 AND `source_type`=0 AND `id` IN (8,9); +UPDATE `smart_scripts` SET `link`=9 WHERE `entryorguid`=23899 AND `source_type`=0 AND `id`=2; +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 +(23899,0,8,0,54,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tethyr - On Just Summoned - Set Active ON"), +(23899,0,9,0,61,0,100,0,0,0,0,0,48,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tethyr - On wp reached - Set Active OFF"); From 57fabc78e42ad7b511ae66d12fbb824d2c8e75ee Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 21 Sep 2015 22:18:34 +0200 Subject: [PATCH 035/524] Core/Creature: Fix formations to prevent crossover By Malcrom --- src/server/game/Entities/Creature/CreatureGroups.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index 2ccf447178..505d41f63e 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -228,10 +228,11 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z) if (itr->second->point_1) { - if (m_leader->GetCurrentWaypointID() == itr->second->point_1) + if (m_leader->GetCurrentWaypointID() == itr->second->point_1 - 1) itr->second->follow_angle = (2 * float(M_PI)) - itr->second->follow_angle; - if (m_leader->GetCurrentWaypointID() == itr->second->point_2) - itr->second->follow_angle = (2 * float(M_PI)) + itr->second->follow_angle; + + if (m_leader->GetCurrentWaypointID() == itr->second->point_2 - 1) + itr->second->follow_angle = (float(M_PI)) + itr->second->follow_angle; } float angle = itr->second->follow_angle; From e49d4632611a360acc08a0adbc86e96caabdf9eb Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 21 Sep 2015 22:22:27 +0200 Subject: [PATCH 036/524] DB/Creature: Fix some formations By Malcrom. --- sql/updates/world/2015_09_21_08_world.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sql/updates/world/2015_09_21_08_world.sql diff --git a/sql/updates/world/2015_09_21_08_world.sql b/sql/updates/world/2015_09_21_08_world.sql new file mode 100644 index 0000000000..d56b962ad8 --- /dev/null +++ b/sql/updates/world/2015_09_21_08_world.sql @@ -0,0 +1,10 @@ +-- Update formation points +UPDATE `creature_formations` SET `point_1`=1, `point_2`=19 WHERE `leaderGUID`=127045 AND `memberGUID`=127058; +UPDATE `creature_formations` SET `point_1`=4, `point_2`=8 WHERE `leaderGUID`=201706 AND `memberGUID`=201764; +UPDATE `creature_formations` SET `angle`=270,`point_1`=4, `point_2`=7 WHERE `leaderGUID`=201713 AND `memberGUID`=201735; +UPDATE `creature_formations` SET `angle`=260, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=202628 AND `memberGUID` IN (202680); +UPDATE `creature_formations` SET `angle`=100, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=202628 AND `memberGUID` IN (202682); +UPDATE `creature_formations` SET `point_1`=2, `point_2`=7 WHERE `leaderGUID`=202629 AND `memberGUID` IN (202681,202684); +UPDATE `creature_formations` SET `point_1`=1, `point_2`=10 WHERE `leaderGUID`=202692 AND `memberGUID` IN (202695,202696); +UPDATE `creature_formations` SET `point_1`=2, `point_2`=7 WHERE `leaderGUID`=202814 AND `memberGUID` IN (202803,202804); +UPDATE `creature_formations` SET `point_1`=3, `point_2`=6 WHERE `leaderGUID`=202815 AND `memberGUID` IN (202805,202806); From a513abc02c65a45833ca4006ff346ab690232b0c Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 13 Sep 2015 22:25:13 +0200 Subject: [PATCH 037/524] DB/NPC: Stable Masters Closes #15505 --- sql/updates/world/2015_09_21_09_world.sql | 95 +++++++++++++++++++++++ src/server/scripts/World/npcs_special.cpp | 67 ++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 sql/updates/world/2015_09_21_09_world.sql diff --git a/sql/updates/world/2015_09_21_09_world.sql b/sql/updates/world/2015_09_21_09_world.sql new file mode 100644 index 0000000000..ea4914a6a5 --- /dev/null +++ b/sql/updates/world/2015_09_21_09_world.sql @@ -0,0 +1,95 @@ +-- +UPDATE `creature_template` SET `npcflag`=4194305 WHERE `entry`=9988; +UPDATE `conditions` SET `ConditionValue1` =4 WHERE `SourceGroup`=9576 AND `SourceTypeOrReferenceId`=15; +UPDATE `creature_template` SET `npcflag`=4194305 WHERE `npcflag`=4194304 ; +UPDATE `creature_template` SET `npcflag`=4194307 WHERE `npcflag`=4194306 ; +UPDATE `creature_template` SET `gossip_menu_id`=9821 WHERE `entry` IN (9976,9978,9979,9982,9985,9986,10048,10049,10051,10052,10057,10058,11105,13616,15131,16094,16586,16656,16824,17896,18984,19018,21336,21517,22469,9896,19325,22551,22577,23392,24905,24974,25037,25519,29251,30155,31991,32105,35290); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup`=9821; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 9821, 13557, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0), +(14, 9821, 13584, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1); + +UPDATE `gossip_menu_option` SET `option_id`=1, `npc_option_npcflag`=1, `action_menu_id`=9820 WHERE `menu_id`=9821 AND `id`=1; + +DELETE FROM `gossip_menu` WHERE `entry`=11971 AND `text_id`=16788; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (11971,16788); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup`=11971; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 11971, 16788, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0), +(14, 11971, 16789, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1); + +DELETE FROM `npc_text` WHERE id=16788; +INSERT INTO `npc_text` (`ID`, `text0_0`, `BroadcastTextID0`, `Probability0`) VALUES +(16788, "Hey der, mon.$B$BDid ya want ta be stablin' yer pets, or were ya lookin' for a lost companion?", 45395, 1); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 11971; +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 +(11971,0,0,'I''d like to stable my pet here.',30181,14,4194304,0,0,0,0,'',0), +(11971,1,1,'I''m looking for a lost companion.',56613,1,1,9820,0,0,0,'',0); + +DELETE FROM `gossip_menu` WHERE `entry`=9864 AND `text_id`=13662; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (9864,13662); + +UPDATE `npc_text` SET `text0_0`="", `text0_1`="Well met, Battle-Sister. I can help stable your pets or assist you in recovering lost companions.", `BroadcastTextID0`=30667 WHERE `ID`=13662; + +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 9864; +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 +(9864,0,0,'I''d like to stable my pet here.',30181,14,4194304,0,0,0,0,'',0), +(9864,1,1,'I''m looking for a lost companion.',56613,1,1,9820,0,0,0,'',0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14) AND `SourceGroup`=9864; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(14, 9864, 13662, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is a hunter', 0), +(14, 9864, 13661, 0, 15, 4, 0, 0, 0, '', 'Show gossip text if player is not a hunter', 1); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 9212 AND `id`=1; +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 +(9212,1,0,'I''d like to stable my pet here.',30181,14,4194304,0,0,0,0,'',0); + +DELETE FROM `gossip_menu` WHERE `entry`=9820 AND `text_id`=13584; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (9820,13584); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 9820; +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 +(9820,0,0,'I''ve lost Miniwing.',30182,1,1,0,0,0,0,'',0), +(9820,1,0,'I''ve lost my Jubling.',30183,1,1,0,0,0,0,'',0), +(9820,2,0,'I''ve lost my sprite darter hatchling.',30192,1,1,0,0,0,0,'',0), +(9820,3,0,'I''ve lost my worg pup.',30196,1,1,0,0,0,0,'',0), +(9820,4,0,'I''ve lost my Smolderweb hatchling.',30197,1,1,0,0,0,0,'',0), +(9820,5,0,'I''ve lost my Prairie Chicken.',30217,1,1,0,0,0,0,'',0), +(9820,6,0,'I''ve lost my wolpertinger.',30224,1,1,0,0,0,0,'',0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup`=9820; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(15, 9820, 0, 0, 8, 10898, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 0, 0, 2, 31760, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 0, 0, 25, 39181, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1), +(15, 9820, 1, 0, 8, 7946, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 1, 0, 2, 19450, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 1, 0, 2, 19462, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 1, 0, 25, 23811, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1), +(15, 9820, 2, 0, 8, 4298, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 2, 0, 2, 11474, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 2, 0, 25, 15067, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1), +(15, 9820, 3, 0, 8, 4729, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 3, 0, 2, 12264, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 3, 0, 25, 15999, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1), +(15, 9820, 4, 0, 8, 4862, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 4, 0, 2, 12529, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 4, 0, 25, 16450, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1), +(15, 9820, 5, 0, 8, 3861, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 5, 0, 2, 11110, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 5, 0, 25, 13548, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1), +(15, 9820, 5, 1, 8, 13840, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 5, 1, 2, 11110, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 5, 1, 25, 13548, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1), +(15, 9820, 6, 0, 8, 11117, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 6, 0, 2, 32233, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 6, 0, 25, 39709, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1), +(15, 9820, 6, 1, 8, 11431, 0, 0, 0, '', 'Show the gossip option if the player rewarded the quest', 0), +(15, 9820, 6, 1, 2, 32233, 1, 1, 0, '', 'Show the gossip option if the player Didn''t have the item', 1), +(15, 9820, 6, 1, 25, 39709, 0, 0, 0, '', 'Show the gossip option if the player Didn''t lear the spell', 1); + +UPDATE `creature_template` SET `ScriptName`="npc_stable_master" WHERE `entry` IN (10052, 9978, 33854, 16764, 9986, 9987, 9989, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10053, 10054, 10055, 10056, 10057, 10058, 10059, 10060, 10061, 10062, 10063, 10085, 11069, 11104, 11105, 11117, 11119, 13616, 9983, 9982, 15131, 9981, 16094, 16185, 9985, 16656, 9980, 16824, 17485, 17666, 17896, 18244, 18250, 18984, 19018, 9979, 19368, 19476, 21336, 21517, 21518, 22468, 22469, 9896, 19325, 23392, 24905, 24974, 25037, 27010, 27385, 24066, 24067, 24154, 24350, 25519, 9977, 16586, 9976, 26597, 26721, 9984, 6749, 27056, 27065, 27068, 27150, 27183, 27194, 27948, 28057, 28690, 28790, 29250, 29251, 29658, 29740, 29906, 29948, 29959, 29967, 35344, 30039, 30155, 30304, 35290, 35291, 30008, 9988); diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 5734644339..22eabd3dd6 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -57,6 +57,7 @@ EndContentData */ #include "SpellAuras.h" #include "Pet.h" #include "CreatureTextMgr.h" +#include "SmartAI.h" /*######## # npc_air_force_bots @@ -2321,6 +2322,71 @@ public: } }; +enum StableMasters +{ + SPELL_MINIWING = 54573, + SPELL_JUBLING = 54611, + SPELL_DARTER = 54619, + SPELL_WORG = 54631, + SPELL_SMOLDERWEB = 54634, + SPELL_CHIKEN = 54677, + SPELL_WOLPERTINGER = 54688, + + STABLE_MASTER_GOSSIP_SUB_MENU = 9820 +}; + +class npc_stable_master : public CreatureScript +{ + public: + npc_stable_master() : CreatureScript("npc_stable_master") { } + + struct npc_stable_masterAI : public SmartAI + { + npc_stable_masterAI(Creature* creature) : SmartAI(creature) { } + + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override + { + SmartAI::sGossipSelect(player, menuId, gossipListId); + if (menuId != STABLE_MASTER_GOSSIP_SUB_MENU) + return; + + switch (gossipListId) + { + case 0: + player->CastSpell(player, SPELL_MINIWING, false); + break; + case 1: + player->CastSpell(player, SPELL_JUBLING, false); + break; + case 2: + player->CastSpell(player, SPELL_DARTER, false); + break; + case 3: + player->CastSpell(player, SPELL_WORG, false); + break; + case 4: + player->CastSpell(player, SPELL_SMOLDERWEB, false); + break; + case 5: + player->CastSpell(player, SPELL_CHIKEN, false); + break; + case 6: + player->CastSpell(player, SPELL_WOLPERTINGER, false); + break; + default: + return; + } + + player->PlayerTalkClass->SendCloseGossip(); + } + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_stable_masterAI(creature); + } +}; + void AddSC_npcs_special() { new npc_air_force_bots(); @@ -2343,4 +2409,5 @@ void AddSC_npcs_special() new npc_firework(); new npc_spring_rabbit(); new npc_imp_in_a_ball(); + new npc_stable_master(); } From 158d6506c907de060184de2b09e4a83239fa1ea1 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 21 Sep 2015 23:34:21 +0200 Subject: [PATCH 038/524] DB/Creature: Fix HoS formations By Malcrom --- sql/updates/world/2015_09_21_10_world.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 sql/updates/world/2015_09_21_10_world.sql diff --git a/sql/updates/world/2015_09_21_10_world.sql b/sql/updates/world/2015_09_21_10_world.sql new file mode 100644 index 0000000000..e7938cdf35 --- /dev/null +++ b/sql/updates/world/2015_09_21_10_world.sql @@ -0,0 +1,14 @@ +-- Hall of Stone formation fixes +UPDATE `creature_formations` SET `angle`=310, `point_1`=1, `point_2`=3 WHERE `leaderGUID`=126709 AND `memberGUID`=126692; +UPDATE `creature_formations` SET `angle`=50, `point_1`=1, `point_2`=3 WHERE `leaderGUID`=126709 AND `memberGUID`=126693; +UPDATE `creature_formations` SET `angle`=310, `point_1`=3, `point_2`=7 WHERE `leaderGUID`=126687 AND `memberGUID`=126705; +UPDATE `creature_formations` SET `angle`=50, `point_1`=3, `point_2`=7 WHERE `leaderGUID`=126687 AND `memberGUID`=126700; +UPDATE `creature_formations` SET `angle`=310, `point_1`=2, `point_2`=6 WHERE `leaderGUID`=126690 AND `memberGUID`=126707; +UPDATE `creature_formations` SET `angle`=50, `point_1`=2, `point_2`=6 WHERE `leaderGUID`=126690 AND `memberGUID`=126701; +UPDATE `creature_formations` SET `angle`=310, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=126695 AND `memberGUID`=126713; +UPDATE `creature_formations` SET `angle`=50, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=126695 AND `memberGUID`=126703; +UPDATE `creature_formations` SET `angle`=50, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=126696 AND `memberGUID`=126714; +UPDATE `creature_formations` SET `angle`=310, `point_1`=4, `point_2`=8 WHERE `leaderGUID`=126696 AND `memberGUID`=126704; +UPDATE `creature_formations` SET `dist`=4, `point_1`=2, `point_2`=4 WHERE `leaderGUID`=126715 AND `memberGUID`=126716; +UPDATE `creature_formations` SET `angle`=310, `point_1`=1, `point_2`=3 WHERE `leaderGUID`=126694 AND `memberGUID`=126711; +UPDATE `creature_formations` SET `angle`=50, `point_1`=1, `point_2`=3 WHERE `leaderGUID`=126694 AND `memberGUID`=126712; From 5fb32c525e94d814d256bc9431d18262f4052adc Mon Sep 17 00:00:00 2001 From: MrSmite Date: Sun, 20 Sep 2015 17:23:04 -0400 Subject: [PATCH 039/524] Fix AHBot Buyer to stop counting own auctions --- .../game/AuctionHouseBot/AuctionHouseBotBuyer.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp index 4bf6aa950c..80c32cf66e 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp @@ -102,6 +102,10 @@ uint32 AuctionBotBuyer::GetItemInformation(BuyerConfiguration& config) for (AuctionHouseObject::AuctionEntryMap::const_iterator itr = house->GetAuctionsBegin(); itr != house->GetAuctionsEnd(); ++itr) { AuctionEntry* entry = itr->second; + + if (!entry->owner) + continue; // Skip auctions owned by AHBot + Item* item = sAuctionMgr->GetAItem(entry->itemGUIDLow); if (!item) continue; @@ -135,10 +139,10 @@ uint32 AuctionBotBuyer::GetItemInformation(BuyerConfiguration& config) itemInfo.MinBuyPrice = std::min(itemInfo.MinBuyPrice, itemBuyPrice); } - // Add/update to EligibleItems if: - // has a bid by player or - // has no bids and not owned by bot - if ((entry->bid && entry->bidder) || (entry->owner && !entry->bid)) + // Add/update EligibleItems if: + // * no bid + // * bid from player + if (!entry->bid || entry->bidder) { config.EligibleItems[entry->Id].LastExist = now; config.EligibleItems[entry->Id].AuctionId = entry->Id; From b151e369686f2e3de63ba460ccaf2173c9a6a104 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 22 Sep 2015 14:56:45 +0100 Subject: [PATCH 040/524] DB/Misc: Additional texts --- sql/updates/world/2015_09_22_00_world.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sql/updates/world/2015_09_22_00_world.sql diff --git a/sql/updates/world/2015_09_22_00_world.sql b/sql/updates/world/2015_09_22_00_world.sql new file mode 100644 index 0000000000..821e9ea385 --- /dev/null +++ b/sql/updates/world/2015_09_22_00_world.sql @@ -0,0 +1,10 @@ +DELETE FROM `creature_text` WHERE `entry` =23257 and `groupid`=0 and `id` in(7,8,9); +DELETE FROM `creature_text` WHERE `entry` =22982 and `groupid`=0 and `id` in(5,6); + +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES + +(23257, 0, 7, 'Well one thing''s for sure, $n''s not a nugget any more!', 12, 0, 100, 0, 0, 0, 21896, 0, 'Skyguard Windcharger'), +(23257, 0, 8, 'Buzz the landing pad lately, $n?', 12, 0, 100, 0, 0, 0, 21889, 0, 'Skyguard Windcharger'), +(23257, 0, 9, 'The list of Skyguard members is long and distinguished. $n tops that list.', 12, 0, 100, 0, 0, 0, 21939, 0, 'Skyguard Windcharger'), +(22982, 0, 5, 'Well, if it isn''t our resident $g flyboy : flygirl;, $n. How''s it going, ace?', 12, 0, 100, 0, 0, 0, 21898, 0, 'Skyguard Navigator'), +(22982, 0, 6, 'Hey, it''s our ace flyer, $n!', 12, 0, 100, 0, 0, 0, 21883, 0, 'Skyguard Navigator'); From 7af320c4194cdacc8f193b6bfd54681d86d582d0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 21 Sep 2015 17:18:55 +0200 Subject: [PATCH 041/524] Partially revert "Core/Build: Added missing abort() calls on error handlers" This reverts commit 8ea17647e6bced9d4d027c94ecdc63369cb4c6df. --- src/common/Debugging/Errors.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/common/Debugging/Errors.cpp b/src/common/Debugging/Errors.cpp index f2da96b86b..45f130ceb3 100644 --- a/src/common/Debugging/Errors.cpp +++ b/src/common/Debugging/Errors.cpp @@ -23,13 +23,25 @@ #include #include +/** + @file Errors.cpp + + @brief This file contains definitions of functions used for reporting critical application errors + + It is very important that (std::)abort is NEVER called in place of *((volatile int*)NULL) = 0; + Calling abort() on Windows does not invoke unhandled exception filters - a mechanism used by WheatyExceptionReport + to log crashes. exit(1) calls here are for static analysis tools to indicate that calling functions defined in this file + terminates the application. + */ + namespace Trinity { void Assert(char const* file, int line, char const* function, char const* message) { fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message); - abort(); + *((volatile int*)NULL) = 0; + exit(1); } void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) @@ -43,7 +55,8 @@ void Assert(char const* file, int line, char const* function, char const* messag fflush(stderr); va_end(args); - abort(); + *((volatile int*)NULL) = 0; + exit(1); } void Fatal(char const* file, int line, char const* function, char const* message) @@ -52,14 +65,16 @@ void Fatal(char const* file, int line, char const* function, char const* message file, line, function, message); std::this_thread::sleep_for(std::chrono::seconds(10)); - abort(); + *((volatile int*)NULL) = 0; + exit(1); } void Error(char const* file, int line, char const* function, char const* message) { fprintf(stderr, "\n%s:%i in %s ERROR:\n %s\n", file, line, function, message); - abort(); + *((volatile int*)NULL) = 0; + exit(1); } void Warning(char const* file, int line, char const* function, char const* message) @@ -72,7 +87,8 @@ void Abort(char const* file, int line, char const* function) { fprintf(stderr, "\n%s:%i in %s ABORTED\n", file, line, function); - abort(); + *((volatile int*)NULL) = 0; + exit(1); } } // namespace Trinity From 75842fb1a5fbae8fead8242656364580c33ead12 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 22 Sep 2015 18:29:22 +0200 Subject: [PATCH 042/524] Core/Creature: Fixes Issue with Formations with 2 waypoints By Malcrom --- src/server/game/Entities/Creature/CreatureGroups.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index 505d41f63e..9d0149a24a 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -228,11 +228,13 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z) if (itr->second->point_1) { - if (m_leader->GetCurrentWaypointID() == itr->second->point_1 - 1) - itr->second->follow_angle = (2 * float(M_PI)) - itr->second->follow_angle; - - if (m_leader->GetCurrentWaypointID() == itr->second->point_2 - 1) - itr->second->follow_angle = (float(M_PI)) + itr->second->follow_angle; + if (m_leader->GetCurrentWaypointID() == itr->second->point_1 - 1 || m_leader->GetCurrentWaypointID() == itr->second->point_2 - 1) + { + if (itr->second->follow_angle > float(M_PI)) + itr->second->follow_angle = itr->second->follow_angle - float(M_PI); + else + itr->second->follow_angle = itr->second->follow_angle + float(M_PI); + } } float angle = itr->second->follow_angle; From bea6c43f986e2bf04937ed36fc008498d8e3197b Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 22 Sep 2015 18:33:14 +0200 Subject: [PATCH 043/524] Db/Creature: Update naxx pathing By Malcrom --- sql/updates/world/2015_09_22_01_world.sql | 647 ++++++++++++++++++++++ 1 file changed, 647 insertions(+) create mode 100644 sql/updates/world/2015_09_22_01_world.sql diff --git a/sql/updates/world/2015_09_22_01_world.sql b/sql/updates/world/2015_09_22_01_world.sql new file mode 100644 index 0000000000..c238d97c97 --- /dev/null +++ b/sql/updates/world/2015_09_22_01_world.sql @@ -0,0 +1,647 @@ +-- +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127751; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2828.418,`position_y`=-3128.86,`position_z`=273.8336 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2828.418,-3128.86,273.8336,0,0,0,0,100,0), +(@PATH,2,2828.67,-3097.49,273.8114,0,0,0,0,100,0), +(@PATH,3,2824.122,-3127.451,273.8372,0,0,0,0,100,0), +(@PATH,4,2813.568,-3143.734,273.8355,0,0,0,0,100,0), +(@PATH,5,2801.097,-3163.161,273.787,0,0,0,0,100,0), +(@PATH,6,2799.644,-3189.22,273.787,0,0,0,0,100,0), +(@PATH,7,2820.002,-3202.299,273.7898,0,0,0,0,100,0), +(@PATH,8,2844.853,-3200.758,273.787,0,0,0,0,100,0), +(@PATH,9,2848.53,-3180.427,273.787,0,0,0,0,100,0), +(@PATH,10,2827.984,-3152.95,273.787,0,0,0,0,100,0); + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127752; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2831.418,`position_y`=-3128.86,`position_z`=273.8336 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2828.418,-3128.86,273.8336,0,0,0,0,100,0), +(@PATH,2,2828.67,-3097.49,273.8114,0,0,0,0,100,0), +(@PATH,3,2824.122,-3127.451,273.8372,0,0,0,0,100,0), +(@PATH,4,2813.568,-3143.734,273.8355,0,0,0,0,100,0), +(@PATH,5,2801.097,-3163.161,273.787,0,0,0,0,100,0), +(@PATH,6,2799.644,-3189.22,273.787,0,0,0,0,100,0), +(@PATH,7,2820.002,-3202.299,273.7898,0,0,0,0,100,0), +(@PATH,8,2844.853,-3200.758,273.787,0,0,0,0,100,0), +(@PATH,9,2848.53,-3180.427,273.787,0,0,0,0,100,0), +(@PATH,10,2827.984,-3152.95,273.787,0,0,0,0,100,0); + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127746; -- 127747 +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2561.589,`position_y`=-3158.63,`position_z`=240.5253 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2561.589,-3158.63,240.5253,0,0,0,0,100,0), -- 00:55:40 +(@PATH,2,2577.802,-3151.077,240.5241,0,0,0,0,100,0), -- 00:55:45 +(@PATH,3,2585.239,-3138.162,240.5253,0,0,0,0,100,0), -- 00:55:52 +(@PATH,4,2585.295,-3121.586,240.5244,0,0,0,0,100,0), -- 00:55:58 +(@PATH,5,2580.453,-3111.228,240.5249,0,0,0,0,100,0), -- 00:56:05 +(@PATH,6,2584.915,-3101.806,240.5252,0,0,0,0,100,0), -- 00:56:09 +(@PATH,7,2608.073,-3078.412,240.5271,0,0,0,0,100,0), -- 00:56:14 +(@PATH,8,2627.942,-3058.567,240.5237,0,0,0,0,100,0), -- 00:56:27 +(@PATH,9,2645.011,-3041.33,240.523,0,0,0,0,100,0), -- 00:56:38 +(@PATH,10,2664.399,-3022.119,240.5253,0,0,0,0,100,0), -- 00:56:47 +(@PATH,11,2673.592,-3015.558,240.5253,0,0,0,0,100,0), -- 00:56:58 +(@PATH,12,2692.232,-3014.315,240.5253,0,0,0,0,100,0), -- 00:57:02 +(@PATH,13,2715.057,-3011.801,240.5254,0,0,0,0,100,0), -- 00:57:10 +(@PATH,14,2728.214,-2992.568,240.5253,0,0,0,0,100,0), -- 00:57:19 +(@PATH,15,2725.241,-2970.892,240.5249,0,0,0,0,100,0), -- 00:57:29 +(@PATH,16,2710.557,-2958.161,240.5251,0,0,0,0,100,0), -- 00:57:38 +(@PATH,17,2685.363,-2959.393,240.5253,0,0,0,0,100,0), -- 00:57:45 +(@PATH,18,2671.24,-2977.426,240.5248,0,0,0,0,100,0), -- 00:57:56 +(@PATH,19,2671.708,-2994.812,240.5246,0,0,0,0,100,0), -- 00:58:04 +(@PATH,20,2670.703,-3012.506,240.5252,0,0,0,0,100,0), -- 00:58:12 +(@PATH,21,2663.621,-3021.305,240.5253,0,0,0,0,100,0), -- 00:58:19 +(@PATH,22,2644.285,-3041.24,240.523,0,0,0,0,100,0), -- 00:58:24 +(@PATH,23,2627.018,-3058.662,240.5237,0,0,0,0,100,0), -- 00:58:35 +(@PATH,24,2607.562,-3078.047,240.5271,0,0,0,0,100,0), -- 00:58:44 +(@PATH,25,2583.966,-3101.257,240.5253,0,0,0,0,100,0), -- 00:58:55 +(@PATH,26,2575.257,-3105.696,240.5253,0,0,0,0,100,0), -- 00:59:08 +(@PATH,27,2561.672,-3099.622,240.5251,0,0,0,0,100,0), -- 00:59:11 +(@PATH,28,2542.95,-3102.525,240.5249,0,0,0,0,100,0), -- 00:59:17 +(@PATH,29,2529.021,-3116.719,240.5249,0,0,0,0,100,0), -- 00:59:26 +(@PATH,30,2527.216,-3133.08,240.5253,0,0,0,0,100,0), -- 00:59:33 +(@PATH,31,2530.838,-3143.624,240.5245,0,0,0,0,100,0), -- 00:59:40 +(@PATH,32,2537.175,-3152.094,240.524,0,0,0,0,100,0), -- 00:59:44 +(@PATH,33,2547.807,-3157.692,240.5253,0,0,0,0,100,0); -- 00:59:49 + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127747; -- 127746 +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2561.589,`position_y`=-3158.63,`position_z`=240.5253 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2561.589,-3158.63,240.5253,0,0,0,0,100,0), -- 00:55:40 +(@PATH,2,2577.802,-3151.077,240.5241,0,0,0,0,100,0), -- 00:55:45 +(@PATH,3,2585.239,-3138.162,240.5253,0,0,0,0,100,0), -- 00:55:52 +(@PATH,4,2585.295,-3121.586,240.5244,0,0,0,0,100,0), -- 00:55:58 +(@PATH,5,2580.453,-3111.228,240.5249,0,0,0,0,100,0), -- 00:56:05 +(@PATH,6,2584.915,-3101.806,240.5252,0,0,0,0,100,0), -- 00:56:09 +(@PATH,7,2608.073,-3078.412,240.5271,0,0,0,0,100,0), -- 00:56:14 +(@PATH,8,2627.942,-3058.567,240.5237,0,0,0,0,100,0), -- 00:56:27 +(@PATH,9,2645.011,-3041.33,240.523,0,0,0,0,100,0), -- 00:56:38 +(@PATH,10,2664.399,-3022.119,240.5253,0,0,0,0,100,0), -- 00:56:47 +(@PATH,11,2673.592,-3015.558,240.5253,0,0,0,0,100,0), -- 00:56:58 +(@PATH,12,2692.232,-3014.315,240.5253,0,0,0,0,100,0), -- 00:57:02 +(@PATH,13,2715.057,-3011.801,240.5254,0,0,0,0,100,0), -- 00:57:10 +(@PATH,14,2728.214,-2992.568,240.5253,0,0,0,0,100,0), -- 00:57:19 +(@PATH,15,2725.241,-2970.892,240.5249,0,0,0,0,100,0), -- 00:57:29 +(@PATH,16,2710.557,-2958.161,240.5251,0,0,0,0,100,0), -- 00:57:38 +(@PATH,17,2685.363,-2959.393,240.5253,0,0,0,0,100,0), -- 00:57:45 +(@PATH,18,2671.24,-2977.426,240.5248,0,0,0,0,100,0), -- 00:57:56 +(@PATH,19,2671.708,-2994.812,240.5246,0,0,0,0,100,0), -- 00:58:04 +(@PATH,20,2670.703,-3012.506,240.5252,0,0,0,0,100,0), -- 00:58:12 +(@PATH,21,2663.621,-3021.305,240.5253,0,0,0,0,100,0), -- 00:58:19 +(@PATH,22,2644.285,-3041.24,240.523,0,0,0,0,100,0), -- 00:58:24 +(@PATH,23,2627.018,-3058.662,240.5237,0,0,0,0,100,0), -- 00:58:35 +(@PATH,24,2607.562,-3078.047,240.5271,0,0,0,0,100,0), -- 00:58:44 +(@PATH,25,2583.966,-3101.257,240.5253,0,0,0,0,100,0), -- 00:58:55 +(@PATH,26,2575.257,-3105.696,240.5253,0,0,0,0,100,0), -- 00:59:08 +(@PATH,27,2561.672,-3099.622,240.5251,0,0,0,0,100,0), -- 00:59:11 +(@PATH,28,2542.95,-3102.525,240.5249,0,0,0,0,100,0), -- 00:59:17 +(@PATH,29,2529.021,-3116.719,240.5249,0,0,0,0,100,0), -- 00:59:26 +(@PATH,30,2527.216,-3133.08,240.5253,0,0,0,0,100,0), -- 00:59:33 +(@PATH,31,2530.838,-3143.624,240.5245,0,0,0,0,100,0), -- 00:59:40 +(@PATH,32,2537.175,-3152.094,240.524,0,0,0,0,100,0), -- 00:59:44 +(@PATH,33,2547.807,-3157.692,240.5253,0,0,0,0,100,0); -- 00:59:49 + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127748; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2529.461,`position_y`=-3350.972,`position_z`=267.5927 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2529.461,-3350.972,267.5927,0,0,0,0,100,0), -- 00:55:41 +(@PATH,2,2530.323,-3325.176,267.5925,0,0,0,0,100,0), -- 00:55:47 +(@PATH,3,2543.675,-3311.973,267.593,0,0,0,0,100,0), -- 00:55:58 +(@PATH,4,2556.406,-3299.54,267.593,0,0,0,0,100,0), -- 00:56:05 +(@PATH,5,2555.974,-3276.286,267.5939,0,0,0,0,100,0), -- 00:56:13 +(@PATH,6,2556.132,-3255.743,258.8458,0,0,0,0,100,0), -- 00:56:21 +(@PATH,7,2556.734,-3215.111,240.5262,0,0,0,0,100,0), -- 00:56:31 +(@PATH,8,2556.227,-3191.951,240.5252,0,0,0,0,100,0), -- 00:56:49 +(@PATH,9,2556.103,-3169.521,240.5253,0,0,0,0,100,0), -- 00:56:58 +(@PATH,10,2544.249,-3156.771,240.5248,0,0,0,0,100,0), -- 00:57:07 +(@PATH,11,2530.144,-3142.768,240.5245,0,0,0,0,100,0), -- 00:57:13 +(@PATH,12,2526.182,-3127.083,240.5254,0,0,0,0,100,0), -- 00:57:22 +(@PATH,13,2529.482,-3115.22,240.5248,0,0,0,0,100,0), -- 00:57:28 +(@PATH,14,2541.532,-3103.333,240.5248,0,0,0,0,100,0), -- 00:57:33 +(@PATH,15,2554.839,-3099.154,240.5252,0,0,0,0,100,0), -- 00:57:40 +(@PATH,16,2573.704,-3104.429,240.5253,0,0,0,0,100,0), -- 00:57:45 +(@PATH,17,2584.594,-3120.166,240.5245,0,0,0,0,100,0), -- 00:57:53 +(@PATH,18,2579.713,-3142.299,240.5249,0,0,0,0,100,0), -- 00:58:01 +(@PATH,19,2568.922,-3153.001,240.5249,0,0,0,0,100,0), -- 00:58:10 +(@PATH,20,2556.966,-3168.974,240.5253,0,0,0,0,100,0), -- 00:58:16 +(@PATH,21,2556.745,-3191.808,240.5251,0,0,0,0,100,0), -- 00:58:24 +(@PATH,22,2556.038,-3215.004,240.5273,0,0,0,0,100,0), -- 00:58:33 +(@PATH,23,2555.711,-3255.515,258.7258,0,0,0,0,100,0), -- 00:58:42 +(@PATH,24,2555.592,-3276.532,267.5936,0,0,0,0,100,0), -- 00:59:00 +(@PATH,25,2556.91,-3299.243,267.5934,0,0,0,0,100,0), -- 00:59:10 +(@PATH,26,2565.721,-3309.663,267.5924,0,0,0,0,100,0), -- 00:59:18 +(@PATH,27,2580.893,-3321.083,267.5922,0,0,0,0,100,0), -- 00:59:23 +(@PATH,28,2586.392,-3342.971,267.5935,0,0,0,0,100,0), -- 00:59:32 +(@PATH,29,2578.376,-3360.212,267.5924,0,0,0,0,100,0), -- 00:59:40 +(@PATH,30,2556.463,-3369.452,267.593,0,0,0,0,100,0), -- 00:59:47 +(@PATH,31,2538.893,-3363.072,267.592,0,0,0,0,100,0); -- 00:59:57 +-- 0x1C2F4042A00FC8C0004C5C00017F5587 .go 2529.461 -3350.972 267.5927 + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127749; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2529.461,`position_y`=-3350.972,`position_z`=267.5927 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2529.461,-3350.972,267.5927,0,0,0,0,100,0), -- 00:55:41 +(@PATH,2,2530.323,-3325.176,267.5925,0,0,0,0,100,0), -- 00:55:47 +(@PATH,3,2543.675,-3311.973,267.593,0,0,0,0,100,0), -- 00:55:58 +(@PATH,4,2556.406,-3299.54,267.593,0,0,0,0,100,0), -- 00:56:05 +(@PATH,5,2555.974,-3276.286,267.5939,0,0,0,0,100,0), -- 00:56:13 +(@PATH,6,2556.132,-3255.743,258.8458,0,0,0,0,100,0), -- 00:56:21 +(@PATH,7,2556.734,-3215.111,240.5262,0,0,0,0,100,0), -- 00:56:31 +(@PATH,8,2556.227,-3191.951,240.5252,0,0,0,0,100,0), -- 00:56:49 +(@PATH,9,2556.103,-3169.521,240.5253,0,0,0,0,100,0), -- 00:56:58 +(@PATH,10,2544.249,-3156.771,240.5248,0,0,0,0,100,0), -- 00:57:07 +(@PATH,11,2530.144,-3142.768,240.5245,0,0,0,0,100,0), -- 00:57:13 +(@PATH,12,2526.182,-3127.083,240.5254,0,0,0,0,100,0), -- 00:57:22 +(@PATH,13,2529.482,-3115.22,240.5248,0,0,0,0,100,0), -- 00:57:28 +(@PATH,14,2541.532,-3103.333,240.5248,0,0,0,0,100,0), -- 00:57:33 +(@PATH,15,2554.839,-3099.154,240.5252,0,0,0,0,100,0), -- 00:57:40 +(@PATH,16,2573.704,-3104.429,240.5253,0,0,0,0,100,0), -- 00:57:45 +(@PATH,17,2584.594,-3120.166,240.5245,0,0,0,0,100,0), -- 00:57:53 +(@PATH,18,2579.713,-3142.299,240.5249,0,0,0,0,100,0), -- 00:58:01 +(@PATH,19,2568.922,-3153.001,240.5249,0,0,0,0,100,0), -- 00:58:10 +(@PATH,20,2556.966,-3168.974,240.5253,0,0,0,0,100,0), -- 00:58:16 +(@PATH,21,2556.745,-3191.808,240.5251,0,0,0,0,100,0), -- 00:58:24 +(@PATH,22,2556.038,-3215.004,240.5273,0,0,0,0,100,0), -- 00:58:33 +(@PATH,23,2555.711,-3255.515,258.7258,0,0,0,0,100,0), -- 00:58:42 +(@PATH,24,2555.592,-3276.532,267.5936,0,0,0,0,100,0), -- 00:59:00 +(@PATH,25,2556.91,-3299.243,267.5934,0,0,0,0,100,0), -- 00:59:10 +(@PATH,26,2565.721,-3309.663,267.5924,0,0,0,0,100,0), -- 00:59:18 +(@PATH,27,2580.893,-3321.083,267.5922,0,0,0,0,100,0), -- 00:59:23 +(@PATH,28,2586.392,-3342.971,267.5935,0,0,0,0,100,0), -- 00:59:32 +(@PATH,29,2578.376,-3360.212,267.5924,0,0,0,0,100,0), -- 00:59:40 +(@PATH,30,2556.463,-3369.452,267.593,0,0,0,0,100,0), -- 00:59:47 +(@PATH,31,2538.893,-3363.072,267.592,0,0,0,0,100,0); -- 00:59:57 + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127753; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2907.542,`position_y`=-3166.655,`position_z`=273.787 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2907.542,-3166.655,273.787,0,0,0,0,100,0), -- 00:46:47 +(@PATH,2,2873.219,-3165.419,273.787,0,0,0,0,100,0), -- 00:46:54 +(@PATH,3,2861.632,-3165.088,273.787,0,0,0,0,100,0), -- 00:47:09 +(@PATH,4,2860.526,-3185.717,273.787,0,0,0,0,100,0), -- 00:47:13 +(@PATH,5,2860.435,-3203.401,273.787,0,0,0,0,100,0), -- 00:47:21 +(@PATH,6,2875.204,-3203.906,273.4088,0,0,0,0,100,0), -- 00:47:28 +(@PATH,7,2892.834,-3204.38,273.3965,0,0,0,0,100,0), -- 00:47:34 +(@PATH,8,2911.993,-3204.611,273.3846,0,0,0,0,100,0), -- 00:47:42 +(@PATH,9,2926.023,-3200.403,273.3712,0,0,0,0,100,0), -- 00:47:49 +(@PATH,10,2931.457,-3188.328,273.3712,0,0,0,0,100,0), -- 00:47:55 +(@PATH,11,2925.778,-3167.298,273.787,0,0,0,0,100,0); -- 00:48:00 + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127743; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2907.542,`position_y`=-3171.655,`position_z`=273.787 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2907.542,-3166.655,273.787,0,0,0,0,100,0), -- 00:46:47 +(@PATH,2,2873.219,-3165.419,273.787,0,0,0,0,100,0), -- 00:46:54 +(@PATH,3,2861.632,-3165.088,273.787,0,0,0,0,100,0), -- 00:47:09 +(@PATH,4,2860.526,-3185.717,273.787,0,0,0,0,100,0), -- 00:47:13 +(@PATH,5,2860.435,-3203.401,273.787,0,0,0,0,100,0), -- 00:47:21 +(@PATH,6,2875.204,-3203.906,273.4088,0,0,0,0,100,0), -- 00:47:28 +(@PATH,7,2892.834,-3204.38,273.3965,0,0,0,0,100,0), -- 00:47:34 +(@PATH,8,2911.993,-3204.611,273.3846,0,0,0,0,100,0), -- 00:47:42 +(@PATH,9,2926.023,-3200.403,273.3712,0,0,0,0,100,0), -- 00:47:49 +(@PATH,10,2931.457,-3188.328,273.3712,0,0,0,0,100,0), -- 00:47:55 +(@PATH,11,2925.778,-3167.298,273.787,0,0,0,0,100,0); -- 00:48:00 + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127742; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2787.931,`position_y`=-3363.628,`position_z`=267.6847 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2787.931,-3363.628,267.6847,0,0,0,0,100,0), +(@PATH,2,2787.864,-3320.595,267.6845,0,0,0,0,100,0), +(@PATH,3,2787.388,-3287.191,267.6845,0,0,0,0,100,0), +(@PATH,4,2787.864,-3320.595,267.6845,0,0,0,0,100,0); + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127754; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2790.931,`position_y`=-3363.628,`position_z`=267.6847 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2787.931,-3363.628,267.6847,0,0,0,0,100,0), +(@PATH,2,2787.864,-3320.595,267.6845,0,0,0,0,100,0), +(@PATH,3,2787.388,-3287.191,267.6845,0,0,0,0,100,0), +(@PATH,4,2787.864,-3320.595,267.6845,0,0,0,0,100,0); + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127745; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2910.233,`position_y`=-2955.379,`position_z`=267.593 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2910.233,-2955.379,267.593,0,0,0,0,100,0), -- 00:55:44 +(@PATH,2,2892.628,-2961.647,267.5928,0,0,0,0,100,0), -- 00:55:51 +(@PATH,3,2884.039,-2971.864,267.5928,0,0,0,0,100,0), -- 00:56:00 +(@PATH,4,2870.617,-2985.568,267.593,0,0,0,0,100,0), -- 00:56:05 +(@PATH,5,2847.519,-2985.616,267.5938,0,0,0,0,100,0), -- 00:56:17 +(@PATH,6,2831.011,-2985.781,260.82,0,0,0,0,100,0), -- 00:56:26 +(@PATH,7,2811.443,-2985.972,250.9583,0,0,0,0,100,0), -- 00:56:34 +(@PATH,8,2781.199,-2986.169,240.5266,0,0,0,0,100,0), -- 00:56:42 +(@PATH,9,2763.189,-2986.039,240.5251,0,0,0,0,100,0), -- 00:56:54 +(@PATH,10,2744.237,-2985.519,240.5253,0,0,0,0,100,0), -- 00:57:02 +(@PATH,11,2734.137,-2977.427,240.5253,0,0,0,0,100,0), -- 00:57:10 +(@PATH,12,2722.754,-2967.005,240.5245,0,0,0,0,100,0), -- 00:57:15 +(@PATH,13,2708.031,-2957.228,240.5251,0,0,0,0,100,0), -- 00:57:21 +(@PATH,14,2691.098,-2957.404,240.525,0,0,0,0,100,0), -- 00:57:28 +(@PATH,15,2676.669,-2966.855,240.5253,0,0,0,0,100,0), -- 00:57:34 +(@PATH,16,2671.321,-2976.635,240.5248,0,0,0,0,100,0), -- 00:57:42 +(@PATH,17,2671.421,-2993.49,240.5246,0,0,0,0,100,0), -- 00:57:47 +(@PATH,18,2680.976,-3008.883,240.5253,0,0,0,0,100,0), -- 00:57:53 +(@PATH,19,2697.444,-3015.56,240.5247,0,0,0,0,100,0), -- 00:58:00 +(@PATH,20,2713.618,-3012.186,240.5255,0,0,0,0,100,0), -- 00:58:07 +(@PATH,21,2724.357,-3002.94,240.5247,0,0,0,0,100,0), -- 00:58:14 +(@PATH,22,2734.208,-2991.862,240.5253,0,0,0,0,100,0), -- 00:58:19 +(@PATH,23,2743.945,-2987.434,240.5253,0,0,0,0,100,0), -- 00:58:25 +(@PATH,24,2763.65,-2986.421,240.5252,0,0,0,0,100,0), -- 00:58:30 +(@PATH,25,2781.449,-2986.182,240.5266,0,0,0,0,100,0), -- 00:58:37 +(@PATH,26,2811.903,-2985.583,251.1997,0,0,0,0,100,0), -- 00:58:45 +(@PATH,27,2830.531,-2985.851,260.8194,0,0,0,0,100,0), -- 00:58:58 +(@PATH,28,2847.362,-2985.841,267.5938,0,0,0,0,100,0), -- 00:59:07 +(@PATH,29,2870.534,-2986.177,267.593,0,0,0,0,100,0), -- 00:59:14 +(@PATH,30,2882.414,-2997.007,267.593,0,0,0,0,100,0), -- 00:59:22 +(@PATH,31,2895.966,-3012.106,267.5926,0,0,0,0,100,0), -- 00:59:30 +(@PATH,32,2915.716,-3014.353,267.5935,0,0,0,0,100,0), -- 00:59:37 +(@PATH,33,2931.21,-3007.478,267.5931,0,0,0,0,100,0), -- 00:59:45 +(@PATH,34,2938.199,-2994.229,267.5933,0,0,0,0,100,0), -- 00:59:53 +(@PATH,35,2937.735,-2977.154,267.593,0,0,0,0,100,0), -- 00:59:59 +(@PATH,36,2927.648,-2962.08,267.5935,0,0,0,0,100,0); -- 01:00:05 + +-- Pathing for Death Knight Cavalier Entry: 16163 'TDB FORMAT' +SET @NPC := 127744; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2910.233,`position_y`=-2955.379,`position_z`=267.593 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,25278,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2910.233,-2955.379,267.593,0,0,0,0,100,0), -- 00:55:44 +(@PATH,2,2892.628,-2961.647,267.5928,0,0,0,0,100,0), -- 00:55:51 +(@PATH,3,2884.039,-2971.864,267.5928,0,0,0,0,100,0), -- 00:56:00 +(@PATH,4,2870.617,-2985.568,267.593,0,0,0,0,100,0), -- 00:56:05 +(@PATH,5,2847.519,-2985.616,267.5938,0,0,0,0,100,0), -- 00:56:17 +(@PATH,6,2831.011,-2985.781,260.82,0,0,0,0,100,0), -- 00:56:26 +(@PATH,7,2811.443,-2985.972,250.9583,0,0,0,0,100,0), -- 00:56:34 +(@PATH,8,2781.199,-2986.169,240.5266,0,0,0,0,100,0), -- 00:56:42 +(@PATH,9,2763.189,-2986.039,240.5251,0,0,0,0,100,0), -- 00:56:54 +(@PATH,10,2744.237,-2985.519,240.5253,0,0,0,0,100,0), -- 00:57:02 +(@PATH,11,2734.137,-2977.427,240.5253,0,0,0,0,100,0), -- 00:57:10 +(@PATH,12,2722.754,-2967.005,240.5245,0,0,0,0,100,0), -- 00:57:15 +(@PATH,13,2708.031,-2957.228,240.5251,0,0,0,0,100,0), -- 00:57:21 +(@PATH,14,2691.098,-2957.404,240.525,0,0,0,0,100,0), -- 00:57:28 +(@PATH,15,2676.669,-2966.855,240.5253,0,0,0,0,100,0), -- 00:57:34 +(@PATH,16,2671.321,-2976.635,240.5248,0,0,0,0,100,0), -- 00:57:42 +(@PATH,17,2671.421,-2993.49,240.5246,0,0,0,0,100,0), -- 00:57:47 +(@PATH,18,2680.976,-3008.883,240.5253,0,0,0,0,100,0), -- 00:57:53 +(@PATH,19,2697.444,-3015.56,240.5247,0,0,0,0,100,0), -- 00:58:00 +(@PATH,20,2713.618,-3012.186,240.5255,0,0,0,0,100,0), -- 00:58:07 +(@PATH,21,2724.357,-3002.94,240.5247,0,0,0,0,100,0), -- 00:58:14 +(@PATH,22,2734.208,-2991.862,240.5253,0,0,0,0,100,0), -- 00:58:19 +(@PATH,23,2743.945,-2987.434,240.5253,0,0,0,0,100,0), -- 00:58:25 +(@PATH,24,2763.65,-2986.421,240.5252,0,0,0,0,100,0), -- 00:58:30 +(@PATH,25,2781.449,-2986.182,240.5266,0,0,0,0,100,0), -- 00:58:37 +(@PATH,26,2811.903,-2985.583,251.1997,0,0,0,0,100,0), -- 00:58:45 +(@PATH,27,2830.531,-2985.851,260.8194,0,0,0,0,100,0), -- 00:58:58 +(@PATH,28,2847.362,-2985.841,267.5938,0,0,0,0,100,0), -- 00:59:07 +(@PATH,29,2870.534,-2986.177,267.593,0,0,0,0,100,0), -- 00:59:14 +(@PATH,30,2882.414,-2997.007,267.593,0,0,0,0,100,0), -- 00:59:22 +(@PATH,31,2895.966,-3012.106,267.5926,0,0,0,0,100,0), -- 00:59:30 +(@PATH,32,2915.716,-3014.353,267.5935,0,0,0,0,100,0), -- 00:59:37 +(@PATH,33,2931.21,-3007.478,267.5931,0,0,0,0,100,0), -- 00:59:45 +(@PATH,34,2938.199,-2994.229,267.5933,0,0,0,0,100,0), -- 00:59:53 +(@PATH,35,2937.735,-2977.154,267.593,0,0,0,0,100,0), -- 00:59:59 +(@PATH,36,2927.648,-2962.08,267.5935,0,0,0,0,100,0); -- 01:00:05 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127751,127746,127748,127753,127742,127744); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127751,127751,0,0,2,0,0), +(127751,127752,3,90,2,2,0), +(127746,127746,0,0,2,0,0), +(127746,127747,3,270,2,0,0), +(127748,127748,0,0,2,0,0), +(127748,127749,3,270,2,0,0), +(127753,127753,0,0,2,0,0), +(127753,127743,3,270,2,0,0), +(127742,127742,0,0,2,0,0), +(127742,127754,3,270,2,1,3), +(127744,127744,0,0,2,0,0), +(127744,127745,3,270,2,0,0); + +-- Pathing for Death Knight Entry: 16146 'TDB FORMAT' +SET @NPC := 127668; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2828.432,`position_y`=-3176.265,`position_z`=298.1476 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:46:45 +(@PATH,2,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:46:49 +(@PATH,3,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:46:54 +(@PATH,4,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:46:58 +(@PATH,5,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:02 +(@PATH,6,2886.36,-3218.305,298.146,0,0,0,0,100,0), -- 00:47:07 +(@PATH,7,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:13 +(@PATH,8,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:47:17 +(@PATH,9,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:47:22 +(@PATH,10,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:47:27 +(@PATH,11,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:47:30 +(@PATH,12,2813.296,-3175.835,298.1458,0,0,0,0,100,0), -- 00:47:35 +(@PATH,13,2790.895,-3179.5,298.1464,0,0,0,0,100,0), -- 00:47:40 +(@PATH,14,2813.296,-3175.835,298.1458,0,0,0,0,100,0); -- 00:47:49 + +-- Pathing for Dark Touched Warrior Entry: 16156 'TDB FORMAT' +SET @NPC := 127699; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2830.432,`position_y`=-3173.265,`position_z`=298.1476 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:46:45 +(@PATH,2,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:46:49 +(@PATH,3,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:46:54 +(@PATH,4,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:46:58 +(@PATH,5,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:02 +(@PATH,6,2886.36,-3218.305,298.146,0,0,0,0,100,0), -- 00:47:07 +(@PATH,7,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:13 +(@PATH,8,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:47:17 +(@PATH,9,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:47:22 +(@PATH,10,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:47:27 +(@PATH,11,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:47:30 +(@PATH,12,2813.296,-3175.835,298.1458,0,0,0,0,100,0), -- 00:47:35 +(@PATH,13,2790.895,-3179.5,298.1464,0,0,0,0,100,0), -- 00:47:40 +(@PATH,14,2813.296,-3175.835,298.1458,0,0,0,0,100,0); -- 00:47:49 + +-- Pathing for Dark Touched Warrior Entry: 16156 'TDB FORMAT' +SET @NPC := 127700; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2827.432,`position_y`=-3178.265,`position_z`=298.1476 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:46:45 +(@PATH,2,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:46:49 +(@PATH,3,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:46:54 +(@PATH,4,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:46:58 +(@PATH,5,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:02 +(@PATH,6,2886.36,-3218.305,298.146,0,0,0,0,100,0), -- 00:47:07 +(@PATH,7,2871.515,-3216.969,298.1441,0,0,0,0,100,0), -- 00:47:13 +(@PATH,8,2860.46,-3207.91,298.1058,0,0,0,0,100,0), -- 00:47:17 +(@PATH,9,2848.306,-3195.512,298.1775,0,0,0,0,100,0), -- 00:47:22 +(@PATH,10,2839.448,-3185.542,298.1487,0,0,0,0,100,0), -- 00:47:27 +(@PATH,11,2828.432,-3176.265,298.1476,0,0,0,0,100,0), -- 00:47:30 +(@PATH,12,2813.296,-3175.835,298.1458,0,0,0,0,100,0), -- 00:47:35 +(@PATH,13,2790.895,-3179.5,298.1464,0,0,0,0,100,0), -- 00:47:40 +(@PATH,14,2813.296,-3175.835,298.1458,0,0,0,0,100,0); -- 00:47:49 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127668); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127668,127668,0,0,2,0,0), +(127668,127699,3,270,2,5,12), +(127668,127700,3,90,2,5,12); + +-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT' +SET @NPC := 127647; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2863.143,`position_y`=-3303.327,`position_z`=298.1498 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2863.593,-3303.907,298.1498,0,0,0,0,100,0), -- 00:46:45 +(@PATH,2,2869.523,-3320.972,298.1457,0,0,0,0,100,0), -- 00:46:50 +(@PATH,3,2883.242,-3330.484,298.1457,0,0,0,0,100,0), -- 00:46:56 +(@PATH,4,2869.523,-3320.972,298.1457,0,0,0,0,100,0), -- 00:47:03 +(@PATH,5,2863.593,-3303.907,298.1498,0,0,0,0,100,0), -- 00:47:07 +(@PATH,6,2865.348,-3285.952,298.0973,0,0,0,0,100,0), -- 00:47:12 +(@PATH,7,2874.288,-3265.404,298.1561,0,0,0,0,100,0), -- 00:47:18 +(@PATH,8,2865.348,-3285.952,298.0973,0,0,0,0,100,0); -- 00:47:27 + +-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT' +SET @NPC := 127648; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2867.593,`position_y`=-3304.907,`position_z`=298.1498 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2863.593,-3303.907,298.1498,0,0,0,0,100,0), -- 00:46:45 +(@PATH,2,2869.523,-3320.972,298.1457,0,0,0,0,100,0), -- 00:46:50 +(@PATH,3,2883.242,-3330.484,298.1457,0,0,0,0,100,0), -- 00:46:56 +(@PATH,4,2869.523,-3320.972,298.1457,0,0,0,0,100,0), -- 00:47:03 +(@PATH,5,2863.593,-3303.907,298.1498,0,0,0,0,100,0), -- 00:47:07 +(@PATH,6,2865.348,-3285.952,298.0973,0,0,0,0,100,0), -- 00:47:12 +(@PATH,7,2874.288,-3265.404,298.1561,0,0,0,0,100,0), -- 00:47:18 +(@PATH,8,2865.348,-3285.952,298.0973,0,0,0,0,100,0); -- 00:47:27 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127647); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127647,127647,0,0,2,0,0), +(127647,127648,4,270,2,2,6); + +-- Pathing for Shade of Naxxramas Entry: 16164 'TDB FORMAT' +SET @NPC := 127755; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2915.294,`position_y`=-3343.234,`position_z`=298.1457 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2915.294,-3343.234,298.1457,0,9000,0,0,100,0), +(@PATH,2,2898.639,-3327.008,298.1457,0,9000,0,0,100,0); + +UPDATE `creature` SET `orientation`=5.51352 WHERE `guid` IN (127755,127758,127759); +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127755); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127755,127755,0,0,2,0,0), +(127755,127758,2,360,2,1,2), +(127755,127759,2,180,2,1,2); + +UPDATE `creature` SET `modelid`=0 WHERE `id` IN (16145,16146,16156,16163); + +-- Pathing for Unholy Staff Entry: 16215 'TDB FORMAT' +SET @NPC := 127816; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2724.483,`position_y`=-3142.47,`position_z`=267.6181 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2724.483,-3142.47,267.6181,0,0,0,0,100,0), -- 00:55:47 +(@PATH,2,2740.318,-3170.808,267.576,0,0,0,0,100,0); -- 00:56:00 + +-- Pathing for Unholy Staff Entry: 16215 'TDB FORMAT' +SET @NPC := 127817; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2721.483,`position_y`=-3144.47,`position_z`=267.6181 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2724.483,-3142.47,267.6181,0,0,0,0,100,0), -- 00:55:47 +(@PATH,2,2740.318,-3170.808,267.576,0,0,0,0,100,0); -- 00:56:00 + +-- Pathing for Unholy Staff Entry: 16215 'TDB FORMAT' +SET @NPC := 127819; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2687.124,`position_y`=-3143.13,`position_z`=267.6205 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2687.124,-3143.13,267.6205,0,0,0,0,100,0), -- 00:55:49 +(@PATH,2,2667.474,-3173.004,267.634,0,0,0,0,100,0); -- 00:56:04 + +-- Pathing for Unholy Staff Entry: 16215 'TDB FORMAT' +SET @NPC := 127820; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2684.124,`position_y`=-3142.13,`position_z`=267.6205 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2687.124,-3143.13,267.6205,0,0,0,0,100,0), -- 00:55:49 +(@PATH,2,2667.474,-3173.004,267.634,0,0,0,0,100,0); -- 00:56:04 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127816,127819); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127816,127816,0,0,2,0,0), +(127816,127817,3,270,2,1,2), +(127819,127819,0,0,2,0,0), +(127819,127820,3,270,2,1,2); + +-- Pathing for Unholy Axe Entry: 16194 'TDB FORMAT' +SET @NPC := 127796; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2690.577,`position_y`=-3156.689,`position_z`=267.6078 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2690.577,-3156.689,267.6078,0,0,0,0,100,0), -- 00:55:41 +(@PATH,2,2706.089,-3166.321,267.5782,0,0,0,0,100,0), -- 00:55:49 +(@PATH,3,2721.288,-3159.098,267.5903,0,0,0,0,100,0), -- 00:55:56 +(@PATH,4,2723.902,-3133.336,267.6333,0,0,0,0,100,0), -- 00:56:04 +(@PATH,5,2706.458,-3124.162,267.6098,0,0,0,0,100,0), -- 00:56:13 +(@PATH,6,2688.671,-3133.302,267.6201,0,0,0,0,100,0); -- 00:56:22 + +-- Pathing for Unholy Axe Entry: 16194 'TDB FORMAT' +SET @NPC := 127797; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2693.577,`position_y`=-3154.689,`position_z`=267.6078 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2690.577,-3156.689,267.6078,0,0,0,0,100,0), -- 00:55:41 +(@PATH,2,2706.089,-3166.321,267.5782,0,0,0,0,100,0), -- 00:55:49 +(@PATH,3,2721.288,-3159.098,267.5903,0,0,0,0,100,0), -- 00:55:56 +(@PATH,4,2723.902,-3133.336,267.6333,0,0,0,0,100,0), -- 00:56:04 +(@PATH,5,2706.458,-3124.162,267.6098,0,0,0,0,100,0), -- 00:56:13 +(@PATH,6,2688.671,-3133.302,267.6201,0,0,0,0,100,0); -- 00:56:22 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127796); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127796,127796,0,0,2,0,0), +(127796,127797,3,270,2,0,0); + +-- Pathing for Unholy Swords Entry: 16216 'TDB FORMAT' +SET @NPC := 127822; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2740.497,`position_y`=-3216.551,`position_z`=267.6155 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2740.497,-3216.551,267.6155,0,0,0,0,100,0), -- 00:55:46 +(@PATH,2,2735.71,-3191.704,267.4987,0,0,0,0,100,0), -- 00:55:54 +(@PATH,3,2721.61,-3178.054,267.5587,0,0,0,0,100,0), -- 00:56:05 +(@PATH,4,2735.71,-3191.704,267.4987,0,0,0,0,100,0), -- 00:56:14 +(@PATH,5,2740.497,-3216.551,267.6155,0,0,0,0,100,0), -- 00:56:21 +(@PATH,6,2734.737,-3239.713,267.602,0,0,0,0,100,0), -- 00:56:30 +(@PATH,7,2717.949,-3253.626,267.6629,0,0,0,0,100,0), -- 00:56:40 +(@PATH,8,2734.737,-3239.713,267.602,0,0,0,0,100,0); -- 00:56:50 + +-- Pathing for Unholy Swords Entry: 16216 'TDB FORMAT' +SET @NPC := 127823; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2743.497,`position_y`=-3216.551,`position_z`=267.6155 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2740.497,-3216.551,267.6155,0,0,0,0,100,0), -- 00:55:46 +(@PATH,2,2735.71,-3191.704,267.4987,0,0,0,0,100,0), -- 00:55:54 +(@PATH,3,2721.61,-3178.054,267.5587,0,0,0,0,100,0), -- 00:56:05 +(@PATH,4,2735.71,-3191.704,267.4987,0,0,0,0,100,0), -- 00:56:14 +(@PATH,5,2740.497,-3216.551,267.6155,0,0,0,0,100,0), -- 00:56:21 +(@PATH,6,2734.737,-3239.713,267.602,0,0,0,0,100,0), -- 00:56:30 +(@PATH,7,2717.949,-3253.626,267.6629,0,0,0,0,100,0), -- 00:56:40 +(@PATH,8,2734.737,-3239.713,267.602,0,0,0,0,100,0); -- 00:56:50 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127822); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127822,127822,0,0,2,0,0), +(127822,127823,4,90,2,3,7); + +-- Pathing for Instructor Razuvious Entry: 16061 'TDB FORMAT' +SET @NPC := 128312; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2758.932,`position_y`=-3107.118,`position_z`=267.6845 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2758.932,-3107.118,267.6845,0,0,0,0,100,0), +(@PATH,2,2758.409,-3091.983,267.6845,0,0,0,0,100,0), +(@PATH,3,2772.748,-3085.515,267.6845,0,0,0,0,100,0), +(@PATH,4,2783.736,-3101.491,267.6845,0,0,0,0,100,0), +(@PATH,5,2772.544,-3112.944,267.6845,0,0,0,0,100,0); From 0427870585f873b724b068541a933cdd68fa35a0 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 22 Sep 2015 19:26:42 +0200 Subject: [PATCH 044/524] DB/Misc: Fix some 3.3.5a leftovers By Malcrom --- sql/updates/world/2015_09_22_01_world.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/updates/world/2015_09_22_01_world.sql b/sql/updates/world/2015_09_22_01_world.sql index c238d97c97..a01d8a27e7 100644 --- a/sql/updates/world/2015_09_22_01_world.sql +++ b/sql/updates/world/2015_09_22_01_world.sql @@ -358,7 +358,8 @@ INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z` (@PATH,35,2937.735,-2977.154,267.593,0,0,0,0,100,0), -- 00:59:59 (@PATH,36,2927.648,-2962.08,267.5935,0,0,0,0,100,0); -- 01:00:05 -DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127751,127746,127748,127753,127742,127744); +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127751,127752,127746,127747,127748,127749,127753,127743,127742,127754,127744,127745); +DELETE FROM `creature_formations` WHERE `memberGUID` IN (127751,127752,127746,127747,127748,127749,127753,127743,127742,127754,127744,127745); INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES (127751,127751,0,0,2,0,0), (127751,127752,3,90,2,2,0), From dcb7082277447c21b11c4a1d59f105fa342c172e Mon Sep 17 00:00:00 2001 From: pete318 Date: Sat, 25 Jul 2015 16:34:19 +0000 Subject: [PATCH 045/524] Map local guids 6.x -> 3.3.35: Implemented: https://github.com/TrinityCore/TrinityCore/commit/ca83e14f8b141fab0a13e08f48fca6c1ace0c4c7 https://github.com/TrinityCore/TrinityCore/commit/ee1c1b97be4492ecabe8b15ea6323fc37e4eaa8c https://github.com/TrinityCore/TrinityCore/commit/18e4ab6911468b829b0fc768e532a770263c3717 https://github.com/TrinityCore/TrinityCore/commit/bf37446b3c2ed73b4d3aa9e227d3eff5c53b378b https://github.com/TrinityCore/TrinityCore/commit/cb854a2b7bb7bd96cf9c4d1daf3789f797bf4db8 * This adds separate (per map) guid sequences depending on object type * Ported map object container from cmangos/mangos-wotlk@a2d396e * Added type container visitor for TypeUnorderedMapContainer * Implemented helper function to erase unique pairs from multimap containers * Moved object storage of all objects except players and transports to map level * Added containers linking database spawn id with creature/gameobject in world * Renamed DBTableGuid to spawnId * Added a separate spawn id sequence generator for creatures and gameobjects - this will be used in db tables * Moved building SMSG_UPDATE_OBJECT - updatefields changes broadcast to map update * Added new function to return but not increment guid * Adjusted .debug loadcells to show low guid in map before/after load * Added debug messages for creature spawn/destroy, for map guid debugging * Store all Gameobjects and Creatures added to OutdoorPvP, so the callback script can be removed when OutdoorPvP instance is destroyed. --- sql/base/characters_database.sql | 4 +- .../2015_08_26_00_characters_335.sql | 16 + sql/updates/world/2015_09_11_99_world_335.sql | 3 + .../Implementation/CharacterDatabase.cpp | 9 +- .../Implementation/CharacterDatabase.h | 3 +- src/server/game/AI/CoreAI/PetAI.cpp | 10 +- src/server/game/AI/CreatureAISelector.cpp | 4 +- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 2 +- .../game/AI/SmartScripts/SmartScript.cpp | 99 ++--- src/server/game/AI/SmartScripts/SmartScript.h | 63 ++-- src/server/game/Accounts/AccountMgr.cpp | 2 +- .../game/Achievements/AchievementMgr.cpp | 12 +- .../game/AuctionHouse/AuctionHouseMgr.cpp | 26 +- .../AuctionHouseBot/AuctionHouseBotSeller.cpp | 2 +- src/server/game/Battlefield/Battlefield.cpp | 6 +- .../game/Battlefield/BattlefieldMgr.cpp | 4 +- src/server/game/Battlegrounds/Arena.cpp | 4 +- src/server/game/Battlegrounds/ArenaTeam.cpp | 12 +- .../game/Battlegrounds/ArenaTeamMgr.cpp | 2 +- .../game/Battlegrounds/Battleground.cpp | 12 +- .../game/Battlegrounds/BattlegroundQueue.cpp | 4 +- .../Battlegrounds/Zones/BattlegroundAB.cpp | 2 +- .../Battlegrounds/Zones/BattlegroundAV.cpp | 4 +- .../Battlegrounds/Zones/BattlegroundEY.cpp | 11 +- .../Battlegrounds/Zones/BattlegroundIC.cpp | 2 +- .../Battlegrounds/Zones/BattlegroundSA.cpp | 2 +- .../Battlegrounds/Zones/BattlegroundWS.cpp | 2 +- src/server/game/Calendar/CalendarMgr.cpp | 6 +- src/server/game/Chat/Chat.cpp | 18 +- src/server/game/Conditions/ConditionMgr.cpp | 4 +- src/server/game/DungeonFinding/LFGMgr.cpp | 2 +- src/server/game/DungeonFinding/LFGScripts.cpp | 2 +- src/server/game/Entities/Corpse/Corpse.cpp | 40 +- .../game/Entities/Creature/Creature.cpp | 109 +++--- src/server/game/Entities/Creature/Creature.h | 8 +- .../game/Entities/Creature/CreatureGroups.cpp | 16 +- .../Entities/DynamicObject/DynamicObject.cpp | 7 +- .../game/Entities/GameObject/GameObject.cpp | 79 ++-- .../game/Entities/GameObject/GameObject.h | 8 +- .../game/Entities/Item/Container/Bag.cpp | 2 +- src/server/game/Entities/Item/Item.cpp | 50 ++- src/server/game/Entities/Item/Item.h | 3 + src/server/game/Entities/Object/Object.cpp | 131 +++---- src/server/game/Entities/Object/Object.h | 11 +- .../game/Entities/Object/ObjectGuid.cpp | 55 ++- src/server/game/Entities/Object/ObjectGuid.h | 177 ++++++--- src/server/game/Entities/Pet/Pet.cpp | 31 +- src/server/game/Entities/Player/Player.cpp | 357 +++++++++--------- src/server/game/Entities/Player/SocialMgr.cpp | 6 +- .../game/Entities/Transport/Transport.cpp | 9 +- src/server/game/Entities/Unit/Unit.cpp | 30 +- src/server/game/Entities/Vehicle/Vehicle.cpp | 26 +- src/server/game/Events/GameEventMgr.cpp | 176 +++++---- src/server/game/Globals/ObjectAccessor.cpp | 188 +++------ src/server/game/Globals/ObjectAccessor.h | 116 +----- src/server/game/Globals/ObjectMgr.cpp | 244 ++++-------- src/server/game/Globals/ObjectMgr.h | 41 +- src/server/game/Grids/GridDefines.h | 2 + .../game/Grids/Notifiers/GridNotifiers.h | 24 -- src/server/game/Grids/ObjectGridLoader.cpp | 2 +- src/server/game/Groups/Group.cpp | 26 +- src/server/game/Guilds/Guild.cpp | 38 +- src/server/game/Handlers/ArenaTeamHandler.cpp | 2 +- .../game/Handlers/AuctionHouseHandler.cpp | 32 +- .../game/Handlers/BattleGroundHandler.cpp | 20 +- src/server/game/Handlers/CalendarHandler.cpp | 2 +- src/server/game/Handlers/CharacterHandler.cpp | 17 +- src/server/game/Handlers/ChatHandler.cpp | 4 +- src/server/game/Handlers/CombatHandler.cpp | 2 +- src/server/game/Handlers/DuelHandler.cpp | 4 +- src/server/game/Handlers/GroupHandler.cpp | 8 +- src/server/game/Handlers/ItemHandler.cpp | 2 +- src/server/game/Handlers/LootHandler.cpp | 10 +- src/server/game/Handlers/MailHandler.cpp | 22 +- src/server/game/Handlers/MiscHandler.cpp | 32 +- src/server/game/Handlers/MovementHandler.cpp | 4 +- src/server/game/Handlers/NPCHandler.cpp | 8 +- src/server/game/Handlers/PetHandler.cpp | 14 +- src/server/game/Handlers/PetitionsHandler.cpp | 38 +- src/server/game/Handlers/QuestHandler.cpp | 14 +- .../game/Handlers/ReferAFriendHandler.cpp | 5 +- src/server/game/Handlers/SpellHandler.cpp | 12 +- src/server/game/Handlers/TicketHandler.cpp | 4 +- src/server/game/Handlers/TradeHandler.cpp | 22 +- src/server/game/Handlers/VehicleHandler.cpp | 6 +- src/server/game/Instances/InstanceSaveMgr.cpp | 3 + src/server/game/Instances/InstanceScript.h | 4 +- src/server/game/Loot/LootMgr.cpp | 32 +- src/server/game/Mails/Mail.cpp | 20 +- src/server/game/Maps/Map.cpp | 179 ++++++--- src/server/game/Maps/Map.h | 66 +++- src/server/game/Maps/MapInstanced.cpp | 1 + src/server/game/Maps/MapManager.cpp | 3 +- src/server/game/Maps/MapManager.h | 47 +++ src/server/game/Maps/TransportMgr.cpp | 5 +- src/server/game/Movement/MotionMaster.cpp | 64 ++-- .../TargetedMovementGenerator.cpp | 4 +- .../WaypointMovementGenerator.cpp | 2 +- src/server/game/Movement/PathGenerator.cpp | 10 +- .../game/Movement/Spline/MoveSpline.cpp | 2 +- src/server/game/OutdoorPvP/OutdoorPvP.cpp | 132 ++++--- src/server/game/OutdoorPvP/OutdoorPvP.h | 38 +- src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp | 12 +- src/server/game/OutdoorPvP/OutdoorPvPMgr.h | 4 +- src/server/game/Pools/PoolMgr.cpp | 38 +- src/server/game/Reputation/ReputationMgr.cpp | 6 +- src/server/game/Scripting/MapScripts.cpp | 136 +++---- src/server/game/Server/WorldSession.cpp | 14 +- src/server/game/Server/WorldSession.h | 2 +- .../game/Spells/Auras/SpellAuraEffects.cpp | 2 +- src/server/game/Spells/Auras/SpellAuras.cpp | 5 +- src/server/game/Spells/Spell.cpp | 21 +- src/server/game/Spells/SpellEffects.cpp | 40 +- src/server/game/Texts/CreatureTextMgr.cpp | 4 +- src/server/game/Tickets/TicketMgr.cpp | 4 +- src/server/game/Tools/PlayerDump.cpp | 27 +- src/server/game/World/World.cpp | 14 +- src/server/scripts/Commands/cs_account.cpp | 16 +- src/server/scripts/Commands/cs_arena.cpp | 8 +- src/server/scripts/Commands/cs_ban.cpp | 2 +- src/server/scripts/Commands/cs_character.cpp | 12 +- src/server/scripts/Commands/cs_debug.cpp | 51 +-- src/server/scripts/Commands/cs_go.cpp | 12 - src/server/scripts/Commands/cs_gobject.cpp | 12 +- src/server/scripts/Commands/cs_group.cpp | 2 +- src/server/scripts/Commands/cs_lfg.cpp | 2 +- src/server/scripts/Commands/cs_list.cpp | 2 +- src/server/scripts/Commands/cs_misc.cpp | 14 +- src/server/scripts/Commands/cs_modify.cpp | 4 +- src/server/scripts/Commands/cs_npc.cpp | 38 +- src/server/scripts/Commands/cs_quest.cpp | 2 +- src/server/scripts/Commands/cs_send.cpp | 6 +- src/server/scripts/Commands/cs_wp.cpp | 36 +- .../scripts/Kalimdor/zone_bloodmyst_isle.cpp | 4 +- .../boss_blood_prince_council.cpp | 6 +- .../boss_icecrown_gunship_battle.cpp | 24 +- .../IcecrownCitadel/boss_sindragosa.cpp | 12 +- .../boss_valithria_dreamwalker.cpp | 10 +- .../IcecrownCitadel/icecrown_citadel.cpp | 2 +- .../instance_icecrown_citadel.cpp | 6 +- .../instance_eye_of_eternity.cpp | 2 +- .../scripts/Northrend/isle_of_conquest.cpp | 2 +- .../scripts/OutdoorPvP/OutdoorPvPEP.cpp | 83 ++-- .../scripts/OutdoorPvP/OutdoorPvPHP.cpp | 20 +- .../scripts/OutdoorPvP/OutdoorPvPNA.cpp | 23 +- src/server/scripts/OutdoorPvP/OutdoorPvPNA.h | 2 +- .../scripts/OutdoorPvP/OutdoorPvPSI.cpp | 6 +- .../scripts/OutdoorPvP/OutdoorPvPTF.cpp | 9 +- .../scripts/OutdoorPvP/OutdoorPvPZM.cpp | 23 +- src/server/scripts/OutdoorPvP/OutdoorPvPZM.h | 4 +- src/server/scripts/Spells/spell_rogue.cpp | 2 +- src/server/scripts/World/action_ip_logger.cpp | 2 +- src/server/shared/Containers.h | 14 + src/server/shared/Dynamic/TypeContainer.h | 70 +++- .../shared/Dynamic/TypeContainerFunctions.h | 137 ++++++- .../shared/Dynamic/TypeContainerVisitor.h | 39 +- src/server/shared/Dynamic/TypeList.h | 1 + src/server/worldserver/Main.cpp | 2 +- 158 files changed, 2264 insertions(+), 2051 deletions(-) create mode 100644 sql/updates/characters/2015_08_26_00_characters_335.sql create mode 100644 sql/updates/world/2015_09_11_99_world_335.sql diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 588ed0063d..571b74a749 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1332,7 +1332,6 @@ DROP TABLE IF EXISTS `corpse`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `corpse` ( - `corpseGuid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier', `guid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Character Global Unique Identifier', `posX` float NOT NULL DEFAULT '0', `posY` float NOT NULL DEFAULT '0', @@ -1350,10 +1349,9 @@ CREATE TABLE `corpse` ( `time` int(10) unsigned NOT NULL DEFAULT '0', `corpseType` tinyint(3) unsigned NOT NULL DEFAULT '0', `instanceId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Instance Identifier', - PRIMARY KEY (`corpseGuid`), + PRIMARY KEY (`guid`), KEY `idx_type` (`corpseType`), KEY `idx_instance` (`instanceId`), - KEY `idx_player` (`guid`), KEY `idx_time` (`time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Death System'; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/sql/updates/characters/2015_08_26_00_characters_335.sql b/sql/updates/characters/2015_08_26_00_characters_335.sql new file mode 100644 index 0000000000..1f46c5dd7f --- /dev/null +++ b/sql/updates/characters/2015_08_26_00_characters_335.sql @@ -0,0 +1,16 @@ +-- Keep only the highest guid PvE or PvP (not bones) corpse per player guid +DELETE c FROM `corpse` c LEFT JOIN +( + SELECT MAX(`corpseGuid`) AS id + FROM `corpse` + WHERE `corpseType` IN (1,2) + GROUP BY `guid` +) corpsetemp +ON c.`corpseGuid` = corpsetemp.`id` +WHERE corpsetemp.`id` IS NULL; + +-- Remove corpseGUID and set key to player guid +ALTER TABLE `corpse` + DROP `corpseGuid`, + DROP INDEX `idx_player`, + ADD PRIMARY KEY (`guid`); diff --git a/sql/updates/world/2015_09_11_99_world_335.sql b/sql/updates/world/2015_09_11_99_world_335.sql new file mode 100644 index 0000000000..2851d4172b --- /dev/null +++ b/sql/updates/world/2015_09_11_99_world_335.sql @@ -0,0 +1,3 @@ +UPDATE `trinity_string` +SET `content_default` = 'Object GUID is: %s' +WHERE `entry`=201; diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 1efdb16804..6494f92b52 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -316,11 +316,10 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_PLAYER_HOMEBIND, "DELETE FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC); // Corpse - PrepareStatement(CHAR_SEL_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0", CONNECTION_SYNCH); - PrepareStatement(CHAR_INS_CORPSE, "INSERT INTO corpse (corpseGuid, guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_CORPSE, "DELETE FROM corpse WHERE corpseGuid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_PLAYER_CORPSES, "DELETE FROM corpse WHERE guid = ? AND corpseType <> 0", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_OLD_CORPSES, "DELETE FROM corpse WHERE corpseType = 0 OR time < (UNIX_TIMESTAMP(NOW()) - ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CORPSES, "SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_INS_CORPSE, "INSERT INTO corpse (guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_CORPSE, "DELETE FROM corpse WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_CORPSES_FROM_MAP, "DELETE FROM corpse WHERE mapId = ? AND instanceId = ?", CONNECTION_ASYNC); // Creature respawn PrepareStatement(CHAR_SEL_CREATURE_RESPAWNS, "SELECT guid, respawnTime FROM creature_respawn WHERE mapId = ? AND instanceId = ?", CONNECTION_SYNCH); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index f88a912e02..a7ab5d00cb 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -281,8 +281,7 @@ enum CharacterDatabaseStatements CHAR_SEL_CORPSES, CHAR_INS_CORPSE, CHAR_DEL_CORPSE, - CHAR_DEL_PLAYER_CORPSES, - CHAR_DEL_OLD_CORPSES, + CHAR_DEL_CORPSES_FROM_MAP, CHAR_SEL_CREATURE_RESPAWNS, CHAR_REP_CREATURE_RESPAWN, diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index 2522c97de2..c870f786af 100644 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -55,7 +55,7 @@ void PetAI::_stopAttack() { if (!me->IsAlive()) { - TC_LOG_DEBUG("misc", "Creature stoped attacking cuz his dead [guid=%u]", me->GetGUIDLow()); + TC_LOG_DEBUG("misc", "Creature stoped attacking cuz his dead [guid=%u]", me->GetGUID().GetCounter()); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveIdle(); me->CombatStop(); @@ -97,7 +97,7 @@ void PetAI::UpdateAI(uint32 diff) if (_needToStop()) { - TC_LOG_DEBUG("misc", "Pet AI stopped attacking [guid=%u]", me->GetGUIDLow()); + TC_LOG_DEBUG("misc", "Pet AI stopped attacking [guid=%u]", me->GetGUID().GetCounter()); _stopAttack(); return; } @@ -439,7 +439,7 @@ void PetAI::HandleReturnMovement() ClearCharmInfoFlags(); me->GetCharmInfo()->SetIsReturning(true); me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MovePoint(me->GetGUIDLow(), x, y, z); + me->GetMotionMaster()->MovePoint(me->GetGUID().GetCounter(), x, y, z); } } else // COMMAND_FOLLOW @@ -492,7 +492,7 @@ void PetAI::MovementInform(uint32 moveType, uint32 data) { // Pet is returning to where stay was clicked. data should be // pet's GUIDLow since we set that as the waypoint ID - if (data == me->GetGUIDLow() && me->GetCharmInfo()->IsReturning()) + if (data == me->GetGUID().GetCounter() && me->GetCharmInfo()->IsReturning()) { ClearCharmInfoFlags(); me->GetCharmInfo()->SetIsAtStay(true); @@ -505,7 +505,7 @@ void PetAI::MovementInform(uint32 moveType, uint32 data) { // If data is owner's GUIDLow then we've reached follow point, // otherwise we're probably chasing a creature - if (me->GetCharmerOrOwner() && me->GetCharmInfo() && data == me->GetCharmerOrOwner()->GetGUIDLow() && me->GetCharmInfo()->IsReturning()) + if (me->GetCharmerOrOwner() && me->GetCharmInfo() && data == me->GetCharmerOrOwner()->GetGUID().GetCounter() && me->GetCharmInfo()->IsReturning()) { ClearCharmInfoFlags(); me->GetCharmInfo()->SetIsFollowing(true); diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp index 07bd49bdcc..d3e1173399 100644 --- a/src/server/game/AI/CreatureAISelector.cpp +++ b/src/server/game/AI/CreatureAISelector.cpp @@ -94,7 +94,7 @@ namespace FactorySelector // select NullCreatureAI if not another cases ainame = (ai_factory == NULL) ? "NullCreatureAI" : ai_factory->key(); - TC_LOG_DEBUG("scripts", "Creature %s (Entry: %u GUID: %u DB GUID: %u) is using AI type: %s.", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUIDLow(), creature->GetDBTableGUIDLow(), ainame.c_str()); + TC_LOG_DEBUG("scripts", "Creature %s (Entry: %u GUID: %u DB GUID: %u) is using AI type: %s.", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUID().GetCounter(), creature->GetSpawnId(), ainame.c_str()); return (ai_factory == NULL ? new NullCreatureAI(creature) : ai_factory->Create(creature)); } @@ -141,7 +141,7 @@ namespace FactorySelector std::string ainame = (ai_factory == NULL || go->GetScriptId()) ? "NullGameObjectAI" : ai_factory->key(); - TC_LOG_DEBUG("scripts", "GameObject %u used AI is %s.", go->GetGUIDLow(), ainame.c_str()); + TC_LOG_DEBUG("scripts", "GameObject %u used AI is %s.", go->GetGUID().GetCounter(), ainame.c_str()); return (ai_factory == NULL ? new NullGameObjectAI(go) : ai_factory->Create(go)); } diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index f1ba985458..8e2a82dbfd 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -168,7 +168,7 @@ void ScriptedAI::DoPlaySoundToSet(WorldObject* source, uint32 soundId) if (!sSoundEntriesStore.LookupEntry(soundId)) { - TC_LOG_ERROR("scripts", "Invalid soundId %u used in DoPlaySoundToSet (Source: TypeId %u, GUID %u)", soundId, source->GetTypeId(), source->GetGUIDLow()); + TC_LOG_ERROR("scripts", "Invalid soundId %u used in DoPlaySoundToSet (Source: TypeId %u, GUID %u)", soundId, source->GetTypeId(), source->GetGUID().GetCounter()); return; } diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index dadffe735d..4b43ac889c 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -114,7 +114,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u mLastInvoker = unit->GetGUID(); if (Unit* tempInvoker = GetLastInvoker()) - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: Invoker: %s (guidlow: %u)", tempInvoker->GetName().c_str(), tempInvoker->GetGUIDLow()); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: Invoker: %s (guidlow: %u)", tempInvoker->GetName().c_str(), tempInvoker->GetGUID().GetCounter()); switch (e.GetActionType()) { @@ -162,7 +162,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u mUseTextTimer = true; sCreatureTextMgr->SendChat(talker, uint8(e.action.talk.textGroupID), talkTarget); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_TALK: talker: %s (GuidLow: %u), textGuid: %u", - talker->GetName().c_str(), talker->GetGUIDLow(), talkTarget ? talkTarget->GetGUIDLow() : 0); + talker->GetName().c_str(), talker->GetGUID().GetCounter(), talkTarget ? talkTarget->GetGUID().GetCounter() : 0); break; } case SMART_ACTION_SIMPLE_TALK: @@ -180,7 +180,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u sCreatureTextMgr->SendChat(me, uint8(e.action.talk.textGroupID), IsPlayer(templastInvoker) ? templastInvoker : 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, (*itr)->ToPlayer()); } TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SIMPLE_TALK: talker: %s (GuidLow: %u), textGroupId: %u", - (*itr)->GetName().c_str(), (*itr)->GetGUIDLow(), uint8(e.action.talk.textGroupID)); + (*itr)->GetName().c_str(), (*itr)->GetGUID().GetCounter(), uint8(e.action.talk.textGroupID)); } delete targets; @@ -198,7 +198,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToUnit()->HandleEmoteCommand(e.action.emote.emote); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_PLAY_EMOTE: target: %s (GuidLow: %u), emote: %u", - (*itr)->GetName().c_str(), (*itr)->GetGUIDLow(), e.action.emote.emote); + (*itr)->GetName().c_str(), (*itr)->GetGUID().GetCounter(), e.action.emote.emote); } } @@ -217,7 +217,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->PlayDirectSound(e.action.sound.sound, e.action.sound.onlySelf ? (*itr)->ToPlayer() : nullptr); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SOUND: target: %s (GuidLow: %u), sound: %u, onlyself: %u", - (*itr)->GetName().c_str(), (*itr)->GetGUIDLow(), e.action.sound.sound, e.action.sound.onlySelf); + (*itr)->GetName().c_str(), (*itr)->GetGUID().GetCounter(), e.action.sound.sound, e.action.sound.onlySelf); } } @@ -238,7 +238,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToCreature()->setFaction(e.action.faction.factionID); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_FACTION: Creature entry %u, GuidLow %u set faction to %u", - (*itr)->GetEntry(), (*itr)->GetGUIDLow(), e.action.faction.factionID); + (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter(), e.action.faction.factionID); } else { @@ -248,7 +248,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToCreature()->setFaction(ci->faction); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_FACTION: Creature entry %u, GuidLow %u set faction to %u", - (*itr)->GetEntry(), (*itr)->GetGUIDLow(), ci->faction); + (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter(), ci->faction); } } } @@ -280,7 +280,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u uint32 displayId = ObjectMgr::ChooseDisplayId(ci); (*itr)->ToCreature()->SetDisplayId(displayId); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL: Creature entry %u, GuidLow %u set displayid to %u", - (*itr)->GetEntry(), (*itr)->GetGUIDLow(), displayId); + (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter(), displayId); } } //if no param1, then use value from param2 (modelId) @@ -288,14 +288,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToCreature()->SetDisplayId(e.action.morphOrMount.model); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL: Creature entry %u, GuidLow %u set displayid to %u", - (*itr)->GetEntry(), (*itr)->GetGUIDLow(), e.action.morphOrMount.model); + (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter(), e.action.morphOrMount.model); } } else { (*itr)->ToCreature()->DeMorph(); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL: Creature entry %u, GuidLow %u demorphs.", - (*itr)->GetEntry(), (*itr)->GetGUIDLow()); + (*itr)->GetEntry(), (*itr)->GetGUID().GetCounter()); } } @@ -314,7 +314,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToPlayer()->FailQuest(e.action.quest.quest); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FAIL_QUEST: Player guidLow %u fails quest %u", - (*itr)->GetGUIDLow(), e.action.quest.quest); + (*itr)->GetGUID().GetCounter(), e.action.quest.quest); } } @@ -335,7 +335,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToPlayer()->AddQuestAndCheckCompletion(q, NULL); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_QUEST: Player guidLow %u add quest %u", - (*itr)->GetGUIDLow(), e.action.quest.quest); + (*itr)->GetGUID().GetCounter(), e.action.quest.quest); } } } @@ -397,7 +397,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u uint32 emote = temp[urand(0, count - 1)]; (*itr)->ToUnit()->HandleEmoteCommand(emote); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_RANDOM_EMOTE: Creature guidLow %u handle random emote %u", - (*itr)->GetGUIDLow(), emote); + (*itr)->GetGUID().GetCounter(), emote); } } @@ -416,7 +416,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { me->getThreatManager().modifyThreatPercent(target, e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_ALL_PCT: Creature guidLow %u modify threat for unit %u, value %i", - me->GetGUIDLow(), target->GetGUIDLow(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); + me->GetGUID().GetCounter(), target->GetGUID().GetCounter(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); } } break; @@ -436,7 +436,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { me->getThreatManager().modifyThreatPercent((*itr)->ToUnit(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_SINGLE_PCT: Creature guidLow %u modify threat for unit %u, value %i", - me->GetGUIDLow(), (*itr)->GetGUIDLow(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); + me->GetGUID().GetCounter(), (*itr)->GetGUID().GetCounter(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); } } @@ -463,7 +463,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u (*itr)->ToPlayer()->GroupEventHappens(e.action.quest.quest, me); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS: Player guidLow %u credited quest %u", - (*itr)->GetGUIDLow(), e.action.quest.quest); + (*itr)->GetGUID().GetCounter(), e.action.quest.quest); } } @@ -512,7 +512,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u go->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST:: %s: %u casts spell %u on target %u with castflags %u", - (me ? me->GetGUID() : go->GetGUID()).GetTypeName(), me ? me->GetGUIDLow() : go->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags); + (me ? me->GetGUID() : go->GetGUID()).GetTypeName(), me ? me->GetGUID().GetCounter() : go->GetGUID().GetCounter(), e.action.cast.spell, (*itr)->GetGUID().GetCounter(), e.action.cast.flags); } else TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (%s) already has the aura", e.action.cast.spell, (*itr)->GetGUID().ToString().c_str()); @@ -543,7 +543,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u tempLastInvoker->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_INVOKER_CAST: Invoker %u casts spell %u on target %u with castflags %u", - tempLastInvoker->GetGUIDLow(), e.action.cast.spell, (*itr)->GetGUIDLow(), e.action.cast.flags); + tempLastInvoker->GetGUID().GetCounter(), e.action.cast.spell, (*itr)->GetGUID().GetCounter(), e.action.cast.flags); } else TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (%s) already has the aura", e.action.cast.spell, (*itr)->GetGUID().ToString().c_str()); @@ -564,7 +564,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToUnit()->AddAura(e.action.cast.spell, (*itr)->ToUnit()); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_AURA: Adding aura %u to unit %u", - e.action.cast.spell, (*itr)->GetGUIDLow()); + e.action.cast.spell, (*itr)->GetGUID().GetCounter()); } } @@ -585,7 +585,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u (*itr)->ToGameObject()->SetLootState(GO_READY); (*itr)->ToGameObject()->UseDoorOrButton(0, false, unit); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ACTIVATE_GOBJECT. Gameobject %u (entry: %u) activated", - (*itr)->GetGUIDLow(), (*itr)->GetEntry()); + (*itr)->GetGUID().GetCounter(), (*itr)->GetEntry()); } } @@ -604,7 +604,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToGameObject()->ResetDoorOrButton(); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_RESET_GOBJECT. Gameobject %u (entry: %u) reset", - (*itr)->GetGUIDLow(), (*itr)->GetEntry()); + (*itr)->GetGUID().GetCounter(), (*itr)->GetEntry()); } } @@ -623,7 +623,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToUnit()->SetUInt32Value(UNIT_NPC_EMOTESTATE, e.action.emote.emote); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_EMOTE_STATE. Unit %u set emotestate to %u", - (*itr)->GetGUIDLow(), e.action.emote.emote); + (*itr)->GetGUID().GetCounter(), e.action.emote.emote); } } @@ -644,13 +644,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToUnit()->SetFlag(UNIT_FIELD_FLAGS, e.action.unitFlag.flag); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_UNIT_FLAG. Unit %u added flag %u to UNIT_FIELD_FLAGS", - (*itr)->GetGUIDLow(), e.action.unitFlag.flag); + (*itr)->GetGUID().GetCounter(), e.action.unitFlag.flag); } else { (*itr)->ToUnit()->SetFlag(UNIT_FIELD_FLAGS_2, e.action.unitFlag.flag); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_UNIT_FLAG. Unit %u added flag %u to UNIT_FIELD_FLAGS_2", - (*itr)->GetGUIDLow(), e.action.unitFlag.flag); + (*itr)->GetGUID().GetCounter(), e.action.unitFlag.flag); } } } @@ -672,13 +672,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToUnit()->RemoveFlag(UNIT_FIELD_FLAGS, e.action.unitFlag.flag); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_REMOVE_UNIT_FLAG. Unit %u removed flag %u to UNIT_FIELD_FLAGS", - (*itr)->GetGUIDLow(), e.action.unitFlag.flag); + (*itr)->GetGUID().GetCounter(), e.action.unitFlag.flag); } else { (*itr)->ToUnit()->RemoveFlag(UNIT_FIELD_FLAGS_2, e.action.unitFlag.flag); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_REMOVE_UNIT_FLAG. Unit %u removed flag %u to UNIT_FIELD_FLAGS_2", - (*itr)->GetGUIDLow(), e.action.unitFlag.flag); + (*itr)->GetGUID().GetCounter(), e.action.unitFlag.flag); } } } @@ -693,7 +693,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u ENSURE_AI(SmartAI, me->AI())->SetAutoAttack(e.action.autoAttack.attack != 0); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_AUTO_ATTACK: Creature: %u bool on = %u", - me->GetGUIDLow(), e.action.autoAttack.attack); + me->GetGUID().GetCounter(), e.action.autoAttack.attack); break; } case SMART_ACTION_ALLOW_COMBAT_MOVEMENT: @@ -704,7 +704,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u bool move = e.action.combatMove.move != 0; ENSURE_AI(SmartAI, me->AI())->SetCombatMove(move); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ALLOW_COMBAT_MOVEMENT: Creature %u bool on = %u", - me->GetGUIDLow(), e.action.combatMove.move); + me->GetGUID().GetCounter(), e.action.combatMove.move); break; } case SMART_ACTION_SET_EVENT_PHASE: @@ -714,7 +714,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u SetPhase(e.action.setEventPhase.phase); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_EVENT_PHASE: Creature %u set event phase %u", - GetBaseObject()->GetGUIDLow(), e.action.setEventPhase.phase); + GetBaseObject()->GetGUID().GetCounter(), e.action.setEventPhase.phase); break; } case SMART_ACTION_INC_EVENT_PHASE: @@ -725,7 +725,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u IncPhase(e.action.incEventPhase.inc); DecPhase(e.action.incEventPhase.dec); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_INC_EVENT_PHASE: Creature %u inc event phase by %u, " - "decrease by %u", GetBaseObject()->GetGUIDLow(), e.action.incEventPhase.inc, e.action.incEventPhase.dec); + "decrease by %u", GetBaseObject()->GetGUID().GetCounter(), e.action.incEventPhase.inc, e.action.incEventPhase.dec); break; } case SMART_ACTION_EVADE: @@ -734,7 +734,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; me->AI()->EnterEvadeMode(); - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_EVADE: Creature %u EnterEvadeMode", me->GetGUIDLow()); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_EVADE: Creature %u EnterEvadeMode", me->GetGUID().GetCounter()); break; } case SMART_ACTION_FLEE_FOR_ASSIST: @@ -748,7 +748,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u Trinity::BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_FLEE_FOR_ASSIST); sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE); } - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FLEE_FOR_ASSIST: Creature %u DoFleeToGetAssistance", me->GetGUIDLow()); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_FLEE_FOR_ASSIST: Creature %u DoFleeToGetAssistance", me->GetGUID().GetCounter()); break; } case SMART_ACTION_CALL_GROUPEVENTHAPPENS: @@ -760,7 +760,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { unit->ToPlayer()->GroupEventHappens(e.action.quest.quest, GetBaseObject()); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_GROUPEVENTHAPPENS: Player %u, group credit for quest %u", - unit->GetGUIDLow(), e.action.quest.quest); + unit->GetGUID().GetCounter(), e.action.quest.quest); } // Special handling for vehicles @@ -804,7 +804,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u (*itr)->ToUnit()->RemoveAllAuras(); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_REMOVEAURASFROMSPELL: Unit %u, spell %u", - (*itr)->GetGUIDLow(), e.action.removeAura.spell); + (*itr)->GetGUID().GetCounter(), e.action.removeAura.spell); } delete targets; @@ -828,7 +828,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { ENSURE_AI(SmartAI, me->AI())->SetFollow((*itr)->ToUnit(), (float)e.action.follow.dist, (float)e.action.follow.angle, e.action.follow.credit, e.action.follow.entry, e.action.follow.creditType); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_FOLLOW: Creature %u following target %u", - me->GetGUIDLow(), (*itr)->GetGUIDLow()); + me->GetGUID().GetCounter(), (*itr)->GetGUID().GetCounter()); break; } } @@ -865,7 +865,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u uint32 phase = temp[urand(0, count - 1)]; SetPhase(phase); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_RANDOM_PHASE: Creature %u sets event phase to %u", - GetBaseObject()->GetGUIDLow(), phase); + GetBaseObject()->GetGUID().GetCounter(), phase); break; } case SMART_ACTION_RANDOM_PHASE_RANGE: @@ -876,7 +876,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u uint32 phase = urand(e.action.randomPhaseRange.phaseMin, e.action.randomPhaseRange.phaseMax); SetPhase(phase); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_RANDOM_PHASE_RANGE: Creature %u sets event phase to %u", - GetBaseObject()->GetGUIDLow(), phase); + GetBaseObject()->GetGUID().GetCounter(), phase); break; } case SMART_ACTION_CALL_KILLEDMONSTER: @@ -890,7 +890,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { player->RewardPlayerAndGroupAtEvent(e.action.killedMonster.creature, player); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_KILLEDMONSTER: Player %u, Killcredit: %u", - player->GetGUIDLow(), e.action.killedMonster.creature); + player->GetGUID().GetCounter(), e.action.killedMonster.creature); } } else // Specific target type @@ -905,7 +905,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { (*itr)->ToPlayer()->KilledMonsterCredit(e.action.killedMonster.creature); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_KILLEDMONSTER: Player %u, Killcredit: %u", - (*itr)->GetGUIDLow(), e.action.killedMonster.creature); + (*itr)->GetGUID().GetCounter(), e.action.killedMonster.creature); } else if (IsUnit(*itr)) // Special handling for vehicles if (Vehicle* vehicle = (*itr)->ToUnit()->GetVehicleKit()) @@ -985,7 +985,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (me && !me->isDead()) { me->Kill(me); - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_DIE: Creature %u", me->GetGUIDLow()); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_DIE: Creature %u", me->GetGUID().GetCounter()); } break; } @@ -994,7 +994,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (me) { me->SetInCombatWithZone(); - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_SET_IN_COMBAT_WITH_ZONE: Creature %u", me->GetGUIDLow()); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_SET_IN_COMBAT_WITH_ZONE: Creature %u", me->GetGUID().GetCounter()); } break; } @@ -1008,7 +1008,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u Trinity::BroadcastTextBuilder builder(me, CHAT_MSG_MONSTER_EMOTE, BROADCAST_TEXT_CALL_FOR_HELP); sCreatureTextMgr->SendChatPacket(me, builder, CHAT_MSG_MONSTER_EMOTE); } - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_FOR_HELP: Creature %u", me->GetGUIDLow()); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_CALL_FOR_HELP: Creature %u", me->GetGUID().GetCounter()); } break; } @@ -1018,7 +1018,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { me->SetSheath(SheathState(e.action.setSheath.sheath)); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_SET_SHEATH: Creature %u, State: %u", - me->GetGUIDLow(), e.action.setSheath.sheath); + me->GetGUID().GetCounter(), e.action.setSheath.sheath); } break; } @@ -3471,14 +3471,14 @@ void SmartScript::GetScript() SmartAIEventList e; if (me) { - e = sSmartScriptMgr->GetScript(-((int32)me->GetDBTableGUIDLow()), mScriptType); + e = sSmartScriptMgr->GetScript(-((int32)me->GetSpawnId()), mScriptType); if (e.empty()) e = sSmartScriptMgr->GetScript((int32)me->GetEntry(), mScriptType); FillScript(e, me, NULL); } else if (go) { - e = sSmartScriptMgr->GetScript(-((int32)go->GetDBTableGUIDLow()), mScriptType); + e = sSmartScriptMgr->GetScript(-((int32)go->GetSpawnId()), mScriptType); if (e.empty()) e = sSmartScriptMgr->GetScript((int32)go->GetEntry(), mScriptType); FillScript(e, go, NULL); @@ -3668,5 +3668,12 @@ void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry) Unit* SmartScript::GetLastInvoker() { - return ObjectAccessor::FindUnit(mLastInvoker); + WorldObject* lookupRoot = me; + if (!lookupRoot) + lookupRoot = go; + + if (lookupRoot) + return ObjectAccessor::GetUnit(*lookupRoot, mLastInvoker); + + return ObjectAccessor::FindPlayer(mLastInvoker); } diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 51628eded5..cb338cd358 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -118,7 +118,7 @@ class SmartScript smart = false; if (!smart) - TC_LOG_ERROR("sql.sql", "SmartScript: Action target Creature (GUID: %u Entry: %u) is not using SmartAI, action called by Creature (GUID: %u Entry: %u) skipped to prevent crash.", c ? c->GetDBTableGUIDLow() : 0, c ? c->GetEntry() : 0, me ? me->GetDBTableGUIDLow() : 0, me ? me->GetEntry() : 0); + TC_LOG_ERROR("sql.sql", "SmartScript: Action target Creature (GUID: %u Entry: %u) is not using SmartAI, action called by Creature (GUID: %u Entry: %u) skipped to prevent crash.", c ? c->GetSpawnId() : 0, c ? c->GetEntry() : 0, me ? me->GetSpawnId() : 0, me ? me->GetEntry() : 0); return smart; } @@ -132,7 +132,7 @@ class SmartScript if (!go || go->GetAIName() != "SmartGameObjectAI") smart = false; if (!smart) - TC_LOG_ERROR("sql.sql", "SmartScript: Action target GameObject (GUID: %u Entry: %u) is not using SmartGameObjectAI, action called by GameObject (GUID: %u Entry: %u) skipped to prevent crash.", g ? g->GetDBTableGUIDLow() : 0, g ? g->GetEntry() : 0, go ? go->GetDBTableGUIDLow() : 0, go ? go->GetEntry() : 0); + TC_LOG_ERROR("sql.sql", "SmartScript: Action target GameObject (GUID: %u Entry: %u) is not using SmartGameObjectAI, action called by GameObject (GUID: %u Entry: %u) skipped to prevent crash.", g ? g->GetSpawnId() : 0, g ? g->GetEntry() : 0, go ? go->GetSpawnId() : 0, go ? go->GetEntry() : 0); return smart; } @@ -177,33 +177,25 @@ class SmartScript GameObject* FindGameObjectNear(WorldObject* searchObject, uint32 guid) const { - GameObject* gameObject = NULL; + auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid); + if (bounds.first == bounds.second) + return nullptr; - CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY())); - Cell cell(p); - - Trinity::GameObjectWithDbGUIDCheck goCheck(*searchObject, guid); - Trinity::GameObjectSearcher checker(searchObject, gameObject, goCheck); - - TypeContainerVisitor, GridTypeMapContainer > objectChecker(checker); - cell.Visit(p, objectChecker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange()); - - return gameObject; + return bounds.first->second; } Creature* FindCreatureNear(WorldObject* searchObject, uint32 guid) const { - Creature* creature = NULL; - CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY())); - Cell cell(p); + auto bounds = searchObject->GetMap()->GetCreatureBySpawnIdStore().equal_range(guid); + if (bounds.first == bounds.second) + return nullptr; - Trinity::CreatureWithDbGUIDCheck target_check(searchObject, guid); - Trinity::CreatureSearcher checker(searchObject, creature, target_check); + auto creatureItr = std::find_if(bounds.first, bounds.second, [](Map::CreatureBySpawnIdContainer::value_type const& pair) + { + return pair.second->IsAlive(); + }); - TypeContainerVisitor, GridTypeMapContainer > unit_checker(checker); - cell.Visit(p, unit_checker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange()); - - return creature; + return creatureItr != bounds.second ? creatureItr->second : bounds.first->second; } ObjectListMap* mTargetStorage; @@ -211,20 +203,27 @@ class SmartScript void OnReset(); void ResetBaseObject() { - if (meOrigGUID) + WorldObject* lookupRoot = me; + if (!lookupRoot) + lookupRoot = go; + + if (lookupRoot) { - if (Creature* m = HashMapHolder::Find(meOrigGUID)) + if (!meOrigGUID) { - me = m; - go = NULL; + if (Creature* m = ObjectAccessor::GetCreature(*lookupRoot, meOrigGUID)) + { + me = m; + go = NULL; + } } - } - if (goOrigGUID) - { - if (GameObject* o = HashMapHolder::Find(goOrigGUID)) + if (!goOrigGUID) { - me = NULL; - go = o; + if (GameObject* o = ObjectAccessor::GetGameObject(*lookupRoot, goOrigGUID)) + { + me = NULL; + go = o; + } } } goOrigGUID.Clear(); diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 0b85addfbf..7ec1665bff 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -81,7 +81,7 @@ AccountOpResult AccountMgr::DeleteAccount(uint32 accountId) { do { - ObjectGuid guid(HIGHGUID_PLAYER, (*result)[0].GetUInt32()); + ObjectGuid guid(HighGuid::Player, (*result)[0].GetUInt32()); // Kick if player is online if (Player* p = ObjectAccessor::FindConnectedPlayer(guid)) diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 51106d7cfe..2662273697 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -522,11 +522,11 @@ void AchievementMgr::SaveToDB(SQLTransaction& trans) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACHIEVEMENT_BY_ACHIEVEMENT); stmt->setUInt16(0, iter->first); - stmt->setUInt32(1, GetPlayer()->GetGUIDLow()); + stmt->setUInt32(1, GetPlayer()->GetGUID().GetCounter()); trans->Append(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACHIEVEMENT); - stmt->setUInt32(0, GetPlayer()->GetGUIDLow()); + stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter()); stmt->setUInt16(1, iter->first); stmt->setUInt32(2, uint32(iter->second.date)); trans->Append(stmt); @@ -543,14 +543,14 @@ void AchievementMgr::SaveToDB(SQLTransaction& trans) continue; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACHIEVEMENT_PROGRESS_BY_CRITERIA); - stmt->setUInt32(0, GetPlayer()->GetGUIDLow()); + stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter()); stmt->setUInt16(1, iter->first); trans->Append(stmt); if (iter->second.counter) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACHIEVEMENT_PROGRESS); - stmt->setUInt32(0, GetPlayer()->GetGUIDLow()); + stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter()); stmt->setUInt16(1, iter->first); stmt->setUInt32(2, iter->second.counter); stmt->setUInt32(3, uint32(iter->second.date)); @@ -1356,7 +1356,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, if (entry->timeLimit && timedIter == m_timedAchievements.end()) return; - TC_LOG_DEBUG("achievement", "AchievementMgr::SetCriteriaProgress(%u, %u) for (GUID:%u)", entry->ID, changeValue, m_player->GetGUIDLow()); + TC_LOG_DEBUG("achievement", "AchievementMgr::SetCriteriaProgress(%u, %u) for (GUID:%u)", entry->ID, changeValue, m_player->GetGUID().GetCounter()); CriteriaProgress* progress = GetCriteriaProgress(entry); if (!progress) @@ -1509,7 +1509,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) return; TC_LOG_DEBUG("achievement", "AchievementMgr::CompletedAchievement(%u). Player: %s (%u)", - achievement->ID, m_player->GetName().c_str(), m_player->GetGUIDLow()); + achievement->ID, m_player->GetName().c_str(), m_player->GetGUID().GetCounter()); SendAchievementEarned(achievement); CompletedAchievementData& ca = m_completedAchievements[achievement->ID]; diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 4b48f1f341..265eb6f38b 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -91,7 +91,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction& return; uint32 bidderAccId = 0; - ObjectGuid bidderGuid(HIGHGUID_PLAYER, auction->bidder); + ObjectGuid bidderGuid(HighGuid::Player, auction->bidder); Player* bidder = ObjectAccessor::FindConnectedPlayer(bidderGuid); // data for gm.log std::string bidderName; @@ -114,7 +114,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction& if (logGmTrade) { - ObjectGuid ownerGuid = ObjectGuid(HIGHGUID_PLAYER, auction->owner); + ObjectGuid ownerGuid = ObjectGuid(HighGuid::Player, auction->owner); std::string ownerName; if (!sObjectMgr->GetPlayerNameByGUID(ownerGuid, ownerName)) ownerName = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN); @@ -132,7 +132,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction& // owner in `data` will set at mail receive and item extracting PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER); stmt->setUInt32(0, auction->bidder); - stmt->setUInt32(1, pItem->GetGUIDLow()); + stmt->setUInt32(1, pItem->GetGUID().GetCounter()); trans->Append(stmt); if (bidder) @@ -155,7 +155,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction& void AuctionHouseMgr::SendAuctionSalePendingMail(AuctionEntry* auction, SQLTransaction& trans) { - ObjectGuid owner_guid(HIGHGUID_PLAYER, auction->owner); + ObjectGuid owner_guid(HighGuid::Player, auction->owner); Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid); uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid); // owner exist (online or offline) @@ -167,7 +167,7 @@ void AuctionHouseMgr::SendAuctionSalePendingMail(AuctionEntry* auction, SQLTrans //call this method to send mail to auction owner, when auction is successful, it does not clear ram void AuctionHouseMgr::SendAuctionSuccessfulMail(AuctionEntry* auction, SQLTransaction& trans) { - ObjectGuid owner_guid(HIGHGUID_PLAYER, auction->owner); + ObjectGuid owner_guid(HighGuid::Player, auction->owner); Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid); uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid); // owner exist @@ -198,7 +198,7 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, SQLTransacti if (!pItem) return; - ObjectGuid owner_guid(HIGHGUID_PLAYER, auction->owner); + ObjectGuid owner_guid(HighGuid::Player, auction->owner); Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid); uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid); // owner exist @@ -221,7 +221,7 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, SQLTransacti //this function sends mail to old bidder void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 newPrice, Player* newBidder, SQLTransaction& trans) { - ObjectGuid oldBidder_guid(HIGHGUID_PLAYER, auction->bidder); + ObjectGuid oldBidder_guid(HighGuid::Player, auction->bidder); Player* oldBidder = ObjectAccessor::FindConnectedPlayer(oldBidder_guid); uint32 oldBidder_accId = 0; @@ -243,7 +243,7 @@ void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 new //this function sends mail, when auction is cancelled to old bidder void AuctionHouseMgr::SendAuctionCancelledToBidderMail(AuctionEntry* auction, SQLTransaction& trans) { - ObjectGuid bidder_guid = ObjectGuid(HIGHGUID_PLAYER, auction->bidder); + ObjectGuid bidder_guid = ObjectGuid(HighGuid::Player, auction->bidder); Player* bidder = ObjectAccessor::FindConnectedPlayer(bidder_guid); uint32 bidder_accId = 0; @@ -355,8 +355,8 @@ void AuctionHouseMgr::LoadAuctions() void AuctionHouseMgr::AddAItem(Item* it) { ASSERT(it); - ASSERT(mAitems.find(it->GetGUIDLow()) == mAitems.end()); - mAitems[it->GetGUIDLow()] = it; + ASSERT(mAitems.find(it->GetGUID().GetCounter()) == mAitems.end()); + mAitems[it->GetGUID().GetCounter()] = it; } bool AuctionHouseMgr::RemoveAItem(uint32 id, bool deleteItem) @@ -498,7 +498,7 @@ void AuctionHouseObject::BuildListBidderItems(WorldPacket& data, Player* player, for (AuctionEntryMap::const_iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr) { AuctionEntry* Aentry = itr->second; - if (Aentry && Aentry->bidder == player->GetGUIDLow()) + if (Aentry && Aentry->bidder == player->GetGUID().GetCounter()) { if (itr->second->BuildAuctionInfo(data)) ++count; @@ -513,7 +513,7 @@ void AuctionHouseObject::BuildListOwnerItems(WorldPacket& data, Player* player, for (AuctionEntryMap::const_iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr) { AuctionEntry* Aentry = itr->second; - if (Aentry && Aentry->owner == player->GetGUIDLow()) + if (Aentry && Aentry->owner == player->GetGUID().GetCounter()) { if (Aentry->BuildAuctionInfo(data)) ++count; @@ -756,7 +756,7 @@ std::string AuctionEntry::BuildAuctionMailBody(uint32 lowGuid, uint32 bid, uint3 { std::ostringstream strm; strm.width(16); - strm << std::right << std::hex << ObjectGuid(HIGHGUID_PLAYER, lowGuid).GetRawValue(); // HIGHGUID_PLAYER always present, even for empty guids + strm << std::right << std::hex << ObjectGuid(HighGuid::Player, lowGuid).GetRawValue(); // HighGuid::Player always present, even for empty guids strm << std::dec << ':' << bid << ':' << buyout; strm << ':' << deposit << ':' << cut; return strm.str(); diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index 733bd5e9ec..e6164b7700 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -991,7 +991,7 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config) AuctionEntry* auctionEntry = new AuctionEntry(); auctionEntry->Id = sObjectMgr->GenerateAuctionID(); auctionEntry->owner = 0; - auctionEntry->itemGUIDLow = item->GetGUIDLow(); + auctionEntry->itemGUIDLow = item->GetGUID().GetCounter(); auctionEntry->itemEntry = item->GetEntry(); auctionEntry->startbid = bidPrice; auctionEntry->buyout = buyoutPrice; diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index a22db18fa7..4618101171 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -770,7 +770,7 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl } Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o)) + if (!creature->Create(map->GenerateLowGuid(), map, PHASEMASK_NORMAL, entry, x, y, z, o)) { TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnCreature: Can't create creature entry: %u", entry); delete creature; @@ -803,7 +803,7 @@ GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z // Create gameobject GameObject* go = new GameObject; - if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, map, PHASEMASK_NORMAL, x, y, z, o, 0, 0, 0, 0, 100, GO_STATE_READY)) + if (!go->Create(map->GenerateLowGuid(), entry, map, PHASEMASK_NORMAL, x, y, z, o, 0, 0, 0, 0, 100, GO_STATE_READY)) { TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnGameObject: Gameobject template %u not found in database! Battlefield not created!", entry); TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnGameObject: Cannot create gameobject template %u! Battlefield not created!", entry); @@ -901,7 +901,7 @@ bool BfCapturePoint::SetCapturePointData(GameObject* capturePoint) TC_LOG_DEBUG("bg.battlefield", "Creating capture point %u", capturePoint->GetEntry()); - m_capturePointGUID = ObjectGuid(HIGHGUID_GAMEOBJECT, capturePoint->GetEntry(), capturePoint->GetGUIDLow()); + m_capturePointGUID = ObjectGuid(HighGuid::GameObject, capturePoint->GetEntry(), capturePoint->GetGUID().GetCounter()); // check info existence GameObjectTemplate const* goinfo = capturePoint->GetGOInfo(); diff --git a/src/server/game/Battlefield/BattlefieldMgr.cpp b/src/server/game/Battlefield/BattlefieldMgr.cpp index 0060cf4f30..00da81fb99 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.cpp +++ b/src/server/game/Battlefield/BattlefieldMgr.cpp @@ -80,7 +80,7 @@ void BattlefieldMgr::HandlePlayerEnterZone(Player* player, uint32 zoneId) return; bf->HandlePlayerEnterZone(player, zoneId); - TC_LOG_DEBUG("bg.battlefield", "Player %u entered battlefield id %u", player->GetGUIDLow(), bf->GetTypeId()); + TC_LOG_DEBUG("bg.battlefield", "Player %u entered battlefield id %u", player->GetGUID().GetCounter(), bf->GetTypeId()); } void BattlefieldMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneId) @@ -94,7 +94,7 @@ void BattlefieldMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneId) return; itr->second->HandlePlayerLeaveZone(player, zoneId); - TC_LOG_DEBUG("bg.battlefield", "Player %u left battlefield id %u", player->GetGUIDLow(), itr->second->GetTypeId()); + TC_LOG_DEBUG("bg.battlefield", "Player %u left battlefield id %u", player->GetGUID().GetCounter(), itr->second->GetTypeId()); } Battlefield* BattlefieldMgr::GetBattlefieldToZoneId(uint32 zoneId) diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp index dc0388348f..60cc609a06 100644 --- a/src/server/game/Battlegrounds/Arena.cpp +++ b/src/server/game/Battlegrounds/Arena.cpp @@ -40,7 +40,7 @@ Arena::Arena() void Arena::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUIDLow()] = new ArenaScore(player->GetGUID(), player->GetBGTeam()); + PlayerScores[player->GetGUID().GetCounter()] = new ArenaScore(player->GetGUID(), player->GetBGTeam()); if (player->GetBGTeam() == ALLIANCE) // gold { @@ -177,7 +177,7 @@ void Arena::EndBattleground(uint32 winner) if (sWorld->getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO)) for (auto const& score : PlayerScores) - if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HIGHGUID_PLAYER, score.first))) + if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HighGuid::Player, score.first))) { TC_LOG_DEBUG("bg.arena", "Statistics match Type: %u for %s (GUID: %u, Team: %d, IP: %s): %s", GetArenaType(), player->GetName().c_str(), score.first, player->GetArenaTeamId(GetArenaType() == 5 ? 2 : GetArenaType() == 3), diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 3b7e9ac3f3..e75c07d894 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -193,7 +193,7 @@ bool ArenaTeam::LoadArenaTeamFromDB(QueryResult result) TeamId = fields[0].GetUInt32(); TeamName = fields[1].GetString(); - CaptainGuid = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32()); + CaptainGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32()); Type = fields[3].GetUInt8(); BackgroundColor = fields[4].GetUInt32(); EmblemStyle = fields[5].GetUInt8(); @@ -232,7 +232,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result) break; ArenaTeamMember newMember; - newMember.Guid = ObjectGuid(HIGHGUID_PLAYER, fields[1].GetUInt32()); + newMember.Guid = ObjectGuid(HighGuid::Player, fields[1].GetUInt32()); newMember.WeekGames = fields[2].GetUInt16(); newMember.WeekWins = fields[3].GetUInt16(); newMember.SeasonGames = fields[4].GetUInt16(); @@ -305,8 +305,8 @@ void ArenaTeam::SetCaptain(ObjectGuid guid) if (oldCaptain) { TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] promoted player: %s [GUID: %u] to leader of arena team [Id: %u, Name: %s] [Type: %u].", - oldCaptain->GetName().c_str(), oldCaptain->GetGUIDLow(), newCaptain->GetName().c_str(), - newCaptain->GetGUIDLow(), GetId(), GetName().c_str(), GetType()); + oldCaptain->GetName().c_str(), oldCaptain->GetGUID().GetCounter(), newCaptain->GetName().c_str(), + newCaptain->GetGUID().GetCounter(), GetId(), GetName().c_str(), GetType()); } } } @@ -328,7 +328,7 @@ void ArenaTeam::DelMember(ObjectGuid guid, bool cleanDb) // delete all info regarding this team for (uint32 i = 0; i < ARENA_TEAM_END; ++i) player->SetArenaTeamInfoField(GetSlot(), ArenaTeamInfoType(i), 0); - TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] left arena team type: %u [Id: %u, Name: %s].", player->GetName().c_str(), player->GetGUIDLow(), GetType(), GetId(), GetName().c_str()); + TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] left arena team type: %u [Id: %u, Name: %s].", player->GetName().c_str(), player->GetGUID().GetCounter(), GetType(), GetId(), GetName().c_str()); } // Only used for single member deletion, for arena team disband we use a single query for more efficiency @@ -353,7 +353,7 @@ void ArenaTeam::Disband(WorldSession* session) BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, ObjectGuid::Empty, 2, session->GetPlayerName(), GetName(), ""); if (Player* player = session->GetPlayer()) - TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] disbanded arena team type: %u [Id: %u, Name: %s].", player->GetName().c_str(), player->GetGUIDLow(), GetType(), GetId(), GetName().c_str()); + TC_LOG_DEBUG("bg.arena", "Player: %s [GUID: %u] disbanded arena team type: %u [Id: %u, Name: %s].", player->GetName().c_str(), player->GetGUID().GetCounter(), GetType(), GetId(), GetName().c_str()); } // Update database diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp index d54f781413..4fdb34e8d2 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp @@ -158,7 +158,7 @@ void ArenaTeamMgr::DistributeArenaPoints() for (std::map::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr) { // Add points to player if online - if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HIGHGUID_PLAYER, playerItr->first))) + if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HighGuid::Player, playerItr->first))) player->ModifyArenaPoints(playerItr->second, trans); else // Update database { diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 3e9b68d461..2b4d5a4df5 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -782,10 +782,10 @@ void Battleground::EndBattleground(uint32 winner) if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_PLAYER); - BattlegroundScoreMap::const_iterator score = PlayerScores.find(player->GetGUIDLow()); + BattlegroundScoreMap::const_iterator score = PlayerScores.find(player->GetGUID().GetCounter()); stmt->setUInt32(0, battlegroundId); - stmt->setUInt32(1, player->GetGUIDLow()); + stmt->setUInt32(1, player->GetGUID().GetCounter()); stmt->setUInt32(2, score->second->GetKillingBlows()); stmt->setUInt32(3, score->second->GetDeaths()); stmt->setUInt32(4, score->second->GetHonorableKills()); @@ -1251,7 +1251,7 @@ void Battleground::BuildPvPLogDataPacket(WorldPacket& data) bool Battleground::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor) { - BattlegroundScoreMap::const_iterator itr = PlayerScores.find(player->GetGUIDLow()); + BattlegroundScoreMap::const_iterator itr = PlayerScores.find(player->GetGUID().GetCounter()); if (itr == PlayerScores.end()) // player not found... return false; @@ -1326,7 +1326,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float // and when loading it (in go::LoadFromDB()), a new guid would be assigned to the object, and a new object would be created // So we must create it specific for this instance GameObject* go = new GameObject; - if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, GetBgMap(), + if (!go->Create(GetBgMap()->GenerateLowGuid(), entry, GetBgMap(), PHASEMASK_NORMAL, x, y, z, o, rotation0, rotation1, rotation2, rotation3, 100, goState)) { TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!", @@ -1335,7 +1335,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float return false; } /* - uint32 guid = go->GetGUIDLow(); + uint32 guid = go->GetGUID().GetCounter(); // without this, UseButtonOrDoor caused the crash, since it tried to get go info from godata // iirc that was changed, so adding to go data map is no longer required if that was the only function using godata from GameObject without checking if it existed @@ -1469,7 +1469,7 @@ Creature* Battleground::AddCreature(uint32 entry, uint32 type, float x, float y, Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, PHASEMASK_NORMAL, entry, x, y, z, o)) + if (!creature->Create(map->GenerateLowGuid(), map, PHASEMASK_NORMAL, entry, x, y, z, o)) { TC_LOG_ERROR("bg.battleground", "Battleground::AddCreature: cannot create creature (entry: %u) for BG (map: %u, instance id: %u)!", entry, m_MapId, m_InstanceID); diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index d9950f4ccb..73c0f1c22a 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -476,7 +476,7 @@ bool BattlegroundQueue::InviteGroupToBG(GroupQueueInfo* ginfo, Battleground* bg, uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId); TC_LOG_DEBUG("bg.battleground", "Battleground: invited player %s (%u) to BG instance %u queueindex %u bgtype %u", - player->GetName().c_str(), player->GetGUIDLow(), bg->GetInstanceID(), queueSlot, bg->GetTypeID()); + player->GetName().c_str(), player->GetGUID().GetCounter(), bg->GetInstanceID(), queueSlot, bg->GetTypeID()); // send status packet sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_JOIN, INVITE_ACCEPT_WAIT_TIME, 0, ginfo->ArenaType, 0); @@ -1041,7 +1041,7 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) BattlegroundQueue &bgQueue = sBattlegroundMgr->GetBattlegroundQueue(m_BgQueueTypeId); if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime)) { - TC_LOG_DEBUG("bg.battleground", "Battleground: removing player %u from bg queue for instance %u because of not pressing enter battle in time.", player->GetGUIDLow(), m_BgInstanceGUID); + TC_LOG_DEBUG("bg.battleground", "Battleground: removing player %u from bg queue for instance %u because of not pressing enter battle in time.", player->GetGUID().GetCounter(), m_BgInstanceGUID); player->RemoveBattlegroundQueueId(m_BgQueueTypeId); bgQueue.RemovePlayer(m_PlayerGuid, true); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 26b7f672cf..f9d32e68e0 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -222,7 +222,7 @@ void BattlegroundAB::StartingEventOpenDoors() void BattlegroundAB::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUIDLow()] = new BattlegroundABScore(player->GetGUID()); + PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundABScore(player->GetGUID()); } void BattlegroundAB::RemovePlayer(Player* /*player*/, ObjectGuid /*guid*/, uint32 /*team*/) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index d4e51315e9..4ac02bab9e 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -302,7 +302,7 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type) if (!isStatic && ((cinfoid >= AV_NPC_A_GRAVEDEFENSE0 && cinfoid <= AV_NPC_A_GRAVEDEFENSE3) || (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3))) { - CreatureData &data = sObjectMgr->NewOrExistCreatureData(creature->GetDBTableGUIDLow()); + CreatureData &data = sObjectMgr->NewOrExistCreatureData(creature->GetSpawnId()); data.spawndist = 5; } //else spawndist will be 15, so creatures move maximum=10 @@ -435,7 +435,7 @@ void BattlegroundAV::StartingEventOpenDoors() void BattlegroundAV::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUIDLow()] = new BattlegroundAVScore(player->GetGUID()); + PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundAVScore(player->GetGUID()); } void BattlegroundAV::EndBattleground(uint32 winner) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index fac6bbcfe9..7ab513c920 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -161,7 +161,8 @@ void BattlegroundEY::CheckSomeoneJoinedPoint() GameObject* obj = NULL; for (uint8 i = 0; i < EY_POINTS_MAX; ++i) { - obj = HashMapHolder::Find(BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REAVER + i]); + obj = GetBgMap()->GetGameObject(BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REAVER + i]); + if (obj) { uint8 j = 0; @@ -201,7 +202,8 @@ void BattlegroundEY::CheckSomeoneLeftPoint() GameObject* obj = NULL; for (uint8 i = 0; i < EY_POINTS_MAX; ++i) { - obj = HashMapHolder::Find(BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REAVER + i]); + obj = GetBgMap()->GetGameObject(BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REAVER + i]); + if (obj) { uint8 j = 0; @@ -362,7 +364,7 @@ void BattlegroundEY::UpdatePointsIcons(uint32 Team, uint32 Point) void BattlegroundEY::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUIDLow()] = new BattlegroundEYScore(player->GetGUID()); + PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundEYScore(player->GetGUID()); m_PlayersNearPoint[EY_POINTS_MAX].push_back(player->GetGUID()); } @@ -588,7 +590,8 @@ void BattlegroundEY::RespawnFlagAfterDrop() { RespawnFlag(true); - GameObject* obj = HashMapHolder::Find(GetDroppedFlagGUID()); + GameObject* obj = GetBgMap()->GetGameObject(GetDroppedFlagGUID()); + if (obj) obj->Delete(); else diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index 9f13d4ab65..bc2fc387e8 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -245,7 +245,7 @@ void BattlegroundIC::StartingEventOpenDoors() void BattlegroundIC::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUIDLow()] = new BattlegroundICScore(player->GetGUID()); + PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundICScore(player->GetGUID()); if (nodePoint[NODE_TYPE_QUARRY].nodeState == (player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H)) player->CastSpell(player, SPELL_QUARRY, true); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index c7d8132053..bfae37c64e 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -476,7 +476,7 @@ void BattlegroundSA::FillInitialWorldStates(WorldPacket& data) void BattlegroundSA::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUIDLow()] = new BattlegroundSAScore(player->GetGUID()); + PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundSAScore(player->GetGUID()); SendTransportInit(player); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index f94639efaf..69f6b012c8 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -227,7 +227,7 @@ void BattlegroundWS::StartingEventOpenDoors() void BattlegroundWS::AddPlayer(Player* player) { Battleground::AddPlayer(player); - PlayerScores[player->GetGUIDLow()] = new BattlegroundWGScore(player->GetGUID()); + PlayerScores[player->GetGUID().GetCounter()] = new BattlegroundWGScore(player->GetGUID()); } void BattlegroundWS::RespawnFlag(uint32 Team, bool captured) diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp index bc1faa783f..fd63dd04bf 100644 --- a/src/server/game/Calendar/CalendarMgr.cpp +++ b/src/server/game/Calendar/CalendarMgr.cpp @@ -58,7 +58,7 @@ void CalendarMgr::LoadFromDB() Field* fields = result->Fetch(); uint64 eventId = fields[0].GetUInt64(); - ObjectGuid creatorGUID = ObjectGuid(HIGHGUID_PLAYER, fields[1].GetUInt32()); + ObjectGuid creatorGUID = ObjectGuid(HighGuid::Player, fields[1].GetUInt32()); std::string title = fields[2].GetString(); std::string description = fields[3].GetString(); CalendarEventType type = CalendarEventType(fields[4].GetUInt8()); @@ -91,8 +91,8 @@ void CalendarMgr::LoadFromDB() uint64 inviteId = fields[0].GetUInt64(); uint64 eventId = fields[1].GetUInt64(); - ObjectGuid invitee = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32()); - ObjectGuid senderGUID = ObjectGuid(HIGHGUID_PLAYER, fields[3].GetUInt32()); + ObjectGuid invitee = ObjectGuid(HighGuid::Player, fields[2].GetUInt32()); + ObjectGuid senderGUID = ObjectGuid(HighGuid::Player, fields[3].GetUInt32()); CalendarInviteStatus status = CalendarInviteStatus(fields[4].GetUInt8()); uint32 statusTime = fields[5].GetUInt32(); CalendarModerationRank rank = CalendarModerationRank(fields[6].GetUInt8()); diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 0d6816fc80..2f003a58a6 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -917,19 +917,15 @@ GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid Player* pl = m_session->GetPlayer(); - GameObject* obj = pl->GetMap()->GetGameObject(ObjectGuid(HIGHGUID_GAMEOBJECT, entry, lowguid)); + GameObject* obj = pl->GetMap()->GetGameObject(ObjectGuid(HighGuid::GameObject, entry, lowguid)); if (!obj && sObjectMgr->GetGOData(lowguid)) // guid is DB guid of object { - // search near player then - CellCoord p(Trinity::ComputeCellCoord(pl->GetPositionX(), pl->GetPositionY())); - Cell cell(p); + auto bounds = pl->GetMap()->GetGameObjectBySpawnIdStore().equal_range(lowguid); + if (bounds.first == bounds.second) + return nullptr; - Trinity::GameObjectWithDbGUIDCheck go_check(*pl, lowguid); - Trinity::GameObjectSearcher checker(pl, obj, go_check); - - TypeContainerVisitor, GridTypeMapContainer > object_checker(checker); - cell.Visit(p, object_checker, *pl->GetMap(), *pl, pl->GetGridActivationRange()); + return bounds.first->second; } return obj; @@ -1067,7 +1063,7 @@ ObjectGuid ChatHandler::extractGuidFromLink(char* text) uint32 lowguid = atoul(idS); if (CreatureData const* data = sObjectMgr->GetCreatureData(lowguid)) - return ObjectGuid(HIGHGUID_UNIT, data->id, lowguid); + return ObjectGuid(HighGuid::Unit, data->id, lowguid); else return ObjectGuid::Empty; } @@ -1076,7 +1072,7 @@ ObjectGuid ChatHandler::extractGuidFromLink(char* text) uint32 lowguid = atoul(idS); if (GameObjectData const* data = sObjectMgr->GetGOData(lowguid)) - return ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, lowguid); + return ObjectGuid(HighGuid::GameObject, data->id, lowguid); else return ObjectGuid::Empty; } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 9106bfdd39..f726032685 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -299,10 +299,10 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) switch (object->GetTypeId()) { case TYPEID_UNIT: - condMeets &= object->ToCreature()->GetDBTableGUIDLow() == ConditionValue3; + condMeets &= object->ToCreature()->GetSpawnId() == ConditionValue3; break; case TYPEID_GAMEOBJECT: - condMeets &= object->ToGameObject()->GetDBTableGUIDLow() == ConditionValue3; + condMeets &= object->ToGameObject()->GetSpawnId() == ConditionValue3; break; default: break; diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 1f52623461..250f6e0771 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -58,7 +58,7 @@ void LFGMgr::_LoadFromDB(Field* fields, ObjectGuid guid) if (!guid.IsGroup()) return; - SetLeader(guid, ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32())); + SetLeader(guid, ObjectGuid(HighGuid::Player, fields[0].GetUInt32())); uint32 dungeon = fields[17].GetUInt32(); uint8 state = fields[18].GetUInt8(); diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index b1ae61cef1..2f0734ff4d 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -89,7 +89,7 @@ void LFGPlayerScript::OnMapChanged(Player* player) player->RemoveAurasDueToSpell(LFG_SPELL_LUCK_OF_THE_DRAW); player->TeleportTo(player->m_homebindMapId, player->m_homebindX, player->m_homebindY, player->m_homebindZ, 0.0f); TC_LOG_ERROR("lfg", "LFGPlayerScript::OnMapChanged, Player %s (%u) is in LFG dungeon map but does not have a valid group! " - "Teleporting to homebind.", player->GetName().c_str(), player->GetGUIDLow()); + "Teleporting to homebind.", player->GetName().c_str(), player->GetGUID().GetCounter()); return; } diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 192a897238..11c0885bee 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -44,7 +44,7 @@ void Corpse::AddToWorld() { ///- Register the corpse for guid lookup if (!IsInWorld()) - sObjectAccessor->AddObject(this); + GetMap()->GetObjectsStore().Insert(GetGUID(), this); Object::AddToWorld(); } @@ -53,15 +53,15 @@ void Corpse::RemoveFromWorld() { ///- Remove the corpse from the accessor if (IsInWorld()) - sObjectAccessor->RemoveObject(this); + GetMap()->GetObjectsStore().Remove(GetGUID()); - Object::RemoveFromWorld(); + WorldObject::RemoveFromWorld(); } bool Corpse::Create(uint32 guidlow, Map* map) { SetMap(map); - Object::_Create(guidlow, 0, HIGHGUID_CORPSE); + Object::_Create(guidlow, 0, HighGuid::Corpse); return true; } @@ -82,9 +82,9 @@ bool Corpse::Create(uint32 guidlow, Player* owner) //in other way we will get a crash in Corpse::SaveToDB() SetMap(owner->GetMap()); - WorldObject::_Create(guidlow, HIGHGUID_CORPSE, owner->GetPhaseMask()); + WorldObject::_Create(guidlow, HighGuid::Corpse, owner->GetPhaseMask()); - SetObjectScale(1); + SetObjectScale(1.0f); SetGuidValue(CORPSE_FIELD_OWNER, owner->GetGUID()); _gridCoord = Trinity::ComputeGridCoord(GetPositionX(), GetPositionY()); @@ -100,7 +100,6 @@ void Corpse::SaveToDB() uint16 index = 0; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CORPSE); - stmt->setUInt32(index++, GetGUIDLow()); // corpseGuid stmt->setUInt32(index++, GetOwnerGUID().GetCounter()); // guid stmt->setFloat (index++, GetPositionX()); // posX stmt->setFloat (index++, GetPositionY()); // posY @@ -130,7 +129,7 @@ void Corpse::DeleteBonesFromWorld() if (!corpse) { - TC_LOG_ERROR("entities.player", "Bones %u not found in world.", GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Bones %u not found in world.", GetGUID().GetCounter()); return; } @@ -140,34 +139,25 @@ void Corpse::DeleteBonesFromWorld() void Corpse::DeleteFromDB(SQLTransaction& trans) { PreparedStatement* stmt = NULL; - if (GetType() == CORPSE_BONES) - { - // Only specific bones - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSE); - stmt->setUInt32(0, GetGUIDLow()); - } - else - { - // all corpses (not bones) - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_CORPSES); - stmt->setUInt32(0, GetOwnerGUID().GetCounter()); - } + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSE); + stmt->setUInt32(0, GetOwnerGUID().GetCounter()); trans->Append(stmt); } bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields) { - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 - // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, corpseGuid, guid FROM corpse WHERE corpseType <> 0 + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ? - uint32 ownerGuid = fields[17].GetUInt32(); + + uint32 ownerGuid = fields[16].GetUInt32(); float posX = fields[0].GetFloat(); float posY = fields[1].GetFloat(); float posZ = fields[2].GetFloat(); float o = fields[3].GetFloat(); uint32 mapId = fields[4].GetUInt16(); - Object::_Create(guid, 0, HIGHGUID_CORPSE); + Object::_Create(guid, 0, HighGuid::Corpse); SetObjectScale(1.0f); SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, fields[5].GetUInt32()); @@ -177,7 +167,7 @@ bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields) SetUInt32Value(CORPSE_FIELD_GUILD, fields[9].GetUInt32()); SetUInt32Value(CORPSE_FIELD_FLAGS, fields[10].GetUInt8()); SetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS, fields[11].GetUInt8()); - SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid(HIGHGUID_PLAYER, ownerGuid)); + SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid(HighGuid::Player, ownerGuid)); m_time = time_t(fields[12].GetUInt32()); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 84a12fd640..7fe3628f89 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -139,7 +139,7 @@ Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(), m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0), m_lootRecipient(), m_lootRecipientGroup(0), _skinner(), _pickpocketLootRestore(0), m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_reactState(REACT_AGGRESSIVE), -m_defaultMovementType(IDLE_MOTION_TYPE), m_DBTableGuid(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), +m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(NULL), m_creatureData(NULL), m_waypointID(0), m_path_id(0), m_formation(NULL) { @@ -176,7 +176,13 @@ void Creature::AddToWorld() { if (GetZoneScript()) GetZoneScript()->OnCreatureCreate(this); - sObjectAccessor->AddObject(this); + + GetMap()->GetObjectsStore().Insert(GetGUID(), this); + if (m_spawnId) + GetMap()->GetCreatureBySpawnIdStore().insert(std::make_pair(m_spawnId, this)); + + TC_LOG_DEBUG("entities.unit", "Adding creature %u with entry %u and DBGUID %u to world in map %u", GetGUID().GetCounter(), GetEntry(), m_spawnId, GetMap()->GetId()); + Unit::AddToWorld(); SearchFormation(); AIM_Initialize(); @@ -191,10 +197,17 @@ void Creature::RemoveFromWorld() { if (GetZoneScript()) GetZoneScript()->OnCreatureRemove(this); + if (m_formation) sFormationMgr->RemoveCreatureFromGroup(m_formation, this); + Unit::RemoveFromWorld(); - sObjectAccessor->RemoveObject(this); + + if (m_spawnId) + Trinity::Containers::MultimapErasePair(GetMap()->GetCreatureBySpawnIdStore(), m_spawnId, this); + + TC_LOG_DEBUG("entities.unit", "Removing creature %u with entry %u and DBGUID %u to world in map %u", GetGUID().GetCounter(), GetEntry(), m_spawnId, GetMap()->GetId()); + GetMap()->GetObjectsStore().Remove(GetGUID()); } } @@ -213,7 +226,7 @@ void Creature::SearchFormation() if (IsSummon()) return; - uint32 lowguid = GetDBTableGUIDLow(); + uint32 lowguid = GetSpawnId(); if (!lowguid) return; @@ -447,11 +460,11 @@ void Creature::Update(uint32 diff) { case JUST_RESPAWNED: // Must not be called, see Creature::setDeathState JUST_RESPAWNED -> ALIVE promoting. - TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) in wrong state: JUST_RESPAWNED (4)", GetGUIDLow(), GetEntry()); + TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) in wrong state: JUST_RESPAWNED (4)", GetGUID().GetCounter(), GetEntry()); break; case JUST_DIED: // Must not be called, see Creature::setDeathState JUST_DIED -> CORPSE promoting. - TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) in wrong state: JUST_DEAD (1)", GetGUIDLow(), GetEntry()); + TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) in wrong state: JUST_DEAD (1)", GetGUID().GetCounter(), GetEntry()); break; case DEAD: { @@ -462,7 +475,7 @@ void Creature::Update(uint32 diff) if (!allowed) // Will be rechecked on next Update call break; - ObjectGuid dbtableHighGuid(HIGHGUID_UNIT, GetEntry(), m_DBTableGuid); + ObjectGuid dbtableHighGuid(HighGuid::Unit, GetEntry(), m_spawnId); time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid); if (!linkedRespawntime) // Can respawn Respawn(); @@ -918,7 +931,7 @@ void Creature::SaveToDB() { // this should only be used when the creature has already been loaded // preferably after adding to map, because mapid may not be valid otherwise - CreatureData const* data = sObjectMgr->GetCreatureData(m_DBTableGuid); + CreatureData const* data = sObjectMgr->GetCreatureData(m_spawnId); if (!data) { TC_LOG_ERROR("entities.unit", "Creature::SaveToDB failed, cannot get creature data!"); @@ -932,9 +945,10 @@ void Creature::SaveToDB() void Creature::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) { // update in loaded data - if (!m_DBTableGuid) - m_DBTableGuid = GetGUIDLow(); - CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_DBTableGuid); + if (!m_spawnId) + m_spawnId = sObjectMgr->GenerateCreatureSpawnId(); + + CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId); uint32 displayId = GetNativeDisplayId(); uint32 npcflag = GetUInt32Value(UNIT_NPC_FLAGS); @@ -998,13 +1012,14 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) SQLTransaction trans = WorldDatabase.BeginTransaction(); PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE); - stmt->setUInt32(0, m_DBTableGuid); + stmt->setUInt32(0, m_spawnId); + trans->Append(stmt); uint8 index = 0; stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE); - stmt->setUInt32(index++, m_DBTableGuid); + stmt->setUInt32(index++, m_spawnId); stmt->setUInt32(index++, GetEntry()); stmt->setUInt16(index++, uint16(mapid)); stmt->setUInt8(index++, spawnMask); @@ -1168,7 +1183,7 @@ bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* SetOriginalEntry(entry); - Object::_Create(guidlow, entry, (vehId || cinfo->VehicleId) ? HIGHGUID_VEHICLE : HIGHGUID_UNIT); + Object::_Create(guidlow, entry, (vehId || cinfo->VehicleId) ? HighGuid::Vehicle : HighGuid::Unit); if (!UpdateEntry(entry, data)) return false; @@ -1190,26 +1205,18 @@ bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* return true; } -bool Creature::LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap) +bool Creature::LoadCreatureFromDB(uint32 spawnId, Map* map, bool addToMap) { - CreatureData const* data = sObjectMgr->GetCreatureData(guid); + CreatureData const* data = sObjectMgr->GetCreatureData(spawnId); if (!data) { - TC_LOG_ERROR("sql.sql", "Creature (GUID: %u) not found in table `creature`, can't load. ", guid); + TC_LOG_ERROR("sql.sql", "Creature (GUID: %u) not found in table `creature`, can't load. ", spawnId); return false; } - m_DBTableGuid = guid; - if (map->GetInstanceId() == 0) - { - if (map->GetCreature(ObjectGuid(HIGHGUID_UNIT, data->id, guid))) - return false; - } - else - guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT); - - if (!Create(guid, map, data->phaseMask, data->id, data->posX, data->posY, data->posZ, data->orientation, data)) + m_spawnId = spawnId; + if (!Create(map->GenerateLowGuid(), map, data->phaseMask, data->id, data->posX, data->posY, data->posZ, data->orientation, data)) return false; //We should set first home position, because then AI calls home movement @@ -1220,7 +1227,7 @@ bool Creature::LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap) m_respawnDelay = data->spawntimesecs; m_deathState = ALIVE; - m_respawnTime = GetMap()->GetCreatureRespawnTime(m_DBTableGuid); + m_respawnTime = GetMap()->GetCreatureRespawnTime(m_spawnId); if (m_respawnTime) // respawn on Update { m_deathState = DEAD; @@ -1315,31 +1322,31 @@ bool Creature::hasInvolvedQuest(uint32 quest_id) const void Creature::DeleteFromDB() { - if (!m_DBTableGuid) + if (!m_spawnId) { - TC_LOG_ERROR("entities.unit", "Trying to delete not saved creature! LowGUID: %u, Entry: %u", GetGUIDLow(), GetEntry()); + TC_LOG_ERROR("entities.unit", "Trying to delete not saved creature! LowGUID: %u, Entry: %u", GetGUID().GetCounter(), GetEntry()); return; } - GetMap()->RemoveCreatureRespawnTime(m_DBTableGuid); - sObjectMgr->DeleteCreatureData(m_DBTableGuid); + GetMap()->RemoveCreatureRespawnTime(m_spawnId); + sObjectMgr->DeleteCreatureData(m_spawnId); SQLTransaction trans = WorldDatabase.BeginTransaction(); PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE); - stmt->setUInt32(0, m_DBTableGuid); + stmt->setUInt32(0, m_spawnId); trans->Append(stmt); stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE_ADDON); - stmt->setUInt32(0, m_DBTableGuid); + stmt->setUInt32(0, m_spawnId); trans->Append(stmt); stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_EVENT_CREATURE); - stmt->setUInt32(0, m_DBTableGuid); + stmt->setUInt32(0, m_spawnId); trans->Append(stmt); stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAME_EVENT_MODEL_EQUIP); - stmt->setUInt32(0, m_DBTableGuid); + stmt->setUInt32(0, m_spawnId); trans->Append(stmt); WorldDatabase.CommitTransaction(trans); @@ -1536,8 +1543,8 @@ void Creature::Respawn(bool force) if (getDeathState() == DEAD) { - if (m_DBTableGuid) - GetMap()->RemoveCreatureRespawnTime(m_DBTableGuid); + if (m_spawnId) + GetMap()->RemoveCreatureRespawnTime(m_spawnId); TC_LOG_DEBUG("entities.unit", "Respawning creature %s (%s)", GetName().c_str(), GetGUID().ToString().c_str()); @@ -1570,9 +1577,9 @@ void Creature::Respawn(bool force) TriggerJustRespawned = true;//delay event to next tick so all creatures are created on the map before processing } - uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool(GetDBTableGUIDLow()) : 0; + uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool(GetSpawnId()) : 0; if (poolid) - sPoolMgr->UpdatePool(poolid, GetDBTableGUIDLow()); + sPoolMgr->UpdatePool(poolid, GetSpawnId()); //Re-initialize reactstate that could be altered by movementgenerators InitializeReactState(); @@ -1793,7 +1800,7 @@ Unit* Creature::SelectNearestTargetInAttackDistance(float dist) const if (dist > MAX_VISIBILITY_DISTANCE) { - TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) SelectNearestTargetInAttackDistance called with dist > MAX_VISIBILITY_DISTANCE. Distance set to ATTACK_DISTANCE.", GetGUIDLow(), GetEntry()); + TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) SelectNearestTargetInAttackDistance called with dist > MAX_VISIBILITY_DISTANCE. Distance set to ATTACK_DISTANCE.", GetGUID().GetCounter(), GetEntry()); dist = ATTACK_DISTANCE; } @@ -1976,10 +1983,10 @@ bool Creature::_IsTargetAcceptable(const Unit* target) const void Creature::SaveRespawnTime() { - if (IsSummon() || !m_DBTableGuid || (m_creatureData && !m_creatureData->dbData)) + if (IsSummon() || !m_spawnId || (m_creatureData && !m_creatureData->dbData)) return; - GetMap()->SaveCreatureRespawnTime(m_DBTableGuid, m_respawnTime); + GetMap()->SaveCreatureRespawnTime(m_spawnId, m_respawnTime); } // this should not be called by petAI or @@ -2011,9 +2018,9 @@ bool Creature::CanCreatureAttack(Unit const* victim, bool /*force*/) const CreatureAddon const* Creature::GetCreatureAddon() const { - if (m_DBTableGuid) + if (m_spawnId) { - if (CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(m_DBTableGuid)) + if (CreatureAddon const* addon = sObjectMgr->GetCreatureAddon(m_spawnId)) return addon; } @@ -2082,7 +2089,7 @@ bool Creature::LoadCreaturesAddon(bool reload) SpellInfo const* AdditionalSpellInfo = sSpellMgr->GetSpellInfo(*itr); if (!AdditionalSpellInfo) { - TC_LOG_ERROR("sql.sql", "Creature (GUID: %u Entry: %u) has wrong spell %u defined in `auras` field.", GetGUIDLow(), GetEntry(), *itr); + TC_LOG_ERROR("sql.sql", "Creature (GUID: %u Entry: %u) has wrong spell %u defined in `auras` field.", GetGUID().GetCounter(), GetEntry(), *itr); continue; } @@ -2090,13 +2097,13 @@ bool Creature::LoadCreaturesAddon(bool reload) if (HasAura(*itr)) { if (!reload) - TC_LOG_ERROR("sql.sql", "Creature (GUID: %u Entry: %u) has duplicate aura (spell %u) in `auras` field.", GetDBTableGUIDLow(), GetEntry(), *itr); + TC_LOG_ERROR("sql.sql", "Creature (GUID: %u Entry: %u) has duplicate aura (spell %u) in `auras` field.", GetSpawnId(), GetEntry(), *itr); continue; } AddAura(*itr, this); - TC_LOG_DEBUG("entities.unit", "Spell: %u added to creature (GUID: %u Entry: %u)", *itr, GetGUIDLow(), GetEntry()); + TC_LOG_DEBUG("entities.unit", "Spell: %u added to creature (GUID: %u Entry: %u)", *itr, GetGUID().GetCounter(), GetEntry()); } } @@ -2176,9 +2183,9 @@ time_t Creature::GetRespawnTimeEx() const void Creature::GetRespawnPosition(float &x, float &y, float &z, float* ori, float* dist) const { - if (m_DBTableGuid) + if (m_spawnId) { - if (CreatureData const* data = sObjectMgr->GetCreatureData(GetDBTableGUIDLow())) + if (CreatureData const* data = sObjectMgr->GetCreatureData(GetSpawnId())) { x = data->posX; y = data->posY; @@ -2646,7 +2653,7 @@ void Creature::SetTextRepeatId(uint8 textGroup, uint8 id) if (std::find(repeats.begin(), repeats.end(), id) == repeats.end()) repeats.push_back(id); else - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature(%s) GuidLow %u Entry %u, id %u already added", uint32(textGroup), GetName().c_str(), GetGUIDLow(), GetEntry(), uint32(id)); + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature(%s) GuidLow %u Entry %u, id %u already added", uint32(textGroup), GetName().c_str(), GetGUID().GetCounter(), GetEntry(), uint32(id)); } CreatureTextRepeatIds Creature::GetTextRepeatGroup(uint8 textGroup) diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 4c1b39211c..3e38106377 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -435,7 +435,7 @@ class Creature : public Unit, public GridObject, public MapObject void SelectLevel(); void LoadEquipment(int8 id = 1, bool force = false); - uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; } + uint32 GetSpawnId() const { return m_spawnId; } void Update(uint32 time) override; // overwrited Unit::Update void GetRespawnPosition(float &x, float &y, float &z, float* ori = nullptr, float* dist =nullptr) const; @@ -529,8 +529,8 @@ class Creature : public Unit, public GridObject, public MapObject void setDeathState(DeathState s) override; // override virtual Unit::setDeathState - bool LoadFromDB(uint32 guid, Map* map) { return LoadCreatureFromDB(guid, map, false); } - bool LoadCreatureFromDB(uint32 guid, Map* map, bool addToMap = true); + bool LoadFromDB(uint32 spawnId, Map* map) { return LoadCreatureFromDB(spawnId, map, false); } + bool LoadCreatureFromDB(uint32 spawnId, Map* map, bool addToMap = true); void SaveToDB(); // overriden in Pet virtual void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask); @@ -692,7 +692,7 @@ class Creature : public Unit, public GridObject, public MapObject void RegenerateHealth(); void Regenerate(Powers power); MovementGeneratorType m_defaultMovementType; - uint32 m_DBTableGuid; ///< For new or temporary creatures is 0 for saved it is lowguid + uint32 m_spawnId; ///< For new or temporary creatures is 0 for saved it is lowguid uint8 m_equipmentId; int8 m_originalEquipmentId; // can be -1 diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index 9d0149a24a..b622618de5 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -41,7 +41,7 @@ void FormationMgr::AddCreatureToGroup(uint32 groupId, Creature* member) //Add member to an existing group if (itr != map->CreatureGroupHolder.end()) { - TC_LOG_DEBUG("entities.unit", "Group found: %u, inserting creature GUID: %u, Group InstanceID %u", groupId, member->GetGUIDLow(), member->GetInstanceId()); + TC_LOG_DEBUG("entities.unit", "Group found: %u, inserting creature GUID: %u, Group InstanceID %u", groupId, member->GetGUID().GetCounter(), member->GetInstanceId()); itr->second->AddMember(member); } //Create new group @@ -56,7 +56,7 @@ void FormationMgr::AddCreatureToGroup(uint32 groupId, Creature* member) void FormationMgr::RemoveCreatureFromGroup(CreatureGroup* group, Creature* member) { - TC_LOG_DEBUG("entities.unit", "Deleting member pointer to GUID: %u from group %u", group->GetId(), member->GetDBTableGUIDLow()); + TC_LOG_DEBUG("entities.unit", "Deleting member pointer to GUID: %u from group %u", group->GetId(), member->GetSpawnId()); group->RemoveMember(member); if (group->isEmpty()) @@ -142,16 +142,16 @@ void FormationMgr::LoadCreatureFormations() void CreatureGroup::AddMember(Creature* member) { - TC_LOG_DEBUG("entities.unit", "CreatureGroup::AddMember: Adding unit GUID: %u.", member->GetGUIDLow()); + TC_LOG_DEBUG("entities.unit", "CreatureGroup::AddMember: Adding unit GUID: %u.", member->GetGUID().GetCounter()); //Check if it is a leader - if (member->GetDBTableGUIDLow() == m_groupID) + if (member->GetSpawnId() == m_groupID) { - TC_LOG_DEBUG("entities.unit", "Unit GUID: %u is formation leader. Adding group.", member->GetGUIDLow()); + TC_LOG_DEBUG("entities.unit", "Unit GUID: %u is formation leader. Adding group.", member->GetGUID().GetCounter()); m_leader = member; } - m_members[member] = sFormationMgr->CreatureGroupMap.find(member->GetDBTableGUIDLow())->second; + m_members[member] = sFormationMgr->CreatureGroupMap.find(member->GetSpawnId())->second; member->SetFormation(this); } @@ -166,7 +166,7 @@ void CreatureGroup::RemoveMember(Creature* member) void CreatureGroup::MemberAttackStart(Creature* member, Unit* target) { - uint8 groupAI = sFormationMgr->CreatureGroupMap[member->GetDBTableGUIDLow()]->groupAI; + uint8 groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()]->groupAI; if (!groupAI) return; @@ -205,7 +205,7 @@ void CreatureGroup::FormationReset(bool dismiss) itr->first->GetMotionMaster()->Initialize(); else itr->first->GetMotionMaster()->MoveIdle(); - TC_LOG_DEBUG("entities.unit", "Set %s movement for member GUID: %u", dismiss ? "default" : "idle", itr->first->GetGUIDLow()); + TC_LOG_DEBUG("entities.unit", "Set %s movement for member GUID: %u", dismiss ? "default" : "idle", itr->first->GetGUID().GetCounter()); } } m_Formed = !dismiss; diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index 71d0f13488..714a0a35ca 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -51,7 +51,7 @@ void DynamicObject::AddToWorld() ///- Register the dynamicObject for guid lookup and for caster if (!IsInWorld()) { - sObjectAccessor->AddObject(this); + GetMap()->GetObjectsStore().Insert(GetGUID(), this); WorldObject::AddToWorld(); BindToCaster(); } @@ -74,7 +74,8 @@ void DynamicObject::RemoveFromWorld() UnbindFromCaster(); WorldObject::RemoveFromWorld(); - sObjectAccessor->RemoveObject(this); + GetMap()->GetObjectsStore().Remove(GetGUID()); + } } @@ -88,7 +89,7 @@ bool DynamicObject::CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spe return false; } - WorldObject::_Create(guidlow, HIGHGUID_DYNAMICOBJECT, caster->GetPhaseMask()); + WorldObject::_Create(guidlow, HighGuid::DynamicObject, caster->GetPhaseMask()); SetEntry(spellId); SetObjectScale(1); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 9777672e17..42ed4674a5 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -52,7 +52,7 @@ GameObject::GameObject() : WorldObject(false), MapObject(), m_goInfo = NULL; m_goData = NULL; - m_DBTableGuid = 0; + m_spawnId = 0; m_rotation = 0; m_lootRecipientGroup = 0; @@ -115,7 +115,7 @@ void GameObject::RemoveFromOwner() // This happens when a mage portal is despawned after the caster changes map (for example using the portal) TC_LOG_DEBUG("misc", "Removed GameObject (GUID: %u Entry: %u SpellId: %u LinkedGO: %u) that just lost any reference to the owner (%s) GO list", - GetGUIDLow(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), ownerGUID.ToString().c_str()); + GetGUID().GetCounter(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), ownerGUID.ToString().c_str()); SetOwnerGUID(ObjectGuid::Empty); } @@ -127,7 +127,9 @@ void GameObject::AddToWorld() if (m_zoneScript) m_zoneScript->OnGameObjectCreate(this); - sObjectAccessor->AddObject(this); + GetMap()->GetObjectsStore().Insert(GetGUID(), this); + if (m_spawnId) + GetMap()->GetGameObjectBySpawnIdStore().insert(std::make_pair(m_spawnId, this)); // The state can be changed after GameObject::Create but before GameObject::AddToWorld bool toggledState = GetGoType() == GAMEOBJECT_TYPE_CHEST ? getLootState() == GO_READY : (GetGoState() == GO_STATE_READY || IsTransport()); @@ -156,8 +158,12 @@ void GameObject::RemoveFromWorld() if (m_model) if (GetMap()->ContainsGameObjectModel(*m_model)) GetMap()->RemoveGameObjectModel(*m_model); + WorldObject::RemoveFromWorld(); - sObjectAccessor->RemoveObject(this); + + if (m_spawnId) + Trinity::Containers::MultimapErasePair(GetMap()->GetGameObjectBySpawnIdStore(), m_spawnId, this); + GetMap()->GetObjectsStore().Remove(GetGUID()); } } @@ -200,7 +206,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa if (goinfo->type == GAMEOBJECT_TYPE_TRANSPORT) m_updateFlag = (m_updateFlag | UPDATEFLAG_TRANSPORT) & ~UPDATEFLAG_POSITION; - Object::_Create(guidlow, goinfo->entry, HIGHGUID_GAMEOBJECT); + Object::_Create(guidlow, goinfo->entry, HighGuid::GameObject); m_goInfo = goinfo; @@ -273,7 +279,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa break; } - if (GameObjectAddon const* addon = sObjectMgr->GetGameObjectAddon(guidlow)) + if (GameObjectAddon const* addon = sObjectMgr->GetGameObjectAddon(GetSpawnId())) { if (addon->InvisibilityValue) { @@ -390,7 +396,7 @@ void GameObject::Update(uint32 diff) time_t now = time(NULL); if (m_respawnTime <= now) // timer expired { - ObjectGuid dbtableHighGuid(HIGHGUID_GAMEOBJECT, GetEntry(), m_DBTableGuid); + ObjectGuid dbtableHighGuid(HighGuid::GameObject, GetEntry(), m_spawnId); time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid); if (linkedRespawntime) // Can't respawn, the master is dead { @@ -446,9 +452,9 @@ void GameObject::Update(uint32 diff) } // Respawn timer - uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool(GetDBTableGUIDLow()) : 0; + uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool(GetSpawnId()) : 0; if (poolid) - sPoolMgr->UpdatePool(poolid, GetDBTableGUIDLow()); + sPoolMgr->UpdatePool(poolid, GetSpawnId()); else GetMap()->AddToMap(this); } @@ -686,9 +692,9 @@ void GameObject::Delete() SetGoState(GO_STATE_READY); SetUInt32Value(GAMEOBJECT_FLAGS, GetGOInfo()->flags); - uint32 poolid = GetDBTableGUIDLow() ? sPoolMgr->IsPartOfAPool(GetDBTableGUIDLow()) : 0; + uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool(GetSpawnId()) : 0; if (poolid) - sPoolMgr->UpdatePool(poolid, GetDBTableGUIDLow()); + sPoolMgr->UpdatePool(poolid, GetSpawnId()); else AddObjectToRemoveList(); } @@ -737,7 +743,7 @@ void GameObject::SaveToDB() { // this should only be used when the gameobject has already been loaded // preferably after adding to map, because mapid may not be valid otherwise - GameObjectData const* data = sObjectMgr->GetGOData(m_DBTableGuid); + GameObjectData const* data = sObjectMgr->GetGOData(m_spawnId); if (!data) { TC_LOG_ERROR("misc", "GameObject::SaveToDB failed, cannot get gameobject data!"); @@ -754,10 +760,11 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) if (!goI) return; - if (!m_DBTableGuid) - m_DBTableGuid = GetGUIDLow(); + if (!m_spawnId) + m_spawnId = sObjectMgr->GenerateGameObjectSpawnId(); + // update in loaded data (changing data only in this place) - GameObjectData& data = sObjectMgr->NewGOData(m_DBTableGuid); + GameObjectData& data = sObjectMgr->NewGOData(m_spawnId); // data->guid = guid must not be updated at save data.id = GetEntry(); @@ -783,11 +790,11 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) uint8 index = 0; PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAMEOBJECT); - stmt->setUInt32(0, m_DBTableGuid); + stmt->setUInt32(0, m_spawnId); trans->Append(stmt); stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAMEOBJECT); - stmt->setUInt32(index++, m_DBTableGuid); + stmt->setUInt32(index++, m_spawnId); stmt->setUInt32(index++, GetEntry()); stmt->setUInt16(index++, uint16(mapid)); stmt->setUInt8(index++, spawnMask); @@ -808,13 +815,13 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) WorldDatabase.CommitTransaction(trans); } -bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap) +bool GameObject::LoadGameObjectFromDB(uint32 spawnId, Map* map, bool addToMap) { - GameObjectData const* data = sObjectMgr->GetGOData(guid); + GameObjectData const* data = sObjectMgr->GetGOData(spawnId); if (!data) { - TC_LOG_ERROR("sql.sql", "Gameobject (GUID: %u) not found in table `gameobject`, can't load. ", guid); + TC_LOG_ERROR("sql.sql", "Gameobject (GUID: %u) not found in table `gameobject`, can't load. ", spawnId); return false; } @@ -835,10 +842,8 @@ bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap) GOState go_state = data->go_state; uint32 artKit = data->artKit; - m_DBTableGuid = guid; - if (map->GetInstanceId() != 0) guid = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT); - - if (!Create(guid, entry, map, phaseMask, x, y, z, ang, rotation0, rotation1, rotation2, rotation3, animprogress, go_state, artKit)) + m_spawnId = spawnId; + if (!Create(map->GenerateLowGuid(), entry, map, phaseMask, x, y, z, ang, rotation0, rotation1, rotation2, rotation3, animprogress, go_state, artKit)) return false; if (data->spawntimesecs >= 0) @@ -854,13 +859,13 @@ bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap) else { m_respawnDelayTime = data->spawntimesecs; - m_respawnTime = GetMap()->GetGORespawnTime(m_DBTableGuid); + m_respawnTime = GetMap()->GetGORespawnTime(m_spawnId); // ready to respawn if (m_respawnTime && m_respawnTime <= time(NULL)) { m_respawnTime = 0; - GetMap()->RemoveGORespawnTime(m_DBTableGuid); + GetMap()->RemoveGORespawnTime(m_spawnId); } } } @@ -881,18 +886,18 @@ bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap) void GameObject::DeleteFromDB() { - GetMap()->RemoveGORespawnTime(m_DBTableGuid); - sObjectMgr->DeleteGOData(m_DBTableGuid); + GetMap()->RemoveGORespawnTime(m_spawnId); + sObjectMgr->DeleteGOData(m_spawnId); PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAMEOBJECT); - stmt->setUInt32(0, m_DBTableGuid); + stmt->setUInt32(0, m_spawnId); WorldDatabase.Execute(stmt); stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_EVENT_GAMEOBJECT); - stmt->setUInt32(0, m_DBTableGuid); + stmt->setUInt32(0, m_spawnId); WorldDatabase.Execute(stmt); } @@ -960,7 +965,7 @@ Unit* GameObject::GetOwner() const void GameObject::SaveRespawnTime() { if (m_goData && m_goData->dbData && m_respawnTime > time(NULL) && m_spawnedByDefault) - GetMap()->SaveGORespawnTime(m_DBTableGuid, m_respawnTime); + GetMap()->SaveGORespawnTime(m_spawnId, m_respawnTime); } bool GameObject::IsNeverVisible() const @@ -1017,7 +1022,7 @@ void GameObject::Respawn() if (m_spawnedByDefault && m_respawnTime > 0) { m_respawnTime = time(NULL); - GetMap()->RemoveGORespawnTime(m_DBTableGuid); + GetMap()->RemoveGORespawnTime(m_spawnId); } } @@ -1142,7 +1147,7 @@ void GameObject::UseDoorOrButton(uint32 time_to_restore, bool alternative /* = f void GameObject::SetGoArtKit(uint8 kit) { SetByteValue(GAMEOBJECT_BYTES_1, 2, kit); - GameObjectData* data = const_cast(sObjectMgr->GetGOData(m_DBTableGuid)); + GameObjectData* data = const_cast(sObjectMgr->GetGOData(m_spawnId)); if (data) data->artKit = kit; } @@ -1335,7 +1340,7 @@ void GameObject::Use(Unit* user) if (info->goober.eventId) { - TC_LOG_DEBUG("maps.script", "Goober ScriptStart id %u for GO entry %u (GUID %u).", info->goober.eventId, GetEntry(), GetDBTableGUIDLow()); + TC_LOG_DEBUG("maps.script", "Goober ScriptStart id %u for GO entry %u (GUID %u).", info->goober.eventId, GetEntry(), GetSpawnId()); GetMap()->ScriptsStart(sEventScripts, info->goober.eventId, player, this); EventInform(info->goober.eventId, user); } @@ -1741,7 +1746,7 @@ void GameObject::Use(Unit* user) default: if (GetGoType() >= MAX_GAMEOBJECT_TYPE) TC_LOG_ERROR("misc", "GameObject::Use(): unit (type: %u, guid: %u, name: %s) tries to use object (guid: %u, entry: %u, name: %s) of unknown type (%u)", - user->GetTypeId(), user->GetGUIDLow(), user->GetName().c_str(), GetGUIDLow(), GetEntry(), GetGOInfo()->name.c_str(), GetGoType()); + user->GetTypeId(), user->GetGUID().GetCounter(), user->GetName().c_str(), GetGUID().GetCounter(), GetEntry(), GetGOInfo()->name.c_str(), GetGoType()); break; } @@ -2273,9 +2278,9 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t void GameObject::GetRespawnPosition(float &x, float &y, float &z, float* ori /* = NULL*/) const { - if (m_DBTableGuid) + if (m_spawnId) { - if (GameObjectData const* data = sObjectMgr->GetGOData(GetDBTableGUIDLow())) + if (GameObjectData const* data = sObjectMgr->GetGOData(GetSpawnId())) { x = data->posX; y = data->posY; diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index e12bec768f..26c712730c 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -662,7 +662,7 @@ class GameObject : public WorldObject, public GridObject, public Map bool IsDynTransport() const; bool IsDestructibleBuilding() const; - uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; } + uint32 GetSpawnId() const { return m_spawnId; } void UpdateRotationFields(float rotation2 = 0.0f, float rotation3 = 0.0f); @@ -671,8 +671,8 @@ class GameObject : public WorldObject, public GridObject, public Map void SaveToDB(); void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask); - bool LoadFromDB(uint32 guid, Map* map) { return LoadGameObjectFromDB(guid, map, false); } - bool LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap = true); + bool LoadFromDB(uint32 spawnId, Map* map) { return LoadGameObjectFromDB(spawnId, map, false); } + bool LoadGameObjectFromDB(uint32 spawnId, Map* map, bool addToMap = true); void DeleteFromDB(); void SetOwnerGUID(ObjectGuid owner) @@ -869,7 +869,7 @@ class GameObject : public WorldObject, public GridObject, public Map typedef std::map ChairSlotAndUser; ChairSlotAndUser ChairListSlots; - uint32 m_DBTableGuid; ///< For new or temporary gameobjects is 0 for saved it is lowguid + uint32 m_spawnId; ///< For new or temporary gameobjects is 0 for saved it is lowguid GameObjectTemplate const* m_goInfo; GameObjectData const* m_goData; GameObjectValue m_goValue; diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp index e3a325d9c2..69a77dd921 100644 --- a/src/server/game/Entities/Item/Container/Bag.cpp +++ b/src/server/game/Entities/Item/Container/Bag.cpp @@ -76,7 +76,7 @@ bool Bag::Create(uint32 guidlow, uint32 itemid, Player const* owner) if (!itemProto || itemProto->ContainerSlots > MAX_BAG_SIZE) return false; - Object::_Create(guidlow, 0, HIGHGUID_CONTAINER); + Object::_Create(guidlow, 0, HighGuid::Container); SetEntry(itemid); SetObjectScale(1.0f); diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 4f91423d76..f5eb9972af 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -257,7 +257,7 @@ Item::Item() bool Item::Create(uint32 guidlow, uint32 itemid, Player const* owner) { - Object::_Create(guidlow, 0, HIGHGUID_ITEM); + Object::_Create(guidlow, 0, HighGuid::Item); SetEntry(itemid); SetObjectScale(1.0f); @@ -317,7 +317,7 @@ void Item::SaveToDB(SQLTransaction& trans) if (!isInTransaction) trans = CharacterDatabase.BeginTransaction(); - uint32 guid = GetGUIDLow(); + uint32 guid = GetGUID().GetCounter(); switch (uState) { case ITEM_NEW: @@ -405,7 +405,7 @@ bool Item::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 // create item before any checks for store correct guid // and allow use "FSetState(ITEM_REMOVED); SaveToDB();" for deleting item from DB - Object::_Create(guid, 0, HIGHGUID_ITEM); + Object::_Create(guid, 0, HighGuid::Item); // Set entry, MUST be before proto check SetEntry(entry); @@ -420,8 +420,8 @@ bool Item::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 SetOwnerGUID(owner_guid); bool need_save = false; // need explicit save data at load fixes - SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32())); - SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid(HIGHGUID_PLAYER, fields[1].GetUInt32())); + SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HighGuid::Player, fields[0].GetUInt32())); + SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid(HighGuid::Player, fields[1].GetUInt32())); SetCount(fields[2].GetUInt32()); uint32 duration = fields[3].GetUInt32(); @@ -489,7 +489,7 @@ void Item::DeleteFromDB(SQLTransaction& trans, uint32 itemGuid) void Item::DeleteFromDB(SQLTransaction& trans) { - DeleteFromDB(trans, GetGUIDLow()); + DeleteFromDB(trans, GetGUID().GetCounter()); // Delete the items if this is a container if (!loot.isLooted()) @@ -506,7 +506,7 @@ void Item::DeleteFromInventoryDB(SQLTransaction& trans, uint32 itemGuid) void Item::DeleteFromInventoryDB(SQLTransaction& trans) { - DeleteFromInventoryDB(trans, GetGUIDLow()); + DeleteFromInventoryDB(trans, GetGUID().GetCounter()); } ItemTemplate const* Item::GetTemplate() const @@ -1061,7 +1061,7 @@ Item* Item::CreateItem(uint32 itemEntry, uint32 count, Player const* player) ASSERT(count != 0 && "pProto->Stackable == 0 but checked at loading already"); Item* item = NewItemOrBag(proto); - if (item->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM), itemEntry, player)) + if (item->Create(sObjectMgr->GetGenerator().Generate(), itemEntry, player)) { item->SetCount(count); return item; @@ -1101,7 +1101,7 @@ bool Item::IsBindedNotWith(Player const* player) const return false; if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE)) - if (allowedGUIDs.find(player->GetGUIDLow()) != allowedGUIDs.end()) + if (allowedGUIDs.find(player->GetGUID().GetCounter()) != allowedGUIDs.end()) return false; // BOA item case @@ -1118,16 +1118,28 @@ void Item::BuildUpdate(UpdateDataMapType& data_map) ClearUpdateMask(false); } +void Item::AddToObjectUpdate() +{ + if (Player* owner = GetOwner()) + owner->GetMap()->AddUpdateObject(this); +} + +void Item::RemoveFromObjectUpdate() +{ + if (Player* owner = GetOwner()) + owner->GetMap()->RemoveUpdateObject(this); +} + void Item::SaveRefundDataToDB() { SQLTransaction trans = CharacterDatabase.BeginTransaction(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_REFUND_INSTANCE); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, GetRefundRecipient()); stmt->setUInt32(2, GetPaidMoney()); stmt->setUInt16(3, uint16(GetPaidExtendedCost())); @@ -1141,7 +1153,7 @@ void Item::DeleteRefundDataFromDB(SQLTransaction* trans) if (trans) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); (*trans)->Append(stmt); } @@ -1220,7 +1232,7 @@ void Item::ClearSoulboundTradeable(Player* currentOwner) allowedGUIDs.clear(); SetState(ITEM_CHANGED, currentOwner); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_BOP_TRADE); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); } @@ -1242,7 +1254,7 @@ void Item::ItemContainerSaveLootToDB() if (loot.isLooted()) // no money and no loot return; - uint32 container_id = GetGUIDLow(); + uint32 container_id = GetGUID().GetCounter(); SQLTransaction trans = CharacterDatabase.BeginTransaction(); loot.containerID = container_id; // Save this for when a LootItem is removed @@ -1310,7 +1322,7 @@ bool Item::ItemContainerLoadLootFromDB() // Default. If there are no records for this item then it will be rolled for in Player::SendLoot() m_lootGenerated = false; - uint32 container_id = GetGUIDLow(); + uint32 container_id = GetGUID().GetCounter(); // Save this for later use loot.containerID = container_id; @@ -1364,7 +1376,7 @@ bool Item::ItemContainerLoadLootFromDB() // If container item is in a bag, add that player as an allowed looter if (GetBagSlot()) - loot_item.allowedGUIDs.insert(GetOwner()->GetGUIDLow()); + loot_item.allowedGUIDs.insert(GetOwner()->GetGUID().GetCounter()); // Finally add the LootItem to the container loot.items.push_back(loot_item); @@ -1386,7 +1398,7 @@ bool Item::ItemContainerLoadLootFromDB() void Item::ItemContainerDeleteLootItemsFromDB() { // Deletes items associated with an openable item from the DB - uint32 containerId = GetGUIDLow(); + uint32 containerId = GetGUID().GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_ITEMS); stmt->setUInt32(0, containerId); SQLTransaction trans = CharacterDatabase.BeginTransaction(); @@ -1397,7 +1409,7 @@ void Item::ItemContainerDeleteLootItemsFromDB() void Item::ItemContainerDeleteLootItemFromDB(uint32 itemID) { // Deletes a single item associated with an openable item from the DB - uint32 containerId = GetGUIDLow(); + uint32 containerId = GetGUID().GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_ITEM); stmt->setUInt32(0, containerId); stmt->setUInt32(1, itemID); @@ -1409,7 +1421,7 @@ void Item::ItemContainerDeleteLootItemFromDB(uint32 itemID) void Item::ItemContainerDeleteLootMoneyFromDB() { // Deletes the money loot associated with an openable item from the DB - uint32 containerId = GetGUIDLow(); + uint32 containerId = GetGUID().GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_MONEY); stmt->setUInt32(0, containerId); SQLTransaction trans = CharacterDatabase.BeginTransaction(); diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index b832aeb561..ad74906b4c 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -350,6 +350,9 @@ class Item : public Object void BuildUpdate(UpdateDataMapType&) override; + void AddToObjectUpdate() override; + void RemoveFromObjectUpdate() override; + uint32 GetScriptId() const { return GetTemplate()->ScriptId; } private: std::string m_text; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 6087e03b1b..f5af355633 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -81,14 +81,12 @@ Object::~Object() if (isType(TYPEMASK_ITEM)) TC_LOG_FATAL("misc", "Item slot %u", ((Item*)this)->GetSlot()); ABORT(); - RemoveFromWorld(); } if (m_objectUpdated) { TC_LOG_FATAL("misc", "Object::~Object %s deleted but still in update list!!", GetGUID().ToString().c_str()); ABORT(); - sObjectAccessor->RemoveUpdateObject(this); } delete [] m_uint32Values; @@ -133,7 +131,8 @@ void Object::AddToWorld() m_inWorld = true; // synchronize values mirror with values array (changes will send in updatecreate opcode any way - ClearUpdateMask(true); + ASSERT(!m_objectUpdated); + ClearUpdateMask(false); } void Object::RemoveFromWorld() @@ -418,7 +417,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const case TYPEID_GAMEOBJECT: case TYPEID_DYNAMICOBJECT: case TYPEID_CORPSE: - *data << uint32(GetGUIDLow()); // GetGUIDLow() + *data << uint32(GetGUID().GetCounter()); // GetGUID().GetCounter() break; //! Unit, Player and default here are sending wrong values. /// @todo Research the proper formula @@ -509,6 +508,15 @@ void Object::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* targe data->append(fieldBuffer); } +void Object::AddToObjectUpdateIfNeeded() +{ + if (m_inWorld && !m_objectUpdated) + { + AddToObjectUpdate(); + m_objectUpdated = true; + } +} + void Object::ClearUpdateMask(bool remove) { _changesMask.Clear(); @@ -516,7 +524,8 @@ void Object::ClearUpdateMask(bool remove) if (m_objectUpdated) { if (remove) - sObjectAccessor->RemoveUpdateObject(this); + RemoveFromObjectUpdate(); + m_objectUpdated = false; } } @@ -614,11 +623,7 @@ void Object::SetInt32Value(uint16 index, int32 value) m_int32Values[index] = value; _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -631,11 +636,7 @@ void Object::SetUInt32Value(uint16 index, uint32 value) m_uint32Values[index] = value; _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -657,11 +658,7 @@ void Object::SetUInt64Value(uint16 index, uint64 value) _changesMask.SetBit(index); _changesMask.SetBit(index + 1); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -674,11 +671,7 @@ bool Object::AddGuidValue(uint16 index, ObjectGuid value) _changesMask.SetBit(index); _changesMask.SetBit(index + 1); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); return true; } @@ -696,11 +689,7 @@ bool Object::RemoveGuidValue(uint16 index, ObjectGuid value) _changesMask.SetBit(index); _changesMask.SetBit(index + 1); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); return true; } @@ -717,11 +706,7 @@ void Object::SetFloatValue(uint16 index, float value) m_floatValues[index] = value; _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -741,11 +726,8 @@ void Object::SetByteValue(uint16 index, uint8 offset, uint8 value) m_uint32Values[index] |= uint32(uint32(value) << (offset * 8)); _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); + } } @@ -765,11 +747,7 @@ void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value) m_uint32Values[index] |= uint32(uint32(value) << (offset * 16)); _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -782,11 +760,7 @@ void Object::SetGuidValue(uint16 index, ObjectGuid value) _changesMask.SetBit(index); _changesMask.SetBit(index + 1); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -856,11 +830,7 @@ void Object::SetFlag(uint16 index, uint32 newFlag) m_uint32Values[index] = newval; _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -877,11 +847,7 @@ void Object::RemoveFlag(uint16 index, uint32 oldFlag) m_uint32Values[index] = newval; _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -921,11 +887,7 @@ void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag) m_uint32Values[index] |= uint32(uint32(newFlag) << (offset * 8)); _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -944,11 +906,7 @@ void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag) m_uint32Values[index] &= ~uint32(uint32(oldFlag) << (offset * 8)); _changesMask.SetBit(index); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } } @@ -1158,7 +1116,7 @@ bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool float sizefactor = GetObjectSize() + obj->GetObjectSize(); float maxdist = dist2compare + sizefactor; - if (GetTransport() && obj->GetTransport() && obj->GetTransport()->GetGUIDLow() == GetTransport()->GetGUIDLow()) + if (GetTransport() && obj->GetTransport() && obj->GetTransport()->GetGUID().GetCounter() == GetTransport()->GetGUID().GetCounter()) { float dtx = m_movementInfo.transport.pos.m_positionX - obj->m_movementInfo.transport.pos.m_positionX; float dty = m_movementInfo.transport.pos.m_positionY - obj->m_movementInfo.transport.pos.m_positionY; @@ -1747,11 +1705,7 @@ bool WorldObject::CanDetectStealthOf(WorldObject const* obj, bool checkAlert) co void Object::ForceValuesUpdateAtIndex(uint32 i) { _changesMask.SetBit(i); - if (m_inWorld && !m_objectUpdated) - { - sObjectAccessor->AddUpdateObject(this); - m_objectUpdated = true; - } + AddToObjectUpdateIfNeeded(); } void Unit::BuildHeartBeatMsg(WorldPacket* data) const @@ -1829,7 +1783,7 @@ void WorldObject::AddObjectToRemoveList() Map* map = FindMap(); if (!map) { - TC_LOG_ERROR("misc", "Object (TypeId: %u Entry: %u GUID: %u) at attempt add to move list not have valid map (Id: %u).", GetTypeId(), GetEntry(), GetGUIDLow(), GetMapId()); + TC_LOG_ERROR("misc", "Object (TypeId: %u Entry: %u GUID: %u) at attempt add to move list not have valid map (Id: %u).", GetTypeId(), GetEntry(), GetGUID().GetCounter(), GetMapId()); return; } @@ -1909,8 +1863,8 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert summon = new Minion(properties, summoner, false); break; } - - if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId)) + + if (!summon->Create(GenerateLowGuid(), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId)) { delete summon; return NULL; @@ -1964,6 +1918,11 @@ void WorldObject::SetZoneScript() } } +void WorldObject::ClearZoneScript() +{ + m_zoneScript = NULL; +} + TempSummon* WorldObject::SummonCreature(uint32 entry, const Position &pos, TempSummonType spwtype, uint32 duration, uint32 /*vehId*/) const { if (Map* map = FindMap()) @@ -2004,7 +1963,7 @@ GameObject* WorldObject::SummonGameObject(uint32 entry, float x, float y, float Map* map = GetMap(); GameObject* go = new GameObject(); - if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, map, GetPhaseMask(), x, y, z, ang, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY)) + if (!go->Create(map->GenerateLowGuid(), entry, map, GetPhaseMask(), x, y, z, ang, rotation0, rotation1, rotation2, rotation3, 100, GO_STATE_READY)) { delete go; return NULL; @@ -2288,7 +2247,7 @@ void WorldObject::MovePosition(Position &pos, float dist, float angle) if (!Trinity::IsValidMapCoord(destx, desty, pos.m_positionZ)) { TC_LOG_FATAL("misc", "WorldObject::MovePosition: Object (TypeId: %u Entry: %u GUID: %u) has invalid coordinates X: %f and Y: %f were passed!", - GetTypeId(), GetEntry(), GetGUIDLow(), destx, desty); + GetTypeId(), GetEntry(), GetGUID().GetCounter(), destx, desty); return; } @@ -2563,6 +2522,16 @@ void WorldObject::BuildUpdate(UpdateDataMapType& data_map) ClearUpdateMask(false); } +void WorldObject::AddToObjectUpdate() +{ + GetMap()->AddUpdateObject(this); +} + +void WorldObject::RemoveFromObjectUpdate() +{ + GetMap()->RemoveUpdateObject(this); +} + ObjectGuid WorldObject::GetTransGUID() const { if (GetTransport()) diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index e673e346a5..43d1ecdeab 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -101,9 +101,6 @@ class Object virtual void RemoveFromWorld(); ObjectGuid GetGUID() const { return GetGuidValue(OBJECT_FIELD_GUID); } - uint32 GetGUIDLow() const { return GetGuidValue(OBJECT_FIELD_GUID).GetCounter(); } - uint32 GetGUIDMid() const { return GetGuidValue(OBJECT_FIELD_GUID).GetEntry(); } - uint32 GetGUIDHigh() const { return GetGuidValue(OBJECT_FIELD_GUID).GetHigh(); } PackedGuid const& GetPackGUID() const { return m_PackGUID; } uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); } void SetEntry(uint32 entry) { SetUInt32Value(OBJECT_FIELD_ENTRY, entry); } @@ -234,6 +231,10 @@ class Object uint16 _fieldNotifyFlags; + virtual void AddToObjectUpdate() = 0; + virtual void RemoveFromObjectUpdate() = 0; + void AddToObjectUpdateIfNeeded(); + bool m_objectUpdated; private: @@ -535,6 +536,7 @@ class WorldObject : public Object, public WorldLocation Map const* GetBaseMap() const; void SetZoneScript(); + void ClearZoneScript(); ZoneScript* GetZoneScript() const { return m_zoneScript; } TempSummon* SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime = 0, uint32 vehId = 0) const; @@ -555,6 +557,9 @@ class WorldObject : public Object, public WorldLocation virtual void UpdateObjectVisibility(bool forced = true); void BuildUpdate(UpdateDataMapType&) override; + void AddToObjectUpdate() override; + void RemoveFromObjectUpdate() override; + //relocation and visibility system functions void AddToNotify(uint16 f) { m_notifyflags |= f;} bool isNeedNotify(uint16 f) const { return (m_notifyflags & f) != 0; } diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp index b86a253a84..552705d8df 100644 --- a/src/server/game/Entities/Object/ObjectGuid.cpp +++ b/src/server/game/Entities/Object/ObjectGuid.cpp @@ -28,18 +28,18 @@ char const* ObjectGuid::GetTypeName(HighGuid high) { switch (high) { - case HIGHGUID_ITEM: return "Item"; - case HIGHGUID_PLAYER: return "Player"; - case HIGHGUID_GAMEOBJECT: return "Gameobject"; - case HIGHGUID_TRANSPORT: return "Transport"; - case HIGHGUID_UNIT: return "Creature"; - case HIGHGUID_PET: return "Pet"; - case HIGHGUID_VEHICLE: return "Vehicle"; - case HIGHGUID_DYNAMICOBJECT: return "DynObject"; - case HIGHGUID_CORPSE: return "Corpse"; - case HIGHGUID_MO_TRANSPORT: return "MoTransport"; - case HIGHGUID_INSTANCE: return "InstanceID"; - case HIGHGUID_GROUP: return "Group"; + case HighGuid::Item: return "Item"; + case HighGuid::Player: return "Player"; + case HighGuid::GameObject: return "Gameobject"; + case HighGuid::Transport: return "Transport"; + case HighGuid::Unit: return "Creature"; + case HighGuid::Pet: return "Pet"; + case HighGuid::Vehicle: return "Vehicle"; + case HighGuid::DynamicObject: return "DynObject"; + case HighGuid::Corpse: return "Corpse"; + case HighGuid::Mo_Transport: return "MoTransport"; + case HighGuid::Instance: return "InstanceID"; + case HighGuid::Group: return "Group"; default: return ""; } @@ -57,15 +57,14 @@ std::string ObjectGuid::ToString() const return str.str(); } -template -uint32 ObjectGuidGenerator::Generate() +ObjectGuid ObjectGuid::Global(HighGuid type, LowType counter) { - if (_nextGuid >= ObjectGuid::GetMaxCounter(high) - 1) - { - TC_LOG_ERROR("", "%s guid overflow!! Can't continue, shutting down server. ", ObjectGuid::GetTypeName(high)); - World::StopNow(ERROR_EXIT_CODE); - } - return _nextGuid++; + return ObjectGuid(type, counter); +} + +ObjectGuid ObjectGuid::MapSpecific(HighGuid type, uint32 entry, LowType counter) +{ + return ObjectGuid(type, entry, counter); } ByteBuffer& operator<<(ByteBuffer& buf, ObjectGuid const& guid) @@ -92,14 +91,8 @@ ByteBuffer& operator>>(ByteBuffer& buf, PackedGuidReader const& guid) return buf; } -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); -template uint32 ObjectGuidGenerator::Generate(); +void ObjectGuidGeneratorBase::HandleCounterOverflow(HighGuid high) +{ + TC_LOG_ERROR("misc", "%s guid overflow!! Can't continue, shutting down server. ", ObjectGuid::GetTypeName(high)); + World::StopNow(ERROR_EXIT_CODE); +} \ No newline at end of file diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index b541328c46..705cc3eac3 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -22,6 +22,7 @@ #include "Common.h" #include "ByteBuffer.h" +#include #include #include @@ -52,23 +53,57 @@ enum TypeMask TYPEMASK_SEER = TYPEMASK_PLAYER | TYPEMASK_UNIT | TYPEMASK_DYNAMICOBJECT }; -enum HighGuid +enum class HighGuid { - HIGHGUID_ITEM = 0x4000, // blizz 4000 - HIGHGUID_CONTAINER = 0x4000, // blizz 4000 - HIGHGUID_PLAYER = 0x0000, // blizz 0000 - HIGHGUID_GAMEOBJECT = 0xF110, // blizz F110 - HIGHGUID_TRANSPORT = 0xF120, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT) - HIGHGUID_UNIT = 0xF130, // blizz F130 - HIGHGUID_PET = 0xF140, // blizz F140 - HIGHGUID_VEHICLE = 0xF150, // blizz F550 - HIGHGUID_DYNAMICOBJECT = 0xF100, // blizz F100 - HIGHGUID_CORPSE = 0xF101, // blizz F100 - HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT) - HIGHGUID_INSTANCE = 0x1F40, // blizz 1F40 - HIGHGUID_GROUP = 0x1F50 + Item = 0x4000, // blizz 4000 + Container = 0x4000, // blizz 4000 + Player = 0x0000, // blizz 0000 + GameObject = 0xF110, // blizz F110 + Transport = 0xF120, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT) + Unit = 0xF130, // blizz F130 + Pet = 0xF140, // blizz F140 + Vehicle = 0xF150, // blizz F550 + DynamicObject = 0xF100, // blizz F100 + Corpse = 0xF101, // blizz F100 + Mo_Transport = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT) + Instance = 0x1F40, // blizz 1F40 + Group = 0x1F50, }; +template +struct ObjectGuidTraits +{ + static bool const Global = false; + static bool const MapSpecific = false; +}; + +#define GUID_TRAIT_GLOBAL(highguid) \ + template<> struct ObjectGuidTraits \ + { \ + static bool const Global = true; \ + static bool const MapSpecific = false; \ + }; + +#define GUID_TRAIT_MAP_SPECIFIC(highguid) \ + template<> struct ObjectGuidTraits \ + { \ + static bool const Global = false; \ + static bool const MapSpecific = true; \ + }; + +GUID_TRAIT_GLOBAL(HighGuid::Player) +GUID_TRAIT_GLOBAL(HighGuid::Item) +GUID_TRAIT_GLOBAL(HighGuid::Mo_Transport) +GUID_TRAIT_GLOBAL(HighGuid::Group) +GUID_TRAIT_GLOBAL(HighGuid::Instance) +GUID_TRAIT_MAP_SPECIFIC(HighGuid::Transport) +GUID_TRAIT_MAP_SPECIFIC(HighGuid::Unit) +GUID_TRAIT_MAP_SPECIFIC(HighGuid::Vehicle) +GUID_TRAIT_MAP_SPECIFIC(HighGuid::Pet) +GUID_TRAIT_MAP_SPECIFIC(HighGuid::GameObject) +GUID_TRAIT_MAP_SPECIFIC(HighGuid::DynamicObject) +GUID_TRAIT_MAP_SPECIFIC(HighGuid::Corpse) + class ObjectGuid; class PackedGuid; @@ -85,6 +120,12 @@ class ObjectGuid typedef uint32 LowType; + template + static typename std::enable_if::Global, ObjectGuid>::type Create(LowType counter) { return Global(type, counter); } + + template + static typename std::enable_if::MapSpecific, ObjectGuid>::type Create(uint32 entry, LowType counter) { return MapSpecific(type, entry, counter); } + ObjectGuid() : _guid(0) { } explicit ObjectGuid(uint64 guid) : _guid(guid) { } ObjectGuid(HighGuid hi, uint32 entry, LowType counter) : _guid(counter ? uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48) : 0) { } @@ -123,41 +164,41 @@ class ObjectGuid uint32 GetMaxCounter() const { return GetMaxCounter(GetHigh()); } bool IsEmpty() const { return _guid == 0; } - bool IsCreature() const { return GetHigh() == HIGHGUID_UNIT; } - bool IsPet() const { return GetHigh() == HIGHGUID_PET; } - bool IsVehicle() const { return GetHigh() == HIGHGUID_VEHICLE; } + bool IsCreature() const { return GetHigh() == HighGuid::Unit; } + bool IsPet() const { return GetHigh() == HighGuid::Pet; } + bool IsVehicle() const { return GetHigh() == HighGuid::Vehicle; } bool IsCreatureOrPet() const { return IsCreature() || IsPet(); } bool IsCreatureOrVehicle() const { return IsCreature() || IsVehicle(); } bool IsAnyTypeCreature() const { return IsCreature() || IsPet() || IsVehicle(); } - bool IsPlayer() const { return !IsEmpty() && GetHigh() == HIGHGUID_PLAYER; } + bool IsPlayer() const { return !IsEmpty() && GetHigh() == HighGuid::Player; } bool IsUnit() const { return IsAnyTypeCreature() || IsPlayer(); } - bool IsItem() const { return GetHigh() == HIGHGUID_ITEM; } - bool IsGameObject() const { return GetHigh() == HIGHGUID_GAMEOBJECT; } - bool IsDynamicObject() const { return GetHigh() == HIGHGUID_DYNAMICOBJECT; } - bool IsCorpse() const { return GetHigh() == HIGHGUID_CORPSE; } - bool IsTransport() const { return GetHigh() == HIGHGUID_TRANSPORT; } - bool IsMOTransport() const { return GetHigh() == HIGHGUID_MO_TRANSPORT; } + bool IsItem() const { return GetHigh() == HighGuid::Item; } + bool IsGameObject() const { return GetHigh() == HighGuid::GameObject; } + bool IsDynamicObject() const { return GetHigh() == HighGuid::DynamicObject; } + bool IsCorpse() const { return GetHigh() == HighGuid::Corpse; } + bool IsTransport() const { return GetHigh() == HighGuid::Transport; } + bool IsMOTransport() const { return GetHigh() == HighGuid::Mo_Transport; } bool IsAnyTypeGameObject() const { return IsGameObject() || IsTransport() || IsMOTransport(); } - bool IsInstance() const { return GetHigh() == HIGHGUID_INSTANCE; } - bool IsGroup() const { return GetHigh() == HIGHGUID_GROUP; } + bool IsInstance() const { return GetHigh() == HighGuid::Instance; } + bool IsGroup() const { return GetHigh() == HighGuid::Group; } static TypeID GetTypeId(HighGuid high) { switch (high) { - case HIGHGUID_ITEM: return TYPEID_ITEM; - //case HIGHGUID_CONTAINER: return TYPEID_CONTAINER; HIGHGUID_CONTAINER==HIGHGUID_ITEM currently - case HIGHGUID_UNIT: return TYPEID_UNIT; - case HIGHGUID_PET: return TYPEID_UNIT; - case HIGHGUID_PLAYER: return TYPEID_PLAYER; - case HIGHGUID_GAMEOBJECT: return TYPEID_GAMEOBJECT; - case HIGHGUID_DYNAMICOBJECT: return TYPEID_DYNAMICOBJECT; - case HIGHGUID_CORPSE: return TYPEID_CORPSE; - case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT; - case HIGHGUID_VEHICLE: return TYPEID_UNIT; + case HighGuid::Item: return TYPEID_ITEM; + //case HighGuid::Container: return TYPEID_CONTAINER; HighGuid::Container==HighGuid::Item currently + case HighGuid::Unit: return TYPEID_UNIT; + case HighGuid::Pet: return TYPEID_UNIT; + case HighGuid::Player: return TYPEID_PLAYER; + case HighGuid::GameObject: return TYPEID_GAMEOBJECT; + case HighGuid::DynamicObject: return TYPEID_DYNAMICOBJECT; + case HighGuid::Corpse: return TYPEID_CORPSE; + case HighGuid::Mo_Transport: return TYPEID_GAMEOBJECT; + case HighGuid::Vehicle: return TYPEID_UNIT; // unknown - case HIGHGUID_INSTANCE: - case HIGHGUID_GROUP: + case HighGuid::Instance: + case HighGuid::Group: default: return TYPEID_OBJECT; } } @@ -178,19 +219,19 @@ class ObjectGuid { switch (high) { - case HIGHGUID_ITEM: - case HIGHGUID_PLAYER: - case HIGHGUID_DYNAMICOBJECT: - case HIGHGUID_CORPSE: - case HIGHGUID_MO_TRANSPORT: - case HIGHGUID_INSTANCE: - case HIGHGUID_GROUP: + case HighGuid::Item: + case HighGuid::Player: + case HighGuid::DynamicObject: + case HighGuid::Corpse: + case HighGuid::Mo_Transport: + case HighGuid::Instance: + case HighGuid::Group: return false; - case HIGHGUID_GAMEOBJECT: - case HIGHGUID_TRANSPORT: - case HIGHGUID_UNIT: - case HIGHGUID_PET: - case HIGHGUID_VEHICLE: + case HighGuid::GameObject: + case HighGuid::Transport: + case HighGuid::Unit: + case HighGuid::Pet: + case HighGuid::Vehicle: default: return true; } @@ -198,6 +239,9 @@ class ObjectGuid bool HasEntry() const { return HasEntry(GetHigh()); } + static ObjectGuid Global(HighGuid type, LowType counter); + static ObjectGuid MapSpecific(HighGuid type, uint32 entry, LowType counter); + explicit ObjectGuid(uint32 const&) = delete; // no implementation, used to catch wrong type assignment ObjectGuid(HighGuid, uint32, uint64 counter) = delete; // no implementation, used to catch wrong type assignment ObjectGuid(HighGuid, uint64 counter) = delete; // no implementation, used to catch wrong type assignment @@ -233,18 +277,33 @@ class PackedGuid ByteBuffer _packedGuid; }; -template -class ObjectGuidGenerator + +class ObjectGuidGeneratorBase { - public: - explicit ObjectGuidGenerator(uint32 start = 1) : _nextGuid(start) { } +public: + ObjectGuidGeneratorBase(ObjectGuid::LowType start = 1) : _nextGuid(start) { } - void Set(uint32 val) { _nextGuid = val; } - uint32 Generate(); - uint32 GetNextAfterMaxUsed() const { return _nextGuid; } + virtual void Set(uint32 val) { _nextGuid = val; } + virtual ObjectGuid::LowType Generate() = 0; + ObjectGuid::LowType GetNextAfterMaxUsed() const { return _nextGuid; } - private: - uint32 _nextGuid; +protected: + static void HandleCounterOverflow(HighGuid high); + uint64 _nextGuid; +}; + +template +class ObjectGuidGenerator : public ObjectGuidGeneratorBase +{ +public: + explicit ObjectGuidGenerator(ObjectGuid::LowType start = 1) : ObjectGuidGeneratorBase(start) { } + + ObjectGuid::LowType Generate() override + { + if (_nextGuid >= ObjectGuid::GetMaxCounter(high) - 1) + HandleCounterOverflow(high); + return _nextGuid++; + } }; ByteBuffer& operator<<(ByteBuffer& buf, ObjectGuid const& guid); diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index c9b9c72d43..57fc56af89 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -66,7 +66,7 @@ void Pet::AddToWorld() if (!IsInWorld()) { ///- Register the pet for guid lookup - sObjectAccessor->AddObject(this); + GetMap()->GetObjectsStore().Insert(GetGUID(), this); Unit::AddToWorld(); AIM_Initialize(); } @@ -90,7 +90,7 @@ void Pet::RemoveFromWorld() { ///- Don't call the function for Creature, normal mobs + totems go in a different storage Unit::RemoveFromWorld(); - sObjectAccessor->RemoveObject(this); + GetMap()->GetObjectsStore().Remove(GetGUID()); } } @@ -98,7 +98,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c { m_loading = true; - uint32 ownerid = owner->GetGUIDLow(); + uint32 ownerid = owner->GetGUID().GetCounter(); PreparedStatement* stmt; PreparedQueryResult result; @@ -174,7 +174,8 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c } Map* map = owner->GetMap(); - uint32 guid = sObjectMgr->GenerateLowGuid(HIGHGUID_PET); + uint32 guid = map->GenerateLowGuid(); + if (!Create(guid, map, owner->GetPhaseMask(), petEntry, petId)) return false; @@ -191,7 +192,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c if (!IsPositionValid()) { TC_LOG_ERROR("entities.pet", "Pet (guidlow %d, entry %d) not loaded. Suggested coordinates isn't valid (X: %f Y: %f)", - GetGUIDLow(), GetEntry(), GetPositionX(), GetPositionY()); + GetGUID().GetCounter(), GetEntry(), GetPositionX(), GetPositionY()); return false; } @@ -248,7 +249,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c if (!IsPositionValid()) { TC_LOG_ERROR("entities.pet", "Pet (guidlow %d, entry %d) not loaded. Suggested coordinates isn't valid (X: %f Y: %f)", - GetGUIDLow(), GetEntry(), GetPositionX(), GetPositionY()); + GetGUID().GetCounter(), GetEntry(), GetPositionX(), GetPositionY()); return false; } @@ -332,7 +333,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c CleanupActionBar(); // remove unknown spells from action bar after load - TC_LOG_DEBUG("entities.pet", "New Pet has guid %u", GetGUIDLow()); + TC_LOG_DEBUG("entities.pet", "New Pet has guid %u", GetGUID().GetCounter()); owner->PetSpellInitialize(); @@ -344,7 +345,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c if (getPetType() == HUNTER_PET) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_DECLINED_NAME); - stmt->setUInt32(0, owner->GetGUIDLow()); + stmt->setUInt32(0, owner->GetGUID().GetCounter()); stmt->setUInt32(1, GetCharmInfo()->GetPetNumber()); result = CharacterDatabase.Query(stmt); @@ -769,7 +770,7 @@ bool Pet::CreateBaseAtCreature(Creature* creature) if (!IsPositionValid()) { TC_LOG_ERROR("entities.pet", "Pet (guidlow %d, entry %d) not created base at creature. Suggested coordinates isn't valid (X: %f Y: %f)", - GetGUIDLow(), GetEntry(), GetPositionX(), GetPositionY()); + GetGUID().GetCounter(), GetEntry(), GetPositionX(), GetPositionY()); return false; } @@ -806,7 +807,7 @@ bool Pet::CreateBaseAtCreatureInfo(CreatureTemplate const* cinfo, Unit* owner) bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phaseMask) { TC_LOG_DEBUG("entities.pet", "Pet::CreateBaseForTamed"); - uint32 guid=sObjectMgr->GenerateLowGuid(HIGHGUID_PET); + uint32 guid=map->GenerateLowGuid(); uint32 petId = sObjectMgr->GeneratePetNumber(); if (!Create(guid, map, phaseMask, cinfo->Entry, petId)) return false; @@ -1183,7 +1184,7 @@ void Pet::_SaveSpells(SQLTransaction& trans) void Pet::_LoadAuras(uint32 timediff) { - TC_LOG_DEBUG("entities.pet", "Loading auras for pet %u", GetGUIDLow()); + TC_LOG_DEBUG("entities.pet", "Loading auras for pet %u", GetGUID().GetCounter()); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_AURA); stmt->setUInt32(0, m_charmInfo->GetPetNumber()); @@ -1679,7 +1680,7 @@ void Pet::resetTalentsForAllPetsOf(Player* owner, Pet* onlinePet /*= NULL*/) uint32 exceptPetNumber = onlinePet ? onlinePet->GetCharmInfo()->GetPetNumber() : 0; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_PET); - stmt->setUInt32(0, owner->GetGUIDLow()); + stmt->setUInt32(0, owner->GetGUID().GetCounter()); stmt->setUInt32(1, exceptPetNumber); PreparedQueryResult resultPets = CharacterDatabase.Query(stmt); @@ -1688,7 +1689,7 @@ void Pet::resetTalentsForAllPetsOf(Player* owner, Pet* onlinePet /*= NULL*/) return; stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SPELL_LIST); - stmt->setUInt32(0, owner->GetGUIDLow()); + stmt->setUInt32(0, owner->GetGUID().GetCounter()); stmt->setUInt32(1, exceptPetNumber); PreparedQueryResult result = CharacterDatabase.Query(stmt); @@ -1840,9 +1841,9 @@ bool Pet::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint3 SetMap(map); SetPhaseMask(phaseMask, false); - Object::_Create(guidlow, petId, HIGHGUID_PET); + Object::_Create(guidlow, petId, HighGuid::Pet); - m_DBTableGuid = guidlow; + m_spawnId = guidlow; m_originalEntry = Entry; if (!InitEntry(Entry)) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e4e07cfeb5..b5d3ebaa56 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -962,7 +962,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo) //FIXME: outfitId not used in player creating /// @todo need more checks against packet modifications - Object::_Create(guidlow, 0, HIGHGUID_PLAYER); + Object::_Create(guidlow, 0, HighGuid::Player); m_name = createInfo->Name; @@ -1802,7 +1802,7 @@ void Player::Update(uint32 p_time) { // m_nextSave reset in SaveToDB call SaveToDB(); - TC_LOG_DEBUG("entities.player", "Player '%s' (GUID: %u) saved", GetName().c_str(), GetGUIDLow()); + TC_LOG_DEBUG("entities.player", "Player '%s' (GUID: %u) saved", GetName().c_str(), GetGUID().GetCounter()); } else m_nextSave -= p_time; @@ -1911,7 +1911,7 @@ void Player::setDeathState(DeathState s) { if (!cur) { - TC_LOG_ERROR("entities.player", "setDeathState: attempt to kill a dead player %s(%d)", GetName().c_str(), GetGUIDLow()); + TC_LOG_ERROR("entities.player", "setDeathState: attempt to kill a dead player %s(%d)", GetName().c_str(), GetGUID().GetCounter()); return; } @@ -1978,7 +1978,7 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data) return false; } - *data << ObjectGuid(HIGHGUID_PLAYER, guid); + *data << ObjectGuid(HighGuid::Player, guid); *data << fields[1].GetString(); // name *data << uint8(plrRace); // race *data << uint8(plrClass); // class @@ -2158,13 +2158,13 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati if (!MapManager::IsValidMapCoord(mapid, x, y, z, orientation)) { TC_LOG_ERROR("maps", "TeleportTo: invalid map (%d) or invalid coordinates (X: %f, Y: %f, Z: %f, O: %f) given when teleporting player (GUID: %u, name: %s, map: %d, X: %f, Y: %f, Z: %f, O: %f).", - mapid, x, y, z, orientation, GetGUIDLow(), GetName().c_str(), GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); + mapid, x, y, z, orientation, GetGUID().GetCounter(), GetName().c_str(), GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); return false; } if (!GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_DISABLE_MAP) && DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, mapid, this)) { - TC_LOG_ERROR("maps", "Player (GUID: %u, name: %s) tried to enter a forbidden map %u", GetGUIDLow(), GetName().c_str(), mapid); + TC_LOG_ERROR("maps", "Player (GUID: %u, name: %s) tried to enter a forbidden map %u", GetGUID().GetCounter(), GetName().c_str(), mapid); SendTransferAborted(mapid, TRANSFER_ABORT_MAP_NOT_ALLOWED); return false; } @@ -2485,17 +2485,18 @@ void Player::RemoveFromWorld() sBattlefieldMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); } - ///- Do not add/remove the player from the object storage - ///- It will crash when updating the ObjectAccessor - ///- The player should only be removed when logging out - Unit::RemoveFromWorld(); - + // Remove items from world before self - player must be found in Item::RemoveFromObjectUpdate for (uint8 i = PLAYER_SLOT_START; i < PLAYER_SLOT_END; ++i) { if (m_items[i]) m_items[i]->RemoveFromWorld(); } + ///- Do not add/remove the player from the object storage + ///- It will crash when updating the ObjectAccessor + ///- The player should only be removed when logging out + Unit::RemoveFromWorld(); + for (ItemMap::iterator iter = mMitems.begin(); iter != mMitems.end(); ++iter) iter->second->RemoveFromWorld(); @@ -2806,7 +2807,7 @@ GameObject* Player::GetGameObjectIfCanInteractWith(ObjectGuid guid, GameobjectTy return go; TC_LOG_DEBUG("maps", "GetGameObjectIfCanInteractWith: GameObject '%s' [GUID: %u] is too far away from player %s [GUID: %u] to be used by him (distance=%f, maximal 10 is allowed)", go->GetGOInfo()->name.c_str(), - go->GetGUIDLow(), GetName().c_str(), GetGUIDLow(), go->GetDistance(this)); + go->GetGUID().GetCounter(), GetName().c_str(), GetGUID().GetCounter(), go->GetDistance(this)); } } @@ -4679,7 +4680,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe { do { - if (Player* pFriend = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, 0, (*resultFriends)[0].GetUInt32()))) + if (Player* pFriend = ObjectAccessor::FindPlayer(ObjectGuid(HighGuid::Player, 0, (*resultFriends)[0].GetUInt32()))) { pFriend->GetSocial()->RemoveFromSocialList(guid, false); sSocialMgr->SendFriendStatus(pFriend, FRIEND_REMOVED, guid, false); @@ -4899,7 +4900,7 @@ void Player::DeleteOldCharacters(uint32 keepDays) do { Field* fields = result->Fetch(); - Player::DeleteFromDB(ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()), fields[1].GetUInt32(), true, true); + Player::DeleteFromDB(ObjectGuid(HighGuid::Player, fields[0].GetUInt32()), fields[1].GetUInt32(), true, true); } while (result->NextRow()); } @@ -4944,7 +4945,7 @@ void Player::BuildPlayerRepop() // the player cannot have a corpse already, only bones which are not returned by GetCorpse if (GetCorpse()) { - TC_LOG_ERROR("entities.player", "BuildPlayerRepop: player %s(%d) already has a corpse", GetName().c_str(), GetGUIDLow()); + TC_LOG_ERROR("entities.player", "BuildPlayerRepop: player %s(%d) already has a corpse", GetName().c_str(), GetGUID().GetCounter()); return; } @@ -4953,7 +4954,7 @@ void Player::BuildPlayerRepop() Corpse* corpse = GetCorpse(); if (!corpse) { - TC_LOG_ERROR("entities.player", "Error creating corpse for Player %s [%u]", GetName().c_str(), GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Error creating corpse for Player %s [%u]", GetName().c_str(), GetGUID().GetCounter()); return; } GetMap()->AddToMap(corpse); @@ -5102,7 +5103,7 @@ void Player::CreateCorpse() Corpse* corpse = new Corpse((m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH) ? CORPSE_RESURRECTABLE_PVP : CORPSE_RESURRECTABLE_PVE); SetPvPDeath(false); - if (!corpse->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_CORPSE), this)) + if (!corpse->Create(GetMap()->GenerateLowGuid(), this)) { delete corpse; return; @@ -6521,20 +6522,20 @@ void Player::SendActionButtons(uint32 state) const } GetSession()->SendPacket(&data); - TC_LOG_DEBUG("network", "SMSG_ACTION_BUTTONS sent '%u' spec '%u' Sent", GetGUIDLow(), m_activeSpec); + TC_LOG_DEBUG("network", "SMSG_ACTION_BUTTONS sent '%u' spec '%u' Sent", GetGUID().GetCounter(), m_activeSpec); } bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) { if (button >= MAX_ACTION_BUTTONS) { - TC_LOG_DEBUG("entities.player", "Action %u not added into button %u for player %s (GUID: %u): button must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTONS ); + TC_LOG_DEBUG("entities.player", "Action %u not added into button %u for player %s (GUID: %u): button must be < %u", action, button, GetName().c_str(), GetGUID().GetCounter(), MAX_ACTION_BUTTONS ); return false; } if (action >= MAX_ACTION_BUTTON_ACTION_VALUE) { - TC_LOG_DEBUG("entities.player", "Action %u not added into button %u for player %s (GUID: %u): action must be < %u", action, button, GetName().c_str(), GetGUIDLow(), MAX_ACTION_BUTTON_ACTION_VALUE); + TC_LOG_DEBUG("entities.player", "Action %u not added into button %u for player %s (GUID: %u): action must be < %u", action, button, GetName().c_str(), GetGUID().GetCounter(), MAX_ACTION_BUTTON_ACTION_VALUE); return false; } @@ -6543,20 +6544,20 @@ bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) case ACTION_BUTTON_SPELL: if (!sSpellMgr->GetSpellInfo(action)) { - TC_LOG_DEBUG("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): spell not exist", action, button, GetName().c_str(), GetGUIDLow()); + TC_LOG_DEBUG("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): spell not exist", action, button, GetName().c_str(), GetGUID().GetCounter()); return false; } if (!HasSpell(action)) { - TC_LOG_DEBUG("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): player don't known this spell", action, button, GetName().c_str(), GetGUIDLow()); + TC_LOG_DEBUG("entities.player", "Spell action %u not added into button %u for player %s (GUID: %u): player don't known this spell", action, button, GetName().c_str(), GetGUID().GetCounter()); return false; } break; case ACTION_BUTTON_ITEM: if (!sObjectMgr->GetItemTemplate(action)) { - TC_LOG_DEBUG("entities.player", "Item action %u not added into button %u for player %s (GUID: %u): item not exist", action, button, GetName().c_str(), GetGUIDLow()); + TC_LOG_DEBUG("entities.player", "Item action %u not added into button %u for player %s (GUID: %u): item not exist", action, button, GetName().c_str(), GetGUID().GetCounter()); return false; } break; @@ -6584,7 +6585,7 @@ ActionButton* Player::addActionButton(uint8 button, uint32 action, uint8 type) // set data and update to CHANGED if not NEW ab.SetActionAndType(action, ActionButtonType(type)); - TC_LOG_DEBUG("entities.player", "Player '%u' Added Action '%u' (type %u) to Button '%u'", GetGUIDLow(), action, type, button); + TC_LOG_DEBUG("entities.player", "Player '%u' Added Action '%u' (type %u) to Button '%u'", GetGUID().GetCounter(), action, type, button); return &ab; } @@ -6599,7 +6600,7 @@ void Player::removeActionButton(uint8 button) else buttonItr->second.uState = ACTIONBUTTON_DELETED; // saved, will deleted at next save - TC_LOG_DEBUG("entities.player", "Action Button '%u' Removed from Player '%u'", button, GetGUIDLow()); + TC_LOG_DEBUG("entities.player", "Action Button '%u' Removed from Player '%u'", button, GetGUID().GetCounter()); } ActionButton const* Player::GetActionButton(uint8 button) @@ -6733,7 +6734,7 @@ void Player::CheckAreaExploreAndOutdoor() AreaTableEntry const* areaEntry = GetAreaEntryByAreaFlagAndMap(areaFlag, GetMapId()); if (!areaEntry) { - TC_LOG_ERROR("entities.player", "Player %u discovered unknown area (x: %f y: %f z: %f map: %u", GetGUIDLow(), GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId()); + TC_LOG_ERROR("entities.player", "Player %u discovered unknown area (x: %f y: %f z: %f map: %u", GetGUID().GetCounter(), GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId()); return; } @@ -6768,7 +6769,7 @@ void Player::CheckAreaExploreAndOutdoor() GiveXP(XP, NULL); SendExplorationExperience(area, XP); } - TC_LOG_DEBUG("entities.player", "Player %u discovered a new area: %u", GetGUIDLow(), area); + TC_LOG_DEBUG("entities.player", "Player %u discovered a new area: %u", GetGUID().GetCounter(), area); } } } @@ -7198,7 +7199,7 @@ void Player::ModifyHonorPoints(int32 value, SQLTransaction trans) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_HONOR_POINTS); stmt->setUInt32(0, newValue); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(1, GetGUID().GetCounter()); trans->Append(stmt); } } @@ -7214,7 +7215,7 @@ void Player::ModifyArenaPoints(int32 value, SQLTransaction trans) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ARENA_POINTS); stmt->setUInt32(0, newValue); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(1, GetGUID().GetCounter()); trans->Append(stmt); } } @@ -7619,7 +7620,7 @@ void Player::_ApplyItemMods(Item* item, uint8 slot, bool apply) if (item->IsBroken()) return; - TC_LOG_DEBUG("entities.player.items", "applying mods for item %u ", item->GetGUIDLow()); + TC_LOG_DEBUG("entities.player.items", "applying mods for item %u ", item->GetGUID().GetCounter()); uint8 attacktype = Player::GetAttackBySlot(slot); @@ -8278,7 +8279,7 @@ void Player::CastItemCombatSpell(Unit* target, WeaponAttackType attType, uint32 if (!spellInfo) { TC_LOG_ERROR("entities.player.items", "Player::CastItemCombatSpell(GUID: %u, name: %s, enchant: %i): unknown spell %i is cast, ignoring...", - GetGUIDLow(), GetName().c_str(), pEnchant->ID, pEnchant->spellid[s]); + GetGUID().GetCounter(), GetName().c_str(), pEnchant->ID, pEnchant->spellid[s]); continue; } @@ -9632,7 +9633,7 @@ uint32 Player::GetXPRestBonus(uint32 xp) SetRestBonus(GetRestBonus() - rested_bonus); - TC_LOG_DEBUG("entities.player", "GetXPRestBonus: Player %s (%u) gain %u xp (+%u Rested Bonus). Rested points=%f", GetName().c_str(), GetGUIDLow(), xp+rested_bonus, rested_bonus, GetRestBonus()); + TC_LOG_DEBUG("entities.player", "GetXPRestBonus: Player %s (%u) gain %u xp (+%u Rested Bonus). Rested points=%f", GetName().c_str(), GetGUID().GetCounter(), xp+rested_bonus, rested_bonus, GetRestBonus()); return rested_bonus; } @@ -9664,7 +9665,7 @@ void Player::ResetPetTalents() CharmInfo* charmInfo = pet->GetCharmInfo(); if (!charmInfo) { - TC_LOG_ERROR("entities.player", "Object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUIDLow(), pet->GetTypeId()); + TC_LOG_ERROR("entities.player", "Object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUID().GetCounter(), pet->GetTypeId()); return; } pet->resetTalents(); @@ -11623,7 +11624,7 @@ InventoryResult Player::CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec &dest if (pItemslot >= CURRENCYTOKEN_SLOT_START && pItemslot < CURRENCYTOKEN_SLOT_END) { TC_LOG_ERROR("entities.player", "Possible hacking attempt: Player %s [guid: %u] tried to move token [guid: %u, entry: %u] out of the currency bag!", - GetName().c_str(), GetGUIDLow(), pItem->GetGUIDLow(), pProto->ItemId); + GetName().c_str(), GetGUID().GetCounter(), pItem->GetGUID().GetCounter(), pProto->ItemId); return EQUIP_ERR_ITEMS_CANT_BE_SWAPPED; } @@ -12060,7 +12061,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& dest, uint32 item, bool update ss << ' ' << *itr; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_BOP_TRADE); - stmt->setUInt32(0, pItem->GetGUIDLow()); + stmt->setUInt32(0, pItem->GetGUID().GetCounter()); stmt->setString(1, ss.str()); CharacterDatabase.Execute(stmt); } @@ -12101,7 +12102,7 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool uint8 bag = pos >> 8; uint8 slot = pos & 255; - TC_LOG_DEBUG("entities.player.items", "STORAGE: StoreItem bag = %u, slot = %u, item = %u, count = %u, guid = %u", bag, slot, pItem->GetEntry(), count, pItem->GetGUIDLow()); + TC_LOG_DEBUG("entities.player.items", "STORAGE: StoreItem bag = %u, slot = %u, item = %u, count = %u, guid = %u", bag, slot, pItem->GetEntry(), count, pItem->GetGUID().GetCounter()); Item* pItem2 = GetItemByPos(bag, slot); @@ -12527,7 +12528,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT); - stmt->setUInt32(0, pItem->GetGUIDLow()); + stmt->setUInt32(0, pItem->GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); } @@ -12893,7 +12894,7 @@ void Player::DestroyItemCount(Item* pItem, uint32 &count, bool update) if (!pItem) return; - TC_LOG_DEBUG("entities.player.items", "STORAGE: DestroyItemCount item (GUID: %u, Entry: %u) count = %u", pItem->GetGUIDLow(), pItem->GetEntry(), count); + TC_LOG_DEBUG("entities.player.items", "STORAGE: DestroyItemCount item (GUID: %u, Entry: %u) count = %u", pItem->GetGUID().GetCounter(), pItem->GetEntry(), count); if (pItem->GetCount() <= count) { @@ -14248,7 +14249,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool VendorItemData const* vendorItems = creature->GetVendorItems(); if (!vendorItems || vendorItems->Empty()) { - TC_LOG_ERROR("sql.sql", "Creature %s (Entry: %u GUID: %u DB GUID: %u) has UNIT_NPC_FLAG_VENDOR set but has an empty trading item list.", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUIDLow(), creature->GetDBTableGUIDLow()); + TC_LOG_ERROR("sql.sql", "Creature %s (Entry: %u GUID: %u DB GUID: %u) has UNIT_NPC_FLAG_VENDOR set but has an empty trading item list.", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUID().GetCounter(), creature->GetSpawnId()); canTalk = false; } break; @@ -14283,7 +14284,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool case GOSSIP_OPTION_TRAINER: if (getClass() != creature->GetCreatureTemplate()->trainer_class && creature->GetCreatureTemplate()->trainer_type == TRAINER_TYPE_CLASS) TC_LOG_ERROR("sql.sql", "GOSSIP_OPTION_TRAINER:: Player %s (GUID: %u) request wrong gossip menu: %u with wrong class: %u at Creature: %s (Entry: %u, Trainer Class: %u)", - GetName().c_str(), GetGUIDLow(), menu->GetGossipMenu().GetMenuId(), getClass(), creature->GetName().c_str(), creature->GetEntry(), creature->GetCreatureTemplate()->trainer_class); + GetName().c_str(), GetGUID().GetCounter(), menu->GetGossipMenu().GetMenuId(), getClass(), creature->GetName().c_str(), creature->GetEntry(), creature->GetCreatureTemplate()->trainer_class); // no break; case GOSSIP_OPTION_GOSSIP: case GOSSIP_OPTION_SPIRITGUIDE: @@ -14411,7 +14412,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men { if (gossipOptionId > GOSSIP_OPTION_QUESTGIVER) { - TC_LOG_ERROR("entities.player", "Player guid %u request invalid gossip option for GameObject entry %u", GetGUIDLow(), source->GetEntry()); + TC_LOG_ERROR("entities.player", "Player guid %u request invalid gossip option for GameObject entry %u", GetGUID().GetCounter(), source->GetEntry()); return; } } @@ -14444,7 +14445,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men break; } case GOSSIP_OPTION_OUTDOORPVP: - sOutdoorPvPMgr->HandleGossipOption(this, source->GetGUID(), gossipListId); + sOutdoorPvPMgr->HandleGossipOption(this, source->ToCreature(), gossipListId); break; case GOSSIP_OPTION_SPIRITHEALER: if (isDead()) @@ -14515,7 +14516,7 @@ void Player::OnGossipSelect(WorldObject* source, uint32 gossipListId, uint32 men if (bgTypeId == BATTLEGROUND_TYPE_NONE) { - TC_LOG_ERROR("entities.player", "a user (guid %u) requested battlegroundlist from a npc who is no battlemaster", GetGUIDLow()); + TC_LOG_ERROR("entities.player", "a user (guid %u) requested battlegroundlist from a npc who is no battlemaster", GetGUID().GetCounter()); return; } @@ -15092,7 +15093,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver) // prepare Quest Tracker datas PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_QUEST_TRACK); stmt->setUInt32(0, quest_id); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(1, GetGUID().GetCounter()); stmt->setString(2, GitRevision::GetHash()); stmt->setString(3, GitRevision::GetDate()); @@ -15125,7 +15126,7 @@ void Player::CompleteQuest(uint32 quest_id) // prepare Quest Tracker datas PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME); stmt->setUInt32(0, quest_id); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(1, GetGUID().GetCounter()); // add to Quest Tracker CharacterDatabase.Execute(stmt); @@ -16868,7 +16869,7 @@ bool Player::HasPvPForcingQuest() const void Player::Initialize(uint32 guid) { - Object::_Create(guid, 0, HIGHGUID_PLAYER); + Object::_Create(guid, 0, HighGuid::Player); } void Player::_LoadDeclinedNames(PreparedQueryResult result) @@ -17012,7 +17013,7 @@ void Player::SetHomebind(WorldLocation const& loc, uint32 areaId) stmt->setFloat (2, m_homebindX); stmt->setFloat (3, m_homebindY); stmt->setFloat (4, m_homebindZ); - stmt->setUInt32(5, GetGUIDLow()); + stmt->setUInt32(5, GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); } @@ -17077,7 +17078,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) return false; } - Object::_Create(guid.GetCounter(), 0, HIGHGUID_PLAYER); + Object::_Create(guid.GetCounter(), 0, HighGuid::Player); m_name = fields[2].GetString(); @@ -17299,11 +17300,11 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) // currently we do not support transport in bg else if (transLowGUID) { - ObjectGuid transGUID(HIGHGUID_MO_TRANSPORT, transLowGUID); + ObjectGuid transGUID(HighGuid::Mo_Transport, transLowGUID); Transport* transport = NULL; - if (GameObject* go = HashMapHolder::Find(transGUID)) - transport = go->ToTransport(); + if (Transport* go = HashMapHolder::Find(transGUID)) + transport = go; if (transport) { @@ -17360,12 +17361,12 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (!nodeEntry) // don't know taxi start node, to homebind { - TC_LOG_ERROR("entities.player", "Character %u have wrong data in taxi destination list, teleport to homebind.", GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Character %u have wrong data in taxi destination list, teleport to homebind.", GetGUID().GetCounter()); RelocateToHomebind(); } else // have start node, to it { - TC_LOG_ERROR("entities.player", "Character %u have too short taxi destination list, teleport to original node.", GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Character %u have too short taxi destination list, teleport to original node.", GetGUID().GetCounter()); mapId = nodeEntry->map_id; Relocate(nodeEntry->x, nodeEntry->y, nodeEntry->z, 0.0f); } @@ -17507,7 +17508,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (HasAtLoginFlag(AT_LOGIN_RENAME)) { - TC_LOG_ERROR("entities.player", "Player (GUID: %u) tried to login while forced to rename, can't load.'", GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Player (GUID: %u) tried to login while forced to rename, can't load.'", GetGUID().GetCounter()); return false; } @@ -17584,7 +17585,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (m_specsCount > MAX_TALENT_SPECS || m_activeSpec > MAX_TALENT_SPEC || m_specsCount < MIN_TALENT_SPECS) { m_activeSpec = 0; - TC_LOG_ERROR("entities.player", "Player %s(GUID: %u) has SpecCount = %u and ActiveSpec = %u.", GetName().c_str(), GetGUIDLow(), m_specsCount, m_activeSpec); + TC_LOG_ERROR("entities.player", "Player %s(GUID: %u) has SpecCount = %u and ActiveSpec = %u.", GetName().c_str(), GetGUID().GetCounter(), m_specsCount, m_activeSpec); } _LoadTalents(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_TALENTS)); @@ -17624,7 +17625,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) // unread mails and next delivery time, actual mails not loaded _LoadMailInit(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_COUNT), holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_DATE)); - m_social = sSocialMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST), GetGUIDLow()); + m_social = sSocialMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST), GetGUID().GetCounter()); // check PLAYER_CHOSEN_TITLE compatibility with PLAYER__FIELD_KNOWN_TITLES // note: PLAYER__FIELD_KNOWN_TITLES updated at quest status loaded @@ -17805,12 +17806,12 @@ void Player::_LoadActions(PreparedQueryResult result) void Player::_LoadAuras(PreparedQueryResult result, uint32 timediff) { - TC_LOG_DEBUG("entities.player.loading", "Loading auras for player %u", GetGUIDLow()); + TC_LOG_DEBUG("entities.player.loading", "Loading auras for player %u", GetGUID().GetCounter()); /* 0 1 2 3 4 5 6 7 8 9 10 QueryResult* result = CharacterDatabase.PQuery("SELECT casterGuid, spell, effectMask, recalculateMask, stackCount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2, 11 12 13 - maxDuration, remainTime, remainCharges FROM character_aura WHERE guid = '%u'", GetGUIDLow()); + maxDuration, remainTime, remainCharges FROM character_aura WHERE guid = '%u'", GetGUID().GetCounter()); */ if (result) @@ -17925,7 +17926,7 @@ void Player::LoadCorpse() void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) { - //QueryResult* result = CharacterDatabase.PQuery("SELECT data, text, bag, slot, item, item_template FROM character_inventory JOIN item_instance ON character_inventory.item = item_instance.guid WHERE character_inventory.guid = '%u' ORDER BY bag, slot", GetGUIDLow()); + //QueryResult* result = CharacterDatabase.PQuery("SELECT data, text, bag, slot, item, item_template FROM character_inventory JOIN item_instance ON character_inventory.item = item_instance.guid WHERE character_inventory.guid = '%u' ORDER BY bag, slot", GetGUID().GetCounter()); //NOTE: the "order by `bag`" is important because it makes sure //the bagMap is filled before items in the bags are loaded //NOTE2: the "order by `slot`" is needed because mainhand weapons are (wrongly?) @@ -17984,12 +17985,12 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) { if (IsBagPos(item->GetPos())) if (Bag* pBag = item->ToBag()) - bagMap[item->GetGUIDLow()] = pBag; + bagMap[item->GetGUID().GetCounter()] = pBag; } else if (IsBagPos(item->GetPos())) if (item->IsBag()) - invalidBagMap[item->GetGUIDLow()] = item; + invalidBagMap[item->GetGUID().GetCounter()] = item; } else { @@ -18012,7 +18013,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) else { TC_LOG_ERROR("entities.player", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) which doesnt have a valid bag (Bag GUID: %u, slot: %u). Possible cheat?", - GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry(), bagGuid, slot); + GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry(), bagGuid, slot); item->DeleteFromInventoryDB(trans); delete item; continue; @@ -18026,7 +18027,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) else { TC_LOG_ERROR("entities.player", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) which can't be loaded into inventory (Bag GUID: %u, slot: %u) by reason %u. Item will be sent by mail.", - GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry(), bagGuid, slot, err); + GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry(), bagGuid, slot, err); item->DeleteFromInventoryDB(trans); problematicItems.push_back(item); } @@ -18071,14 +18072,14 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F if (IsAlive() && item->IsLimitedToAnotherMapOrZone(GetMapId(), zoneId)) { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s', map: %u) has item (GUID: %u, entry: %u) limited to another map (%u). Deleting item.", - GetGUIDLow(), GetName().c_str(), GetMapId(), item->GetGUIDLow(), item->GetEntry(), zoneId); + GetGUID().GetCounter(), GetName().c_str(), GetMapId(), item->GetGUID().GetCounter(), item->GetEntry(), zoneId); remove = true; } // "Conjured items disappear if you are logged out for more than 15 minutes" else if (timeDiff > 15 * MINUTE && proto->Flags & ITEM_PROTO_FLAG_CONJURED) { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s', diff: %u) has conjured item (GUID: %u, entry: %u) with expired lifetime (15 minutes). Deleting item.", - GetGUIDLow(), GetName().c_str(), timeDiff, item->GetGUIDLow(), item->GetEntry()); + GetGUID().GetCounter(), GetName().c_str(), timeDiff, item->GetGUID().GetCounter(), item->GetEntry()); remove = true; } else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_REFUNDABLE)) @@ -18086,10 +18087,10 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F if (item->GetPlayedTime() > (2 * HOUR)) { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) with expired refund time (%u). Deleting refund data and removing refundable flag.", - GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry(), item->GetPlayedTime()); + GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry(), item->GetPlayedTime()); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_REFUND_INSTANCE); - stmt->setUInt32(0, item->GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); trans->Append(stmt); item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_REFUNDABLE); @@ -18097,8 +18098,8 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F else { stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_REFUNDS); - stmt->setUInt32(0, item->GetGUIDLow()); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); + stmt->setUInt32(1, GetGUID().GetCounter()); if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) { item->SetRefundRecipient((*result)[0].GetUInt32()); @@ -18109,7 +18110,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F else { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) with refundable flags, but without data in item_refund_instance. Removing flag.", - GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry()); + GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry()); item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_REFUNDABLE); } } @@ -18117,7 +18118,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_BOP_TRADE); - stmt->setUInt32(0, item->GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) { std::string strGUID = (*result)[0].GetString(); @@ -18137,7 +18138,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F else { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (GUID: %u, name: '%s') has item (GUID: %u, entry: %u) with ITEM_FLAG_BOP_TRADEABLE flag, but without data in item_soulbound_trade_data. Removing flag.", - GetGUIDLow(), GetName().c_str(), item->GetGUIDLow(), item->GetEntry()); + GetGUID().GetCounter(), GetName().c_str(), item->GetGUID().GetCounter(), item->GetEntry()); item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_BOP_TRADEABLE); } } @@ -18159,7 +18160,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F else { TC_LOG_ERROR("entities.player", "Player::_LoadInventory: player (GUID: %u, name: '%s') has broken item (GUID: %u, entry: %u) in inventory. Deleting item.", - GetGUIDLow(), GetName().c_str(), itemGuid, itemEntry); + GetGUID().GetCounter(), GetName().c_str(), itemGuid, itemEntry); remove = true; } // Remove item from inventory if necessary @@ -18174,7 +18175,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F else { TC_LOG_ERROR("entities.player", "Player::_LoadInventory: player (GUID: %u, name: '%s') has unknown item (entry: %u) in inventory. Deleting item.", - GetGUIDLow(), GetName().c_str(), itemEntry); + GetGUID().GetCounter(), GetName().c_str(), itemEntry); Item::DeleteFromInventoryDB(trans, itemGuid); Item::DeleteFromDB(trans, itemGuid); } @@ -18204,7 +18205,7 @@ void Player::_LoadMailedItems(Mail* mail) if (!proto) { - TC_LOG_ERROR("entities.player", "Player %u has unknown item_template (ProtoType) in mailed items(GUID: %u template: %u) in mail (%u), deleted.", GetGUIDLow(), itemGuid, itemTemplate, mail->messageID); + TC_LOG_ERROR("entities.player", "Player %u has unknown item_template (ProtoType) in mailed items(GUID: %u template: %u) in mail (%u), deleted.", GetGUID().GetCounter(), itemGuid, itemTemplate, mail->messageID); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_INVALID_MAIL_ITEM); stmt->setUInt32(0, itemGuid); @@ -18218,7 +18219,7 @@ void Player::_LoadMailedItems(Mail* mail) Item* item = NewItemOrBag(proto); - if (!item->LoadFromDB(itemGuid, ObjectGuid(HIGHGUID_PLAYER, fields[13].GetUInt32()), fields, itemTemplate)) + if (!item->LoadFromDB(itemGuid, ObjectGuid(HighGuid::Player, fields[13].GetUInt32()), fields, itemTemplate)) { TC_LOG_ERROR("entities.player", "Player::_LoadMailedItems - Item in mail (%u) doesn't exist !!!! - item guid: %u, deleted from mail", mail->messageID, itemGuid); @@ -18256,7 +18257,7 @@ void Player::_LoadMail() m_mail.clear(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (result) @@ -18318,7 +18319,7 @@ void Player::_LoadQuestStatus(PreparedQueryResult result) //// 0 1 2 3 4 5 6 7 8 9 10 //QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, itemcount1, itemcount2, itemcount3, // 11 12 - // itemcount4, playercount FROM character_queststatus WHERE guid = '%u'", GetGUIDLow()); + // itemcount4, playercount FROM character_queststatus WHERE guid = '%u'", GetGUID().GetCounter()); if (result) { @@ -18341,7 +18342,7 @@ void Player::_LoadQuestStatus(PreparedQueryResult result) { questStatusData.Status = QUEST_STATUS_INCOMPLETE; TC_LOG_ERROR("entities.player", "Player %s (GUID: %u) has invalid quest %d status (%u), replaced by QUEST_STATUS_INCOMPLETE(3).", - GetName().c_str(), GetGUIDLow(), quest_id, qstatus); + GetName().c_str(), GetGUID().GetCounter(), quest_id, qstatus); } questStatusData.Explored = (fields[2].GetUInt8() > 0); @@ -18390,7 +18391,7 @@ void Player::_LoadQuestStatus(PreparedQueryResult result) ++slot; } - TC_LOG_DEBUG("entities.player.loading", "Quest status is {%u} for quest {%u} for player (GUID: %u)", questStatusData.Status, quest_id, GetGUIDLow()); + TC_LOG_DEBUG("entities.player.loading", "Quest status is {%u} for quest {%u} for player (GUID: %u)", questStatusData.Status, quest_id, GetGUID().GetCounter()); } } while (result->NextRow()); @@ -18443,7 +18444,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result) m_DFQuests.clear(); - //QueryResult* result = CharacterDatabase.PQuery("SELECT quest, time FROM character_queststatus_daily WHERE guid = '%u'", GetGUIDLow()); + //QueryResult* result = CharacterDatabase.PQuery("SELECT quest, time FROM character_queststatus_daily WHERE guid = '%u'", GetGUID().GetCounter()); if (result) { @@ -18464,7 +18465,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result) if (quest_daily_idx >= PLAYER_MAX_DAILY_QUESTS) // max amount with exist data in query { - TC_LOG_ERROR("entities.player", "Player (GUID: %u) have more 25 daily quest records in `charcter_queststatus_daily`", GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Player (GUID: %u) have more 25 daily quest records in `charcter_queststatus_daily`", GetGUID().GetCounter()); break; } @@ -18480,7 +18481,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result) SetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx, quest_id); ++quest_daily_idx; - TC_LOG_DEBUG("entities.player.loading", "Daily quest (%u) cooldown for player (GUID: %u)", quest_id, GetGUIDLow()); + TC_LOG_DEBUG("entities.player.loading", "Daily quest (%u) cooldown for player (GUID: %u)", quest_id, GetGUID().GetCounter()); } while (result->NextRow()); } @@ -18503,7 +18504,7 @@ void Player::_LoadWeeklyQuestStatus(PreparedQueryResult result) continue; m_weeklyquests.insert(quest_id); - TC_LOG_DEBUG("entities.player.loading", "Weekly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUIDLow()); + TC_LOG_DEBUG("entities.player.loading", "Weekly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUID().GetCounter()); } while (result->NextRow()); } @@ -18527,7 +18528,7 @@ void Player::_LoadSeasonalQuestStatus(PreparedQueryResult result) continue; m_seasonalquests[event_id].insert(quest_id); - TC_LOG_DEBUG("entities.player.loading", "Seasonal quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUIDLow()); + TC_LOG_DEBUG("entities.player.loading", "Seasonal quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUID().GetCounter()); } while (result->NextRow()); } @@ -18550,7 +18551,7 @@ void Player::_LoadMonthlyQuestStatus(PreparedQueryResult result) continue; m_monthlyquests.insert(quest_id); - TC_LOG_DEBUG("entities.player.loading", "Monthly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUIDLow()); + TC_LOG_DEBUG("entities.player.loading", "Monthly quest {%u} cooldown for player (GUID: %u)", quest_id, GetGUID().GetCounter()); } while (result->NextRow()); } @@ -18560,7 +18561,7 @@ void Player::_LoadMonthlyQuestStatus(PreparedQueryResult result) void Player::_LoadSpells(PreparedQueryResult result) { - //QueryResult* result = CharacterDatabase.PQuery("SELECT spell, active, disabled FROM character_spell WHERE guid = '%u'", GetGUIDLow()); + //QueryResult* result = CharacterDatabase.PQuery("SELECT spell, active, disabled FROM character_spell WHERE guid = '%u'", GetGUID().GetCounter()); if (result) { @@ -18572,7 +18573,7 @@ void Player::_LoadSpells(PreparedQueryResult result) void Player::_LoadGroup(PreparedQueryResult result) { - //QueryResult* result = CharacterDatabase.PQuery("SELECT guid FROM group_member WHERE memberGuid=%u", GetGUIDLow()); + //QueryResult* result = CharacterDatabase.PQuery("SELECT guid FROM group_member WHERE memberGuid=%u", GetGUID().GetCounter()); if (result) { if (Group* group = sGroupMgr->GetGroupByDbStoreId((*result)[0].GetUInt32())) @@ -18626,12 +18627,12 @@ void Player::_LoadBoundInstances(PreparedQueryResult result) if (!mapEntry || !mapEntry->IsDungeon()) { - TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed or not dungeon map %d (%s)", GetName().c_str(), GetGUIDLow(), mapId, mapname.c_str()); + TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed or not dungeon map %d (%s)", GetName().c_str(), GetGUID().GetCounter(), mapId, mapname.c_str()); deleteInstance = true; } else if (difficulty >= MAX_DIFFICULTY) { - TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u (%s)", GetName().c_str(), GetGUIDLow(), difficulty, mapId, mapname.c_str()); + TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u (%s)", GetName().c_str(), GetGUID().GetCounter(), difficulty, mapId, mapname.c_str()); deleteInstance = true; } else @@ -18639,12 +18640,12 @@ void Player::_LoadBoundInstances(PreparedQueryResult result) MapDifficulty const* mapDiff = GetMapDifficultyData(mapId, Difficulty(difficulty)); if (!mapDiff) { - TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u (%s)", GetName().c_str(), GetGUIDLow(), difficulty, mapId, mapname.c_str()); + TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) has bind to not existed difficulty %d instance for map %u (%s)", GetName().c_str(), GetGUID().GetCounter(), difficulty, mapId, mapname.c_str()); deleteInstance = true; } else if (!perm && group) { - TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) is in group %d but has a non-permanent character bind to map %d (%s), %d, %d", GetName().c_str(), GetGUIDLow(), group->GetLowGUID(), mapId, mapname.c_str(), instanceId, difficulty); + TC_LOG_ERROR("entities.player", "_LoadBoundInstances: player %s(%d) is in group %d but has a non-permanent character bind to map %d (%s), %d, %d", GetName().c_str(), GetGUID().GetCounter(), group->GetLowGUID(), mapId, mapname.c_str(), instanceId, difficulty); deleteInstance = true; } } @@ -18653,7 +18654,7 @@ void Player::_LoadBoundInstances(PreparedQueryResult result) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INSTANCE_BY_INSTANCE_GUID); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, instanceId); CharacterDatabase.Execute(stmt); @@ -18709,7 +18710,7 @@ void Player::UnbindInstance(BoundInstancesMap::iterator &itr, Difficulty difficu { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INSTANCE_BY_INSTANCE_GUID); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, itr->second.save->GetInstanceId()); CharacterDatabase.Execute(stmt); @@ -18739,7 +18740,7 @@ InstancePlayerBind* Player::BindToInstance(InstanceSave* save, bool permanent, b stmt->setUInt32(0, save->GetInstanceId()); stmt->setBool(1, permanent); - stmt->setUInt32(2, GetGUIDLow()); + stmt->setUInt32(2, GetGUID().GetCounter()); stmt->setUInt32(3, bind.save->GetInstanceId()); CharacterDatabase.Execute(stmt); @@ -18749,7 +18750,7 @@ InstancePlayerBind* Player::BindToInstance(InstanceSave* save, bool permanent, b { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_INSTANCE); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, save->GetInstanceId()); stmt->setBool(2, permanent); @@ -18770,7 +18771,7 @@ InstancePlayerBind* Player::BindToInstance(InstanceSave* save, bool permanent, b bind.save = save; bind.perm = permanent; if (!load) - TC_LOG_DEBUG("maps", "Player::BindToInstance: %s(%d) is now bound to map %d, instance %d, difficulty %d", GetName().c_str(), GetGUIDLow(), save->GetMapId(), save->GetInstanceId(), save->GetDifficulty()); + TC_LOG_DEBUG("maps", "Player::BindToInstance: %s(%d) is now bound to map %d, instance %d, difficulty %d", GetName().c_str(), GetGUID().GetCounter(), save->GetMapId(), save->GetInstanceId(), save->GetDifficulty()); sScriptMgr->OnPlayerBindToInstance(this, save->GetDifficulty(), save->GetMapId(), permanent); return &bind; } @@ -19037,7 +19038,7 @@ bool Player::_LoadHomeBind(PreparedQueryResult result) else { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_HOMEBIND); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); } } @@ -19051,7 +19052,7 @@ bool Player::_LoadHomeBind(PreparedQueryResult result) m_homebindZ = info->positionZ; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_HOMEBIND); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt16(1, m_homebindMapId); stmt->setUInt16(2, m_homebindAreaId); stmt->setFloat (3, m_homebindX); @@ -19099,7 +19100,7 @@ void Player::SaveToDB(bool create /*=false*/) //! Insert query /// @todo: Filter out more redundant fields that can take their default value at player create stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER); - stmt->setUInt32(index++, GetGUIDLow()); + stmt->setUInt32(index++, GetGUID().GetCounter()); stmt->setUInt32(index++, GetSession()->GetAccountId()); stmt->setString(index++, GetName()); stmt->setUInt8(index++, getRace()); @@ -19124,7 +19125,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setFloat(index++, finiteAlways(GetTransOffsetO())); uint32 transLowGUID = 0; if (GetTransport()) - transLowGUID = GetTransport()->GetGUIDLow(); + transLowGUID = GetTransport()->GetGUID().GetCounter(); stmt->setUInt32(index++, transLowGUID); std::ostringstream ss; @@ -19244,7 +19245,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setFloat(index++, finiteAlways(GetTransOffsetO())); uint32 transLowGUID = 0; if (GetTransport()) - transLowGUID = GetTransport()->GetGUIDLow(); + transLowGUID = GetTransport()->GetGUID().GetCounter(); stmt->setUInt32(index++, transLowGUID); std::ostringstream ss; @@ -19324,7 +19325,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt8(index++, IsInWorld() && !GetSession()->PlayerLogout() ? 1 : 0); // Index - stmt->setUInt32(index++, GetGUIDLow()); + stmt->setUInt32(index++, GetGUID().GetCounter()); } SQLTransaction trans = CharacterDatabase.BeginTransaction(); @@ -19377,7 +19378,7 @@ void Player::SaveGoldToDB(SQLTransaction& trans) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_MONEY); stmt->setUInt32(0, GetMoney()); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(1, GetGUID().GetCounter()); trans->Append(stmt); } @@ -19391,7 +19392,7 @@ void Player::_SaveActions(SQLTransaction& trans) { case ACTIONBUTTON_NEW: stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACTION); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt8(1, m_activeSpec); stmt->setUInt8(2, itr->first); stmt->setUInt32(3, itr->second.GetAction()); @@ -19405,7 +19406,7 @@ void Player::_SaveActions(SQLTransaction& trans) stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ACTION); stmt->setUInt32(0, itr->second.GetAction()); stmt->setUInt8(1, uint8(itr->second.GetType())); - stmt->setUInt32(2, GetGUIDLow()); + stmt->setUInt32(2, GetGUID().GetCounter()); stmt->setUInt8(3, itr->first); stmt->setUInt8(4, m_activeSpec); trans->Append(stmt); @@ -19415,7 +19416,7 @@ void Player::_SaveActions(SQLTransaction& trans) break; case ACTIONBUTTON_DELETED: stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACTION_BY_BUTTON_SPEC); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt8(1, itr->first); stmt->setUInt8(2, m_activeSpec); trans->Append(stmt); @@ -19432,7 +19433,7 @@ void Player::_SaveActions(SQLTransaction& trans) void Player::_SaveAuras(SQLTransaction& trans) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_AURA); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); for (AuraMap::const_iterator itr = m_ownedAuras.begin(); itr != m_ownedAuras.end(); ++itr) @@ -19465,7 +19466,7 @@ void Player::_SaveAuras(SQLTransaction& trans) uint8 index = 0; stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_AURA); - stmt->setUInt32(index++, GetGUIDLow()); + stmt->setUInt32(index++, GetGUID().GetCounter()); stmt->setUInt64(index++, itr->second->GetCasterGUID().GetRawValue()); stmt->setUInt64(index++, itr->second->GetCastItemGUID().GetRawValue()); stmt->setUInt32(index++, itr->second->GetId()); @@ -19497,11 +19498,11 @@ void Player::_SaveInventory(SQLTransaction& trans) continue; stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INVENTORY_BY_ITEM); - stmt->setUInt32(0, item->GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); trans->Append(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE); - stmt->setUInt32(0, item->GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); trans->Append(stmt); m_items[i]->FSetState(ITEM_NEW); } @@ -19525,7 +19526,7 @@ void Player::_SaveInventory(SQLTransaction& trans) } else { - TC_LOG_ERROR("entities.player", "Can't find %s but is in refundable storage for player %u ! Removing.", itr->ToString().c_str(), GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Can't find %s but is in refundable storage for player %u ! Removing.", itr->ToString().c_str(), GetGUID().GetCounter()); m_refundableItems.erase(itr); } } @@ -19538,7 +19539,7 @@ void Player::_SaveInventory(SQLTransaction& trans) if (m_itemUpdateQueue.empty()) return; - uint32 lowGuid = GetGUIDLow(); + uint32 lowGuid = GetGUID().GetCounter(); for (size_t i = 0; i < m_itemUpdateQueue.size(); ++i) { Item* item = m_itemUpdateQueue[i]; @@ -19546,7 +19547,7 @@ void Player::_SaveInventory(SQLTransaction& trans) continue; Bag* container = item->GetContainer(); - uint32 bag_guid = container ? container->GetGUIDLow() : 0; + uint32 bag_guid = container ? container->GetGUID().GetCounter() : 0; if (item->GetState() != ITEM_REMOVED) { @@ -19555,8 +19556,8 @@ void Player::_SaveInventory(SQLTransaction& trans) { uint32 bagTestGUID = 0; if (Item* test2 = GetItemByPos(INVENTORY_SLOT_BAG_0, item->GetBagSlot())) - bagTestGUID = test2->GetGUIDLow(); - TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u (state %d) are incorrect, the player doesn't have an item at that position!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUIDLow(), (int32)item->GetState()); + bagTestGUID = test2->GetGUID().GetCounter(); + TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u (state %d) are incorrect, the player doesn't have an item at that position!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUID().GetCounter(), (int32)item->GetState()); // according to the test that was just performed nothing should be in this slot, delete stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INVENTORY_BY_BAG_SLOT); stmt->setUInt32(0, bagTestGUID); @@ -19572,7 +19573,7 @@ void Player::_SaveInventory(SQLTransaction& trans) } else if (test != item) { - TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u are incorrect, the item with guid %u is there instead!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUIDLow(), test->GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u are incorrect, the item with guid %u is there instead!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUID().GetCounter(), test->GetGUID().GetCounter()); // save all changes to the item... if (item->GetState() != ITEM_NEW) // only for existing items, no dupes item->SaveToDB(trans); @@ -19589,12 +19590,12 @@ void Player::_SaveInventory(SQLTransaction& trans) stmt->setUInt32(0, lowGuid); stmt->setUInt32(1, bag_guid); stmt->setUInt8 (2, item->GetSlot()); - stmt->setUInt32(3, item->GetGUIDLow()); + stmt->setUInt32(3, item->GetGUID().GetCounter()); trans->Append(stmt); break; case ITEM_REMOVED: stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INVENTORY_BY_ITEM); - stmt->setUInt32(0, item->GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); trans->Append(stmt); case ITEM_UNCHANGED: break; @@ -19701,7 +19702,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans) uint8 index = 0; stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CHAR_QUESTSTATUS); - stmt->setUInt32(index++, GetGUIDLow()); + stmt->setUInt32(index++, GetGUID().GetCounter()); stmt->setUInt32(index++, statusItr->first); stmt->setUInt8(index++, uint8(statusItr->second.Status)); stmt->setBool(index++, statusItr->second.Explored); @@ -19720,7 +19721,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans) else { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS_BY_QUEST); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, saveItr->first); trans->Append(stmt); } @@ -19733,7 +19734,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans) if (saveItr->second == QUEST_DEFAULT_SAVE_TYPE) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_QUESTSTATUS_REWARDED); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, saveItr->first); trans->Append(stmt); @@ -19741,7 +19742,7 @@ void Player::_SaveQuestStatus(SQLTransaction& trans) else if (saveItr->second == QUEST_FORCE_DELETE_SAVE_TYPE || !keepAbandoned) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS_REWARDED_BY_QUEST); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, saveItr->first); trans->Append(stmt); } @@ -19764,7 +19765,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans) // we don't need transactions here. PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_DAILY); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); for (uint32 quest_daily_idx = 0; quest_daily_idx < PLAYER_MAX_DAILY_QUESTS; ++quest_daily_idx) @@ -19772,7 +19773,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans) if (GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, GetUInt32Value(PLAYER_FIELD_DAILY_QUESTS_1+quest_daily_idx)); stmt->setUInt64(2, uint64(m_lastDailyQuestTime)); trans->Append(stmt); @@ -19784,7 +19785,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans) for (DFQuestsDoneList::iterator itr = m_DFQuests.begin(); itr != m_DFQuests.end(); ++itr) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, (*itr)); stmt->setUInt64(2, uint64(m_lastDailyQuestTime)); trans->Append(stmt); @@ -19799,7 +19800,7 @@ void Player::_SaveWeeklyQuestStatus(SQLTransaction& trans) // we don't need transactions here. PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_WEEKLY); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); for (QuestSet::const_iterator iter = m_weeklyquests.begin(); iter != m_weeklyquests.end(); ++iter) @@ -19807,7 +19808,7 @@ void Player::_SaveWeeklyQuestStatus(SQLTransaction& trans) uint32 questId = *iter; stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_WEEKLY); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, questId); trans->Append(stmt); } @@ -19822,7 +19823,7 @@ void Player::_SaveSeasonalQuestStatus(SQLTransaction& trans) // we don't need transactions here. PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_SEASONAL); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); for (SeasonalEventQuestMap::const_iterator iter = m_seasonalquests.begin(); iter != m_seasonalquests.end(); ++iter) @@ -19834,7 +19835,7 @@ void Player::_SaveSeasonalQuestStatus(SQLTransaction& trans) uint32 questId = *itr; stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_SEASONAL); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, questId); stmt->setUInt32(2, eventId); trans->Append(stmt); @@ -19851,7 +19852,7 @@ void Player::_SaveMonthlyQuestStatus(SQLTransaction& trans) // we don't need transactions here. PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_QUESTSTATUS_MONTHLY); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); for (QuestSet::const_iterator iter = m_monthlyquests.begin(); iter != m_monthlyquests.end(); ++iter) @@ -19859,7 +19860,7 @@ void Player::_SaveMonthlyQuestStatus(SQLTransaction& trans) uint32 questId = *iter; stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_MONTHLY); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, questId); trans->Append(stmt); } @@ -19882,7 +19883,7 @@ void Player::_SaveSkills(SQLTransaction& trans) if (itr->second.uState == SKILL_DELETED) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILL_BY_SKILL); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, itr->first); trans->Append(stmt); @@ -19898,7 +19899,7 @@ void Player::_SaveSkills(SQLTransaction& trans) { case SKILL_NEW: stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SKILLS); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt16(1, uint16(itr->first)); stmt->setUInt16(2, value); stmt->setUInt16(3, max); @@ -19909,7 +19910,7 @@ void Player::_SaveSkills(SQLTransaction& trans) stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_SKILLS); stmt->setUInt16(0, value); stmt->setUInt16(1, max); - stmt->setUInt32(2, GetGUIDLow()); + stmt->setUInt32(2, GetGUID().GetCounter()); stmt->setUInt16(3, uint16(itr->first)); trans->Append(stmt); @@ -19933,7 +19934,7 @@ void Player::_SaveSpells(SQLTransaction& trans) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_BY_SPELL); stmt->setUInt32(0, itr->first); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(1, GetGUID().GetCounter()); trans->Append(stmt); } @@ -19941,7 +19942,7 @@ void Player::_SaveSpells(SQLTransaction& trans) if (!itr->second->dependent && (itr->second->state == PLAYERSPELL_NEW || itr->second->state == PLAYERSPELL_CHANGED)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SPELL); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, itr->first); stmt->setBool(2, itr->second->active); stmt->setBool(3, itr->second->disabled); @@ -19972,13 +19973,13 @@ void Player::_SaveStats(SQLTransaction& trans) PreparedStatement* stmt = NULL; stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_STATS); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); uint8 index = 0; stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_STATS); - stmt->setUInt32(index++, GetGUIDLow()); + stmt->setUInt32(index++, GetGUID().GetCounter()); stmt->setUInt32(index++, GetMaxHealth()); for (uint8 i = 0; i < MAX_POWERS; ++i) @@ -20523,7 +20524,7 @@ void Player::AddMItem(Item* it) { ASSERT(it); //ASSERT deleted, because items can be added before loading - mMitems[it->GetGUIDLow()] = it; + mMitems[it->GetGUID().GetCounter()] = it; } bool Player::RemoveMItem(uint32 id) @@ -20942,8 +20943,8 @@ void Player::RemovePetitionsAndSigns(ObjectGuid guid, uint32 type) do // this part effectively does nothing, since the deletion / modification only takes place _after_ the PetitionQuery. Though I don't know if the result remains intact if I execute the delete query beforehand. { // and SendPetitionQueryOpcode reads data from the DB Field* fields = result->Fetch(); - ObjectGuid ownerguid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()); - ObjectGuid petitionguid = ObjectGuid(HIGHGUID_ITEM, fields[1].GetUInt32()); + ObjectGuid ownerguid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32()); + ObjectGuid petitionguid = ObjectGuid(HighGuid::Item, fields[1].GetUInt32()); // send update if charter owner in game Player* owner = ObjectAccessor::FindConnectedPlayer(ownerguid); @@ -21271,7 +21272,7 @@ void Player::ContinueTaxiFlight() if (!sourceNode) return; - TC_LOG_DEBUG("entities.unit", "WORLD: Restart character %u taxi flight", GetGUIDLow()); + TC_LOG_DEBUG("entities.unit", "WORLD: Restart character %u taxi flight", GetGUID().GetCounter()); uint32 mountDisplayId = sObjectMgr->GetTaxiMountDisplayId(sourceNode, GetTeam(), true); if (!mountDisplayId) @@ -21373,7 +21374,7 @@ void Player::InitDisplayIds() PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); if (!info) { - TC_LOG_ERROR("entities.player", "Player %u has incorrect race/class pair. Can't init display ids.", GetGUIDLow()); + TC_LOG_ERROR("entities.player", "Player %u has incorrect race/class pair. Can't init display ids.", GetGUID().GetCounter()); return; } @@ -21447,7 +21448,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c if (pProto->Flags & ITEM_PROTO_FLAG_REFUNDABLE && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1) { it->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_REFUNDABLE); - it->SetRefundRecipient(GetGUIDLow()); + it->SetRefundRecipient(GetGUID().GetCounter()); it->SetPaidMoney(price); it->SetPaidExtendedCost(crItem->ExtendedCost); it->SaveRefundDataToDB(); @@ -21681,7 +21682,7 @@ void Player::UpdateHomebindTime(uint32 time) data << uint32(m_HomebindTimer); data << uint32(1); GetSession()->SendPacket(&data); - TC_LOG_DEBUG("maps", "PLAYER: Player '%s' (GUID: %u) will be teleported to homebind in 60 seconds", GetName().c_str(), GetGUIDLow()); + TC_LOG_DEBUG("maps", "PLAYER: Player '%s' (GUID: %u) will be teleported to homebind in 60 seconds", GetName().c_str(), GetGUID().GetCounter()); } } @@ -22049,9 +22050,9 @@ void Player::ReportedAfkBy(Player* reporter) return; // check if player has 'Idle' or 'Inactive' debuff - if (m_bgData.bgAfkReporter.find(reporter->GetGUIDLow()) == m_bgData.bgAfkReporter.end() && !HasAura(43680) && !HasAura(43681) && reporter->CanReportAfkDueToLimit()) + if (m_bgData.bgAfkReporter.find(reporter->GetGUID().GetCounter()) == m_bgData.bgAfkReporter.end() && !HasAura(43680) && !HasAura(43681) && reporter->CanReportAfkDueToLimit()) { - m_bgData.bgAfkReporter.insert(reporter->GetGUIDLow()); + m_bgData.bgAfkReporter.insert(reporter->GetGUID().GetCounter()); // 3 players have to complain to apply debuff if (m_bgData.bgAfkReporter.size() >= 3) { @@ -22184,7 +22185,7 @@ void Player::UpdateVisibilityOf(WorldObject* target) m_clientGUIDs.erase(target->GetGUID()); #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Object %u (Type: %u) out of range for player %u. Distance = %f", target->GetGUIDLow(), target->GetTypeId(), GetGUIDLow(), GetDistance(target)); + TC_LOG_DEBUG("maps", "Object %u (Type: %u) out of range for player %u. Distance = %f", target->GetGUID().GetCounter(), target->GetTypeId(), GetGUID().GetCounter(), GetDistance(target)); #endif } } @@ -22196,7 +22197,7 @@ void Player::UpdateVisibilityOf(WorldObject* target) m_clientGUIDs.insert(target->GetGUID()); #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Object %u (Type: %u) is visible now for player %u. Distance = %f", target->GetGUIDLow(), target->GetTypeId(), GetGUIDLow(), GetDistance(target)); + TC_LOG_DEBUG("maps", "Object %u (Type: %u) is visible now for player %u. Distance = %f", target->GetGUID().GetCounter(), target->GetTypeId(), GetGUID().GetCounter(), GetDistance(target)); #endif // target aura duration for caster show only if target exist at caster client @@ -22272,7 +22273,7 @@ void Player::UpdateVisibilityOf(T* target, UpdateData& data, std::set& vi m_clientGUIDs.erase(target->GetGUID()); #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Object %u (Type: %u, Entry: %u) is out of range for player %u. Distance = %f", target->GetGUIDLow(), target->GetTypeId(), target->GetEntry(), GetGUIDLow(), GetDistance(target)); + TC_LOG_DEBUG("maps", "Object %u (Type: %u, Entry: %u) is out of range for player %u. Distance = %f", target->GetGUID().GetCounter(), target->GetTypeId(), target->GetEntry(), GetGUID().GetCounter(), GetDistance(target)); #endif } } @@ -22284,7 +22285,7 @@ void Player::UpdateVisibilityOf(T* target, UpdateData& data, std::set& vi UpdateVisibilityOf_helper(m_clientGUIDs, target, visibleNow); #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Object %u (Type: %u, Entry: %u) is visible now for player %u. Distance = %f", target->GetGUIDLow(), target->GetTypeId(), target->GetEntry(), GetGUIDLow(), GetDistance(target)); + TC_LOG_DEBUG("maps", "Object %u (Type: %u, Entry: %u) is visible now for player %u. Distance = %f", target->GetGUID().GetCounter(), target->GetTypeId(), target->GetEntry(), GetGUID().GetCounter(), GetDistance(target)); #endif } } @@ -23281,7 +23282,7 @@ void Player::UpdateForQuestWorldObjects() { if (itr->IsGameObject()) { - if (GameObject* obj = HashMapHolder::Find(*itr)) + if (GameObject* obj = ObjectAccessor::GetGameObject(*this, *itr)) obj->BuildValuesUpdateBlockForPlayer(&udata, this); } else if (itr->IsCreatureOrVehicle()) @@ -24655,7 +24656,7 @@ void Player::_LoadSkills(PreparedQueryResult result) if (!rcEntry) { TC_LOG_ERROR("entities.player", "Character: %s (GUID: %u Race: %u Class: %u) has skill %u not allowed for his race/class combination", - GetName().c_str(), GetGUIDLow(), uint32(getRace()), uint32(getClass()), skill); + GetName().c_str(), GetGUID().GetCounter(), uint32(getRace()), uint32(getClass()), skill); mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(0, SKILL_DELETED))); continue; @@ -24678,11 +24679,11 @@ void Player::_LoadSkills(PreparedQueryResult result) if (value == 0) { - TC_LOG_ERROR("entities.player", "Character %u has skill %u with value 0. Will be deleted.", GetGUIDLow(), skill); + TC_LOG_ERROR("entities.player", "Character %u has skill %u with value 0. Will be deleted.", GetGUID().GetCounter(), skill); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_SKILL); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt16(1, skill); CharacterDatabase.Execute(stmt); @@ -24715,7 +24716,7 @@ void Player::_LoadSkills(PreparedQueryResult result) if (count >= PLAYER_MAX_SKILLS) // client limit { - TC_LOG_ERROR("entities.player", "Character %u has more than %u skills.", GetGUIDLow(), PLAYER_MAX_SKILLS); + TC_LOG_ERROR("entities.player", "Character %u has more than %u skills.", GetGUID().GetCounter(), PLAYER_MAX_SKILLS); break; } } @@ -25451,11 +25452,11 @@ void Player::SendEquipmentSetList() data << itr->second.IconName; for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i) { - // ignored slots stored in IgnoreMask, client wants "1" as raw GUID, so no HIGHGUID_ITEM + // ignored slots stored in IgnoreMask, client wants "1" as raw GUID, so no HighGuid::Item if (itr->second.IgnoreMask & (1 << i)) data.appendPackGUID(uint64(1)); else - data << ObjectGuid(HIGHGUID_ITEM, 0, itr->second.Items[i]).WriteAsPacked(); + data << ObjectGuid(HighGuid::Item, 0, itr->second.Items[i]).WriteAsPacked(); } ++count; // client have limit but it checked at loading and set @@ -25525,7 +25526,7 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans) stmt->setUInt32(j++, eqset.IgnoreMask); for (uint8 i=0; isetUInt32(j++, eqset.Items[i]); - stmt->setUInt32(j++, GetGUIDLow()); + stmt->setUInt32(j++, GetGUID().GetCounter()); stmt->setUInt64(j++, eqset.Guid); stmt->setUInt32(j, index); trans->Append(stmt); @@ -25534,7 +25535,7 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans) break; case EQUIPMENT_SET_NEW: stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_EQUIP_SET); - stmt->setUInt32(j++, GetGUIDLow()); + stmt->setUInt32(j++, GetGUID().GetCounter()); stmt->setUInt64(j++, eqset.Guid); stmt->setUInt32(j++, index); stmt->setString(j++, eqset.Name.c_str()); @@ -25559,11 +25560,11 @@ void Player::_SaveEquipmentSets(SQLTransaction& trans) void Player::_SaveBGData(SQLTransaction& trans) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_BGDATA); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); /* guid, bgInstanceID, bgTeam, x, y, z, o, map, taxi[0], taxi[1], mountSpell */ stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_BGDATA); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, m_bgData.bgInstanceID); stmt->setUInt16(2, m_bgData.bgTeam); stmt->setFloat (3, m_bgData.joinPos.GetPositionX()); @@ -25601,7 +25602,7 @@ void Player::RemoveAtLoginFlag(AtLoginFlags flags, bool persist /*= false*/) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_REM_AT_LOGIN_FLAG); stmt->setUInt16(0, uint16(flags)); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(1, GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); } @@ -25652,7 +25653,7 @@ void Player::_LoadGlyphs(PreparedQueryResult result) void Player::_SaveGlyphs(SQLTransaction& trans) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_GLYPHS); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); trans->Append(stmt); @@ -25661,7 +25662,7 @@ void Player::_SaveGlyphs(SQLTransaction& trans) uint8 index = 0; stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_GLYPHS); - stmt->setUInt32(index++, GetGUIDLow()); + stmt->setUInt32(index++, GetGUID().GetCounter()); stmt->setUInt8(index++, spec); @@ -25694,7 +25695,7 @@ void Player::_SaveTalents(SQLTransaction& trans) if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->state == PLAYERSPELL_CHANGED) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_TALENT_BY_SPELL_SPEC); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, itr->first); stmt->setUInt8(2, itr->second->spec); trans->Append(stmt); @@ -25703,7 +25704,7 @@ void Player::_SaveTalents(SQLTransaction& trans) if (itr->second->state == PLAYERSPELL_NEW || itr->second->state == PLAYERSPELL_CHANGED) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_TALENT); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt32(1, itr->first); stmt->setUInt8(2, itr->second->spec); trans->Append(stmt); @@ -25742,7 +25743,7 @@ void Player::UpdateSpecCount(uint8 count) for (ActionButtonList::iterator itr = m_actionButtons.begin(); itr != m_actionButtons.end(); ++itr) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_ACTION); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt8(1, 1); stmt->setUInt8(2, itr->first); stmt->setUInt32(3, itr->second.GetAction()); @@ -25757,7 +25758,7 @@ void Player::UpdateSpecCount(uint8 count) stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACTION_EXCEPT_SPEC); stmt->setUInt8(0, m_activeSpec); - stmt->setUInt32(1, GetGUIDLow()); + stmt->setUInt32(1, GetGUID().GetCounter()); trans->Append(stmt); m_activeSpec = 0; @@ -25898,7 +25899,7 @@ void Player::ActivateSpec(uint8 spec) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_ACTIONS_SPEC); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); stmt->setUInt8(1, m_activeSpec); if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) _LoadActions(result); @@ -25976,7 +25977,7 @@ void Player::SendRefundInfo(Item* item) return; } - if (GetGUIDLow() != item->GetRefundRecipient()) // Formerly refundable item got traded + if (GetGUID().GetCounter() != item->GetRefundRecipient()) // Formerly refundable item got traded { TC_LOG_DEBUG("entities.player.items", "Item refund: item was traded!"); item->SetNotRefundable(this); @@ -26046,7 +26047,7 @@ void Player::RefundItem(Item* item) return; } - if (GetGUIDLow() != item->GetRefundRecipient()) // Formerly refundable item got traded + if (GetGUID().GetCounter() != item->GetRefundRecipient()) // Formerly refundable item got traded { TC_LOG_DEBUG("entities.player.items", "Item refund: item was traded!"); item->SetNotRefundable(this); @@ -26155,7 +26156,7 @@ void Player::SendItemRetrievalMail(uint32 itemEntry, uint32 count) draft.AddItem(item); } - draft.SendMailTo(trans, MailReceiver(this, GetGUIDLow()), sender); + draft.SendMailTo(trans, MailReceiver(this, GetGUID().GetCounter()), sender); CharacterDatabase.CommitTransaction(trans); } @@ -26166,7 +26167,7 @@ void Player::SetRandomWinner(bool isWinner) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_BATTLEGROUND_RANDOM); - stmt->setUInt32(0, GetGUIDLow()); + stmt->setUInt32(0, GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); } @@ -26174,7 +26175,7 @@ void Player::SetRandomWinner(bool isWinner) void Player::_LoadRandomBGStatus(PreparedQueryResult result) { - //QueryResult result = CharacterDatabase.PQuery("SELECT guid FROM character_battleground_random WHERE guid = '%u'", GetGUIDLow()); + //QueryResult result = CharacterDatabase.PQuery("SELECT guid FROM character_battleground_random WHERE guid = '%u'", GetGUID().GetCounter()); if (result) m_IsBGRandomWinner = true; @@ -26424,14 +26425,14 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy pet->Relocate(x, y, z, ang); if (!pet->IsPositionValid()) { - TC_LOG_ERROR("misc", "Pet (guidlow %d, entry %d) not summoned. Suggested coordinates isn't valid (X: %f Y: %f)", pet->GetGUIDLow(), pet->GetEntry(), pet->GetPositionX(), pet->GetPositionY()); + TC_LOG_ERROR("misc", "Pet (guidlow %d, entry %d) not summoned. Suggested coordinates isn't valid (X: %f Y: %f)", pet->GetGUID().GetCounter(), pet->GetEntry(), pet->GetPositionX(), pet->GetPositionY()); delete pet; return NULL; } Map* map = GetMap(); uint32 pet_number = sObjectMgr->GeneratePetNumber(); - if (!pet->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_PET), map, GetPhaseMask(), entry, pet_number)) + if (!pet->Create(map->GenerateLowGuid(), map, GetPhaseMask(), entry, pet_number)) { TC_LOG_ERROR("misc", "no such creature entry %u", entry); delete pet; diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp index 77cd701ee3..e7989c405a 100644 --- a/src/server/game/Entities/Player/SocialMgr.cpp +++ b/src/server/game/Entities/Player/SocialMgr.cpp @@ -205,7 +205,7 @@ void SocialMgr::GetFriendInfo(Player* player, uint32 friendGUID, FriendInfo &fri friendInfo.Level = 0; friendInfo.Class = 0; - Player* target = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, friendGUID)); + Player* target = ObjectAccessor::FindPlayer(ObjectGuid(HighGuid::Player, friendGUID)); if (!target) return; @@ -290,10 +290,10 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet) AccountTypes gmSecLevel = AccountTypes(sWorld->getIntConfig(CONFIG_GM_LEVEL_IN_WHO_LIST)); for (SocialMap::const_iterator itr = m_socialMap.begin(); itr != m_socialMap.end(); ++itr) { - PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(player->GetGUIDLow()); + PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(player->GetGUID().GetCounter()); if (itr2 != itr->second.m_playerSocialMap.end() && (itr2->second.Flags & SOCIAL_FLAG_FRIEND)) { - Player* target = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, 0, itr->first)); + Player* target = ObjectAccessor::FindPlayer(ObjectGuid(HighGuid::Player, 0, itr->first)); if (!target) continue; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index d6a130c031..9cd3945d44 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -54,7 +54,7 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa return false; } - Object::_Create(guidlow, 0, HIGHGUID_MO_TRANSPORT); + Object::_Create(guidlow, 0, HighGuid::Mo_Transport); GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry); @@ -100,6 +100,7 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa void Transport::CleanupsBeforeDelete(bool finalCleanup /*= true*/) { + HashMapHolder::Remove(this); UnloadStaticPassengers(); while (!_passengers.empty()) { @@ -312,7 +313,7 @@ Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data) if (!creature->IsPositionValid()) { - TC_LOG_ERROR("entities.transport", "Creature (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)",creature->GetGUIDLow(),creature->GetEntry(),creature->GetPositionX(),creature->GetPositionY()); + TC_LOG_ERROR("entities.transport", "Creature (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)",creature->GetGUID().GetCounter(),creature->GetEntry(),creature->GetPositionX(),creature->GetPositionY()); delete creature; return NULL; } @@ -354,7 +355,7 @@ GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data if (!go->IsPositionValid()) { - TC_LOG_ERROR("entities.transport", "GameObject (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)", go->GetGUIDLow(), go->GetEntry(), go->GetPositionX(), go->GetPositionY()); + TC_LOG_ERROR("entities.transport", "GameObject (guidlow %d, entry %d) not created. Suggested coordinates aren't valid (X: %f Y: %f)", go->GetGUID().GetCounter(), go->GetEntry(), go->GetPositionX(), go->GetPositionY()); delete go; return NULL; } @@ -451,7 +452,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu pos.GetPosition(x, y, z, o); CalculatePassengerPosition(x, y, z, &o); - if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, phase, entry, x, y, z, o, nullptr, vehId)) + if (!summon->Create(map->GenerateLowGuid(), map, phase, entry, x, y, z, o, nullptr, vehId)) { delete summon; return NULL; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f8810c9d14..3938b8d727 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -841,7 +841,7 @@ void Unit::CastSpell(SpellCastTargets const& targets, SpellInfo const* spellInfo { if (!spellInfo) { - TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell by caster: %s %u)", (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); + TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell by caster: %s %u)", (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry())); return; } @@ -869,7 +869,7 @@ void Unit::CastSpell(Unit* victim, uint32 spellId, TriggerCastFlags triggerFlags SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) { - TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); + TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry())); return; } @@ -919,7 +919,7 @@ void Unit::CastCustomSpell(uint32 spellId, CustomSpellValues const& value, Unit* SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) { - TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); + TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry())); return; } SpellCastTargets targets; @@ -933,7 +933,7 @@ void Unit::CastSpell(float x, float y, float z, uint32 spellId, bool triggered, SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) { - TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); + TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry())); return; } SpellCastTargets targets; @@ -947,7 +947,7 @@ void Unit::CastSpell(GameObject* go, uint32 spellId, bool triggered, Item* castI SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) { - TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); + TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell id %u by caster: %s %u)", spellId, (GetTypeId() == TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"), (GetTypeId() == TYPEID_PLAYER ? GetGUID().GetCounter() : GetEntry())); return; } SpellCastTargets targets; @@ -1977,10 +1977,10 @@ void Unit::AttackerStateUpdate (Unit* victim, WeaponAttackType attType, bool ext if (GetTypeId() == TYPEID_PLAYER) TC_LOG_DEBUG("entities.unit", "AttackerStateUpdate: (Player) %u attacked %u (TypeId: %u) for %u dmg, absorbed %u, blocked %u, resisted %u.", - GetGUIDLow(), victim->GetGUIDLow(), victim->GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist); + GetGUID().GetCounter(), victim->GetGUID().GetCounter(), victim->GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist); else TC_LOG_DEBUG("entities.unit", "AttackerStateUpdate: (NPC) %u attacked %u (TypeId: %u) for %u dmg, absorbed %u, blocked %u, resisted %u.", - GetGUIDLow(), victim->GetGUIDLow(), victim->GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist); + GetGUID().GetCounter(), victim->GetGUID().GetCounter(), victim->GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist); } } @@ -2257,9 +2257,9 @@ void Unit::SendMeleeAttackStop(Unit* victim) TC_LOG_DEBUG("entities.unit", "WORLD: Sent SMSG_ATTACKSTOP"); if (victim) - TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow()); + TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUID().GetCounter(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUID().GetCounter()); else - TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow()); + TC_LOG_DEBUG("entities.unit", "%s %u stopped attacking", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUID().GetCounter()); } bool Unit::isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttackType attackType) @@ -4181,7 +4181,7 @@ void Unit::DelayOwnedAuras(uint32 spellId, ObjectGuid caster, int32 delaytime) // update for out of range group members (on 1 slot use) aura->SetNeedClientUpdateForTargets(); - TC_LOG_DEBUG("spells", "Aura %u partially interrupted on unit %u, new duration: %u ms", aura->GetId(), GetGUIDLow(), aura->GetDuration()); + TC_LOG_DEBUG("spells", "Aura %u partially interrupted on unit %u, new duration: %u ms", aura->GetId(), GetGUID().GetCounter(), aura->GetDuration()); } } } @@ -15836,11 +15836,11 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au ASSERT(type != CHARM_TYPE_POSSESS || charmer->GetTypeId() == TYPEID_PLAYER); ASSERT((type == CHARM_TYPE_VEHICLE) == IsVehicle()); - TC_LOG_DEBUG("entities.unit", "SetCharmedBy: charmer %u (GUID %u), charmed %u (GUID %u), type %u.", charmer->GetEntry(), charmer->GetGUIDLow(), GetEntry(), GetGUIDLow(), uint32(type)); + TC_LOG_DEBUG("entities.unit", "SetCharmedBy: charmer %u (GUID %u), charmed %u (GUID %u), type %u.", charmer->GetEntry(), charmer->GetGUID().GetCounter(), GetEntry(), GetGUID().GetCounter(), uint32(type)); if (this == charmer) { - TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Unit %u (GUID %u) is trying to charm itself!", GetEntry(), GetGUIDLow()); + TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Unit %u (GUID %u) is trying to charm itself!", GetEntry(), GetGUID().GetCounter()); return false; } @@ -15849,14 +15849,14 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->GetTransport()) { - TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Player on transport is trying to charm %u (GUID %u)", GetEntry(), GetGUIDLow()); + TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: Player on transport is trying to charm %u (GUID %u)", GetEntry(), GetGUID().GetCounter()); return false; } // Already charmed if (GetCharmerGUID()) { - TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: %u (GUID %u) has already been charmed but %u (GUID %u) is trying to charm it!", GetEntry(), GetGUIDLow(), charmer->GetEntry(), charmer->GetGUIDLow()); + TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: %u (GUID %u) has already been charmed but %u (GUID %u) is trying to charm it!", GetEntry(), GetGUID().GetCounter(), charmer->GetEntry(), charmer->GetGUID().GetCounter()); return false; } @@ -15883,7 +15883,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au // StopCastingCharm may remove a possessed pet? if (!IsInWorld()) { - TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: %u (GUID %u) is not in world but %u (GUID %u) is trying to charm it!", GetEntry(), GetGUIDLow(), charmer->GetEntry(), charmer->GetGUIDLow()); + TC_LOG_FATAL("entities.unit", "Unit::SetCharmedBy: %u (GUID %u) is not in world but %u (GUID %u) is trying to charm it!", GetEntry(), GetGUID().GetCounter(), charmer->GetEntry(), charmer->GetGUID().GetCounter()); return false; } diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index b6f9534ac5..fcb74424eb 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -115,12 +115,12 @@ void Vehicle::Uninstall() if (_status == STATUS_UNINSTALLING && !GetBase()->HasUnitTypeMask(UNIT_MASK_MINION)) { TC_LOG_ERROR("entities.vehicle", "Vehicle GuidLow: %u, Entry: %u attempts to uninstall, but already has STATUS_UNINSTALLING! " - "Check Uninstall/PassengerBoarded script hooks for errors.", _me->GetGUIDLow(), _me->GetEntry()); + "Check Uninstall/PassengerBoarded script hooks for errors.", _me->GetGUID().GetCounter(), _me->GetEntry()); return; } _status = STATUS_UNINSTALLING; - TC_LOG_DEBUG("entities.vehicle", "Vehicle::Uninstall Entry: %u, GuidLow: %u", _creatureEntry, _me->GetGUIDLow()); + TC_LOG_DEBUG("entities.vehicle", "Vehicle::Uninstall Entry: %u, GuidLow: %u", _creatureEntry, _me->GetGUID().GetCounter()); RemoveAllPassengers(); if (GetBase()->GetTypeId() == TYPEID_UNIT) @@ -143,7 +143,7 @@ void Vehicle::Reset(bool evading /*= false*/) if (GetBase()->GetTypeId() != TYPEID_UNIT) return; - TC_LOG_DEBUG("entities.vehicle", "Vehicle::Reset (Entry: %u, GuidLow: %u, DBGuid: %u)", GetCreatureEntry(), _me->GetGUIDLow(), _me->ToCreature()->GetDBTableGUIDLow()); + TC_LOG_DEBUG("entities.vehicle", "Vehicle::Reset (Entry: %u, GuidLow: %u, DBGuid: %u)", GetCreatureEntry(), _me->GetGUID().GetCounter(), _me->ToCreature()->GetSpawnId()); ApplyAllImmunities(); InstallAllAccessories(evading); @@ -221,7 +221,7 @@ void Vehicle::ApplyAllImmunities() void Vehicle::RemoveAllPassengers() { - TC_LOG_DEBUG("entities.vehicle", "Vehicle::RemoveAllPassengers. Entry: %u, GuidLow: %u", _creatureEntry, _me->GetGUIDLow()); + TC_LOG_DEBUG("entities.vehicle", "Vehicle::RemoveAllPassengers. Entry: %u, GuidLow: %u", _creatureEntry, _me->GetGUID().GetCounter()); /// Setting to_Abort to true will cause @VehicleJoinEvent::Abort to be executed on next @Unit::UpdateEvents call /// This will properly "reset" the pending join process for the passenger. @@ -358,13 +358,13 @@ void Vehicle::InstallAccessory(uint32 entry, int8 seatId, bool minion, uint8 typ if (_status == STATUS_UNINSTALLING) { TC_LOG_ERROR("entities.vehicle", "Vehicle (GuidLow: %u, DB GUID: %u, Entry: %u) attempts to install accessory (Entry: %u) on seat %d with STATUS_UNINSTALLING! " - "Check Uninstall/PassengerBoarded script hooks for errors.", _me->GetGUIDLow(), - (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetDBTableGUIDLow() : _me->GetGUIDLow()), GetCreatureEntry(), entry, (int32)seatId); + "Check Uninstall/PassengerBoarded script hooks for errors.", _me->GetGUID().GetCounter(), + (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetSpawnId() : _me->GetGUID().GetCounter()), GetCreatureEntry(), entry, (int32)seatId); return; } TC_LOG_DEBUG("entities.vehicle", "Vehicle (GuidLow: %u, DB Guid: %u, Entry %u): installing accessory (Entry: %u) on seat: %d", - _me->GetGUIDLow(), (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetDBTableGUIDLow() : _me->GetGUIDLow()), GetCreatureEntry(), + _me->GetGUID().GetCounter(), (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetSpawnId() : _me->GetGUID().GetCounter()), GetCreatureEntry(), entry, (int32)seatId); TempSummon* accessory = _me->SummonCreature(entry, *_me, TempSummonType(type), summonTime); @@ -399,13 +399,13 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId) if (_status == STATUS_UNINSTALLING) { TC_LOG_ERROR("entities.vehicle", "Passenger GuidLow: %u, Entry: %u, attempting to board vehicle GuidLow: %u, Entry: %u during uninstall! SeatId: %d", - unit->GetGUIDLow(), unit->GetEntry(), _me->GetGUIDLow(), _me->GetEntry(), (int32)seatId); + unit->GetGUID().GetCounter(), unit->GetEntry(), _me->GetGUID().GetCounter(), _me->GetEntry(), (int32)seatId); return false; } TC_LOG_DEBUG("entities.vehicle", "Unit %s scheduling enter vehicle (entry: %u, vehicleId: %u, guid: %u (dbguid: %u) on seat %d", - unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUIDLow(), - (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetDBTableGUIDLow() : 0), (int32)seatId); + unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUID().GetCounter(), + (_me->GetTypeId() == TYPEID_UNIT ? _me->ToCreature()->GetSpawnId() : 0), (int32)seatId); // The seat selection code may kick other passengers off the vehicle. // While the validity of the following may be arguable, it is possible that when such a passenger @@ -474,7 +474,7 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit) ASSERT(seat != Seats.end()); TC_LOG_DEBUG("entities.vehicle", "Unit %s exit vehicle entry %u id %u dbguid %u seat %d", - unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUIDLow(), (int32)seat->first); + unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUID().GetCounter(), (int32)seat->first); if (seat->second.SeatInfo->CanEnterOrExit() && ++UsableSeatNum) _me->SetFlag(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); @@ -849,7 +849,7 @@ void VehicleJoinEvent::Abort(uint64) if (Target) { TC_LOG_DEBUG("entities.vehicle", "Passenger GuidLow: %u, Entry: %u, board on vehicle GuidLow: %u, Entry: %u SeatId: %d cancelled", - Passenger->GetGUIDLow(), Passenger->GetEntry(), Target->GetBase()->GetGUIDLow(), Target->GetBase()->GetEntry(), (int32)Seat->first); + Passenger->GetGUID().GetCounter(), Passenger->GetEntry(), Target->GetBase()->GetGUID().GetCounter(), Target->GetBase()->GetEntry(), (int32)Seat->first); /// @SPELL_AURA_CONTROL_VEHICLE auras can be applied even when the passenger is not (yet) on the vehicle. /// When this code is triggered it means that something went wrong in @Vehicle::AddPassenger, and we should remove @@ -858,7 +858,7 @@ void VehicleJoinEvent::Abort(uint64) } else TC_LOG_DEBUG("entities.vehicle", "Passenger GuidLow: %u, Entry: %u, board on uninstalled vehicle SeatId: %d cancelled", - Passenger->GetGUIDLow(), Passenger->GetEntry(), (int32)Seat->first); + Passenger->GetGUID().GetCounter(), Passenger->GetEntry(), (int32)Seat->first); if (Passenger->IsInWorld() && Passenger->HasUnitTypeMask(UNIT_MASK_ACCESSORY)) Passenger->ToCreature()->DespawnOrUnsummon(); diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 2264612f89..8f2d0491a9 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -917,7 +917,7 @@ void GameEventMgr::LoadFromDB() uint32 GameEventMgr::GetNPCFlag(Creature* cr) { uint32 mask = 0; - uint32 guid = cr->GetDBTableGUIDLow(); + uint32 guid = cr->GetSpawnId(); for (ActiveEvents::iterator e_itr = m_ActiveEvents.begin(); e_itr != m_ActiveEvents.end(); ++e_itr) { @@ -1115,25 +1115,34 @@ void GameEventMgr::ApplyNewEvent(uint16 event_id) void GameEventMgr::UpdateEventNPCFlags(uint16 event_id) { + std::unordered_map> creaturesByMap; + // go through the creatures whose npcflags are changed in the event for (NPCFlagList::iterator itr = mGameEventNPCFlags[event_id].begin(); itr != mGameEventNPCFlags[event_id].end(); ++itr) - { // get the creature data from the low guid to get the entry, to be able to find out the whole guid if (CreatureData const* data = sObjectMgr->GetCreatureData(itr->first)) + creaturesByMap[data->mapid].insert(itr->first); + + for (auto const& p : creaturesByMap) + { + sMapMgr->DoForAllMapsWithMapId(p.first, [this, &p](Map* map) { - Creature* cr = HashMapHolder::Find(ObjectGuid(HIGHGUID_UNIT, data->id, itr->first)); - // if we found the creature, modify its npcflag - if (cr) + for (auto& spawnId : p.second) { - uint32 npcflag = GetNPCFlag(cr); - if (const CreatureTemplate* ci = cr->GetCreatureTemplate()) - npcflag |= ci->npcflag; - cr->SetUInt32Value(UNIT_NPC_FLAGS, npcflag); - // reset gossip options, since the flag change might have added / removed some - //cr->ResetGossipOptions(); + auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(spawnId); + for (auto itr = creatureBounds.first; itr != creatureBounds.second; ++itr) + { + Creature* creature = itr->second; + uint32 npcflag = GetNPCFlag(creature); + if (CreatureTemplate const* creatureTemplate = creature->GetCreatureTemplate()) + npcflag |= creatureTemplate->npcflag; + + creature->SetUInt32Value(UNIT_NPC_FLAGS, npcflag); + // reset gossip options, since the flag change might have added / removed some + //cr->ResetGossipOptions(); + } } - // if we didn't find it, then the npcflag will be updated when the creature is loaded - } + }); } } @@ -1252,8 +1261,16 @@ void GameEventMgr::GameEventUnspawn(int16 event_id) { sObjectMgr->RemoveCreatureFromGrid(*itr, data); - if (Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, *itr), (Creature*)NULL)) - creature->AddObjectToRemoveList(); + sMapMgr->DoForAllMapsWithMapId(data->mapid, [&itr](Map* map) + { + auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(*itr); + for (auto itr2 = creatureBounds.first; itr2 != creatureBounds.second;) + { + Creature* creature = itr2->second; + ++itr2; + creature->AddObjectToRemoveList(); + } + }); } } @@ -1274,8 +1291,16 @@ void GameEventMgr::GameEventUnspawn(int16 event_id) { sObjectMgr->RemoveGameobjectFromGrid(*itr, data); - if (GameObject* pGameobject = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, *itr), (GameObject*)NULL)) - pGameobject->AddObjectToRemoveList(); + sMapMgr->DoForAllMapsWithMapId(data->mapid, [&itr](Map* map) + { + auto gameobjectBounds = map->GetGameObjectBySpawnIdStore().equal_range(*itr); + for (auto itr2 = gameobjectBounds.first; itr2 != gameobjectBounds.second;) + { + GameObject* go = itr2->second; + ++itr2; + go->AddObjectToRemoveList(); + } + }); } } if (internal_event_id < 0 || internal_event_id >= int32(mGameEventPoolIds.size())) @@ -1300,53 +1325,43 @@ void GameEventMgr::ChangeEquipOrModel(int16 event_id, bool activate) continue; // Update if spawned - Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, itr->first), (Creature*)NULL); - if (creature) - { - if (activate) - { - itr->second.equipement_id_prev = creature->GetCurrentEquipmentId(); - itr->second.modelid_prev = creature->GetDisplayId(); - creature->LoadEquipment(itr->second.equipment_id, true); - if (itr->second.modelid > 0 && itr->second.modelid_prev != itr->second.modelid && - sObjectMgr->GetCreatureModelInfo(itr->second.modelid)) - { - creature->SetDisplayId(itr->second.modelid); - creature->SetNativeDisplayId(itr->second.modelid); - } - } - else - { - creature->LoadEquipment(itr->second.equipement_id_prev, true); - if (itr->second.modelid_prev > 0 && itr->second.modelid_prev != itr->second.modelid && - sObjectMgr->GetCreatureModelInfo(itr->second.modelid_prev)) - { - creature->SetDisplayId(itr->second.modelid_prev); - creature->SetNativeDisplayId(itr->second.modelid_prev); - } - } - } - else // If not spawned - { - CreatureData const* data2 = sObjectMgr->GetCreatureData(itr->first); - if (data2 && activate) - { - CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(data2->id); - uint32 displayID = ObjectMgr::ChooseDisplayId(cinfo, data2); - sObjectMgr->GetCreatureModelRandomGender(&displayID); + sMapMgr->DoForAllMapsWithMapId(data->mapid, [&itr, activate](Map* map) - if (data2->equipmentId == 0) - itr->second.equipement_id_prev = 0; ///@todo: verify this line - else if (data2->equipmentId != -1) - itr->second.equipement_id_prev = data->equipmentId; - itr->second.modelid_prev = displayID; + { + auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(itr->first); + for (auto itr2 = creatureBounds.first; itr2 != creatureBounds.second; ++itr2) + { + Creature* creature = itr2->second; + if (activate) + { + itr->second.equipement_id_prev = creature->GetCurrentEquipmentId(); + itr->second.modelid_prev = creature->GetDisplayId(); + creature->LoadEquipment(itr->second.equipment_id, true); + if (itr->second.modelid > 0 && itr->second.modelid_prev != itr->second.modelid && + sObjectMgr->GetCreatureModelInfo(itr->second.modelid)) + { + creature->SetDisplayId(itr->second.modelid); + creature->SetNativeDisplayId(itr->second.modelid); + } + } + else + { + creature->LoadEquipment(itr->second.equipement_id_prev, true); + if (itr->second.modelid_prev > 0 && itr->second.modelid_prev != itr->second.modelid && + sObjectMgr->GetCreatureModelInfo(itr->second.modelid_prev)) + { + creature->SetDisplayId(itr->second.modelid_prev); + creature->SetNativeDisplayId(itr->second.modelid_prev); + } + } } - } + }); // now last step: put in data - // just to have write access to it CreatureData& data2 = sObjectMgr->NewOrExistCreatureData(itr->first); if (activate) { + itr->second.modelid_prev = data2.displayid; + itr->second.equipement_id_prev = data2.equipmentId; data2.displayid = itr->second.modelid; data2.equipmentId = itr->second.equipment_id; } @@ -1594,24 +1609,43 @@ void GameEventMgr::SendWorldStateUpdate(Player* player, uint16 event_id) } } +class GameEventAIHookWorker +{ +public: + GameEventAIHookWorker(uint16 eventId, bool activate) : _eventId(eventId), _activate(activate) { } + + void Visit(std::unordered_map& creatureMap) + { + for (auto const& p : creatureMap) + if (p.second->IsInWorld() && p.second->IsAIEnabled) + p.second->AI()->sOnGameEvent(_activate, _eventId); + } + + void Visit(std::unordered_map& gameObjectMap) + { + for (auto const& p : gameObjectMap) + if (p.second->IsInWorld()) + p.second->AI()->OnGameEvent(_activate, _eventId); + } + + template + void Visit(std::unordered_map&) { } + +private: + uint16 _eventId; + bool _activate; +}; + void GameEventMgr::RunSmartAIScripts(uint16 event_id, bool activate) { //! Iterate over every supported source type (creature and gameobject) //! Not entirely sure how this will affect units in non-loaded grids. + sMapMgr->DoForAllMaps([event_id, activate](Map* map) { - boost::shared_lock lock(*HashMapHolder::GetLock()); - HashMapHolder::MapType const& m = ObjectAccessor::GetCreatures(); - for (HashMapHolder::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter) - if (iter->second->IsInWorld()) - iter->second->AI()->sOnGameEvent(activate, event_id); - } - { - boost::shared_lock lock(*HashMapHolder::GetLock()); - HashMapHolder::MapType const& m = ObjectAccessor::GetGameObjects(); - for (HashMapHolder::MapType::const_iterator iter = m.begin(); iter != m.end(); ++iter) - if (iter->second->IsInWorld()) - iter->second->AI()->OnGameEvent(activate, event_id); - } + GameEventAIHookWorker worker(event_id, activate); + TypeContainerVisitor visitor(worker); + visitor.Visit(map->GetObjectsStore()); + }); } uint16 GameEventMgr::GetEventIdForQuest(Quest const* quest) const diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index 35d6ba9140..f5e9b6bb5b 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -28,6 +28,7 @@ #include "ObjectMgr.h" #include "Pet.h" #include "Player.h" +#include "Transport.h" #include "World.h" #include @@ -37,90 +38,55 @@ ObjectAccessor::ObjectAccessor() { } ObjectAccessor::~ObjectAccessor() { } -template T* ObjectAccessor::GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, T* /*fake*/) -{ - T* obj = HashMapHolder::Find(guid); - if (!obj || obj->GetMapId() != mapid) - return NULL; - - CellCoord p = Trinity::ComputeCellCoord(x, y); - if (!p.IsCoordValid()) - { - TC_LOG_ERROR("misc", "ObjectAccessor::GetObjectInWorld: invalid coordinates supplied X:%f Y:%f grid cell [%u:%u]", x, y, p.x_coord, p.y_coord); - return NULL; - } - - CellCoord q = Trinity::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY()); - if (!q.IsCoordValid()) - { - TC_LOG_ERROR("misc", "ObjectAccessor::GetObjecInWorld: object (GUID: %u TypeId: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUIDLow(), obj->GetTypeId(), obj->GetPositionX(), obj->GetPositionY(), q.x_coord, q.y_coord); - return NULL; - } - - int32 dx = int32(p.x_coord) - int32(q.x_coord); - int32 dy = int32(p.y_coord) - int32(q.y_coord); - - if (dx > -2 && dx < 2 && dy > -2 && dy < 2) - return obj; - else - return NULL; -} - -Player* ObjectAccessor::GetObjectInWorld(ObjectGuid guid, Player* /*typeSpecifier*/) -{ - Player* player = HashMapHolder::Find(guid); - return player && player->IsInWorld() ? player : NULL; -} - -WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid guid) +WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid const& guid) { switch (guid.GetHigh()) { - case HIGHGUID_PLAYER: return GetPlayer(p, guid); - case HIGHGUID_TRANSPORT: - case HIGHGUID_MO_TRANSPORT: - case HIGHGUID_GAMEOBJECT: return GetGameObject(p, guid); - case HIGHGUID_VEHICLE: - case HIGHGUID_UNIT: return GetCreature(p, guid); - case HIGHGUID_PET: return GetPet(p, guid); - case HIGHGUID_DYNAMICOBJECT: return GetDynamicObject(p, guid); - case HIGHGUID_CORPSE: return GetCorpse(p, guid); + case HighGuid::Player: return GetPlayer(p, guid); + case HighGuid::Transport: + case HighGuid::Mo_Transport: + case HighGuid::GameObject: return GetGameObject(p, guid); + case HighGuid::Vehicle: + case HighGuid::Unit: return GetCreature(p, guid); + case HighGuid::Pet: return GetPet(p, guid); + case HighGuid::DynamicObject: return GetDynamicObject(p, guid); + case HighGuid::Corpse: return GetCorpse(p, guid); default: return NULL; } } -Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid guid, uint32 typemask) +Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid const& guid, uint32 typemask) { switch (guid.GetHigh()) { - case HIGHGUID_ITEM: + case HighGuid::Item: if (typemask & TYPEMASK_ITEM && p.GetTypeId() == TYPEID_PLAYER) return ((Player const&)p).GetItemByGuid(guid); break; - case HIGHGUID_PLAYER: + case HighGuid::Player: if (typemask & TYPEMASK_PLAYER) return GetPlayer(p, guid); break; - case HIGHGUID_TRANSPORT: - case HIGHGUID_MO_TRANSPORT: - case HIGHGUID_GAMEOBJECT: + case HighGuid::Transport: + case HighGuid::Mo_Transport: + case HighGuid::GameObject: if (typemask & TYPEMASK_GAMEOBJECT) return GetGameObject(p, guid); break; - case HIGHGUID_UNIT: - case HIGHGUID_VEHICLE: + case HighGuid::Unit: + case HighGuid::Vehicle: if (typemask & TYPEMASK_UNIT) return GetCreature(p, guid); break; - case HIGHGUID_PET: + case HighGuid::Pet: if (typemask & TYPEMASK_UNIT) return GetPet(p, guid); break; - case HIGHGUID_DYNAMICOBJECT: + case HighGuid::DynamicObject: if (typemask & TYPEMASK_DYNAMICOBJECT) return GetDynamicObject(p, guid); break; - case HIGHGUID_CORPSE: + case HighGuid::Corpse: break; default: break; @@ -129,51 +95,62 @@ Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid gui return NULL; } -Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid guid) +Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid const& guid) { - return GetObjectInMap(guid, u.GetMap(), (Corpse*)NULL); + return u.GetMap()->GetCorpse(guid); } -GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid guid) +GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid const& guid) { - return GetObjectInMap(guid, u.GetMap(), (GameObject*)NULL); + return u.GetMap()->GetGameObject(guid); } -Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid guid) +Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid const& guid) { - if (!guid.IsMOTransport()) - return NULL; - - GameObject* go = GetGameObject(u, guid); - return go ? go->ToTransport() : NULL; + return u.GetMap()->GetTransport(guid); } -DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid guid) +DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid const& guid) { - return GetObjectInMap(guid, u.GetMap(), (DynamicObject*)NULL); + return u.GetMap()->GetDynamicObject(guid); } -Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid guid) +Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const& guid) { - return GetObjectInMap(guid, u.GetMap(), (Unit*)NULL); + if (guid.IsPlayer()) + return GetPlayer(u, guid); + + if (guid.IsPet()) + return GetPet(u, guid); + + return GetCreature(u, guid); } -Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid guid) +Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid const& guid) { - return GetObjectInMap(guid, u.GetMap(), (Creature*)NULL); + return u.GetMap()->GetCreature(guid); } -Pet* ObjectAccessor::GetPet(WorldObject const& u, ObjectGuid guid) +Pet* ObjectAccessor::GetPet(WorldObject const& u, ObjectGuid const& guid) { - return GetObjectInMap(guid, u.GetMap(), (Pet*)NULL); + return u.GetMap()->GetPet(guid); } -Player* ObjectAccessor::GetPlayer(WorldObject const& u, ObjectGuid guid) +Player* ObjectAccessor::GetPlayer(Map const* m, ObjectGuid const& guid) { - return GetObjectInMap(guid, u.GetMap(), (Player*)NULL); + if (Player* player = HashMapHolder::Find(guid)) + if (player->IsInWorld() && player->GetMap() == m) + return player; + + return nullptr; } -Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, ObjectGuid guid) +Player* ObjectAccessor::GetPlayer(WorldObject const& u, ObjectGuid const& guid) +{ + return GetPlayer(u.GetMap(), guid); +} + +Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, ObjectGuid const& guid) { if (guid.IsPet()) return GetPet(u, guid); @@ -184,26 +161,17 @@ Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, Object return NULL; } -Pet* ObjectAccessor::FindPet(ObjectGuid guid) +Player* ObjectAccessor::FindPlayer(ObjectGuid const& guid) { - return GetObjectInWorld(guid, (Pet*)NULL); + Player* player = HashMapHolder::Find(guid); + return player && player->IsInWorld() ? player : nullptr; } -Player* ObjectAccessor::FindPlayer(ObjectGuid guid) -{ - return GetObjectInWorld(guid, (Player*)NULL); -} - -Player* ObjectAccessor::FindConnectedPlayer(ObjectGuid guid) +Player* ObjectAccessor::FindConnectedPlayer(ObjectGuid const& guid) { return HashMapHolder::Find(guid); } -Unit* ObjectAccessor::FindUnit(ObjectGuid guid) -{ - return GetObjectInWorld(guid, (Unit*)NULL); -} - Player* ObjectAccessor::FindPlayerByName(std::string const& name) { boost::shared_lock lock(*HashMapHolder::GetLock()); @@ -251,7 +219,7 @@ void ObjectAccessor::SaveAllPlayers() itr->second->SaveToDB(); } -Corpse* ObjectAccessor::GetCorpseForPlayerGUID(ObjectGuid guid) +Corpse* ObjectAccessor::GetCorpseForPlayerGUID(ObjectGuid const& guid) { boost::shared_lock lock(_corpseLock); @@ -283,7 +251,6 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse) } } else - corpse->RemoveFromWorld(); // Critical section @@ -343,7 +310,7 @@ void ObjectAccessor::AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, } } -Corpse* ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia /*=false*/) +Corpse* ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid const& player_guid, bool insignia /*=false*/) { Corpse* corpse = GetCorpseForPlayerGUID(player_guid); if (!corpse) @@ -376,7 +343,7 @@ Corpse* ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid player_guid, bool insi { // Create bones, don't change Corpse bones = new Corpse; - bones->Create(corpse->GetGUIDLow(), map); + bones->Create(corpse->GetGUID().GetCounter(), map); for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type bones->SetUInt32Value(i, corpse->GetUInt32Value(i)); @@ -422,27 +389,6 @@ void ObjectAccessor::RemoveOldCorpses() } } -void ObjectAccessor::Update(uint32 /*diff*/) -{ - UpdateDataMapType update_players; - - while (!i_objects.empty()) - { - Object* obj = *i_objects.begin(); - ASSERT(obj && obj->IsInWorld()); - i_objects.erase(i_objects.begin()); - obj->BuildUpdate(update_players); - } - - WorldPacket packet; // here we allocate a std::vector with a size of 0x10000 - for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter) - { - iter->second.BuildPacket(&packet); - iter->first->GetSession()->SendPacket(&packet); - packet.clear(); // clean the string - } -} - void ObjectAccessor::UnloadAll() { for (Player2CorpsesMapType::const_iterator itr = i_player2corpse.begin(); itr != i_player2corpse.end(); ++itr) @@ -460,15 +406,5 @@ template boost::shared_mutex HashMapHolder::_lock; /// Global definitions for the hashmap storage template class HashMapHolder; -template class HashMapHolder; -template class HashMapHolder; -template class HashMapHolder; -template class HashMapHolder; -template class HashMapHolder; -template Player* ObjectAccessor::GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, Player* /*fake*/); -template Pet* ObjectAccessor::GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, Pet* /*fake*/); -template Creature* ObjectAccessor::GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, Creature* /*fake*/); -template Corpse* ObjectAccessor::GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, Corpse* /*fake*/); -template GameObject* ObjectAccessor::GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, GameObject* /*fake*/); -template DynamicObject* ObjectAccessor::GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, DynamicObject* /*fake*/); +template class HashMapHolder; diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 2d32e747eb..54e2a7298e 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -30,7 +30,6 @@ #include "UpdateData.h" #include "Object.h" - class Creature; class Corpse; class Unit; @@ -46,6 +45,9 @@ template class HashMapHolder { public: + static_assert(std::is_same::value + || std::is_same::value, + "Only Player and Transport can be registered in global HashMapHolder"); typedef std::unordered_map MapType; @@ -100,77 +102,27 @@ class ObjectAccessor return &instance; } - template static T* GetObjectInOrOutOfWorld(ObjectGuid guid, T* /*typeSpecifier*/) - { - return HashMapHolder::Find(guid); - } - - static Unit* GetObjectInOrOutOfWorld(ObjectGuid guid, Unit* /*typeSpecifier*/) - { - if (guid.IsPlayer()) - return (Unit*)GetObjectInOrOutOfWorld(guid, (Player*)NULL); - - if (guid.IsPet()) - return (Unit*)GetObjectInOrOutOfWorld(guid, (Pet*)NULL); - - return (Unit*)GetObjectInOrOutOfWorld(guid, (Creature*)NULL); - } - - // returns object if is in world - template static T* GetObjectInWorld(ObjectGuid guid, T* /*typeSpecifier*/) - { - return HashMapHolder::Find(guid); - } - - // Player may be not in world while in ObjectAccessor - static Player* GetObjectInWorld(ObjectGuid guid, Player* /*typeSpecifier*/); - - static Unit* GetObjectInWorld(ObjectGuid guid, Unit* /*typeSpecifier*/) - { - if (guid.IsPlayer()) - return (Unit*)GetObjectInWorld(guid, (Player*)NULL); - - if (guid.IsPet()) - return (Unit*)GetObjectInWorld(guid, (Pet*)NULL); - - return (Unit*)GetObjectInWorld(guid, (Creature*)NULL); - } - - // returns object if is in map - template static T* GetObjectInMap(ObjectGuid guid, Map* map, T* /*typeSpecifier*/) - { - ASSERT(map); - if (T * obj = GetObjectInWorld(guid, (T*)NULL)) - if (obj->GetMap() == map) - return obj; - return NULL; - } - - template static T* GetObjectInWorld(uint32 mapid, float x, float y, ObjectGuid guid, T* /*fake*/); - // these functions return objects only if in map of specified object - static WorldObject* GetWorldObject(WorldObject const&, ObjectGuid); - static Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid, uint32 typemask); - static Corpse* GetCorpse(WorldObject const& u, ObjectGuid guid); - static GameObject* GetGameObject(WorldObject const& u, ObjectGuid guid); - static Transport* GetTransport(WorldObject const& u, ObjectGuid guid); - static DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid guid); - static Unit* GetUnit(WorldObject const&, ObjectGuid guid); - static Creature* GetCreature(WorldObject const& u, ObjectGuid guid); - static Pet* GetPet(WorldObject const&, ObjectGuid guid); - static Player* GetPlayer(WorldObject const&, ObjectGuid guid); - static Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid); + static WorldObject* GetWorldObject(WorldObject const&, ObjectGuid const&); + static Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const&, uint32 typemask); + static Corpse* GetCorpse(WorldObject const& u, ObjectGuid const& guid); + static GameObject* GetGameObject(WorldObject const& u, ObjectGuid const& guid); + static Transport* GetTransport(WorldObject const& u, ObjectGuid const& guid); + static DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const& guid); + static Unit* GetUnit(WorldObject const&, ObjectGuid const& guid); + static Creature* GetCreature(WorldObject const& u, ObjectGuid const& guid); + static Pet* GetPet(WorldObject const&, ObjectGuid const& guid); + static Player* GetPlayer(Map const*, ObjectGuid const& guid); + static Player* GetPlayer(WorldObject const&, ObjectGuid const& guid); + static Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid const&); // these functions return objects if found in whole world // ACCESS LIKE THAT IS NOT THREAD SAFE - static Pet* FindPet(ObjectGuid); - static Player* FindPlayer(ObjectGuid); - static Creature* FindCreature(ObjectGuid); - static Unit* FindUnit(ObjectGuid); + static Player* FindPlayer(ObjectGuid const&); static Player* FindPlayerByName(std::string const& name); // this returns Player even if he is not in world, for example teleporting - static Player* FindConnectedPlayer(ObjectGuid); + static Player* FindConnectedPlayer(ObjectGuid const&); static Player* FindConnectedPlayerByName(std::string const& name); // when using this, you must use the hashmapholder's lock @@ -179,18 +131,6 @@ class ObjectAccessor return HashMapHolder::GetContainer(); } - // when using this, you must use the hashmapholder's lock - static HashMapHolder::MapType const& GetCreatures() - { - return HashMapHolder::GetContainer(); - } - - // when using this, you must use the hashmapholder's lock - static HashMapHolder::MapType const& GetGameObjects() - { - return HashMapHolder::GetContainer(); - } - template static void AddObject(T* object) { HashMapHolder::Insert(object); @@ -204,42 +144,24 @@ class ObjectAccessor static void SaveAllPlayers(); //non-static functions - void AddUpdateObject(Object* obj) - { - std::lock_guard lock(_objectLock); - i_objects.insert(obj); - } - - void RemoveUpdateObject(Object* obj) - { - std::lock_guard lock(_objectLock); - i_objects.erase(obj); - } //Thread safe - Corpse* GetCorpseForPlayerGUID(ObjectGuid guid); + Corpse* GetCorpseForPlayerGUID(ObjectGuid const& guid); void RemoveCorpse(Corpse* corpse); void AddCorpse(Corpse* corpse); void AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map); - Corpse* ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia = false); + Corpse* ConvertCorpseForPlayer(ObjectGuid const& player_guid, bool insignia = false); //Thread unsafe - void Update(uint32 diff); void RemoveOldCorpses(); void UnloadAll(); private: - static void _buildChangeObjectForPlayer(WorldObject*, UpdateDataMapType&); - static void _buildPacket(Player*, Object*, UpdateDataMapType&); - void _update(); - typedef std::unordered_map Player2CorpsesMapType; typedef std::unordered_map::value_type UpdateDataValueType; - std::set i_objects; Player2CorpsesMapType i_player2corpse; - std::mutex _objectLock; boost::shared_mutex _corpseLock; }; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 524bb44286..4bf86facbe 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -223,15 +223,8 @@ ObjectMgr::ObjectMgr(): _itemTextId(1), _mailId(1), _hiPetNumber(1), - _hiCharGuid(1), - _hiCreatureGuid(1), - _hiPetGuid(1), - _hiVehicleGuid(1), - _hiItemGuid(1), - _hiGoGuid(1), - _hiDoGuid(1), - _hiCorpseGuid(1), - _hiMoTransGuid(1), + _creatureSpawnId(1), + _gameObjectSpawnId(1), DBCLocaleIndex(LOCALE_enUS) { for (uint8 i = 0; i < MAX_CLASSES; ++i) @@ -1386,8 +1379,8 @@ void ObjectMgr::LoadLinkedRespawn() break; } - guid = ObjectGuid(HIGHGUID_UNIT, slave->id, guidLow); - linkedGuid = ObjectGuid(HIGHGUID_UNIT, master->id, linkedGuidLow); + guid = ObjectGuid(HighGuid::Unit, slave->id, guidLow); + linkedGuid = ObjectGuid(HighGuid::Unit, master->id, linkedGuidLow); break; } case CREATURE_TO_GO: @@ -1423,8 +1416,8 @@ void ObjectMgr::LoadLinkedRespawn() break; } - guid = ObjectGuid(HIGHGUID_UNIT, slave->id, guidLow); - linkedGuid = ObjectGuid(HIGHGUID_GAMEOBJECT, master->id, linkedGuidLow); + guid = ObjectGuid(HighGuid::Unit, slave->id, guidLow); + linkedGuid = ObjectGuid(HighGuid::GameObject, master->id, linkedGuidLow); break; } case GO_TO_GO: @@ -1460,8 +1453,8 @@ void ObjectMgr::LoadLinkedRespawn() break; } - guid = ObjectGuid(HIGHGUID_GAMEOBJECT, slave->id, guidLow); - linkedGuid = ObjectGuid(HIGHGUID_GAMEOBJECT, master->id, linkedGuidLow); + guid = ObjectGuid(HighGuid::GameObject, slave->id, guidLow); + linkedGuid = ObjectGuid(HighGuid::GameObject, master->id, linkedGuidLow); break; } case GO_TO_CREATURE: @@ -1497,8 +1490,8 @@ void ObjectMgr::LoadLinkedRespawn() break; } - guid = ObjectGuid(HIGHGUID_GAMEOBJECT, slave->id, guidLow); - linkedGuid = ObjectGuid(HIGHGUID_UNIT, master->id, linkedGuidLow); + guid = ObjectGuid(HighGuid::GameObject, slave->id, guidLow); + linkedGuid = ObjectGuid(HighGuid::Unit, master->id, linkedGuidLow); break; } } @@ -1518,7 +1511,7 @@ bool ObjectMgr::SetCreatureLinkedRespawn(uint32 guidLow, uint32 linkedGuidLow) CreatureData const* master = GetCreatureData(guidLow); ASSERT(master); - ObjectGuid guid(HIGHGUID_UNIT, master->id, guidLow); + ObjectGuid guid(HighGuid::Unit, master->id, guidLow); if (!linkedGuidLow) // we're removing the linking { @@ -1549,7 +1542,7 @@ bool ObjectMgr::SetCreatureLinkedRespawn(uint32 guidLow, uint32 linkedGuidLow) return false; } - ObjectGuid linkedGuid(HIGHGUID_UNIT, slave->id, linkedGuidLow); + ObjectGuid linkedGuid(HighGuid::Unit, slave->id, linkedGuidLow); _linkedRespawnStore[guid] = linkedGuid; PreparedStatement *stmt = WorldDatabase.GetPreparedStatement(WORLD_REP_CREATURE_LINKED_RESPAWN); @@ -1848,7 +1841,8 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float if (!map) return 0; - uint32 guid = GenerateLowGuid(HIGHGUID_GAMEOBJECT); + uint32 guid = GenerateGameObjectSpawnId(); + GameObjectData& data = NewGOData(guid); data.id = entry; data.mapid = mapId; @@ -1888,38 +1882,6 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float return guid; } -bool ObjectMgr::MoveCreatureData(uint32 guid, uint32 mapId, const Position& pos) -{ - CreatureData& data = NewOrExistCreatureData(guid); - if (!data.id) - return false; - - RemoveCreatureFromGrid(guid, &data); - if (data.posX == pos.GetPositionX() && data.posY == pos.GetPositionY() && data.posZ == pos.GetPositionZ()) - return true; - data.posX = pos.GetPositionX(); - data.posY = pos.GetPositionY(); - data.posZ = pos.GetPositionZ(); - data.orientation = pos.GetOrientation(); - AddCreatureToGrid(guid, &data); - - // Spawn if necessary (loaded grids only) - if (Map* map = sMapMgr->CreateBaseMap(mapId)) - { - // We use spawn coords to spawn - if (!map->Instanceable() && map->IsGridLoaded(data.posX, data.posY)) - { - Creature* creature = new Creature(); - if (!creature->LoadCreatureFromDB(guid, map)) - { - TC_LOG_ERROR("misc", "MoveCreatureData: Cannot add creature guid %u to map", guid); - delete creature; - return false; - } - } - } - return true; -} uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay /*= 0*/) { @@ -1929,8 +1891,11 @@ uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y, uint32 level = cInfo->minlevel == cInfo->maxlevel ? cInfo->minlevel : urand(cInfo->minlevel, cInfo->maxlevel); // Only used for extracting creature base stats CreatureBaseStats const* stats = GetCreatureBaseStats(level, cInfo->unit_class); + Map* map = sMapMgr->CreateBaseMap(mapId); + if (!map) + return 0; - uint32 guid = GenerateLowGuid(HIGHGUID_UNIT); + uint32 guid = GenerateCreatureSpawnId(); CreatureData& data = NewOrExistCreatureData(guid); data.id = entry; data.mapid = mapId; @@ -1955,19 +1920,15 @@ uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y, AddCreatureToGrid(guid, &data); - // Spawn if necessary (loaded grids only) - if (Map* map = sMapMgr->CreateBaseMap(mapId)) + // We use spawn coords to spawn + if (!map->Instanceable() && !map->IsRemovalGrid(x, y)) { - // We use spawn coords to spawn - if (!map->Instanceable() && !map->IsRemovalGrid(x, y)) + Creature* creature = new Creature(); + if (!creature->LoadCreatureFromDB(guid, map)) { - Creature* creature = new Creature(); - if (!creature->LoadCreatureFromDB(guid, map)) - { - TC_LOG_ERROR("misc", "AddCreature: Cannot add creature entry %u to map", entry); - delete creature; - return 0; - } + TC_LOG_ERROR("misc", "AddCreature: Cannot add creature entry %u to map", entry); + delete creature; + return 0; } } @@ -2163,7 +2124,7 @@ void ObjectMgr::RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data Player* ObjectMgr::GetPlayerByLowGUID(uint32 lowguid) const { - ObjectGuid guid(HIGHGUID_PLAYER, lowguid); + ObjectGuid guid(HighGuid::Player, lowguid); return ObjectAccessor::FindPlayer(guid); } @@ -2177,7 +2138,7 @@ ObjectGuid ObjectMgr::GetPlayerGUIDByName(std::string const& name) const PreparedQueryResult result = CharacterDatabase.Query(stmt); if (result) - return ObjectGuid(HIGHGUID_PLAYER, (*result)[0].GetUInt32()); + return ObjectGuid(HighGuid::Player, (*result)[0].GetUInt32()); return ObjectGuid::Empty; } @@ -5658,7 +5619,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp) Player* player = NULL; if (serverUp) - player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HIGHGUID_PLAYER, m->receiver)); + player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HighGuid::Player, m->receiver)); if (player && player->m_mailsLoaded) { // this code will run very improbably (the time is between 4 and 5 am, in game is online a player, who has old mail @@ -6454,29 +6415,21 @@ void ObjectMgr::SetHighestGuids() { QueryResult result = CharacterDatabase.Query("SELECT MAX(guid) FROM characters"); if (result) - _hiCharGuid = (*result)[0].GetUInt32()+1; - - result = WorldDatabase.Query("SELECT MAX(guid) FROM creature"); - if (result) - _hiCreatureGuid = (*result)[0].GetUInt32()+1; + GetGuidSequenceGenerator().Set((*result)[0].GetUInt32()+1); result = CharacterDatabase.Query("SELECT MAX(guid) FROM item_instance"); if (result) - _hiItemGuid = (*result)[0].GetUInt32()+1; + GetGuidSequenceGenerator().Set((*result)[0].GetUInt32()+1); // Cleanup other tables from nonexistent guids ( >= _hiItemGuid) - CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '%u'", _hiItemGuid); // One-time query - CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '%u'", _hiItemGuid); // One-time query - CharacterDatabase.PExecute("DELETE FROM auctionhouse WHERE itemguid >= '%u'", _hiItemGuid); // One-time query - CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '%u'", _hiItemGuid); // One-time query - - result = WorldDatabase.Query("SELECT MAX(guid) FROM gameobject"); - if (result) - _hiGoGuid = (*result)[0].GetUInt32()+1; + CharacterDatabase.PExecute("DELETE FROM character_inventory WHERE item >= '%u'", GetGuidSequenceGenerator().GetNextAfterMaxUsed()); // One-time query + CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid >= '%u'", GetGuidSequenceGenerator().GetNextAfterMaxUsed()); // One-time query + CharacterDatabase.PExecute("DELETE FROM auctionhouse WHERE itemguid >= '%u'", GetGuidSequenceGenerator().GetNextAfterMaxUsed()); // One-time query + CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE item_guid >= '%u'", GetGuidSequenceGenerator().GetNextAfterMaxUsed()); // One-time query result = WorldDatabase.Query("SELECT MAX(guid) FROM transports"); if (result) - _hiMoTransGuid = (*result)[0].GetUInt32()+1; + GetGuidSequenceGenerator().Set((*result)[0].GetUInt32()+1); result = CharacterDatabase.Query("SELECT MAX(id) FROM auctionhouse"); if (result) @@ -6486,10 +6439,6 @@ void ObjectMgr::SetHighestGuids() if (result) _mailId = (*result)[0].GetUInt32()+1; - result = CharacterDatabase.Query("SELECT MAX(corpseGuid) FROM corpse"); - if (result) - _hiCorpseGuid = (*result)[0].GetUInt32()+1; - result = CharacterDatabase.Query("SELECT MAX(arenateamid) FROM arena_team"); if (result) sArenaTeamMgr->SetNextArenaTeamId((*result)[0].GetUInt32()+1); @@ -6505,6 +6454,14 @@ void ObjectMgr::SetHighestGuids() result = CharacterDatabase.Query("SELECT MAX(guid) FROM groups"); if (result) sGroupMgr->SetGroupDbStoreSize((*result)[0].GetUInt32()+1); + + result = WorldDatabase.Query("SELECT MAX(guid) FROM creature"); + if (result) + _creatureSpawnId = (*result)[0].GetUInt32() + 1; + + result = WorldDatabase.Query("SELECT MAX(guid) FROM gameobject"); + if (result) + _gameObjectSpawnId = (*result)[0].GetUInt32() + 1; } uint32 ObjectMgr::GenerateAuctionID() @@ -6537,59 +6494,29 @@ uint32 ObjectMgr::GenerateMailID() return _mailId++; } -uint32 ObjectMgr::GenerateLowGuid(HighGuid guidhigh) +uint32 ObjectMgr::GeneratePetNumber() { - switch (guidhigh) + return ++_hiPetNumber; +} + +uint32 ObjectMgr::GenerateCreatureSpawnId() +{ + if (_creatureSpawnId >= uint32(0xFFFFFF)) { - case HIGHGUID_ITEM: - { - ASSERT(_hiItemGuid < 0xFFFFFFFE && "Item guid overflow!"); - return _hiItemGuid++; - } - case HIGHGUID_UNIT: - { - ASSERT(_hiCreatureGuid < 0x00FFFFFE && "Creature guid overflow!"); - return _hiCreatureGuid++; - } - case HIGHGUID_PET: - { - ASSERT(_hiPetGuid < 0x00FFFFFE && "Pet guid overflow!"); - return _hiPetGuid++; - } - case HIGHGUID_VEHICLE: - { - ASSERT(_hiVehicleGuid < 0x00FFFFFF && "Vehicle guid overflow!"); - return _hiVehicleGuid++; - } - case HIGHGUID_PLAYER: - { - ASSERT(_hiCharGuid < 0xFFFFFFFE && "Player guid overflow!"); - return _hiCharGuid++; - } - case HIGHGUID_GAMEOBJECT: - { - ASSERT(_hiGoGuid < 0x00FFFFFE && "Gameobject guid overflow!"); - return _hiGoGuid++; - } - case HIGHGUID_CORPSE: - { - ASSERT(_hiCorpseGuid < 0xFFFFFFFE && "Corpse guid overflow!"); - return _hiCorpseGuid++; - } - case HIGHGUID_DYNAMICOBJECT: - { - ASSERT(_hiDoGuid < 0xFFFFFFFE && "DynamicObject guid overflow!"); - return _hiDoGuid++; - } - case HIGHGUID_MO_TRANSPORT: - { - ASSERT(_hiMoTransGuid < 0xFFFFFFFE && "MO Transport guid overflow!"); - return _hiMoTransGuid++; - } - default: - ASSERT(false && "ObjectMgr::GenerateLowGuid - Unknown HIGHGUID type"); - return 0; + TC_LOG_ERROR("misc", "Creature spawn id overflow!! Can't continue, shutting down server. "); + World::StopNow(ERROR_EXIT_CODE); } + return _creatureSpawnId++; +} + +uint32 ObjectMgr::GenerateGameObjectSpawnId() +{ + if (_gameObjectSpawnId >= uint32(0xFFFFFF)) + { + TC_LOG_ERROR("misc", "Creature spawn id overflow!! Can't continue, shutting down server. "); + World::StopNow(ERROR_EXIT_CODE); + } + return _gameObjectSpawnId++; } void ObjectMgr::LoadGameObjectLocales() @@ -6973,49 +6900,6 @@ std::string ObjectMgr::GeneratePetName(uint32 entry) return *(list0.begin()+urand(0, list0.size()-1)) + *(list1.begin()+urand(0, list1.size()-1)); } -uint32 ObjectMgr::GeneratePetNumber() -{ - return ++_hiPetNumber; -} - -void ObjectMgr::LoadCorpses() -{ - uint32 oldMSTime = getMSTime(); - - PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSES)); - if (!result) - { - TC_LOG_INFO("server.loading", ">> Loaded 0 corpses. DB table `corpse` is empty."); - return; - } - - uint32 count = 0; - do - { - Field* fields = result->Fetch(); - uint32 guid = fields[16].GetUInt32(); - CorpseType type = CorpseType(fields[13].GetUInt8()); - if (type >= MAX_CORPSE_TYPE) - { - TC_LOG_ERROR("misc", "Corpse (guid: %u) have wrong corpse type (%u), not loading.", guid, type); - continue; - } - - Corpse* corpse = new Corpse(type); - if (!corpse->LoadCorpseFromDB(guid, fields)) - { - delete corpse; - continue; - } - - sObjectAccessor->AddCorpse(corpse); - ++count; - } - while (result->NextRow()); - - TC_LOG_INFO("server.loading", ">> Loaded %u corpses in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); -} - void ObjectMgr::LoadReputationRewardRate() { uint32 oldMSTime = getMSTime(); @@ -9187,7 +9071,7 @@ VehicleAccessoryList const* ObjectMgr::GetVehicleAccessoryList(Vehicle* veh) con if (Creature* cre = veh->GetBase()->ToCreature()) { // Give preference to GUID-based accessories - VehicleAccessoryContainer::const_iterator itr = _vehicleAccessoryStore.find(cre->GetDBTableGUIDLow()); + VehicleAccessoryContainer::const_iterator itr = _vehicleAccessoryStore.find(cre->GetSpawnId()); if (itr != _vehicleAccessoryStore.end()) return &itr->second; } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 26f3ba7cff..b9d755636c 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -36,12 +36,14 @@ #include "ObjectAccessor.h" #include "ObjectDefines.h" #include "VehicleDefines.h" +#include "ConditionMgr.h" +#include "DBCStores.h" #include #include #include #include -#include "ConditionMgr.h" #include +#include class Item; struct AccessRequirement; @@ -1023,7 +1025,6 @@ class ObjectMgr void LoadExplorationBaseXP(); void LoadPetNames(); void LoadPetNumber(); - void LoadCorpses(); void LoadFishingBaseSkillLevel(); void LoadReputationRewardRate(); @@ -1059,11 +1060,20 @@ class ObjectMgr CreatureBaseStats const* GetCreatureBaseStats(uint8 level, uint8 unitClass); void SetHighestGuids(); - uint32 GenerateLowGuid(HighGuid guidhigh); + + template + inline ObjectGuidGeneratorBase& GetGenerator() + { + static_assert(ObjectGuidTraits::Global, "Only global guid can be generated in ObjectMgr context"); + return GetGuidSequenceGenerator(); + } + uint32 GenerateAuctionID(); uint64 GenerateEquipmentSetGuid(); uint32 GenerateMailID(); uint32 GeneratePetNumber(); + uint32 GenerateCreatureSpawnId(); + uint32 GenerateGameObjectSpawnId(); typedef std::multimap ExclusiveQuestGroups; typedef std::pair ExclusiveQuestGroupsBounds; @@ -1219,7 +1229,6 @@ class ObjectMgr void RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data); uint32 AddGOData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0); uint32 AddCreatureData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0); - bool MoveCreatureData(uint32 guid, uint32 map, const Position& pos); // reserved names void LoadReservedPlayersNames(); @@ -1327,17 +1336,21 @@ class ObjectMgr uint32 _mailId; uint32 _hiPetNumber; - // first free low guid for selected guid type - uint32 _hiCharGuid; - uint32 _hiCreatureGuid; - uint32 _hiPetGuid; - uint32 _hiVehicleGuid; - uint32 _hiItemGuid; - uint32 _hiGoGuid; - uint32 _hiDoGuid; - uint32 _hiCorpseGuid; - uint32 _hiMoTransGuid; + uint32 _creatureSpawnId; + uint32 _gameObjectSpawnId; + // first free low guid for selected guid type + template + inline ObjectGuidGeneratorBase& GetGuidSequenceGenerator() + { + auto itr = _guidGenerators.find(high); + if (itr == _guidGenerators.end()) + itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr>(new ObjectGuidGenerator()))).first; + + return *itr->second; + } + + std::map> _guidGenerators; QuestMap _questTemplates; typedef std::unordered_map GossipTextContainer; diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h index 28670ad496..3572fff63d 100644 --- a/src/server/game/Grids/GridDefines.h +++ b/src/server/game/Grids/GridDefines.h @@ -58,6 +58,7 @@ class Player; // Creature used instead pet to simplify *::Visit templates (not required duplicate code for Creature->Pet case) typedef TYPELIST_4(Player, Creature/*pets*/, Corpse/*resurrectable*/, DynamicObject/*farsight target*/) AllWorldObjectTypes; typedef TYPELIST_4(GameObject, Creature/*except pets*/, DynamicObject, Corpse/*Bones*/) AllGridObjectTypes; +typedef TYPELIST_5(Creature, GameObject, DynamicObject, Pet, Corpse) AllMapStoredObjectTypes; typedef GridRefManager CorpseMapType; typedef GridRefManager CreatureMapType; @@ -80,6 +81,7 @@ typedef NGrid GridTypeMapContainer; typedef TypeMapContainer WorldTypeMapContainer; +typedef TypeUnorderedMapContainer MapStoredObjectTypesContainer; template struct CoordPair diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 16e36d98d3..c2f5f75f98 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -722,18 +722,6 @@ namespace Trinity NearestGameObjectTypeInObjectRangeCheck(NearestGameObjectTypeInObjectRangeCheck const&); }; - class GameObjectWithDbGUIDCheck - { - public: - GameObjectWithDbGUIDCheck(WorldObject const& /*obj*/, uint32 db_guid) : i_db_guid(db_guid) { } - bool operator()(GameObject const* go) const - { - return go->GetDBTableGUIDLow() == i_db_guid; - } - private: - uint32 i_db_guid; - }; - // Unit checks class MostHPMissingInRange @@ -835,18 +823,6 @@ namespace Trinity float i_range; }; - class CreatureWithDbGUIDCheck - { - public: - CreatureWithDbGUIDCheck(WorldObject const* /*obj*/, uint32 lowguid) : i_lowguid(lowguid) { } - bool operator()(Creature* u) - { - return u->GetDBTableGUIDLow() == i_lowguid; - } - private: - uint32 i_lowguid; - }; - class AnyFriendlyUnitInObjectRangeCheck { public: diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index c7e1056a3e..d0ae90d002 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -139,7 +139,7 @@ void LoadHelper(CellCorpseSet const& cell_corpses, CellCoord &cell, CorpseMapTyp if (itr->second != map->GetInstanceId()) continue; - ObjectGuid player_guid(HIGHGUID_PLAYER, itr->first); + ObjectGuid player_guid(HighGuid::Player, itr->first); Corpse* obj = sObjectAccessor->GetCorpseForPlayerGUID(player_guid); if (!obj) diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 7e3b758d92..cc9ef29a8e 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -93,7 +93,7 @@ bool Group::Create(Player* leader) ObjectGuid leaderGuid = leader->GetGUID(); uint32 lowguid = sGroupMgr->GenerateGroupId(); - m_guid = ObjectGuid(HIGHGUID_GROUP, lowguid); + m_guid = ObjectGuid(HighGuid::Group, lowguid); m_leaderGuid = leaderGuid; m_leaderName = leader->GetName(); leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); @@ -162,15 +162,15 @@ bool Group::Create(Player* leader) void Group::LoadGroupFromDB(Field* fields) { m_dbStoreId = fields[16].GetUInt32(); - m_guid = ObjectGuid(HIGHGUID_GROUP, sGroupMgr->GenerateGroupId()); - m_leaderGuid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()); + m_guid = ObjectGuid(HighGuid::Group, sGroupMgr->GenerateGroupId()); + m_leaderGuid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32()); // group leader not exist if (!sObjectMgr->GetPlayerNameByGUID(m_leaderGuid, m_leaderName)) return; m_lootMethod = LootMethod(fields[1].GetUInt8()); - m_looterGuid = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32()); + m_looterGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32()); m_lootThreshold = ItemQualities(fields[3].GetUInt8()); for (uint8 i = 0; i < TARGETICONCOUNT; ++i) @@ -192,7 +192,7 @@ void Group::LoadGroupFromDB(Field* fields) else m_raidDifficulty = Difficulty(r_diff); - m_masterLooterGuid = ObjectGuid(HIGHGUID_PLAYER, fields[15].GetUInt32()); + m_masterLooterGuid = ObjectGuid(HighGuid::Player, fields[15].GetUInt32()); if (m_groupType & GROUPTYPE_LFG) sLFGMgr->_LoadFromDB(fields, GetGUID()); @@ -201,7 +201,7 @@ void Group::LoadGroupFromDB(Field* fields) void Group::LoadMemberFromDB(uint32 guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles) { MemberSlot member; - member.guid = ObjectGuid(HIGHGUID_PLAYER, guidLow); + member.guid = ObjectGuid(HighGuid::Player, guidLow); // skip non-existed member if (!sObjectMgr->GetPlayerNameByGUID(member.guid, member.name)) @@ -659,7 +659,7 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid) // Update the group leader PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_LEADER); - stmt->setUInt32(0, newLeader->GetGUIDLow()); + stmt->setUInt32(0, newLeader->GetGUID().GetCounter()); stmt->setUInt32(1, m_dbStoreId); trans->Append(stmt); @@ -925,7 +925,8 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject) //roll for over-threshold item if it's one-player loot if (item->Quality >= uint32(m_lootThreshold)) { - ObjectGuid newitemGUID = ObjectGuid(HIGHGUID_ITEM, sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM)); + ObjectGuid newitemGUID = ObjectGuid::Create(sObjectMgr->GetGenerator().Generate()); + Roll* r = new Roll(newitemGUID, *i); //a vector is filled with only near party members @@ -1009,7 +1010,8 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject) continue; } - ObjectGuid newitemGUID = ObjectGuid(HIGHGUID_ITEM, sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM)); + ObjectGuid newitemGUID = ObjectGuid::Create(sObjectMgr->GetGenerator().Generate()); + Roll* r = new Roll(newitemGUID, *i); //a vector is filled with only near party members @@ -1070,7 +1072,8 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject) //roll for over-threshold item if it's one-player loot if (item->Quality >= uint32(m_lootThreshold)) { - ObjectGuid newitemGUID = ObjectGuid(HIGHGUID_ITEM, sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM)); + ObjectGuid newitemGUID = ObjectGuid::Create(sObjectMgr->GetGenerator().Generate()); + Roll* r = new Roll(newitemGUID, *i); for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) @@ -1145,7 +1148,8 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject) continue; item = sObjectMgr->GetItemTemplate(i->itemid); - ObjectGuid newitemGUID = ObjectGuid(HIGHGUID_ITEM, sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM)); + ObjectGuid newitemGUID = ObjectGuid::Create(sObjectMgr->GetGenerator().Generate()); + Roll* r = new Roll(newitemGUID, *i); for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 04eb99b309..fab22b30f4 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -194,10 +194,10 @@ void Guild::EventLogEntry::WritePacket(WorldPacket& data) const // Event type data << uint8(m_eventType); // Player 1 - data << ObjectGuid(HIGHGUID_PLAYER, m_playerGuid1); + data << ObjectGuid(HighGuid::Player, m_playerGuid1); // Player 2 not for left/join guild events if (m_eventType != GUILD_EVENT_LOG_JOIN_GUILD && m_eventType != GUILD_EVENT_LOG_LEAVE_GUILD) - data << ObjectGuid(HIGHGUID_PLAYER, m_playerGuid2); + data << ObjectGuid(HighGuid::Player, m_playerGuid2); // New Rank - only for promote/demote guild events if (m_eventType == GUILD_EVENT_LOG_PROMOTE_PLAYER || m_eventType == GUILD_EVENT_LOG_DEMOTE_PLAYER) data << uint8(m_newRank); @@ -233,7 +233,7 @@ void Guild::BankEventLogEntry::SaveToDB(SQLTransaction& trans) const void Guild::BankEventLogEntry::WritePacket(WorldPacket& data) const { data << uint8(m_eventType); - data << ObjectGuid(HIGHGUID_PLAYER, m_playerGuid); + data << ObjectGuid(HighGuid::Player, m_playerGuid); switch (m_eventType) { @@ -554,7 +554,7 @@ bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* item) stmt->setUInt32(0, m_guildId); stmt->setUInt8 (1, m_tabId); stmt->setUInt8 (2, slotId); - stmt->setUInt32(3, item->GetGUIDLow()); + stmt->setUInt32(3, item->GetGUID().GetCounter()); CharacterDatabase.ExecuteOrAppend(trans, stmt); item->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty); @@ -893,7 +893,7 @@ void Guild::PlayerMoveItemData::LogBankEvent(SQLTransaction& trans, MoveItemData { ASSERT(pFrom); // Bank -> Char - m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_WITHDRAW_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUIDLow(), + m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_WITHDRAW_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUID().GetCounter(), pFrom->GetItem()->GetEntry(), count); } @@ -978,11 +978,11 @@ void Guild::BankMoveItemData::LogBankEvent(SQLTransaction& trans, MoveItemData* ASSERT(pFrom->GetItem()); if (pFrom->IsBank()) // Bank -> Bank - m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_MOVE_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUIDLow(), + m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_MOVE_ITEM, pFrom->GetContainer(), m_pPlayer->GetGUID().GetCounter(), pFrom->GetItem()->GetEntry(), count, m_container); else // Char -> Bank - m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_DEPOSIT_ITEM, m_container, m_pPlayer->GetGUIDLow(), + m_pGuild->_LogBankEvent(trans, GUILD_BANK_LOG_DEPOSIT_ITEM, m_container, m_pPlayer->GetGUID().GetCounter(), pFrom->GetItem()->GetEntry(), count); } @@ -993,7 +993,7 @@ void Guild::BankMoveItemData::LogAction(MoveItemData* pFrom) const { sLog->outCommand(m_pPlayer->GetSession()->GetAccountId(), "GM %s (Guid: %u) (Account: %u) deposit item: %s (Entry: %d Count: %u) to guild bank named: %s (Guild ID: %u)", - m_pPlayer->GetName().c_str(), m_pPlayer->GetGUIDLow(), m_pPlayer->GetSession()->GetAccountId(), + m_pPlayer->GetName().c_str(), m_pPlayer->GetGUID().GetCounter(), m_pPlayer->GetSession()->GetAccountId(), pFrom->GetItem()->GetTemplate()->Name1.c_str(), pFrom->GetItem()->GetEntry(), pFrom->GetItem()->GetCount(), m_pGuild->GetName().c_str(), m_pGuild->GetId()); } @@ -1522,7 +1522,7 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name) Player* player = session->GetPlayer(); // Do not show invitations from ignored players - if (pInvitee->GetSocial()->HasIgnore(player->GetGUIDLow())) + if (pInvitee->GetSocial()->HasIgnore(player->GetGUID().GetCounter())) return; if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && pInvitee->GetTeam() != player->GetTeam()) @@ -1554,7 +1554,7 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name) TC_LOG_DEBUG("guild", "Player %s invited %s to join his Guild", player->GetName().c_str(), name.c_str()); pInvitee->SetGuildIdInvited(m_id); - _LogEvent(GUILD_EVENT_LOG_INVITE_PLAYER, player->GetGUIDLow(), pInvitee->GetGUIDLow()); + _LogEvent(GUILD_EVENT_LOG_INVITE_PLAYER, player->GetGUID().GetCounter(), pInvitee->GetGUID().GetCounter()); WorldPacket data(SMSG_GUILD_INVITE, 8 + 10); // Guess size data << player->GetName(); @@ -1595,7 +1595,7 @@ void Guild::HandleLeaveMember(WorldSession* session) { DeleteMember(player->GetGUID(), false, false); - _LogEvent(GUILD_EVENT_LOG_LEAVE_GUILD, player->GetGUIDLow()); + _LogEvent(GUILD_EVENT_LOG_LEAVE_GUILD, player->GetGUID().GetCounter()); _BroadcastEvent(GE_LEFT, player->GetGUID(), player->GetName().c_str()); SendCommandResult(session, GUILD_COMMAND_QUIT, ERR_GUILD_COMMAND_SUCCESS, m_name); @@ -1629,7 +1629,7 @@ void Guild::HandleRemoveMember(WorldSession* session, std::string const& name) ObjectGuid guid = member->GetGUID(); // After call to DeleteMember pointer to member becomes invalid DeleteMember(guid, false, true); - _LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUIDLow(), guid.GetCounter()); + _LogEvent(GUILD_EVENT_LOG_UNINVITE_PLAYER, player->GetGUID().GetCounter(), guid.GetCounter()); _BroadcastEvent(GE_REMOVED, ObjectGuid::Empty, name.c_str(), player->GetName().c_str()); } } @@ -1683,7 +1683,7 @@ void Guild::HandleUpdateMemberRank(WorldSession* session, std::string const& nam uint32 newRankId = member->GetRankId() + (demote ? 1 : -1); member->ChangeRank(newRankId); - _LogEvent(demote ? GUILD_EVENT_LOG_DEMOTE_PLAYER : GUILD_EVENT_LOG_PROMOTE_PLAYER, player->GetGUIDLow(), member->GetGUID().GetCounter(), newRankId); + _LogEvent(demote ? GUILD_EVENT_LOG_DEMOTE_PLAYER : GUILD_EVENT_LOG_PROMOTE_PLAYER, player->GetGUID().GetCounter(), member->GetGUID().GetCounter(), newRankId); _BroadcastEvent(demote ? GE_DEMOTION : GE_PROMOTION, ObjectGuid::Empty, player->GetName().c_str(), name.c_str(), _GetRankName(newRankId).c_str()); } } @@ -1743,7 +1743,7 @@ void Guild::HandleMemberDepositMoney(WorldSession* session, uint32 amount) player->ModifyMoney(-int32(amount)); player->SaveGoldToDB(trans); - _LogBankEvent(trans, GUILD_BANK_LOG_DEPOSIT_MONEY, uint8(0), player->GetGUIDLow(), amount); + _LogBankEvent(trans, GUILD_BANK_LOG_DEPOSIT_MONEY, uint8(0), player->GetGUID().GetCounter(), amount); CharacterDatabase.CommitTransaction(trans); @@ -1794,7 +1794,7 @@ bool Guild::HandleMemberWithdrawMoney(WorldSession* session, uint32 amount, bool _ModifyBankMoney(trans, amount, false); // Log guild bank event - _LogBankEvent(trans, repair ? GUILD_BANK_LOG_REPAIR_MONEY : GUILD_BANK_LOG_WITHDRAW_MONEY, uint8(0), player->GetGUIDLow(), amount); + _LogBankEvent(trans, repair ? GUILD_BANK_LOG_REPAIR_MONEY : GUILD_BANK_LOG_WITHDRAW_MONEY, uint8(0), player->GetGUID().GetCounter(), amount); CharacterDatabase.CommitTransaction(trans); std::string aux = ByteArrayToHexStr(reinterpret_cast(&m_bankMoney), 8, true); @@ -1942,7 +1942,7 @@ bool Guild::LoadFromDB(Field* fields) { m_id = fields[0].GetUInt32(); m_name = fields[1].GetString(); - m_leaderGuid = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32()); + m_leaderGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32()); m_emblemInfo.LoadFromDB(fields); m_info = fields[8].GetString(); m_motd = fields[9].GetString(); @@ -1973,7 +1973,7 @@ void Guild::LoadRankFromDB(Field* fields) bool Guild::LoadMemberFromDB(Field* fields) { uint32 lowguid = fields[1].GetUInt32(); - Member *member = new Member(m_id, ObjectGuid(HIGHGUID_PLAYER, lowguid), fields[2].GetUInt8()); + Member *member = new Member(m_id, ObjectGuid(HighGuid::Player, lowguid), fields[2].GetUInt8()); if (!member->LoadFromDB(fields)) { _DeleteMemberFromDB(lowguid); @@ -2152,7 +2152,7 @@ void Guild::BroadcastToGuild(WorldSession* session, bool officerOnly, std::strin for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr) if (Player* player = itr->second->FindConnectedPlayer()) if (player->GetSession() && _HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) && - !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUIDLow())) + !player->GetSocial()->HasIgnore(session->GetPlayer()->GetGUID().GetCounter())) player->GetSession()->SendPacket(&data); } } @@ -2692,7 +2692,7 @@ void Guild::_MoveItems(MoveItemData* pSrc, MoveItemData* pDest, uint32 splitedAm if (pItemSrc->GetCount() == 0) { TC_LOG_FATAL("guild", "Guild::SwapItems: Player %s(GUIDLow: %u) tried to move item %u from tab %u slot %u to tab %u slot %u, but item %u has a stack of zero!", - player->GetName(), player->GetGUIDLow(), pItemSrc->GetEntry(), tabId, slotId, destTabId, destSlotId, pItemSrc->GetEntry()); + player->GetName(), player->GetGUID().GetCounter(), pItemSrc->GetEntry(), tabId, slotId, destTabId, destSlotId, pItemSrc->GetEntry()); //return; // Commented out for now, uncomment when it's verified that this causes a crash!! } // */ diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index ead05033a3..5616eb89b0 100644 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -125,7 +125,7 @@ void WorldSession::HandleArenaTeamInviteOpcode(WorldPacket& recvData) } // OK result but don't send invite - if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow())) + if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUID().GetCounter())) return; if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && player->GetTeam() != GetPlayer()->GetTeam()) diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 8ee14d6baa..aa51b19a65 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -149,7 +149,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) if (bid > MAX_MONEY_AMOUNT || buyout > MAX_MONEY_AMOUNT) { - TC_LOG_DEBUG("network", "WORLD: HandleAuctionSellItem - Player %s (GUID %u) attempted to sell item with higher price than max gold amount.", _player->GetName().c_str(), _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "WORLD: HandleAuctionSellItem - Player %s (GUID %u) attempted to sell item with higher price than max gold amount.", _player->GetName().c_str(), _player->GetGUID().GetCounter()); SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR); return; } @@ -202,7 +202,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) if (itemEntry == 0) itemEntry = item->GetTemplate()->ItemId; - if (sAuctionMgr->GetAItem(item->GetGUIDLow()) || !item->CanBeTraded() || item->IsNotEmptyBag() || + if (sAuctionMgr->GetAItem(item->GetGUID().GetCounter()) || !item->CanBeTraded() || item->IsNotEmptyBag() || item->GetTemplate()->Flags & ITEM_PROTO_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION) || item->GetCount() < count[i] || itemEntry != item->GetTemplate()->ItemId) { @@ -273,10 +273,10 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) } AH->Id = sObjectMgr->GenerateAuctionID(); - AH->itemGUIDLow = item->GetGUIDLow(); + AH->itemGUIDLow = item->GetGUID().GetCounter(); AH->itemEntry = item->GetEntry(); AH->itemCount = item->GetCount(); - AH->owner = _player->GetGUIDLow(); + AH->owner = _player->GetGUID().GetCounter(); AH->startbid = bid; AH->bidder = 0; AH->bid = 0; @@ -286,7 +286,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) AH->auctionHouseEntry = auctionHouseEntry; TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) to auctioneer %u with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", - _player->GetName().c_str(), _player->GetGUIDLow(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUIDLow(), AH->auctioneer, item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); + _player->GetName().c_str(), _player->GetGUID().GetCounter(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUID().GetCounter(), AH->auctioneer, item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); sAuctionMgr->AddAItem(item); auctionHouse->AddAuction(AH); @@ -321,10 +321,10 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) } AH->Id = sObjectMgr->GenerateAuctionID(); - AH->itemGUIDLow = newItem->GetGUIDLow(); + AH->itemGUIDLow = newItem->GetGUID().GetCounter(); AH->itemEntry = newItem->GetEntry(); AH->itemCount = newItem->GetCount(); - AH->owner = _player->GetGUIDLow(); + AH->owner = _player->GetGUID().GetCounter(); AH->startbid = bid; AH->bidder = 0; AH->bid = 0; @@ -334,7 +334,7 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) AH->auctionHouseEntry = auctionHouseEntry; TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) to auctioneer %u with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", - _player->GetName().c_str(), _player->GetGUIDLow(), newItem->GetTemplate()->Name1.c_str(), newItem->GetEntry(), newItem->GetGUIDLow(), AH->auctioneer, newItem->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); + _player->GetName().c_str(), _player->GetGUID().GetCounter(), newItem->GetTemplate()->Name1.c_str(), newItem->GetEntry(), newItem->GetGUID().GetCounter(), AH->auctioneer, newItem->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); sAuctionMgr->AddAItem(newItem); auctionHouse->AddAuction(AH); @@ -410,7 +410,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData) AuctionEntry* auction = auctionHouse->GetAuction(auctionId); Player* player = GetPlayer(); - if (!auction || auction->owner == player->GetGUIDLow()) + if (!auction || auction->owner == player->GetGUID().GetCounter()) { //you cannot bid your own auction: SendAuctionCommandResult(0, AUCTION_PLACE_BID, ERR_AUCTION_BID_OWN); @@ -418,7 +418,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData) } // impossible have online own another character (use this for speedup check in case online owner) - ObjectGuid ownerGuid(HIGHGUID_PLAYER, auction->owner); + ObjectGuid ownerGuid(HighGuid::Player, auction->owner); Player* auction_owner = ObjectAccessor::FindPlayer(ownerGuid); if (!auction_owner && sObjectMgr->GetPlayerAccountIdByGUID(ownerGuid) == player->GetSession()->GetAccountId()) { @@ -452,7 +452,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData) { if (auction->bidder > 0) { - if (auction->bidder == player->GetGUIDLow()) + if (auction->bidder == player->GetGUID().GetCounter()) player->ModifyMoney(-int32(price - auction->bid)); else { @@ -464,7 +464,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData) else player->ModifyMoney(-int32(price)); - auction->bidder = player->GetGUIDLow(); + auction->bidder = player->GetGUID().GetCounter(); auction->bid = price; GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID, price); @@ -479,7 +479,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData) else { //buyout: - if (player->GetGUIDLow() == auction->bidder) + if (player->GetGUID().GetCounter() == auction->bidder) player->ModifyMoney(-int32(auction->buyout - auction->bid)); else { @@ -487,7 +487,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData) if (auction->bidder) //buyout for bidded auction .. sAuctionMgr->SendAuctionOutbiddedMail(auction, auction->buyout, GetPlayer(), trans); } - auction->bidder = player->GetGUIDLow(); + auction->bidder = player->GetGUID().GetCounter(); auction->bid = auction->buyout; GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_AUCTION_BID, auction->buyout); @@ -535,7 +535,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket& recvData) Player* player = GetPlayer(); SQLTransaction trans = CharacterDatabase.BeginTransaction(); - if (auction && auction->owner == player->GetGUIDLow()) + if (auction && auction->owner == player->GetGUID().GetCounter()) { Item* pItem = sAuctionMgr->GetAItem(auction->itemGUIDLow); if (pItem) @@ -566,7 +566,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPacket& recvData) { SendAuctionCommandResult(0, AUCTION_CANCEL, ERR_AUCTION_DATABASE_ERROR); //this code isn't possible ... maybe there should be assert - TC_LOG_ERROR("network", "CHEATER : %u, he tried to cancel auction (id: %u) of another player, or auction is NULL", player->GetGUIDLow(), auctionId); + TC_LOG_ERROR("network", "CHEATER : %u, he tried to cancel auction (id: %u) of another player, or auction is NULL", player->GetGUID().GetCounter(), auctionId); return; } diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 2ec89ac2a2..fec0b8e0d4 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -86,7 +86,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) if (!sBattlemasterListStore.LookupEntry(bgTypeId_)) { - TC_LOG_ERROR("network", "Battleground: invalid bgtype (%u) received. possible cheater? player guid %u", bgTypeId_, _player->GetGUIDLow()); + TC_LOG_ERROR("network", "Battleground: invalid bgtype (%u) received. possible cheater? player guid %u", bgTypeId_, _player->GetGUID().GetCounter()); return; } @@ -194,7 +194,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, ginfo->ArenaType, 0); SendPacket(&data); TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for bg queue type %u bg type %u: GUID %u, NAME %s", - bgQueueTypeId, bgTypeId, _player->GetGUIDLow(), _player->GetName().c_str()); + bgQueueTypeId, bgTypeId, _player->GetGUID().GetCounter(), _player->GetName().c_str()); } else { @@ -242,7 +242,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); member->GetSession()->SendPacket(&data); TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for bg queue type %u bg type %u: GUID %u, NAME %s", - bgQueueTypeId, bgTypeId, member->GetGUIDLow(), member->GetName().c_str()); + bgQueueTypeId, bgTypeId, member->GetGUID().GetCounter(), member->GetName().c_str()); } TC_LOG_DEBUG("bg.battleground", "Battleground: group end"); } @@ -335,7 +335,7 @@ void WorldSession::HandleBattlefieldListOpcode(WorldPacket &recvData) BattlemasterListEntry const* bl = sBattlemasterListStore.LookupEntry(bgTypeId); if (!bl) { - TC_LOG_DEBUG("bg.battleground", "BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, GUID: %u) received.", bgTypeId, _player->GetName().c_str(), _player->GetGUIDLow()); + TC_LOG_DEBUG("bg.battleground", "BattlegroundHandler: invalid bgtype (%u) with player (Name: %s, GUID: %u) received.", bgTypeId, _player->GetName().c_str(), _player->GetGUID().GetCounter()); return; } @@ -424,13 +424,13 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data2, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS); _player->GetSession()->SendPacket(&data2); action = 0; - TC_LOG_DEBUG("bg.battleground", "Player %s (%u) has a deserter debuff, do not port him to battleground!", _player->GetName().c_str(), _player->GetGUIDLow()); + TC_LOG_DEBUG("bg.battleground", "Player %s (%u) has a deserter debuff, do not port him to battleground!", _player->GetName().c_str(), _player->GetGUID().GetCounter()); } //if player don't match battleground max level, then do not allow him to enter! (this might happen when player leveled up during his waiting in queue if (_player->getLevel() > bg->GetMaxLevel()) { TC_LOG_ERROR("network", "Player %s (%u) has level (%u) higher than maxlevel (%u) of battleground (%u)! Do not port him to battleground!", - _player->GetName().c_str(), _player->GetGUIDLow(), _player->getLevel(), bg->GetMaxLevel(), bg->GetTypeID()); + _player->GetName().c_str(), _player->GetGUID().GetCounter(), _player->getLevel(), bg->GetMaxLevel(), bg->GetTypeID()); action = 0; } } @@ -480,7 +480,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) sBattlegroundMgr->SendToBattleground(_player, ginfo.IsInvitedToBGInstanceGUID, bgTypeId); // add only in HandleMoveWorldPortAck() // bg->AddPlayer(_player, team); - TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) joined battle for bg %u, bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUIDLow(), bg->GetInstanceID(), bg->GetTypeID(), bgQueueTypeId); + TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) joined battle for bg %u, bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUID().GetCounter(), bg->GetInstanceID(), bg->GetTypeID(), bgQueueTypeId); } else // leave queue { @@ -505,7 +505,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) if (!ginfo.ArenaType) sBattlegroundMgr->ScheduleQueueUpdate(ginfo.ArenaMatchmakerRating, ginfo.ArenaType, bgQueueTypeId, bgTypeId, bracketEntry->GetBracketId()); SendPacket(&data); - TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) left queue for bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUIDLow(), bg->GetTypeID(), bgQueueTypeId); + TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) left queue for bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUID().GetCounter(), bg->GetTypeID(), bgQueueTypeId); } } @@ -741,7 +741,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) member->GetSession()->SendPacket(&data); sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, err); member->GetSession()->SendPacket(&data); - TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena as group bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, member->GetGUIDLow(), member->GetName().c_str()); + TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena as group bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, member->GetGUID().GetCounter(), member->GetName().c_str()); } } else @@ -754,7 +754,7 @@ void WorldSession::HandleBattlemasterJoinArena(WorldPacket& recvData) // send status packet (in queue) sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_WAIT_QUEUE, avgTime, 0, arenatype, 0); SendPacket(&data); - TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena, skirmish, bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, _player->GetGUIDLow(), _player->GetName().c_str()); + TC_LOG_DEBUG("bg.battleground", "Battleground: player joined queue for arena, skirmish, bg queue type %u bg type %u: GUID %u, NAME %s", bgQueueTypeId, bgTypeId, _player->GetGUID().GetCounter(), _player->GetName().c_str()); } sBattlegroundMgr->ScheduleQueueUpdate(matchmakerRating, arenatype, bgQueueTypeId, bgTypeId, bracketEntry->GetBracketId()); } diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index 0cd170dfba..e9b3bea599 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -447,7 +447,7 @@ void WorldSession::HandleCalendarEventInvite(WorldPacket& recvData) if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) { Field* fields = result->Fetch(); - inviteeGuid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()); + inviteeGuid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32()); inviteeTeam = Player::TeamForRace(fields[1].GetUInt8()); inviteeGuildId = Player::GetGuildIdFromDB(inviteeGuid); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index b6e8d3c3ed..61b2837dc1 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -219,7 +219,7 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) { do { - ObjectGuid guid(HIGHGUID_PLAYER, (*result)[0].GetUInt32()); + ObjectGuid guid(HighGuid::Player, (*result)[0].GetUInt32()); TC_LOG_INFO("network", "Loading %s from account %u.", guid.ToString().c_str(), GetAccountId()); if (Player::BuildEnumData(result, &data)) { @@ -601,7 +601,8 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte Player newChar(this); newChar.GetMotionMaster()->Initialize(); - if (!newChar.Create(sObjectMgr->GenerateLowGuid(HIGHGUID_PLAYER), createInfo)) + if (!newChar.Create(sObjectMgr->GetGenerator().Generate(), createInfo)) + { // Player not create (race/class/etc problem?) newChar.CleanupsBeforeDelete(); @@ -638,7 +639,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte SendCharCreate(CHAR_CREATE_SUCCESS); - TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUIDLow()); + TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().GetCounter()); sScriptMgr->OnPlayerCreate(&newChar); sWorld->AddCharacterNameData(newChar.GetGUID(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel()); @@ -832,7 +833,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) TC_LOG_DEBUG("network", "WORLD: Sent server info"); } - //QueryResult* result = CharacterDatabase.PQuery("SELECT guildid, rank FROM guild_member WHERE guid = '%u'", pCurrChar->GetGUIDLow()); + //QueryResult* result = CharacterDatabase.PQuery("SELECT guildid, rank FROM guild_member WHERE guid = '%u'", pCurrChar->GetGUID().GetCounter()); if (PreparedQueryResult resultGuild = holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GUILD)) { Field* fields = resultGuild->Fetch(); @@ -852,7 +853,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) else { // remove wrong guild data - TC_LOG_ERROR("network", "Player %s (GUID: %u) marked as member of not existing guild (id: %u), removing guild membership for player.", pCurrChar->GetName().c_str(), pCurrChar->GetGUIDLow(), pCurrChar->GetGuildId()); + TC_LOG_ERROR("network", "Player %s (GUID: %u) marked as member of not existing guild (id: %u), removing guild membership for player.", pCurrChar->GetName().c_str(), pCurrChar->GetGUID().GetCounter(), pCurrChar->GetGuildId()); pCurrChar->SetInGuild(0); } } @@ -898,7 +899,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ONLINE); - stmt->setUInt32(0, pCurrChar->GetGUIDLow()); + stmt->setUInt32(0, pCurrChar->GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); @@ -919,7 +920,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) } // friend status - sSocialMgr->SendFriendStatus(pCurrChar, FRIEND_ONLINE, pCurrChar->GetGUIDLow(), true); + sSocialMgr->SendFriendStatus(pCurrChar, FRIEND_ONLINE, pCurrChar->GetGUID().GetCounter(), true); // Place character in world (and load zone) before some object loading pCurrChar->LoadCorpse(); @@ -981,7 +982,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) std::string IP_str = GetRemoteAddress(); TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Login Character:[%s] (GUID: %u) Level: %d", - GetAccountId(), IP_str.c_str(), pCurrChar->GetName().c_str(), pCurrChar->GetGUIDLow(), pCurrChar->getLevel()); + GetAccountId(), IP_str.c_str(), pCurrChar->GetName().c_str(), pCurrChar->GetGUID().GetCounter(), pCurrChar->getLevel()); if (!pCurrChar->IsStandState() && !pCurrChar->HasUnitState(UNIT_STATE_STUNNED)) pCurrChar->SetStandState(UNIT_STAND_STATE_STAND); diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 2acbaba1f6..e13b417215 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -115,7 +115,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) break; default: TC_LOG_ERROR("network", "Player %s (GUID: %u) sent a chatmessage with an invalid language/message type combination", - GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow()); + GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter()); recvData.rfinish(); return; @@ -226,7 +226,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY) && !ChatHandler(this).isValidChatMessage(msg.c_str())) { TC_LOG_ERROR("network", "Player %s (GUID: %u) sent a chatmessage with an invalid link: %s", GetPlayer()->GetName().c_str(), - GetPlayer()->GetGUIDLow(), msg.c_str()); + GetPlayer()->GetGUID().GetCounter(), msg.c_str()); if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_KICK)) KickPlayer(); diff --git a/src/server/game/Handlers/CombatHandler.cpp b/src/server/game/Handlers/CombatHandler.cpp index ac33880cb9..78aeaa1b41 100644 --- a/src/server/game/Handlers/CombatHandler.cpp +++ b/src/server/game/Handlers/CombatHandler.cpp @@ -75,7 +75,7 @@ void WorldSession::HandleSetSheathedOpcode(WorldPacket& recvData) uint32 sheathed; recvData >> sheathed; - //TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_SETSHEATHED Message guidlow:%u value1:%u", GetPlayer()->GetGUIDLow(), sheathed); + //TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_SETSHEATHED Message guidlow:%u value1:%u", GetPlayer()->GetGUID().GetCounter(), sheathed); if (sheathed >= MAX_SHEATH_STATE) { diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp index 954fb66a9d..2f39a91afb 100644 --- a/src/server/game/Handlers/DuelHandler.cpp +++ b/src/server/game/Handlers/DuelHandler.cpp @@ -40,8 +40,8 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket) return; //TC_LOG_DEBUG("network", "WORLD: Received CMSG_DUEL_ACCEPTED"); - TC_LOG_DEBUG("network", "Player 1 is: %u (%s)", player->GetGUIDLow(), player->GetName().c_str()); - TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", plTarget->GetGUIDLow(), plTarget->GetName().c_str()); + TC_LOG_DEBUG("network", "Player 1 is: %u (%s)", player->GetGUID().GetCounter(), player->GetName().c_str()); + TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", plTarget->GetGUID().GetCounter(), plTarget->GetName().c_str()); time_t now = time(NULL); player->duel->startTimer = now; diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index f8531adeb8..30764fea2a 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -107,7 +107,7 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket& recvData) return; } - if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow())) + if (player->GetSocial()->HasIgnore(GetPlayer()->GetGUID().GetCounter())) { SendPartyResult(PARTY_OP_INVITE, membername, ERR_IGNORING_YOU_S); return; @@ -210,7 +210,7 @@ void WorldSession::HandleGroupAcceptOpcode(WorldPacket& recvData) if (group->GetLeaderGUID() == GetPlayer()->GetGUID()) { - TC_LOG_ERROR("network", "HandleGroupAcceptOpcode: player %s(%d) tried to accept an invite to his own group", GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow()); + TC_LOG_ERROR("network", "HandleGroupAcceptOpcode: player %s(%d) tried to accept an invite to his own group", GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter()); return; } @@ -283,7 +283,7 @@ void WorldSession::HandleGroupUninviteGuidOpcode(WorldPacket& recvData) if (guid == GetPlayer()->GetGUID()) { TC_LOG_ERROR("network", "WorldSession::HandleGroupUninviteGuidOpcode: leader %s(%d) tried to uninvite himself from the group.", - GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow()); + GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter()); return; } @@ -328,7 +328,7 @@ void WorldSession::HandleGroupUninviteOpcode(WorldPacket& recvData) if (GetPlayer()->GetName() == membername) { TC_LOG_ERROR("network", "WorldSession::HandleGroupUninviteOpcode: leader %s(%d) tried to uninvite himself from the group.", - GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow()); + GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter()); return; } diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 672e1c6992..13987c983f 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1157,7 +1157,7 @@ void WorldSession::HandleWrapItemOpcode(WorldPacket& recvData) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_GIFT); stmt->setUInt32(0, item->GetOwnerGUID().GetCounter()); - stmt->setUInt32(1, item->GetGUIDLow()); + stmt->setUInt32(1, item->GetGUID().GetCounter()); stmt->setUInt32(2, item->GetEntry()); stmt->setUInt32(3, item->GetUInt32Value(ITEM_FIELD_FLAGS)); trans->Append(stmt); diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 18ad2e828f..9876e93939 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -110,7 +110,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/) switch (guid.GetHigh()) { - case HIGHGUID_GAMEOBJECT: + case HighGuid::GameObject: { GameObject* go = GetPlayer()->GetMap()->GetGameObject(guid); @@ -120,7 +120,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/) break; } - case HIGHGUID_CORPSE: // remove insignia ONLY in BG + case HighGuid::Corpse: // remove insignia ONLY in BG { Corpse* bones = ObjectAccessor::GetCorpse(*player, guid); @@ -132,7 +132,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/) break; } - case HIGHGUID_ITEM: + case HighGuid::Item: { if (Item* item = player->GetItemByGuid(guid)) { @@ -141,8 +141,8 @@ void WorldSession::HandleLootMoneyOpcode(WorldPacket& /*recvData*/) } break; } - case HIGHGUID_UNIT: - case HIGHGUID_VEHICLE: + case HighGuid::Unit: + case HighGuid::Vehicle: { Creature* creature = player->GetMap()->GetCreature(guid); bool lootAllowed = creature && creature->IsAlive() == (player->getClass() == CLASS_ROGUE && creature->loot.loot_type == LOOT_PICKPOCKETING); diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index d55af4bac3..5f25f57add 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -110,7 +110,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) { TC_LOG_INFO("network", "Player %u is sending mail to %s (GUID: not existed!) with subject %s " "and body %s includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u", - player->GetGUIDLow(), receiverName.c_str(), subject.c_str(), body.c_str(), + player->GetGUID().GetCounter(), receiverName.c_str(), subject.c_str(), body.c_str(), items_count, money, COD, stationery, package); player->SendMailResult(0, MAIL_SEND, MAIL_ERR_RECIPIENT_NOT_FOUND); return; @@ -118,7 +118,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) TC_LOG_INFO("network", "Player %u is sending mail to %s (%s) with subject %s and body %s " "includes %u items, %u copper and %u COD copper with unk1 = %u, unk2 = %u", - player->GetGUIDLow(), receiverName.c_str(), receiverGuid.ToString().c_str(), subject.c_str(), + player->GetGUID().GetCounter(), receiverName.c_str(), receiverGuid.ToString().c_str(), subject.c_str(), body.c_str(), items_count, money, COD, stationery, package); if (player->GetGUID() == receiverGuid) @@ -293,7 +293,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) if (log) { sLog->outCommand(GetAccountId(), "GM %s (GUID: %u) (Account: %u) mail item: %s (Entry: %u Count: %u) " - "to: %s (%s) (Account: %u)", GetPlayerName().c_str(), GetGuidLow(), GetAccountId(), + "to: %s (%s) (Account: %u)", GetPlayerName().c_str(), GetGUIDLow(), GetAccountId(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetCount(), receiverName.c_str(), receiverGuid.ToString().c_str(), receiverAccountId); } @@ -315,7 +315,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) if (log && money > 0) { sLog->outCommand(GetAccountId(), "GM %s (GUID: %u) (Account: %u) mail money: %u to: %s (%s) (Account: %u)", - GetPlayerName().c_str(), GetGuidLow(), GetAccountId(), money, receiverName.c_str(), receiverGuid.ToString().c_str(), receiverAccountId); + GetPlayerName().c_str(), GetGUIDLow(), GetAccountId(), money, receiverName.c_str(), receiverGuid.ToString().c_str(), receiverAccountId); } } @@ -499,7 +499,7 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData) if (m->COD > 0) //if there is COD, take COD money from player and send them to sender by mail { - ObjectGuid sender_guid(HIGHGUID_PLAYER, m->sender); + ObjectGuid sender_guid(HighGuid::Player, m->sender); Player* receiver = ObjectAccessor::FindConnectedPlayer(sender_guid); uint32 sender_accId = 0; @@ -539,7 +539,7 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData) m->COD = 0; m->state = MAIL_STATE_CHANGED; player->m_mailsUpdated = true; - player->RemoveMItem(it->GetGUIDLow()); + player->RemoveMItem(it->GetGUID().GetCounter()); uint32 count = it->GetCount(); // save counts before store and possible merge with deleting it->SetState(ITEM_UNCHANGED); // need to set this state, otherwise item cannot be removed later, if neccessary @@ -649,7 +649,7 @@ void WorldSession::HandleGetMailList(WorldPacket& recvData) switch ((*itr)->messageType) { case MAIL_NORMAL: // sender guid - data << ObjectGuid(HIGHGUID_PLAYER, (*itr)->sender); + data << ObjectGuid(HighGuid::Player, (*itr)->sender); break; case MAIL_CREATURE: case MAIL_GAMEOBJECT: @@ -676,7 +676,7 @@ void WorldSession::HandleGetMailList(WorldPacket& recvData) // item index (0-6?) data << uint8(i); // item guid low? - data << uint32((item ? item->GetGUIDLow() : 0)); + data << uint32((item ? item->GetGUID().GetCounter() : 0)); // entry data << uint32((item ? item->GetEntry() : 0)); for (uint8 j = 0; j < MAX_INSPECTED_ENCHANTMENT_SLOT; ++j) @@ -735,7 +735,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData) } Item* bodyItem = new Item; // This is not bag and then can be used new Item. - if (!bodyItem->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_ITEM), MAIL_BODY_ITEM_TEMPLATE, player)) + if (!bodyItem->Create(sObjectMgr->GetGenerator().Generate(), MAIL_BODY_ITEM_TEMPLATE, player)) { delete bodyItem; return; @@ -757,7 +757,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData) bodyItem->SetText(m->body); if (m->messageType == MAIL_NORMAL) - bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HIGHGUID_PLAYER, m->sender)); + bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HighGuid::Player, m->sender)); bodyItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_MAIL_TEXT_MASK); @@ -812,7 +812,7 @@ void WorldSession::HandleQueryNextMailTime(WorldPacket & /*recvData*/) if (sentSenders.count(m->sender)) continue; - data << uint64(m->messageType == MAIL_NORMAL ? ObjectGuid(HIGHGUID_PLAYER, m->sender) : ObjectGuid::Empty); // player guid + data << uint64(m->messageType == MAIL_NORMAL ? ObjectGuid(HighGuid::Player, m->sender) : ObjectGuid::Empty); // player guid data << uint32(m->messageType != MAIL_NORMAL ? m->sender : 0); // non-player entries data << uint32(m->messageType); data << uint32(m->stationery); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 7a9760ecf8..51f7e3f840 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -66,7 +66,7 @@ void WorldSession::HandleRepopRequestOpcode(WorldPacket& recvData) if (GetPlayer()->getDeathState() == JUST_DIED) { TC_LOG_DEBUG("network", "HandleRepopRequestOpcode: got request after player %s(%d) was killed and before he was updated", - GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow()); + GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter()); GetPlayer()->KillPlayer(); } @@ -564,7 +564,7 @@ void WorldSession::HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std { Field* fields = result->Fetch(); - friendGuid = ObjectGuid(HIGHGUID_PLAYER, 0, fields[0].GetUInt32()); + friendGuid = ObjectGuid(HighGuid::Player, 0, fields[0].GetUInt32()); team = Player::TeamForRace(fields[1].GetUInt8()); friendAccountId = fields[2].GetUInt32(); @@ -649,7 +649,7 @@ void WorldSession::HandleAddIgnoreOpcodeCallBack(PreparedQueryResult result) if (result) { - IgnoreGuid = ObjectGuid(HIGHGUID_PLAYER, (*result)[0].GetUInt32()); + IgnoreGuid = ObjectGuid(HighGuid::Player, (*result)[0].GetUInt32()); if (IgnoreGuid) { @@ -811,7 +811,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) if (player->IsInFlight()) { TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (GUID: %u) in flight, ignore Area Trigger ID:%u", - player->GetName().c_str(), player->GetGUIDLow(), triggerId); + player->GetName().c_str(), player->GetGUID().GetCounter(), triggerId); return; } @@ -819,14 +819,14 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) if (!atEntry) { TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (GUID: %u) send unknown (by DBC) Area Trigger ID:%u", - player->GetName().c_str(), player->GetGUIDLow(), triggerId); + player->GetName().c_str(), player->GetGUID().GetCounter(), triggerId); return; } if (!player->IsInAreaTriggerRadius(atEntry)) { TC_LOG_DEBUG("network", "HandleAreaTriggerOpcode: Player '%s' (GUID: %u) too far, ignore Area Trigger ID: %u", - player->GetName().c_str(), player->GetGUIDLow(), triggerId); + player->GetName().c_str(), player->GetGUID().GetCounter(), triggerId); return; } @@ -1191,7 +1191,7 @@ void WorldSession::HandleWorldTeleportOpcode(WorldPacket& recvData) if (GetPlayer()->IsInFlight()) { TC_LOG_DEBUG("network", "Player '%s' (GUID: %u) in flight, ignore worldport command.", - GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow()); + GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter()); return; } @@ -1335,7 +1335,7 @@ void WorldSession::HandleFarSightOpcode(WorldPacket& recvData) if (apply) { - TC_LOG_DEBUG("network", "Added FarSight %s to player %u", _player->GetGuidValue(PLAYER_FARSIGHT).ToString().c_str(), _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "Added FarSight %s to player %u", _player->GetGuidValue(PLAYER_FARSIGHT).ToString().c_str(), _player->GetGUID().GetCounter()); if (WorldObject* target = _player->GetViewpoint()) _player->SetSeer(target); else @@ -1343,7 +1343,7 @@ void WorldSession::HandleFarSightOpcode(WorldPacket& recvData) } else { - TC_LOG_DEBUG("network", "Player %u set vision to self", _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "Player %u set vision to self", _player->GetGUID().GetCounter()); _player->SetSeer(_player); } @@ -1411,7 +1411,7 @@ void WorldSession::HandleSetDungeonDifficultyOpcode(WorldPacket& recvData) if (mode >= MAX_DUNGEON_DIFFICULTY) { - TC_LOG_DEBUG("network", "WorldSession::HandleSetDungeonDifficultyOpcode: player %d sent an invalid instance mode %d!", _player->GetGUIDLow(), mode); + TC_LOG_DEBUG("network", "WorldSession::HandleSetDungeonDifficultyOpcode: player %d sent an invalid instance mode %d!", _player->GetGUID().GetCounter(), mode); return; } @@ -1423,7 +1423,7 @@ void WorldSession::HandleSetDungeonDifficultyOpcode(WorldPacket& recvData) if (map && map->IsDungeon()) { TC_LOG_DEBUG("network", "WorldSession::HandleSetDungeonDifficultyOpcode: player (Name: %s, GUID: %u) tried to reset the instance while player is inside!", - _player->GetName().c_str(), _player->GetGUIDLow()); + _player->GetName().c_str(), _player->GetGUID().GetCounter()); return; } @@ -1444,7 +1444,7 @@ void WorldSession::HandleSetDungeonDifficultyOpcode(WorldPacket& recvData) if (groupGuy->GetMap()->IsNonRaidDungeon()) { TC_LOG_DEBUG("network", "WorldSession::HandleSetDungeonDifficultyOpcode: player %d tried to reset the instance while group member (Name: %s, GUID: %u) is inside!", - _player->GetGUIDLow(), groupGuy->GetName().c_str(), groupGuy->GetGUIDLow()); + _player->GetGUID().GetCounter(), groupGuy->GetName().c_str(), groupGuy->GetGUID().GetCounter()); return; } } @@ -1470,7 +1470,7 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPacket& recvData) if (mode >= MAX_RAID_DIFFICULTY) { - TC_LOG_ERROR("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d sent an invalid instance mode %d!", _player->GetGUIDLow(), mode); + TC_LOG_ERROR("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d sent an invalid instance mode %d!", _player->GetGUID().GetCounter(), mode); return; } @@ -1478,7 +1478,7 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPacket& recvData) Map* map = _player->FindMap(); if (map && map->IsDungeon()) { - TC_LOG_DEBUG("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d tried to reset the instance while inside!", _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d tried to reset the instance while inside!", _player->GetGUID().GetCounter()); return; } @@ -1501,7 +1501,7 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPacket& recvData) if (groupGuy->GetMap()->IsRaid()) { - TC_LOG_DEBUG("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d tried to reset the instance while inside!", _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "WorldSession::HandleSetRaidDifficultyOpcode: player %d tried to reset the instance while inside!", _player->GetGUID().GetCounter()); return; } } @@ -1695,7 +1695,7 @@ void WorldSession::HandleInstanceLockResponse(WorldPacket& recvPacket) if (!_player->HasPendingBind()) { TC_LOG_INFO("network", "InstanceLockResponse: Player %s (guid %u) tried to bind himself/teleport to graveyard without a pending bind!", - _player->GetName().c_str(), _player->GetGUIDLow()); + _player->GetName().c_str(), _player->GetGUID().GetCounter()); return; } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index cedfed2e7c..518baa42e9 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -79,7 +79,7 @@ void WorldSession::HandleMoveWorldportAckOpcode() // while the player is in transit, for example the map may get full if (!newMap || !newMap->CanEnter(GetPlayer())) { - TC_LOG_ERROR("network", "Map %d (%s) could not be created for player %d (%s), porting player to homebind", loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown", GetPlayer()->GetGUIDLow(), GetPlayer()->GetName().c_str()); + TC_LOG_ERROR("network", "Map %d (%s) could not be created for player %d (%s), porting player to homebind", loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown", GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str()); GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation()); return; } @@ -96,7 +96,7 @@ void WorldSession::HandleMoveWorldportAckOpcode() if (!GetPlayer()->GetMap()->AddPlayerToMap(GetPlayer())) { TC_LOG_ERROR("network", "WORLD: failed to teleport player %s (%d) to map %d (%s) because of unknown reason!", - GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow(), loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown"); + GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter(), loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown"); GetPlayer()->ResetMap(); GetPlayer()->SetMap(oldMap); GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation()); diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 3c4bbd87b3..14436a864f 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -494,7 +494,7 @@ void WorldSession::SendStablePet(ObjectGuid guid) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOTS_DETAIL); - stmt->setUInt32(0, _player->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); stmt->setUInt8(1, PET_SAVE_FIRST_STABLE_SLOT); stmt->setUInt8(2, PET_SAVE_LAST_STABLE_SLOT); @@ -596,7 +596,7 @@ void WorldSession::HandleStablePet(WorldPacket& recvData) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOTS); - stmt->setUInt32(0, _player->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); stmt->setUInt8(1, PET_SAVE_FIRST_STABLE_SLOT); stmt->setUInt8(2, PET_SAVE_LAST_STABLE_SLOT); @@ -657,7 +657,7 @@ void WorldSession::HandleUnstablePet(WorldPacket& recvData) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_ENTRY); - stmt->setUInt32(0, _player->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); stmt->setUInt32(1, petnumber); stmt->setUInt8(2, PET_SAVE_FIRST_STABLE_SLOT); stmt->setUInt8(3, PET_SAVE_LAST_STABLE_SLOT); @@ -786,7 +786,7 @@ void WorldSession::HandleStableSwapPet(WorldPacket& recvData) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PET_SLOT_BY_ID); - stmt->setUInt32(0, _player->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); stmt->setUInt32(1, petId); _stableSwapCallback.SetParam(petId); diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 8ec887ea94..4495c044c6 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -46,7 +46,7 @@ void WorldSession::HandleDismissCritter(WorldPacket& recvData) if (!pet) { TC_LOG_DEBUG("network", "Vanitypet (%s) does not exist - player '%s' (guid: %u / account: %u) attempted to dismiss it (possibly lagged out)", - guid.ToString().c_str(), GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow(), GetAccountId()); + guid.ToString().c_str(), GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter(), GetAccountId()); return; } @@ -146,7 +146,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe if (!charmInfo) { TC_LOG_DEBUG("network", "WorldSession::HandlePetAction(petGuid: %s, tagGuid: %s, spellId: %u, flag: %u): object (GUID: %u Entry: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", - guid1.ToString().c_str(), guid2.ToString().c_str(), spellid, flag, pet->GetGUIDLow(), pet->GetEntry(), pet->GetTypeId()); + guid1.ToString().c_str(), guid2.ToString().c_str(), spellid, flag, pet->GetGUID().GetCounter(), pet->GetEntry(), pet->GetTypeId()); return; } @@ -482,7 +482,7 @@ void WorldSession::HandlePetSetAction(WorldPacket& recvData) CharmInfo* charmInfo = pet->GetCharmInfo(); if (!charmInfo) { - TC_LOG_ERROR("network", "WorldSession::HandlePetSetAction: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUIDLow(), pet->GetTypeId()); + TC_LOG_ERROR("network", "WorldSession::HandlePetSetAction: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUID().GetCounter(), pet->GetTypeId()); return; } @@ -593,7 +593,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData) recvData >> name; recvData >> isdeclined; - Pet* pet = ObjectAccessor::FindPet(petguid); + Pet* pet = ObjectAccessor::GetPet(*_player, petguid); // check it! if (!pet || !pet->IsPet() || ((Pet*)pet)->getPetType()!= HUNTER_PET || !pet->HasByteFlag(UNIT_FIELD_BYTES_2, 2, UNIT_CAN_BE_RENAMED) || @@ -646,7 +646,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData) trans->Append(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_PET_DECLINEDNAME); - stmt->setUInt32(0, _player->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); for (uint8 i = 0; i < 5; i++) stmt->setString(i + 1, declinedname.name[i]); @@ -656,7 +656,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_PET_NAME); stmt->setString(0, name); - stmt->setUInt32(1, _player->GetGUIDLow()); + stmt->setUInt32(1, _player->GetGUID().GetCounter()); stmt->setUInt32(2, pet->GetCharmInfo()->GetPetNumber()); trans->Append(stmt); @@ -729,7 +729,7 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPacket& recvPacket) CharmInfo* charmInfo = pet->GetCharmInfo(); if (!charmInfo) { - TC_LOG_ERROR("network", "WorldSession::HandlePetSpellAutocastOpcod: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUIDLow(), pet->GetTypeId()); + TC_LOG_ERROR("network", "WorldSession::HandlePetSpellAutocastOpcod: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->GetGUID().GetCounter(), pet->GetTypeId()); return; } diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 05e793455d..c7a3f419d6 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -191,7 +191,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) if (!charter) return; - charter->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1, charter->GetGUIDLow()); + charter->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1, charter->GetGUID().GetCounter()); // ITEM_FIELD_ENCHANTMENT_1_1 is guild/arenateam id // ITEM_FIELD_ENCHANTMENT_1_1+1 is current signatures count (showed on item) charter->SetState(ITEM_CHANGED, _player); @@ -201,7 +201,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) // we checked above, if this player is in an arenateam, so this must be // datacorruption PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_BY_OWNER); - stmt->setUInt32(0, _player->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); stmt->setUInt8(1, type); PreparedQueryResult result = CharacterDatabase.Query(stmt); @@ -217,7 +217,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) } // delete petitions with the same guid as this one - ssInvalidPetitionGUIDs << '\'' << charter->GetGUIDLow() << '\''; + ssInvalidPetitionGUIDs << '\'' << charter->GetGUID().GetCounter() << '\''; TC_LOG_DEBUG("network", "Invalid petition GUIDs: %s", ssInvalidPetitionGUIDs.str().c_str()); CharacterDatabase.EscapeString(name); @@ -226,8 +226,8 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) trans->PAppend("DELETE FROM petition_sign WHERE petitionguid IN (%s)", ssInvalidPetitionGUIDs.str().c_str()); stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PETITION); - stmt->setUInt32(0, _player->GetGUIDLow()); - stmt->setUInt32(1, charter->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); + stmt->setUInt32(1, charter->GetGUID().GetCounter()); stmt->setString(2, name); stmt->setUInt8(3, uint8(type)); trans->Append(stmt); @@ -253,7 +253,7 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData) if (!result) { - TC_LOG_DEBUG("entities.player.items", "Petition %s is not found for player %u %s", petitionguid.ToString().c_str(), GetPlayer()->GetGUIDLow(), GetPlayer()->GetName().c_str()); + TC_LOG_DEBUG("entities.player.items", "Petition %s is not found for player %u %s", petitionguid.ToString().c_str(), GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str()); return; } Field* fields = result->Fetch(); @@ -286,7 +286,7 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData) Field* fields2 = result->Fetch(); uint32 lowGuid = fields2[0].GetUInt32(); - data << ObjectGuid(HIGHGUID_PLAYER, 0, lowGuid); // Player GUID + data << ObjectGuid(HighGuid::Player, 0, lowGuid); // Player GUID data << uint32(0); // there 0 ... result->NextRow(); @@ -322,7 +322,7 @@ void WorldSession::SendPetitionQueryOpcode(ObjectGuid petitionguid) if (result) { Field* fields = result->Fetch(); - ownerguid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()); + ownerguid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32()); name = fields[1].GetString(); type = fields[2].GetUInt8(); } @@ -461,16 +461,16 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) if (!result) { - TC_LOG_ERROR("network", "Petition %s is not found for player %u %s", petitionGuid.ToString().c_str(), GetPlayer()->GetGUIDLow(), GetPlayer()->GetName().c_str()); + TC_LOG_ERROR("network", "Petition %s is not found for player %u %s", petitionGuid.ToString().c_str(), GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str()); return; } fields = result->Fetch(); - ObjectGuid ownerGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()); + ObjectGuid ownerGuid(HighGuid::Player, fields[0].GetUInt32()); uint64 signs = fields[1].GetUInt64(); uint8 type = fields[2].GetUInt8(); - uint32 playerGuid = _player->GetGUIDLow(); + uint32 playerGuid = _player->GetGUID().GetCounter(); if (ownerGuid == _player->GetGUID()) return; @@ -585,7 +585,7 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData) ObjectGuid petitionguid; recvData >> petitionguid; // petition guid - TC_LOG_DEBUG("network", "Petition %s declined by %u", petitionguid.ToString().c_str(), _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "Petition %s declined by %u", petitionguid.ToString().c_str(), _player->GetGUID().GetCounter()); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_OWNER_BY_GUID); @@ -597,7 +597,7 @@ void WorldSession::HandlePetitionDeclineOpcode(WorldPacket& recvData) return; Field* fields = result->Fetch(); - ObjectGuid ownerguid(HIGHGUID_PLAYER, 0, fields[0].GetUInt32()); + ObjectGuid ownerguid(HighGuid::Player, 0, fields[0].GetUInt32()); Player* owner = ObjectAccessor::FindConnectedPlayer(ownerguid); if (owner) // petition owner online @@ -708,7 +708,7 @@ void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData) for (uint8 i = 1; i <= signs; ++i) { Field* fields2 = result->Fetch(); - data << uint64(ObjectGuid(HIGHGUID_PLAYER, fields2[0].GetUInt32())); // Player GUID + data << uint64(ObjectGuid(HighGuid::Player, fields2[0].GetUInt32())); // Player GUID data << uint32(0); // there 0 ... result->NextRow(); @@ -732,7 +732,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) if (!item) return; - TC_LOG_DEBUG("network", "Petition %s turned in by %u", petitionGuid.ToString().c_str(), _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "Petition %s turned in by %u", petitionGuid.ToString().c_str(), _player->GetGUID().GetCounter()); // Get petition data from db uint32 ownerguidlo; @@ -752,12 +752,12 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) } else { - TC_LOG_ERROR("network", "Player %s (guid: %u) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUIDLow(), petitionGuid.ToString().c_str()); + TC_LOG_ERROR("network", "Player %s (guid: %u) tried to turn in petition (%s) that is not present in the database", _player->GetName().c_str(), _player->GetGUID().GetCounter(), petitionGuid.ToString().c_str()); return; } // Only the petition owner can turn in the petition - if (_player->GetGUIDLow() != ownerguidlo) + if (_player->GetGUID().GetCounter() != ownerguidlo) return; // Petition type (guild/arena) specific checks @@ -853,7 +853,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) for (uint8 i = 0; i < signatures; ++i) { Field* fields = result->Fetch(); - guild->AddMember(ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32())); + guild->AddMember(ObjectGuid(HighGuid::Player, fields[0].GetUInt32())); result->NextRow(); } } @@ -880,7 +880,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) for (uint8 i = 0; i < signatures; ++i) { Field* fields = result->Fetch(); - ObjectGuid memberGUID(HIGHGUID_PLAYER, fields[0].GetUInt32()); + ObjectGuid memberGUID(HighGuid::Player, fields[0].GetUInt32()); TC_LOG_DEBUG("network", "PetitionsHandler: Adding arena team (guid: %u) member %s", arenaTeam->GetId(), memberGUID.ToString().c_str()); arenaTeam->AddMember(memberGUID); result->NextRow(); diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index b6297e1705..91bc8309b1 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -48,14 +48,14 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode(WorldPacket& recvData) { case TYPEID_UNIT: { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", questGiver->GetGUIDLow()); + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for npc, guid = %u", questGiver->GetGUID().GetCounter()); if (!questGiver->ToCreature()->IsHostileTo(_player)) // do not show quest status to enemies questStatus = _player->GetQuestDialogStatus(questGiver); break; } case TYPEID_GAMEOBJECT: { - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", questGiver->GetGUIDLow()); + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_STATUS_QUERY for GameObject guid = %u", questGiver->GetGUID().GetCounter()); questStatus = _player->GetQuestDialogStatus(questGiver); break; } @@ -260,7 +260,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) if (reward >= QUEST_REWARD_CHOICES_COUNT) { - TC_LOG_ERROR("network", "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player %s (guid %d) tried to get invalid reward (%u) (possible packet-hacking detected)", _player->GetName().c_str(), _player->GetGUIDLow(), reward); + TC_LOG_ERROR("network", "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player %s (guid %d) tried to get invalid reward (%u) (possible packet-hacking detected)", _player->GetName().c_str(), _player->GetGUID().GetCounter(), reward); return; } @@ -280,7 +280,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) (_player->GetQuestStatus(questId) != QUEST_STATUS_COMPLETE && !quest->IsAutoComplete())) { TC_LOG_ERROR("network", "Error in QUEST_STATUS_COMPLETE: player %s (guid %u) tried to complete quest %u, but is not allowed to do so (possible packet-hacking or high latency)", - _player->GetName().c_str(), _player->GetGUIDLow(), questId); + _player->GetName().c_str(), _player->GetGUID().GetCounter(), questId); return; } if (_player->CanRewardQuest(quest, reward, true)) @@ -418,14 +418,14 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPacket& recvData) _player->RemoveActiveQuest(questId); _player->RemoveTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, questId); - TC_LOG_INFO("network", "Player %u abandoned quest %u", _player->GetGUIDLow(), questId); + TC_LOG_INFO("network", "Player %u abandoned quest %u", _player->GetGUID().GetCounter(), questId); if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled { // prepare Quest Tracker datas PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME); stmt->setUInt32(0, questId); - stmt->setUInt32(1, _player->GetGUIDLow()); + stmt->setUInt32(1, _player->GetGUID().GetCounter()); // add to Quest Tracker CharacterDatabase.Execute(stmt); @@ -494,7 +494,7 @@ void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData) if (!_player->CanSeeStartQuest(quest) && _player->GetQuestStatus(questId) == QUEST_STATUS_NONE) { TC_LOG_ERROR("network", "Possible hacking attempt: Player %s [guid: %u] tried to complete quest [entry: %u] without being in possession of the quest!", - _player->GetName().c_str(), _player->GetGUIDLow(), questId); + _player->GetName().c_str(), _player->GetGUID().GetCounter(), questId); return; } diff --git a/src/server/game/Handlers/ReferAFriendHandler.cpp b/src/server/game/Handlers/ReferAFriendHandler.cpp index f87198834b..db5d0997ee 100644 --- a/src/server/game/Handlers/ReferAFriendHandler.cpp +++ b/src/server/game/Handlers/ReferAFriendHandler.cpp @@ -27,7 +27,7 @@ void WorldSession::HandleGrantLevel(WorldPacket& recvData) ObjectGuid guid; recvData >> guid.ReadAsPacked(); - Player* target = ObjectAccessor::GetObjectInWorld(guid, _player); + Player* target = ObjectAccessor::GetPlayer(*_player, guid); // check cheating uint8 levels = _player->GetGrantableLevels(); @@ -70,7 +70,8 @@ void WorldSession::HandleAcceptGrantLevel(WorldPacket& recvData) ObjectGuid guid; recvData >> guid.ReadAsPacked(); - Player* other = ObjectAccessor::GetObjectInWorld(guid, _player); + Player* other = ObjectAccessor::GetPlayer(*_player, guid); + if (!(other && other->GetSession())) return; diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index a6108b36c1..0f0640e3a2 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -200,7 +200,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket) { pUser->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW, item, NULL); TC_LOG_ERROR("network", "Possible hacking attempt: Player %s [guid: %u] tried to open item [guid: %u, entry: %u] which is not openable!", - pUser->GetName().c_str(), pUser->GetGUIDLow(), item->GetGUIDLow(), proto->ItemId); + pUser->GetName().c_str(), pUser->GetGUID().GetCounter(), item->GetGUID().GetCounter(), proto->ItemId); return; } @@ -213,7 +213,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket) if (!lockInfo) { pUser->SendEquipError(EQUIP_ERR_ITEM_LOCKED, item, NULL); - TC_LOG_ERROR("network", "WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", item->GetGUIDLow(), lockId); + TC_LOG_ERROR("network", "WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", item->GetGUID().GetCounter(), lockId); return; } @@ -229,7 +229,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM); - stmt->setUInt32(0, item->GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); PreparedQueryResult result = CharacterDatabase.Query(stmt); @@ -246,14 +246,14 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket) } else { - TC_LOG_ERROR("network", "Wrapped item %u don't have record in character_gifts table and will deleted", item->GetGUIDLow()); + TC_LOG_ERROR("network", "Wrapped item %u don't have record in character_gifts table and will deleted", item->GetGUID().GetCounter()); pUser->DestroyItem(item->GetBagSlot(), item->GetSlot(), true); return; } stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT); - stmt->setUInt32(0, item->GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); CharacterDatabase.Execute(stmt); } @@ -579,7 +579,7 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPacket& recvData) recvData >> guid; // Get unit for which data is needed by client - Unit* unit = ObjectAccessor::GetObjectInWorld(guid, (Unit*)NULL); + Unit* unit = ObjectAccessor::GetUnit(*_player, guid); if (!unit) return; diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp index f3b421a4b9..cf6181f02b 100644 --- a/src/server/game/Handlers/TicketHandler.cpp +++ b/src/server/game/Handlers/TicketHandler.cpp @@ -217,7 +217,7 @@ void WorldSession::HandleGMSurveySubmit(WorldPacket& recvData) recvData >> comment; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_GM_SURVEY); - stmt->setUInt32(0, GetPlayer()->GetGUIDLow()); + stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter()); stmt->setUInt32(1, nextSurveyID); stmt->setUInt32(2, mainSurvey); stmt->setString(3, comment); @@ -240,7 +240,7 @@ void WorldSession::HandleReportLag(WorldPacket& recvData) recvData >> z; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_LAG_REPORT); - stmt->setUInt32(0, GetPlayer()->GetGUIDLow()); + stmt->setUInt32(0, GetPlayer()->GetGUID().GetCounter()); stmt->setUInt8 (1, lagType); stmt->setUInt16(2, mapId); stmt->setFloat (3, x); diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index c50888544d..fbfd16ae1c 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -60,13 +60,13 @@ void WorldSession::SendTradeStatus(TradeStatusInfo const& info) void WorldSession::HandleIgnoreTradeOpcode(WorldPacket& /*recvPacket*/) { - TC_LOG_DEBUG("network", "WORLD: Ignore Trade %u", _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "WORLD: Ignore Trade %u", _player->GetGUID().GetCounter()); // recvPacket.print_storage(); } void WorldSession::HandleBusyTradeOpcode(WorldPacket& /*recvPacket*/) { - TC_LOG_DEBUG("network", "WORLD: Busy Trade %u", _player->GetGUIDLow()); + TC_LOG_DEBUG("network", "WORLD: Busy Trade %u", _player->GetGUID().GetCounter()); // recvPacket.print_storage(); } @@ -141,7 +141,7 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[]) if (myItems[i]) { // logging - TC_LOG_DEBUG("network", "partner storing: %u", myItems[i]->GetGUIDLow()); + TC_LOG_DEBUG("network", "partner storing: %u", myItems[i]->GetGUID().GetCounter()); if (HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE)) { sLog->outCommand(_player->GetSession()->GetAccountId(), "GM %s (Account: %u) trade: %s (Entry: %d Count: %u) to player: %s (Account: %u)", @@ -159,7 +159,7 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[]) if (hisItems[i]) { // logging - TC_LOG_DEBUG("network", "player storing: %u", hisItems[i]->GetGUIDLow()); + TC_LOG_DEBUG("network", "player storing: %u", hisItems[i]->GetGUID().GetCounter()); if (HasPermission(rbac::RBAC_PERM_LOG_GM_TRADE)) { sLog->outCommand(trader->GetSession()->GetAccountId(), "GM %s (Account: %u) trade: %s (Entry: %d Count: %u) to player: %s (Account: %u)", @@ -182,21 +182,21 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[]) if (myItems[i]) { if (!traderCanTrade) - TC_LOG_ERROR("network", "trader can't store item: %u", myItems[i]->GetGUIDLow()); + TC_LOG_ERROR("network", "trader can't store item: %u", myItems[i]->GetGUID().GetCounter()); if (_player->CanStoreItem(NULL_BAG, NULL_SLOT, playerDst, myItems[i], false) == EQUIP_ERR_OK) _player->MoveItemToInventory(playerDst, myItems[i], true, true); else - TC_LOG_ERROR("network", "player can't take item back: %u", myItems[i]->GetGUIDLow()); + TC_LOG_ERROR("network", "player can't take item back: %u", myItems[i]->GetGUID().GetCounter()); } // return the already removed items to the original owner if (hisItems[i]) { if (!playerCanTrade) - TC_LOG_ERROR("network", "player can't store item: %u", hisItems[i]->GetGUIDLow()); + TC_LOG_ERROR("network", "player can't store item: %u", hisItems[i]->GetGUID().GetCounter()); if (trader->CanStoreItem(NULL_BAG, NULL_SLOT, traderDst, hisItems[i], false) == EQUIP_ERR_OK) trader->MoveItemToInventory(traderDst, hisItems[i], true, true); else - TC_LOG_ERROR("network", "trader can't take item back: %u", hisItems[i]->GetGUIDLow()); + TC_LOG_ERROR("network", "trader can't take item back: %u", hisItems[i]->GetGUID().GetCounter()); } } } @@ -214,7 +214,7 @@ static void setAcceptTradeMode(TradeData* myTrade, TradeData* hisTrade, Item* *m { if (Item* item = myTrade->GetItem(TradeSlots(i))) { - TC_LOG_DEBUG("network", "player trade item %u bag: %u slot: %u", item->GetGUIDLow(), item->GetBagSlot(), item->GetSlot()); + TC_LOG_DEBUG("network", "player trade item %u bag: %u slot: %u", item->GetGUID().GetCounter(), item->GetBagSlot(), item->GetSlot()); //Can return NULL myItems[i] = item; myItems[i]->SetInTrade(); @@ -222,7 +222,7 @@ static void setAcceptTradeMode(TradeData* myTrade, TradeData* hisTrade, Item* *m if (Item* item = hisTrade->GetItem(TradeSlots(i))) { - TC_LOG_DEBUG("network", "partner trade item %u bag: %u slot: %u", item->GetGUIDLow(), item->GetBagSlot(), item->GetSlot()); + TC_LOG_DEBUG("network", "partner trade item %u bag: %u slot: %u", item->GetGUID().GetCounter(), item->GetBagSlot(), item->GetSlot()); hisItems[i] = item; hisItems[i]->SetInTrade(); } @@ -668,7 +668,7 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) return; } - if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow())) + if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUID().GetCounter())) { info.Status = TRADE_STATUS_IGNORE_YOU; SendTradeStatus(info); diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp index 6328eb3e2f..3bb2ca7893 100644 --- a/src/server/game/Handlers/VehicleHandler.cpp +++ b/src/server/game/Handlers/VehicleHandler.cpp @@ -63,7 +63,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recvData) { recvData.rfinish(); // prevent warnings spam TC_LOG_ERROR("network", "HandleChangeSeatsOnControlledVehicle, Opcode: %u, Player %u tried to switch seats but current seatflags %u don't permit that.", - recvData.GetOpcode(), GetPlayer()->GetGUIDLow(), seat->m_flags); + recvData.GetOpcode(), GetPlayer()->GetGUID().GetCounter(), seat->m_flags); return; } @@ -176,7 +176,7 @@ void WorldSession::HandleEjectPassenger(WorldPacket &data) if (seat->IsEjectable()) unit->ExitVehicle(); else - TC_LOG_ERROR("network", "Player %u attempted to eject %s from non-ejectable seat.", GetPlayer()->GetGUIDLow(), guid.ToString().c_str()); + TC_LOG_ERROR("network", "Player %u attempted to eject %s from non-ejectable seat.", GetPlayer()->GetGUID().GetCounter(), guid.ToString().c_str()); } else TC_LOG_ERROR("network", "HandleEjectPassenger: %s tried to eject invalid %s ", GetPlayer()->GetGUID().ToString().c_str(), guid.ToString().c_str()); @@ -194,7 +194,7 @@ void WorldSession::HandleRequestVehicleExit(WorldPacket& /*recvData*/) GetPlayer()->ExitVehicle(); else TC_LOG_ERROR("network", "Player %u tried to exit vehicle, but seatflags %u (ID: %u) don't permit that.", - GetPlayer()->GetGUIDLow(), seat->m_ID, seat->m_flags); + GetPlayer()->GetGUID().GetCounter(), seat->m_ID, seat->m_flags); } } } diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index b8a2168b34..b3dd3e9f01 100644 --- a/src/server/game/Instances/InstanceSaveMgr.cpp +++ b/src/server/game/Instances/InstanceSaveMgr.cpp @@ -555,7 +555,10 @@ void InstanceSaveManager::_ResetInstance(uint32 mapid, uint32 instanceId) ((InstanceMap*)iMap)->Reset(INSTANCE_RESET_RESPAWN_DELAY); if (iMap) + { iMap->DeleteRespawnTimes(); + iMap->DeleteCorpseData(); + } else Map::DeleteRespawnTimesInDB(mapid, instanceId); diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 3e90e43059..e832d7cdff 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -174,11 +174,11 @@ class InstanceScript : public ZoneScript inline Creature* GetCreature(uint32 type) { - return ObjectAccessor::GetObjectInMap(GetObjectGuid(type), instance, nullptr); + return instance->GetCreature(GetObjectGuid(type)); } inline GameObject* GetGameObject(uint32 type) { - return ObjectAccessor::GetObjectInMap(GetObjectGuid(type), instance, nullptr); + return instance->GetGameObject(GetObjectGuid(type)); } // Called when a player successfully enters the instance. diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index c825db1e1e..22ebe6c679 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -399,7 +399,7 @@ bool LootItem::AllowedForPlayer(Player const* player) const void LootItem::AddAllowedLooter(const Player* player) { - allowedGUIDs.insert(player->GetGUIDLow()); + allowedGUIDs.insert(player->GetGUID().GetCounter()); } // @@ -481,7 +481,7 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo void Loot::FillNotNormalLootFor(Player* player, bool presentAtLooting) { - uint32 plguid = player->GetGUIDLow(); + uint32 plguid = player->GetGUID().GetCounter(); QuestItemMap::const_iterator qmapitr = PlayerQuestItems.find(plguid); if (qmapitr == PlayerQuestItems.end()) @@ -536,7 +536,7 @@ QuestItemList* Loot::FillFFALoot(Player* player) return NULL; } - PlayerFFAItems[player->GetGUIDLow()] = ql; + PlayerFFAItems[player->GetGUID().GetCounter()] = ql; return ql; } @@ -574,7 +574,7 @@ QuestItemList* Loot::FillQuestLoot(Player* player) return NULL; } - PlayerQuestItems[player->GetGUIDLow()] = ql; + PlayerQuestItems[player->GetGUID().GetCounter()] = ql; return ql; } @@ -606,7 +606,7 @@ QuestItemList* Loot::FillNonQuestNonFFAConditionalLoot(Player* player, bool pres return NULL; } - PlayerNonQuestNonFFAConditionalItems[player->GetGUIDLow()] = ql; + PlayerNonQuestNonFFAConditionalItems[player->GetGUID().GetCounter()] = ql; return ql; } @@ -657,7 +657,7 @@ void Loot::NotifyQuestItemRemoved(uint8 questIndex) ++i_next; if (Player* player = ObjectAccessor::FindPlayer(*i)) { - QuestItemMap::const_iterator pq = PlayerQuestItems.find(player->GetGUIDLow()); + QuestItemMap::const_iterator pq = PlayerQuestItems.find(player->GetGUID().GetCounter()); if (pq != PlayerQuestItems.end() && pq->second) { // find where/if the player has the given item in it's vector @@ -724,7 +724,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem* *qite if (lootSlot >= items.size()) { uint32 questSlot = lootSlot - items.size(); - QuestItemMap::const_iterator itr = PlayerQuestItems.find(player->GetGUIDLow()); + QuestItemMap::const_iterator itr = PlayerQuestItems.find(player->GetGUID().GetCounter()); if (itr != PlayerQuestItems.end() && questSlot < itr->second->size()) { QuestItem* qitem2 = &itr->second->at(questSlot); @@ -740,7 +740,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem* *qite is_looted = item->is_looted; if (item->freeforall) { - QuestItemMap::const_iterator itr = PlayerFFAItems.find(player->GetGUIDLow()); + QuestItemMap::const_iterator itr = PlayerFFAItems.find(player->GetGUID().GetCounter()); if (itr != PlayerFFAItems.end()) { for (QuestItemList::const_iterator iter=itr->second->begin(); iter!= itr->second->end(); ++iter) @@ -756,7 +756,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem* *qite } else if (!item->conditions.empty()) { - QuestItemMap::const_iterator itr = PlayerNonQuestNonFFAConditionalItems.find(player->GetGUIDLow()); + QuestItemMap::const_iterator itr = PlayerNonQuestNonFFAConditionalItems.find(player->GetGUID().GetCounter()); if (itr != PlayerNonQuestNonFFAConditionalItems.end()) { for (QuestItemList::const_iterator iter=itr->second->begin(); iter!= itr->second->end(); ++iter) @@ -782,7 +782,7 @@ LootItem* Loot::LootItemInSlot(uint32 lootSlot, Player* player, QuestItem* *qite uint32 Loot::GetMaxSlotInLootFor(Player* player) const { - QuestItemMap::const_iterator itr = PlayerQuestItems.find(player->GetGUIDLow()); + QuestItemMap::const_iterator itr = PlayerQuestItems.find(player->GetGUID().GetCounter()); return items.size() + (itr != PlayerQuestItems.end() ? itr->second->size() : 0); } @@ -790,7 +790,7 @@ uint32 Loot::GetMaxSlotInLootFor(Player* player) const bool Loot::hasItemFor(Player* player) const { QuestItemMap const& lootPlayerQuestItems = GetPlayerQuestItems(); - QuestItemMap::const_iterator q_itr = lootPlayerQuestItems.find(player->GetGUIDLow()); + QuestItemMap::const_iterator q_itr = lootPlayerQuestItems.find(player->GetGUID().GetCounter()); if (q_itr != lootPlayerQuestItems.end()) { QuestItemList* q_list = q_itr->second; @@ -803,7 +803,7 @@ bool Loot::hasItemFor(Player* player) const } QuestItemMap const& lootPlayerFFAItems = GetPlayerFFAItems(); - QuestItemMap::const_iterator ffa_itr = lootPlayerFFAItems.find(player->GetGUIDLow()); + QuestItemMap::const_iterator ffa_itr = lootPlayerFFAItems.find(player->GetGUID().GetCounter()); if (ffa_itr != lootPlayerFFAItems.end()) { QuestItemList* ffa_list = ffa_itr->second; @@ -816,7 +816,7 @@ bool Loot::hasItemFor(Player* player) const } QuestItemMap const& lootPlayerNonQuestNonFFAConditionalItems = GetPlayerNonQuestNonFFAConditionalItems(); - QuestItemMap::const_iterator nn_itr = lootPlayerNonQuestNonFFAConditionalItems.find(player->GetGUIDLow()); + QuestItemMap::const_iterator nn_itr = lootPlayerNonQuestNonFFAConditionalItems.find(player->GetGUID().GetCounter()); if (nn_itr != lootPlayerNonQuestNonFFAConditionalItems.end()) { QuestItemList* conditional_list = nn_itr->second; @@ -964,7 +964,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv) LootSlotType slotType = lv.permission == OWNER_PERMISSION ? LOOT_SLOT_TYPE_OWNER : LOOT_SLOT_TYPE_ALLOW_LOOT; QuestItemMap const& lootPlayerQuestItems = l.GetPlayerQuestItems(); - QuestItemMap::const_iterator q_itr = lootPlayerQuestItems.find(lv.viewer->GetGUIDLow()); + QuestItemMap::const_iterator q_itr = lootPlayerQuestItems.find(lv.viewer->GetGUID().GetCounter()); if (q_itr != lootPlayerQuestItems.end()) { QuestItemList* q_list = q_itr->second; @@ -1005,7 +1005,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv) } QuestItemMap const& lootPlayerFFAItems = l.GetPlayerFFAItems(); - QuestItemMap::const_iterator ffa_itr = lootPlayerFFAItems.find(lv.viewer->GetGUIDLow()); + QuestItemMap::const_iterator ffa_itr = lootPlayerFFAItems.find(lv.viewer->GetGUID().GetCounter()); if (ffa_itr != lootPlayerFFAItems.end()) { QuestItemList* ffa_list = ffa_itr->second; @@ -1023,7 +1023,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv) } QuestItemMap const& lootPlayerNonQuestNonFFAConditionalItems = l.GetPlayerNonQuestNonFFAConditionalItems(); - QuestItemMap::const_iterator nn_itr = lootPlayerNonQuestNonFFAConditionalItems.find(lv.viewer->GetGUIDLow()); + QuestItemMap::const_iterator nn_itr = lootPlayerNonQuestNonFFAConditionalItems.find(lv.viewer->GetGUID().GetCounter()); if (nn_itr != lootPlayerNonQuestNonFFAConditionalItems.end()) { QuestItemList* conditional_list = nn_itr->second; diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp index e8eec55ed1..fd9392fb62 100644 --- a/src/server/game/Mails/Mail.cpp +++ b/src/server/game/Mails/Mail.cpp @@ -45,7 +45,7 @@ MailSender::MailSender(Object* sender, MailStationery stationery) : m_stationery break;*/ case TYPEID_PLAYER: m_messageType = MAIL_NORMAL; - m_senderId = sender->GetGUIDLow(); + m_senderId = sender->GetGUID().GetCounter(); break; default: m_messageType = MAIL_NORMAL; @@ -67,19 +67,19 @@ MailSender::MailSender(Player* sender) { m_messageType = MAIL_NORMAL; m_stationery = sender->IsGameMaster() ? MAIL_STATIONERY_GM : MAIL_STATIONERY_DEFAULT; - m_senderId = sender->GetGUIDLow(); + m_senderId = sender->GetGUID().GetCounter(); } -MailReceiver::MailReceiver(Player* receiver) : m_receiver(receiver), m_receiver_lowguid(receiver->GetGUIDLow()) { } +MailReceiver::MailReceiver(Player* receiver) : m_receiver(receiver), m_receiver_lowguid(receiver->GetGUID().GetCounter()) { } MailReceiver::MailReceiver(Player* receiver, uint32 receiver_lowguid) : m_receiver(receiver), m_receiver_lowguid(receiver_lowguid) { - ASSERT(!receiver || receiver->GetGUIDLow() == receiver_lowguid); + ASSERT(!receiver || receiver->GetGUID().GetCounter() == receiver_lowguid); } MailDraft& MailDraft::AddItem(Item* item) { - m_items[item->GetGUIDLow()] = item; return *this; + m_items[item->GetGUID().GetCounter()] = item; return *this; } void MailDraft::prepareItems(Player* receiver, SQLTransaction& trans) @@ -117,7 +117,7 @@ void MailDraft::deleteIncludedItems(SQLTransaction& trans, bool inDB /*= false*/ if (inDB) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE); - stmt->setUInt32(0, item->GetGUIDLow()); + stmt->setUInt32(0, item->GetGUID().GetCounter()); trans->Append(stmt); } @@ -129,7 +129,7 @@ void MailDraft::deleteIncludedItems(SQLTransaction& trans, bool inDB /*= false*/ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, SQLTransaction& trans) { - ObjectGuid receiverGuid(HIGHGUID_PLAYER, receiver_guid); + ObjectGuid receiverGuid(HighGuid::Player, receiver_guid); Player* receiver = ObjectAccessor::FindConnectedPlayer(receiverGuid); uint32 rc_account = 0; @@ -158,7 +158,7 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 // owner in data will set at mail receive and item extracting PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER); stmt->setUInt32(0, receiver_guid); - stmt->setUInt32(1, item->GetGUIDLow()); + stmt->setUInt32(1, item->GetGUID().GetCounter()); trans->Append(stmt); } } @@ -226,7 +226,7 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, Item* pItem = mailItemIter->second; stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_MAIL_ITEM); stmt->setUInt32(0, mailId); - stmt->setUInt32(1, pItem->GetGUIDLow()); + stmt->setUInt32(1, pItem->GetGUID().GetCounter()); stmt->setUInt32(2, receiver.GetPlayerGUIDLow()); trans->Append(stmt); } @@ -249,7 +249,7 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, for (MailItemMap::const_iterator mailItemIter = m_items.begin(); mailItemIter != m_items.end(); ++mailItemIter) { Item* item = mailItemIter->second; - m->AddItem(item->GetGUIDLow(), item->GetEntry()); + m->AddItem(item->GetGUID().GetCounter(), item->GetEntry()); } m->messageType = sender.GetMailMessageType(); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index c758d132d6..22cc1f1bbd 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -401,7 +401,7 @@ template<> void Map::DeleteFromWorld(Player* player) { sObjectAccessor->RemoveObject(player); - sObjectAccessor->RemoveUpdateObject(player); /// @todo I do not know why we need this, it should be removed in ~Object anyway + RemoveUpdateObject(player); /// @todo I do not know why we need this, it should be removed in ~Object anyway delete player; } @@ -487,7 +487,7 @@ bool Map::AddPlayerToMap(Player* player) CellCoord cellCoord = Trinity::ComputeCellCoord(player->GetPositionX(), player->GetPositionY()); if (!cellCoord.IsCoordValid()) { - TC_LOG_ERROR("maps", "Map::Add: Player (GUID: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", player->GetGUIDLow(), player->GetPositionX(), player->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord); + TC_LOG_ERROR("maps", "Map::Add: Player (GUID: %u) has invalid coordinates X:%f Y:%f grid cell [%u:%u]", player->GetGUID().GetCounter(), player->GetPositionX(), player->GetPositionY(), cellCoord.x_coord, cellCoord.y_coord); return false; } @@ -703,6 +703,8 @@ void Map::Update(const uint32 t_diff) obj->Update(t_diff); } + SendObjectUpdates(); + ///- Process necessary scripts if (!m_scriptSchedule.empty()) { @@ -939,7 +941,7 @@ void Map::CreatureRelocation(Creature* creature, float x, float y, float z, floa if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell)) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", creature->GetGUIDLow(), creature->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", creature->GetGUID().GetCounter(), creature->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif AddCreatureToMoveList(creature, x, y, z, ang); // in diffcell/diffgrid case notifiers called at finishing move creature in Map::MoveAllCreaturesInMoveList @@ -971,7 +973,7 @@ void Map::GameObjectRelocation(GameObject* go, float x, float y, float z, float if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell)) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif AddGameObjectToMoveList(go, x, y, z, orientation); // in diffcell/diffgrid case notifiers called at finishing move go in Map::MoveAllGameObjectsInMoveList @@ -1004,7 +1006,7 @@ void Map::DynamicObjectRelocation(DynamicObject* dynObj, float x, float y, float if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell)) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "GameObject (GUID: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", dynObj->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "GameObject (GUID: %u) added to moving list from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", dynObj->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif AddDynamicObjectToMoveList(dynObj, x, y, z, orientation); // in diffcell/diffgrid case notifiers called at finishing move dynObj in Map::MoveAllGameObjectsInMoveList @@ -1115,7 +1117,7 @@ void Map::MoveAllCreaturesInMoveList() { // ... or unload (if respawn grid also not loaded) #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", c->GetGUIDLow(), c->GetEntry()); + TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", c->GetGUID().GetCounter(), c->GetEntry()); #endif //AddObjectToRemoveList(Pet*) should only be called in Pet::Remove //This may happen when a player just logs in and a pet moves to a nearby unloaded cell @@ -1169,7 +1171,7 @@ void Map::MoveAllGameObjectsInMoveList() { // ... or unload (if respawn grid also not loaded) #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", go->GetGUIDLow(), go->GetEntry()); + TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) cannot be move to unloaded respawn grid.", go->GetGUID().GetCounter(), go->GetEntry()); #endif AddObjectToRemoveList(go); } @@ -1208,7 +1210,7 @@ void Map::MoveAllDynamicObjectsInMoveList() else { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) cannot be moved to unloaded grid.", dynObj->GetGUIDLow()); + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) cannot be moved to unloaded grid.", dynObj->GetGUID().GetCounter()); #endif } } @@ -1226,7 +1228,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell) if (old_cell.DiffCell(new_cell)) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY()); #endif c->RemoveFromGrid(); @@ -1235,7 +1237,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell) else { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY()); + TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY()); #endif } @@ -1248,7 +1250,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell) EnsureGridLoadedForActiveObject(new_cell, c); #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Active creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "Active creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif c->RemoveFromGrid(); @@ -1261,7 +1263,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell) if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY()))) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif c->RemoveFromGrid(); @@ -1273,7 +1275,7 @@ bool Map::CreatureCellRelocation(Creature* c, Cell new_cell) // fail to move: normal creature attempt move to unloaded grid #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif return false; } @@ -1287,7 +1289,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell) if (old_cell.DiffCell(new_cell)) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY()); #endif go->RemoveFromGrid(); @@ -1296,7 +1298,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell) else { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY()); + TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY()); #endif } @@ -1309,7 +1311,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell) EnsureGridLoadedForActiveObject(new_cell, go); #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Active GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "Active GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif go->RemoveFromGrid(); @@ -1322,7 +1324,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell) if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY()))) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif go->RemoveFromGrid(); @@ -1334,7 +1336,7 @@ bool Map::GameObjectCellRelocation(GameObject* go, Cell new_cell) // fail to move: normal GameObject attempt move to unloaded grid #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif return false; } @@ -1348,7 +1350,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell) if (old_cell.DiffCell(new_cell)) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in grid[%u, %u] from cell[%u, %u] to cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.CellX(), new_cell.CellY()); #endif go->RemoveFromGrid(); @@ -1357,7 +1359,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell) else { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY()); + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved in same grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY()); #endif } @@ -1370,7 +1372,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell) EnsureGridLoadedForActiveObject(new_cell, go); #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Active DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "Active DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif go->RemoveFromGrid(); @@ -1383,7 +1385,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell) if (IsGridLoaded(GridCoord(new_cell.GridX(), new_cell.GridY()))) { #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) moved from grid[%u, %u]cell[%u, %u] to grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif go->RemoveFromGrid(); @@ -1395,7 +1397,7 @@ bool Map::DynamicObjectCellRelocation(DynamicObject* go, Cell new_cell) // fail to move: normal GameObject attempt move to unloaded grid #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); + TC_LOG_DEBUG("maps", "DynamicObject (GUID: %u) attempted to move from grid[%u, %u]cell[%u, %u] to unloaded grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), old_cell.GridX(), old_cell.GridY(), old_cell.CellX(), old_cell.CellY(), new_cell.GridX(), new_cell.GridY(), new_cell.CellX(), new_cell.CellY()); #endif return false; } @@ -1414,7 +1416,7 @@ bool Map::CreatureRespawnRelocation(Creature* c, bool diffGridOnly) c->GetMotionMaster()->Clear(); #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", c->GetGUIDLow(), c->GetEntry(), c->GetCurrentCell().GridX(), c->GetCurrentCell().GridY(), c->GetCurrentCell().CellX(), c->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY()); + TC_LOG_DEBUG("maps", "Creature (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", c->GetGUID().GetCounter(), c->GetEntry(), c->GetCurrentCell().GridX(), c->GetCurrentCell().GridY(), c->GetCurrentCell().CellX(), c->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY()); #endif // teleport it to respawn point (like normal respawn if player see) @@ -1441,7 +1443,7 @@ bool Map::GameObjectRespawnRelocation(GameObject* go, bool diffGridOnly) return true; #ifdef TRINITY_DEBUG - TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", go->GetGUIDLow(), go->GetEntry(), go->GetCurrentCell().GridX(), go->GetCurrentCell().GridY(), go->GetCurrentCell().CellX(), go->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY()); + TC_LOG_DEBUG("maps", "GameObject (GUID: %u Entry: %u) moved from grid[%u, %u]cell[%u, %u] to respawn grid[%u, %u]cell[%u, %u].", go->GetGUID().GetCounter(), go->GetEntry(), go->GetCurrentCell().GridX(), go->GetCurrentCell().GridY(), go->GetCurrentCell().CellX(), go->GetCurrentCell().CellY(), resp_cell.GridX(), resp_cell.GridY(), resp_cell.CellX(), resp_cell.CellY()); #endif // teleport it to respawn point (like normal respawn if player see) @@ -2477,7 +2479,7 @@ bool Map::CheckGridIntegrity(Creature* c, bool moved) const if (xy_cell != cur_cell) { TC_LOG_DEBUG("maps", "Creature (GUID: %u) X: %f Y: %f (%s) is in grid[%u, %u]cell[%u, %u] instead of grid[%u, %u]cell[%u, %u]", - c->GetGUIDLow(), + c->GetGUID().GetCounter(), c->GetPositionX(), c->GetPositionY(), (moved ? "final" : "original"), cur_cell.GridX(), cur_cell.GridY(), cur_cell.CellX(), cur_cell.CellY(), xy_cell.GridX(), xy_cell.GridY(), xy_cell.CellX(), xy_cell.CellY()); @@ -2516,7 +2518,7 @@ void Map::UpdateObjectsVisibilityFor(Player* player, Cell cell, CellCoord cellpa void Map::SendInitSelf(Player* player) { - TC_LOG_DEBUG("maps", "Creating player data for himself %u", player->GetGUIDLow()); + TC_LOG_DEBUG("maps", "Creating player data for himself %u", player->GetGUID().GetCounter()); UpdateData data; @@ -2576,6 +2578,28 @@ inline void Map::setNGrid(NGridType *grid, uint32 x, uint32 y) i_grids[x][y] = grid; } +void Map::SendObjectUpdates() +{ + UpdateDataMapType update_players; + + while (!_updateObjects.empty()) + { + Object* obj = *_updateObjects.begin(); + ASSERT(obj->IsInWorld()); + + _updateObjects.erase(_updateObjects.begin()); + obj->BuildUpdate(update_players); + } + + WorldPacket packet; // here we allocate a std::vector with a size of 0x10000 + for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter) + { + iter->second.BuildPacket(&packet); + iter->first->GetSession()->SendPacket(&packet); + packet.clear(); // clean the string + } +} + void Map::DelayedUpdate(const uint32 t_diff) { for (_transportsUpdateIter = _transports.begin(); _transportsUpdateIter != _transports.end();) @@ -2613,7 +2637,7 @@ void Map::AddObjectToRemoveList(WorldObject* obj) obj->CleanupsBeforeDelete(false); // remove or simplify at least cross referenced links i_objectsToRemove.insert(obj); - //TC_LOG_DEBUG("maps", "Object (GUID: %u TypeId: %u) added to removing list.", obj->GetGUIDLow(), obj->GetTypeId()); + //TC_LOG_DEBUG("maps", "Object (GUID: %u TypeId: %u) added to removing list.", obj->GetGUID().GetCounter(), obj->GetTypeId()); } void Map::AddObjectToSwitchList(WorldObject* obj, bool on) @@ -2670,7 +2694,7 @@ void Map::RemoveAllObjectsInRemoveList() { Corpse* corpse = ObjectAccessor::GetCorpse(*obj, obj->GetGUID()); if (!corpse) - TC_LOG_ERROR("maps", "Tried to delete corpse/bones %u that is not in map.", obj->GetGUIDLow()); + TC_LOG_ERROR("maps", "Tried to delete corpse/bones %u that is not in map.", obj->GetGUID().GetCounter()); else RemoveFromMap(corpse, true); break; @@ -2768,7 +2792,7 @@ void Map::AddToActive(Creature* c) AddToActiveHelper(c); // also not allow unloading spawn grid to prevent creating creature clone at load - if (!c->IsPet() && c->GetDBTableGUIDLow()) + if (!c->IsPet() && c->GetSpawnId()) { float x, y, z; c->GetRespawnPosition(x, y, z); @@ -2779,7 +2803,7 @@ void Map::AddToActive(Creature* c) { GridCoord p2 = Trinity::ComputeGridCoord(c->GetPositionX(), c->GetPositionY()); TC_LOG_ERROR("maps", "Active creature (GUID: %u Entry: %u) added to grid[%u, %u] but spawn grid[%u, %u] was not loaded.", - c->GetGUIDLow(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord); + c->GetGUID().GetCounter(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord); } } } @@ -2799,7 +2823,7 @@ void Map::RemoveFromActive(Creature* c) RemoveFromActiveHelper(c); // also allow unloading spawn grid - if (!c->IsPet() && c->GetDBTableGUIDLow()) + if (!c->IsPet() && c->GetSpawnId()) { float x, y, z; c->GetRespawnPosition(x, y, z); @@ -2810,7 +2834,7 @@ void Map::RemoveFromActive(Creature* c) { GridCoord p2 = Trinity::ComputeGridCoord(c->GetPositionX(), c->GetPositionY()); TC_LOG_ERROR("maps", "Active creature (GUID: %u Entry: %u) removed from grid[%u, %u] but spawn grid[%u, %u] was not loaded.", - c->GetGUIDLow(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord); + c->GetGUID().GetCounter(), c->GetEntry(), p.x_coord, p.y_coord, p2.x_coord, p2.y_coord); } } } @@ -2866,7 +2890,7 @@ bool InstanceMap::CanEnter(Player* player) { if (player->GetMapRef().getTarget() == this) { - TC_LOG_ERROR("maps", "InstanceMap::CanEnter - player %s(%u) already in map %d, %d, %d!", player->GetName().c_str(), player->GetGUIDLow(), GetId(), GetInstanceId(), GetSpawnMode()); + TC_LOG_ERROR("maps", "InstanceMap::CanEnter - player %s(%u) already in map %d, %d, %d!", player->GetName().c_str(), player->GetGUID().GetCounter(), GetId(), GetInstanceId(), GetSpawnMode()); ABORT(); return false; } @@ -2961,7 +2985,7 @@ bool InstanceMap::AddPlayerToMap(Player* player) // cannot enter other instances if bound permanently if (playerBind->save != mapSave) { - TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is permanently bound to instance %s %d, %d, %d, %d, %d, %d but he is being put into instance %s %d, %d, %d, %d, %d, %d", player->GetName().c_str(), player->GetGUIDLow(), GetMapName(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset()); + TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is permanently bound to instance %s %d, %d, %d, %d, %d, %d but he is being put into instance %s %d, %d, %d, %d, %d, %d", player->GetName().c_str(), player->GetGUID().GetCounter(), GetMapName(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset()); return false; } } @@ -2973,7 +2997,7 @@ bool InstanceMap::AddPlayerToMap(Player* player) InstanceGroupBind* groupBind = group->GetBoundInstance(this); if (playerBind && playerBind->save != mapSave) { - TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %s %d, %d, %d, %d, %d, %d but he is in group %s and is bound to instance %d, %d, %d, %d, %d, %d!", player->GetName().c_str(), player->GetGUIDLow(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset(), group->GetLeaderGUID().ToString().c_str(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset()); + TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %s %d, %d, %d, %d, %d, %d but he is in group %s and is bound to instance %d, %d, %d, %d, %d, %d!", player->GetName().c_str(), player->GetGUID().GetCounter(), GetMapName(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), mapSave->GetPlayerCount(), mapSave->GetGroupCount(), mapSave->CanReset(), group->GetLeaderGUID().ToString().c_str(), playerBind->save->GetMapId(), playerBind->save->GetInstanceId(), playerBind->save->GetDifficulty(), playerBind->save->GetPlayerCount(), playerBind->save->GetGroupCount(), playerBind->save->CanReset()); if (groupBind) TC_LOG_ERROR("maps", "InstanceMap::Add: the group is bound to the instance %s %d, %d, %d, %d, %d, %d", GetMapName(), groupBind->save->GetMapId(), groupBind->save->GetInstanceId(), groupBind->save->GetDifficulty(), groupBind->save->GetPlayerCount(), groupBind->save->GetGroupCount(), groupBind->save->CanReset()); //ABORT(); @@ -2987,7 +3011,7 @@ bool InstanceMap::AddPlayerToMap(Player* player) // cannot jump to a different instance without resetting it if (groupBind->save != mapSave) { - TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %d, %d, %d but he is in group %s which is bound to instance %d, %d, %d!", player->GetName().c_str(), player->GetGUIDLow(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), group->GetLeaderGUID().ToString().c_str(), groupBind->save->GetMapId(), groupBind->save->GetInstanceId(), groupBind->save->GetDifficulty()); + TC_LOG_ERROR("maps", "InstanceMap::Add: player %s(%d) is being put into instance %d, %d, %d but he is in group %s which is bound to instance %d, %d, %d!", player->GetName().c_str(), player->GetGUID().GetCounter(), mapSave->GetMapId(), mapSave->GetInstanceId(), mapSave->GetDifficulty(), group->GetLeaderGUID().ToString().c_str(), groupBind->save->GetMapId(), groupBind->save->GetInstanceId(), groupBind->save->GetDifficulty()); TC_LOG_ERROR("maps", "MapSave players: %d, group count: %d", mapSave->GetPlayerCount(), mapSave->GetGroupCount()); if (groupBind->save) TC_LOG_ERROR("maps", "GroupBind save players: %d, group count: %d", groupBind->save->GetPlayerCount(), groupBind->save->GetGroupCount()); @@ -3146,7 +3170,7 @@ void InstanceMap::PermBindAllPlayers(Player* source) InstanceSave* save = sInstanceSaveMgr->GetInstanceSave(GetInstanceId()); if (!save) { - TC_LOG_ERROR("maps", "Cannot bind player (GUID: %u, Name: %s), because no instance save is available for instance map (Name: %s, Entry: %u, InstanceId: %u)!", source->GetGUIDLow(), source->GetName().c_str(), source->GetMap()->GetMapName(), source->GetMapId(), GetInstanceId()); + TC_LOG_ERROR("maps", "Cannot bind player (GUID: %u, Name: %s), because no instance save is available for instance map (Name: %s, Entry: %u, InstanceId: %u)!", source->GetGUID().GetCounter(), source->GetName().c_str(), source->GetMap()->GetMapName(), source->GetMapId(), GetInstanceId()); return; } @@ -3179,7 +3203,10 @@ void InstanceMap::UnloadAll() ASSERT(!HavePlayers()); if (m_resetAfterUnload == true) + { DeleteRespawnTimes(); + DeleteCorpseData(); + } Map::UnloadAll(); } @@ -3255,7 +3282,7 @@ bool BattlegroundMap::CanEnter(Player* player) { if (player->GetMapRef().getTarget() == this) { - TC_LOG_ERROR("maps", "BGMap::CanEnter - player %u is already in map!", player->GetGUIDLow()); + TC_LOG_ERROR("maps", "BGMap::CanEnter - player %u is already in map!", player->GetGUID().GetCounter()); ABORT(); return false; } @@ -3301,17 +3328,27 @@ void BattlegroundMap::RemoveAllPlayers() player->TeleportTo(player->GetBattlegroundEntryPoint()); } -Creature* Map::GetCreature(ObjectGuid guid) +Corpse* Map::GetCorpse(ObjectGuid const& guid) { - return ObjectAccessor::GetObjectInMap(guid, this, (Creature*)NULL); + return _objectsStore.Find(guid); } -GameObject* Map::GetGameObject(ObjectGuid guid) +Creature* Map::GetCreature(ObjectGuid const& guid) { - return ObjectAccessor::GetObjectInMap(guid, this, (GameObject*)NULL); + return _objectsStore.Find(guid); } -Transport* Map::GetTransport(ObjectGuid guid) +GameObject* Map::GetGameObject(ObjectGuid const& guid) +{ + return _objectsStore.Find(guid); +} + +Pet* Map::GetPet(ObjectGuid const& guid) +{ + return _objectsStore.Find(guid); +} + +Transport* Map::GetTransport(ObjectGuid const& guid) { if (!guid.IsMOTransport()) return NULL; @@ -3320,9 +3357,9 @@ Transport* Map::GetTransport(ObjectGuid guid) return go ? go->ToTransport() : NULL; } -DynamicObject* Map::GetDynamicObject(ObjectGuid guid) +DynamicObject* Map::GetDynamicObject(ObjectGuid const& guid) { - return ObjectAccessor::GetObjectInMap(guid, this, (DynamicObject*)NULL); + return _objectsStore.Find(guid); } void Map::UpdateIteratorBack(Player* player) @@ -3450,9 +3487,9 @@ time_t Map::GetLinkedRespawnTime(ObjectGuid guid) const ObjectGuid linkedGuid = sObjectMgr->GetLinkedRespawnGuid(guid); switch (linkedGuid.GetHigh()) { - case HIGHGUID_UNIT: + case HighGuid::Unit: return GetCreatureRespawnTime(linkedGuid.GetCounter()); - case HIGHGUID_GAMEOBJECT: + case HighGuid::GameObject: return GetGORespawnTime(linkedGuid.GetCounter()); default: break; @@ -3461,6 +3498,52 @@ time_t Map::GetLinkedRespawnTime(ObjectGuid guid) const return time_t(0); } +void Map::LoadCorpseData() +{ + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSES); + stmt->setUInt32(0, GetId()); + stmt->setUInt32(1, GetInstanceId()); + + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ? + PreparedQueryResult result = CharacterDatabase.Query(stmt); + if (!result) + return; + + uint32 count = 0; + do + { + Field* fields = result->Fetch(); + CorpseType type = CorpseType(fields[13].GetUInt8()); + uint32 guid = fields[16].GetUInt32(); + if (type >= MAX_CORPSE_TYPE || type == CORPSE_BONES) + { + TC_LOG_ERROR("misc", "Corpse (guid: %u) have wrong corpse type (%u), not loading.", guid, type); + continue; + } + + Corpse* corpse = new Corpse(type); + + if (!corpse->LoadCorpseFromDB(GenerateLowGuid(), fields)) + { + delete corpse; + continue; + } + + sObjectAccessor->AddCorpse(corpse); + ++count; + } while (result->NextRow()); +} + +void Map::DeleteCorpseData() +{ + // DELETE FROM corpse WHERE mapId = ? AND instanceId = ? + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSES_FROM_MAP); + stmt->setUInt32(0, GetId()); + stmt->setUInt32(1, GetInstanceId()); + CharacterDatabase.Execute(stmt); +} + void Map::SendZoneDynamicInfo(Player* player) { uint32 zoneId = GetZoneId(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 15d2169fbb..9b5e67cdfa 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -34,6 +34,7 @@ #include #include +#include class Unit; class WorldPacket; @@ -443,10 +444,20 @@ class Map : public GridRefManager TempSummon* SummonCreature(uint32 entry, Position const& pos, SummonPropertiesEntry const* properties = NULL, uint32 duration = 0, Unit* summoner = NULL, uint32 spellId = 0, uint32 vehId = 0); void SummonCreatureGroup(uint8 group, std::list* list = NULL); - Creature* GetCreature(ObjectGuid guid); - GameObject* GetGameObject(ObjectGuid guid); - Transport* GetTransport(ObjectGuid guid); - DynamicObject* GetDynamicObject(ObjectGuid guid); + Corpse* GetCorpse(ObjectGuid const& guid); + Creature* GetCreature(ObjectGuid const& guid); + GameObject* GetGameObject(ObjectGuid const& guid); + Transport* GetTransport(ObjectGuid const& guid); + DynamicObject* GetDynamicObject(ObjectGuid const& guid); + Pet* GetPet(ObjectGuid const& guid); + + MapStoredObjectTypesContainer& GetObjectsStore() { return _objectsStore; } + + typedef std::unordered_multimap CreatureBySpawnIdContainer; + CreatureBySpawnIdContainer& GetCreatureBySpawnIdStore() { return _creatureBySpawnIdStore; } + + typedef std::unordered_multimap GameObjectBySpawnIdContainer; + GameObjectBySpawnIdContainer& GetGameObjectBySpawnIdStore() { return _gameobjectBySpawnIdStore; } MapInstanced* ToMapInstanced() { if (Instanceable()) return reinterpret_cast(this); return NULL; } MapInstanced const* ToMapInstanced() const { if (Instanceable()) return reinterpret_cast(this); return NULL; } @@ -495,6 +506,9 @@ class Map : public GridRefManager void LoadRespawnTimes(); void DeleteRespawnTimes(); + void LoadCorpseData(); + void DeleteCorpseData(); + static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId); void SendInitTransports(Player* player); @@ -507,7 +521,32 @@ class Map : public GridRefManager void UpdateAreaDependentAuras(); + template + inline ObjectGuid::LowType GenerateLowGuid() + { + static_assert(ObjectGuidTraits::MapSpecific, "Only map specific guid can be generated in Map context"); + return GetGuidSequenceGenerator().Generate(); + } + + template + inline ObjectGuid::LowType GetMaxLowGuid() + { + static_assert(ObjectGuidTraits::MapSpecific, "Only map specific guid can be retrieved in Map context"); + return GetGuidSequenceGenerator().GetNextAfterMaxUsed(); + } + + void AddUpdateObject(Object* obj) + { + _updateObjects.insert(obj); + } + + void RemoveUpdateObject(Object* obj) + { + _updateObjects.erase(obj); + } + private: + void LoadMapAndVMap(int gx, int gy); void LoadVMap(int gx, int gy); void LoadMap(int gx, int gy, bool reload = false); @@ -561,6 +600,8 @@ class Map : public GridRefManager void UpdateActiveCells(const float &x, const float &y, const uint32 t_diff); + void SendObjectUpdates(); + protected: void SetUnloadReferenceLock(const GridCoord &p, bool on) { getNGrid(p.x_coord, p.y_coord)->setUnloadReferenceLock(on); } @@ -653,6 +694,23 @@ class Map : public GridRefManager ZoneDynamicInfoMap _zoneDynamicInfo; uint32 _defaultLight; + + template + inline ObjectGuidGeneratorBase& GetGuidSequenceGenerator() + { + auto itr = _guidGenerators.find(high); + if (itr == _guidGenerators.end()) + itr = _guidGenerators.insert(std::make_pair(high, std::unique_ptr>(new ObjectGuidGenerator()))).first; + + return *itr->second; + } + + std::map> _guidGenerators; + MapStoredObjectTypesContainer _objectsStore; + CreatureBySpawnIdContainer _creatureBySpawnIdStore; + GameObjectBySpawnIdContainer _gameobjectBySpawnIdStore; + + std::unordered_set _updateObjects; }; enum InstanceResetMethod diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp index 32c10cae16..d1b8bd6620 100644 --- a/src/server/game/Maps/MapInstanced.cpp +++ b/src/server/game/Maps/MapInstanced.cpp @@ -212,6 +212,7 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save, ASSERT(map->IsDungeon()); map->LoadRespawnTimes(); + map->LoadCorpseData(); bool load_data = save != NULL; map->CreateInstanceData(load_data); diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 29f4b4ab7c..82be6336dc 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -79,6 +79,7 @@ Map* MapManager::CreateBaseMap(uint32 id) { map = new Map(id, i_gridCleanUpDelay, 0, REGULAR_DIFFICULTY); map->LoadRespawnTimes(); + map->LoadCorpseData(); } i_maps[id] = map; @@ -250,8 +251,6 @@ void MapManager::Update(uint32 diff) for (iter = i_maps.begin(); iter != i_maps.end(); ++iter) iter->second->DelayedUpdate(uint32(i_timer.GetCurrent())); - sObjectAccessor->Update(uint32(i_timer.GetCurrent())); - i_timer.SetCurrent(0); } diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index dc6c0bb642..5b957e0028 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -21,6 +21,7 @@ #include "Object.h" #include "Map.h" +#include "MapInstanced.h" #include "GridStates.h" #include "MapUpdater.h" @@ -125,6 +126,12 @@ class MapManager MapUpdater * GetMapUpdater() { return &m_updater; } + template + void DoForAllMaps(Worker&& worker); + + template + void DoForAllMapsWithMapId(uint32 mapId, Worker&& worker); + private: typedef std::unordered_map MapMapType; typedef std::vector InstanceIds; @@ -150,5 +157,45 @@ class MapManager uint32 _nextInstanceId; MapUpdater m_updater; }; + +template +void MapManager::DoForAllMaps(Worker&& worker) +{ + std::lock_guard lock(_mapsLock); + + for (auto& mapPair : i_maps) + { + Map* map = mapPair.second; + if (MapInstanced* mapInstanced = map->ToMapInstanced()) + { + MapInstanced::InstancedMaps& instances = mapInstanced->GetInstancedMaps(); + for (auto& instancePair : instances) + worker(instancePair.second); + } + else + worker(map); + } +} + +template +inline void MapManager::DoForAllMapsWithMapId(uint32 mapId, Worker&& worker) +{ + std::lock_guard lock(_mapsLock); + + auto itr = i_maps.find(mapId); + if (itr != i_maps.end()) + { + Map* map = itr->second; + if (MapInstanced* mapInstanced = map->ToMapInstanced()) + { + MapInstanced::InstancedMaps& instances = mapInstanced->GetInstancedMaps(); + for (auto& p : instances) + worker(p.second); + } + else + worker(map); + } +} + #define sMapMgr MapManager::instance() #endif diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index e5815a415e..cac6e3b91e 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -381,7 +381,8 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* float o = tInfo->keyFrames.begin()->InitialOrientation; // initialize the gameobject base - uint32 guidLow = guid ? guid : sObjectMgr->GenerateLowGuid(HIGHGUID_MO_TRANSPORT); + ObjectGuid::LowType guidLow = guid ? guid : sObjectMgr->GetGenerator().Generate(); + if (!trans->Create(guidLow, entry, mapId, x, y, z, o, 255)) { delete trans; @@ -404,7 +405,7 @@ Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* trans->m_zoneScript = map->ToInstanceMap()->GetInstanceScript(); // Passengers will be loaded once a player is near - + HashMapHolder::Insert(trans); trans->GetMap()->AddToMap(trans); return trans; } diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 2bcb4aeb3b..cb8cab1849 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -193,7 +193,7 @@ void MotionMaster::MoveRandom(float spawndist) { if (_owner->GetTypeId() == TYPEID_UNIT) { - TC_LOG_DEBUG("misc", "Creature (GUID: %u) start moving random", _owner->GetGUIDLow()); + TC_LOG_DEBUG("misc", "Creature (GUID: %u) start moving random", _owner->GetGUID().GetCounter()); Mutate(new RandomMovementGenerator(spawndist), MOTION_SLOT_IDLE); } } @@ -204,22 +204,22 @@ void MotionMaster::MoveTargetedHome() if (_owner->GetTypeId() == TYPEID_UNIT && !_owner->ToCreature()->GetCharmerOrOwnerGUID()) { - TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) targeted home", _owner->GetEntry(), _owner->GetGUIDLow()); + TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) targeted home", _owner->GetEntry(), _owner->GetGUID().GetCounter()); Mutate(new HomeMovementGenerator(), MOTION_SLOT_ACTIVE); } else if (_owner->GetTypeId() == TYPEID_UNIT && _owner->ToCreature()->GetCharmerOrOwnerGUID()) { - TC_LOG_DEBUG("misc", "Pet or controlled creature (Entry: %u GUID: %u) targeting home", _owner->GetEntry(), _owner->GetGUIDLow()); + TC_LOG_DEBUG("misc", "Pet or controlled creature (Entry: %u GUID: %u) targeting home", _owner->GetEntry(), _owner->GetGUID().GetCounter()); Unit* target = _owner->ToCreature()->GetCharmerOrOwner(); if (target) { - TC_LOG_DEBUG("misc", "Following %s (GUID: %u)", target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : ((Creature*)target)->GetDBTableGUIDLow()); + TC_LOG_DEBUG("misc", "Following %s (GUID: %u)", target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : ((Creature*)target)->GetSpawnId()); Mutate(new FollowMovementGenerator(target, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE), MOTION_SLOT_ACTIVE); } } else { - TC_LOG_ERROR("misc", "Player (GUID: %u) attempt targeted home", _owner->GetGUIDLow()); + TC_LOG_ERROR("misc", "Player (GUID: %u) attempt targeted home", _owner->GetGUID().GetCounter()); } } @@ -227,13 +227,13 @@ void MotionMaster::MoveConfused() { if (_owner->GetTypeId() == TYPEID_PLAYER) { - TC_LOG_DEBUG("misc", "Player (GUID: %u) move confused", _owner->GetGUIDLow()); + TC_LOG_DEBUG("misc", "Player (GUID: %u) move confused", _owner->GetGUID().GetCounter()); Mutate(new ConfusedMovementGenerator(), MOTION_SLOT_CONTROLLED); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) move confused", - _owner->GetEntry(), _owner->GetGUIDLow()); + _owner->GetEntry(), _owner->GetGUID().GetCounter()); Mutate(new ConfusedMovementGenerator(), MOTION_SLOT_CONTROLLED); } } @@ -248,17 +248,17 @@ void MotionMaster::MoveChase(Unit* target, float dist, float angle) if (_owner->GetTypeId() == TYPEID_PLAYER) { TC_LOG_DEBUG("misc", "Player (GUID: %u) chase to %s (GUID: %u)", - _owner->GetGUIDLow(), + _owner->GetGUID().GetCounter(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", - target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow()); + target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : target->ToCreature()->GetSpawnId()); Mutate(new ChaseMovementGenerator(target, dist, angle), MOTION_SLOT_ACTIVE); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) chase to %s (GUID: %u)", - _owner->GetEntry(), _owner->GetGUIDLow(), + _owner->GetEntry(), _owner->GetGUID().GetCounter(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", - target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow()); + target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : target->ToCreature()->GetSpawnId()); Mutate(new ChaseMovementGenerator(target, dist, angle), MOTION_SLOT_ACTIVE); } } @@ -272,17 +272,17 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo //_owner->AddUnitState(UNIT_STATE_FOLLOW); if (_owner->GetTypeId() == TYPEID_PLAYER) { - TC_LOG_DEBUG("misc", "Player (GUID: %u) follow to %s (GUID: %u)", _owner->GetGUIDLow(), + TC_LOG_DEBUG("misc", "Player (GUID: %u) follow to %s (GUID: %u)", _owner->GetGUID().GetCounter(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", - target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow()); + target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : target->ToCreature()->GetSpawnId()); Mutate(new FollowMovementGenerator(target, dist, angle), slot); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) follow to %s (GUID: %u)", - _owner->GetEntry(), _owner->GetGUIDLow(), + _owner->GetEntry(), _owner->GetGUID().GetCounter(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", - target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow()); + target->GetTypeId() == TYPEID_PLAYER ? target->GetGUID().GetCounter() : target->ToCreature()->GetSpawnId()); Mutate(new FollowMovementGenerator(target, dist, angle), slot); } } @@ -291,13 +291,13 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generate { if (_owner->GetTypeId() == TYPEID_PLAYER) { - TC_LOG_DEBUG("misc", "Player (GUID: %u) targeted point (Id: %u X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), id, x, y, z); + TC_LOG_DEBUG("misc", "Player (GUID: %u) targeted point (Id: %u X: %f Y: %f Z: %f)", _owner->GetGUID().GetCounter(), id, x, y, z); Mutate(new PointMovementGenerator(id, x, y, z, generatePath), MOTION_SLOT_ACTIVE); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) targeted point (ID: %u X: %f Y: %f Z: %f)", - _owner->GetEntry(), _owner->GetGUIDLow(), id, x, y, z); + _owner->GetEntry(), _owner->GetGUID().GetCounter(), id, x, y, z); Mutate(new PointMovementGenerator(id, x, y, z, generatePath), MOTION_SLOT_ACTIVE); } } @@ -371,7 +371,7 @@ void MotionMaster::MoveJumpTo(float angle, float speedXY, float speedZ) void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id) { - TC_LOG_DEBUG("misc", "Unit (GUID: %u) jump to point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z); + TC_LOG_DEBUG("misc", "Unit (GUID: %u) jump to point (X: %f Y: %f Z: %f)", _owner->GetGUID().GetCounter(), x, y, z); if (speedXY <= 0.1f) return; @@ -476,13 +476,13 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed /*= SPEED_C if (_owner->GetTypeId() == TYPEID_PLAYER) { - TC_LOG_DEBUG("misc", "Player (GUID: %u) charge point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z); + TC_LOG_DEBUG("misc", "Player (GUID: %u) charge point (X: %f Y: %f Z: %f)", _owner->GetGUID().GetCounter(), x, y, z); Mutate(new PointMovementGenerator(id, x, y, z, generatePath, speed), MOTION_SLOT_CONTROLLED); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) charge point (X: %f Y: %f Z: %f)", - _owner->GetEntry(), _owner->GetGUIDLow(), x, y, z); + _owner->GetEntry(), _owner->GetGUID().GetCounter(), x, y, z); Mutate(new PointMovementGenerator(id, x, y, z, generatePath, speed), MOTION_SLOT_CONTROLLED); } } @@ -504,12 +504,12 @@ void MotionMaster::MoveSeekAssistance(float x, float y, float z) { if (_owner->GetTypeId() == TYPEID_PLAYER) { - TC_LOG_ERROR("misc", "Player (GUID: %u) attempt to seek assistance", _owner->GetGUIDLow()); + TC_LOG_ERROR("misc", "Player (GUID: %u) attempt to seek assistance", _owner->GetGUID().GetCounter()); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) seek assistance (X: %f Y: %f Z: %f)", - _owner->GetEntry(), _owner->GetGUIDLow(), x, y, z); + _owner->GetEntry(), _owner->GetGUID().GetCounter(), x, y, z); _owner->AttackStop(); _owner->ToCreature()->SetReactState(REACT_PASSIVE); Mutate(new AssistanceMovementGenerator(x, y, z), MOTION_SLOT_ACTIVE); @@ -520,12 +520,12 @@ void MotionMaster::MoveSeekAssistanceDistract(uint32 time) { if (_owner->GetTypeId() == TYPEID_PLAYER) { - TC_LOG_ERROR("misc", "Player (GUID: %u) attempt to call distract after assistance", _owner->GetGUIDLow()); + TC_LOG_ERROR("misc", "Player (GUID: %u) attempt to call distract after assistance", _owner->GetGUID().GetCounter()); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) is distracted after assistance call (Time: %u)", - _owner->GetEntry(), _owner->GetGUIDLow(), time); + _owner->GetEntry(), _owner->GetGUID().GetCounter(), time); Mutate(new AssistanceDistractMovementGenerator(time), MOTION_SLOT_ACTIVE); } } @@ -537,17 +537,17 @@ void MotionMaster::MoveFleeing(Unit* enemy, uint32 time) if (_owner->GetTypeId() == TYPEID_PLAYER) { - TC_LOG_DEBUG("misc", "Player (GUID: %u) flee from %s (GUID: %u)", _owner->GetGUIDLow(), + TC_LOG_DEBUG("misc", "Player (GUID: %u) flee from %s (GUID: %u)", _owner->GetGUID().GetCounter(), enemy->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", - enemy->GetTypeId() == TYPEID_PLAYER ? enemy->GetGUIDLow() : enemy->ToCreature()->GetDBTableGUIDLow()); + enemy->GetTypeId() == TYPEID_PLAYER ? enemy->GetGUID().GetCounter() : enemy->ToCreature()->GetSpawnId()); Mutate(new FleeingMovementGenerator(enemy->GetGUID()), MOTION_SLOT_CONTROLLED); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) flee from %s (GUID: %u)%s", - _owner->GetEntry(), _owner->GetGUIDLow(), + _owner->GetEntry(), _owner->GetGUID().GetCounter(), enemy->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", - enemy->GetTypeId() == TYPEID_PLAYER ? enemy->GetGUIDLow() : enemy->ToCreature()->GetDBTableGUIDLow(), + enemy->GetTypeId() == TYPEID_PLAYER ? enemy->GetGUID().GetCounter() : enemy->ToCreature()->GetSpawnId(), time ? " for a limited time" : ""); if (time) Mutate(new TimedFleeingMovementGenerator(enemy->GetGUID(), time), MOTION_SLOT_CONTROLLED); @@ -576,7 +576,7 @@ void MotionMaster::MoveTaxiFlight(uint32 path, uint32 pathnode) else { TC_LOG_ERROR("misc", "Creature (Entry: %u GUID: %u) attempt taxi to (Path %u node %u)", - _owner->GetEntry(), _owner->GetGUIDLow(), path, pathnode); + _owner->GetEntry(), _owner->GetGUID().GetCounter(), path, pathnode); } } @@ -587,12 +587,12 @@ void MotionMaster::MoveDistract(uint32 timer) if (_owner->GetTypeId() == TYPEID_PLAYER) { - TC_LOG_DEBUG("misc", "Player (GUID: %u) distracted (timer: %u)", _owner->GetGUIDLow(), timer); + TC_LOG_DEBUG("misc", "Player (GUID: %u) distracted (timer: %u)", _owner->GetGUID().GetCounter(), timer); } else { TC_LOG_DEBUG("misc", "Creature (Entry: %u GUID: %u) (timer: %u)", - _owner->GetEntry(), _owner->GetGUIDLow(), timer); + _owner->GetEntry(), _owner->GetGUID().GetCounter(), timer); } DistractMovementGenerator* mgen = new DistractMovementGenerator(timer); @@ -645,7 +645,7 @@ void MotionMaster::MovePath(uint32 path_id, bool repeatable) TC_LOG_DEBUG("misc", "%s (GUID: %u) start moving over path(Id:%u, repeatable: %s)", _owner->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature", - _owner->GetGUIDLow(), path_id, repeatable ? "YES" : "NO"); + _owner->GetGUID().GetCounter(), path_id, repeatable ? "YES" : "NO"); } void MotionMaster::MoveRotate(uint32 time, RotateDirection direction) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 31859899ce..40bf3af519 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -232,7 +232,7 @@ void ChaseMovementGenerator::MovementInform(Creature* unit) { // Pass back the GUIDLow of the target. If it is pet's owner then PetAI will handle if (unit->AI()) - unit->AI()->MovementInform(CHASE_MOTION_TYPE, i_target.getTarget()->GetGUIDLow()); + unit->AI()->MovementInform(CHASE_MOTION_TYPE, i_target.getTarget()->GetGUID().GetCounter()); } //-----------------------------------------------// @@ -304,7 +304,7 @@ void FollowMovementGenerator::MovementInform(Creature* unit) { // Pass back the GUIDLow of the target. If it is pet's owner then PetAI will handle if (unit->AI()) - unit->AI()->MovementInform(FOLLOW_MOTION_TYPE, i_target.getTarget()->GetGUIDLow()); + unit->AI()->MovementInform(FOLLOW_MOTION_TYPE, i_target.getTarget()->GetGUID().GetCounter()); } //-----------------------------------------------// diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 8a5ac387f1..fe618e6ece 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -41,7 +41,7 @@ void WaypointMovementGenerator::LoadPath(Creature* creature) if (!i_path) { // No path id found for entry - TC_LOG_ERROR("sql.sql", "WaypointMovementGenerator::LoadPath: creature %s (Entry: %u GUID: %u DB GUID: %u) doesn't have waypoint path id: %u", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUIDLow(), creature->GetDBTableGUIDLow(), path_id); + TC_LOG_ERROR("sql.sql", "WaypointMovementGenerator::LoadPath: creature %s (Entry: %u GUID: %u DB GUID: %u) doesn't have waypoint path id: %u", creature->GetName().c_str(), creature->GetEntry(), creature->GetGUID().GetCounter(), creature->GetSpawnId(), path_id); return; } diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 186b5d400b..3b4f19adb0 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -35,7 +35,7 @@ PathGenerator::PathGenerator(const Unit* owner) : { memset(_pathPolyRefs, 0, sizeof(_pathPolyRefs)); - TC_LOG_DEBUG("maps", "++ PathGenerator::PathGenerator for %u \n", _sourceUnit->GetGUIDLow()); + TC_LOG_DEBUG("maps", "++ PathGenerator::PathGenerator for %u \n", _sourceUnit->GetGUID().GetCounter()); uint32 mapId = _sourceUnit->GetMapId(); if (DisableMgr::IsPathfindingEnabled(mapId)) @@ -50,7 +50,7 @@ PathGenerator::PathGenerator(const Unit* owner) : PathGenerator::~PathGenerator() { - TC_LOG_DEBUG("maps", "++ PathGenerator::~PathGenerator() for %u \n", _sourceUnit->GetGUIDLow()); + TC_LOG_DEBUG("maps", "++ PathGenerator::~PathGenerator() for %u \n", _sourceUnit->GetGUID().GetCounter()); } bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest, bool straightLine) @@ -70,7 +70,7 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo _forceDestination = forceDest; _straightLine = straightLine; - TC_LOG_DEBUG("maps", "++ PathGenerator::CalculatePath() for %u \n", _sourceUnit->GetGUIDLow()); + TC_LOG_DEBUG("maps", "++ PathGenerator::CalculatePath() for %u \n", _sourceUnit->GetGUID().GetCounter()); // make sure navMesh works - we can run on map w/o mmap // check if the start and end point have a .mmtile loaded (can we pass via not loaded tile on the way?) @@ -392,7 +392,7 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con // this is probably an error state, but we'll leave it // and hopefully recover on the next Update // we still need to copy our preffix - TC_LOG_ERROR("maps", "%u's Path Build failed: 0 length path", _sourceUnit->GetGUIDLow()); + TC_LOG_ERROR("maps", "%u's Path Build failed: 0 length path", _sourceUnit->GetGUID().GetCounter()); } TC_LOG_DEBUG("maps", "++ m_polyLength=%u prefixPolyLength=%u suffixPolyLength=%u \n", _polyLength, prefixPolyLength, suffixPolyLength); @@ -453,7 +453,7 @@ void PathGenerator::BuildPolyPath(G3D::Vector3 const& startPos, G3D::Vector3 con if (!_polyLength || dtStatusFailed(dtResult)) { // only happens if we passed bad data to findPath(), or navmesh is messed up - TC_LOG_ERROR("maps", "%u's Path Build failed: 0 length path", _sourceUnit->GetGUIDLow()); + TC_LOG_ERROR("maps", "%u's Path Build failed: 0 length path", _sourceUnit->GetGUID().GetCounter()); BuildShortcut(); _type = PATHFIND_NOPATH; return; diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp index ccf8824051..d8173aab33 100644 --- a/src/server/game/Movement/Spline/MoveSpline.cpp +++ b/src/server/game/Movement/Spline/MoveSpline.cpp @@ -202,7 +202,7 @@ bool MoveSplineInitArgs::Validate(Unit* unit) const #define CHECK(exp) \ if (!(exp))\ {\ - TC_LOG_ERROR("misc", "MoveSplineInitArgs::Validate: expression '%s' failed for GUID: %u Entry: %u", #exp, unit->GetTypeId() == TYPEID_PLAYER ? unit->GetGUIDLow() : unit->ToCreature()->GetDBTableGUIDLow(), unit->GetEntry());\ + TC_LOG_ERROR("misc", "MoveSplineInitArgs::Validate: expression '%s' failed for GUID: %u Entry: %u", #exp, unit->GetTypeId() == TYPEID_PLAYER ? unit->GetGUID().GetCounter() : unit->ToCreature()->GetSpawnId(), unit->GetEntry());\ return false;\ } CHECK(path.size() > 1); diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index 3648fe5cde..d914ef0110 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -25,6 +25,7 @@ #include "GridNotifiers.h" #include "GridNotifiersImpl.h" #include "CellImpl.h" +#include "MapManager.h" class DefenseMessageBuilder { @@ -48,7 +49,7 @@ class DefenseMessageBuilder }; OPvPCapturePoint::OPvPCapturePoint(OutdoorPvP* pvp): - m_capturePointGUID(), m_capturePoint(NULL), m_maxValue(0.0f), m_minValue(0.0f), m_maxSpeed(0), + m_capturePointSpawnId(), m_capturePoint(NULL), m_maxValue(0.0f), m_minValue(0.0f), m_maxSpeed(0), m_value(0), m_team(TEAM_NEUTRAL), m_OldState(OBJECTIVESTATE_NEUTRAL), m_State(OBJECTIVESTATE_NEUTRAL), m_neutralValuePct(0), m_PvP(pvp) { } @@ -94,7 +95,7 @@ void OPvPCapturePoint::AddGO(uint32 type, uint32 guid, uint32 entry) entry = data->id; } - m_Objects[type] = ObjectGuid(HIGHGUID_GAMEOBJECT, entry, guid); + m_Objects[type] = ObjectGuid(HighGuid::GameObject, entry, guid); m_ObjectTypes[m_Objects[type]] = type; } @@ -108,7 +109,7 @@ void OPvPCapturePoint::AddCre(uint32 type, uint32 guid, uint32 entry) entry = data->id; } - m_Creatures[type] = ObjectGuid(HIGHGUID_UNIT, entry, guid); + m_Creatures[type] = ObjectGuid(HighGuid::Unit, entry, guid); m_CreatureTypes[m_Creatures[type]] = type; } @@ -146,8 +147,9 @@ bool OPvPCapturePoint::SetCapturePointData(uint32 entry, uint32 map, float x, fl return false; } - m_capturePointGUID = ObjectGuid(HIGHGUID_GAMEOBJECT, entry, sObjectMgr->AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3)); - if (!m_capturePointGUID) + m_capturePointSpawnId = sObjectMgr->AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3); + + if (m_capturePointSpawnId == 0) return false; // get the needed values from goinfo @@ -161,24 +163,25 @@ bool OPvPCapturePoint::SetCapturePointData(uint32 entry, uint32 map, float x, fl bool OPvPCapturePoint::DelCreature(uint32 type) { - if (!m_Creatures[type]) + uint32 spawnId = m_Creatures[type]; + if (!spawnId) { TC_LOG_DEBUG("outdoorpvp", "opvp creature type %u was already deleted", type); return false; } - Creature* cr = HashMapHolder::Find(m_Creatures[type]); - if (!cr) + auto bounds = m_PvP->GetMap()->GetCreatureBySpawnIdStore().equal_range(spawnId); + for (auto itr = bounds.first; itr != bounds.second;) { - // can happen when closing the core - m_Creatures[type].Clear(); - return false; + Creature* c = itr->second; + ++itr; + // Don't save respawn time + c->SetRespawnTime(0); + c->RemoveCorpse(); + c->AddObjectToRemoveList(); } + TC_LOG_DEBUG("outdoorpvp", "deleting opvp creature type %u", type); - uint32 guid = cr->GetDBTableGUIDLow(); - // Don't save respawn time - cr->SetRespawnTime(0); - cr->RemoveCorpse(); // explicit removal from map // beats me why this is needed, but with the recent removal "cleanup" some creatures stay in the map if "properly" deleted // so this is a big fat workaround, if AddObjectToRemoveList and DoDelayedMovesAndRemoves worked correctly, this wouldn't be needed @@ -186,15 +189,13 @@ bool OPvPCapturePoint::DelCreature(uint32 type) // map->Remove(cr, false); // delete respawn time for this creature PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CREATURE_RESPAWN); - stmt->setUInt32(0, guid); - stmt->setUInt16(1, cr->GetMapId()); - stmt->setUInt32(2, 0); // instance id, always 0 for world maps + stmt->setUInt32(0, spawnId); + stmt->setUInt16(1, m_PvP->GetMap()->GetId()); stmt->setUInt32(2, 0); // instance id, always 0 for world maps CharacterDatabase.Execute(stmt); - cr->AddObjectToRemoveList(); - sObjectMgr->DeleteCreatureData(guid); + sObjectMgr->DeleteCreatureData(spawnId); m_CreatureTypes[m_Creatures[type]] = 0; - m_Creatures[type].Clear(); + m_Creatures[type] = 0; return true; } @@ -203,25 +204,26 @@ bool OPvPCapturePoint::DelObject(uint32 type) if (!m_Objects[type]) return false; - GameObject* obj = HashMapHolder::Find(m_Objects[type]); - if (!obj) + uint32 spawnId = m_Objects[type]; + auto bounds = m_PvP->GetMap()->GetGameObjectBySpawnIdStore().equal_range(spawnId); + for (auto itr = bounds.first; itr != bounds.second;) { - m_Objects[type].Clear(); - return false; + GameObject* go = itr->second; + ++itr; + // Don't save respawn time + go->SetRespawnTime(0); + go->Delete(); } - uint32 guid = obj->GetDBTableGUIDLow(); - obj->SetRespawnTime(0); // not save respawn time - obj->Delete(); - sObjectMgr->DeleteGOData(guid); + sObjectMgr->DeleteGOData(spawnId); m_ObjectTypes[m_Objects[type]] = 0; - m_Objects[type].Clear(); + m_Objects[type] = 0; return true; } bool OPvPCapturePoint::DelCapturePoint() { - sObjectMgr->DeleteGOData(m_capturePointGUID.GetCounter()); - m_capturePointGUID.Clear(); + sObjectMgr->DeleteGOData(m_capturePointSpawnId); + m_capturePointSpawnId = 0; if (m_capturePoint) { @@ -234,15 +236,30 @@ bool OPvPCapturePoint::DelCapturePoint() void OPvPCapturePoint::DeleteSpawns() { - for (std::map::iterator i = m_Objects.begin(); i != m_Objects.end(); ++i) + for (std::map::iterator i = m_Objects.begin(); i != m_Objects.end(); ++i) DelObject(i->first); - for (std::map::iterator i = m_Creatures.begin(); i != m_Creatures.end(); ++i) + for (std::map::iterator i = m_Creatures.begin(); i != m_Creatures.end(); ++i) DelCreature(i->first); DelCapturePoint(); } void OutdoorPvP::DeleteSpawns() { + // Remove script from any registered gameobjects/creatures + for (auto itr = m_GoScriptStore.begin(); itr != m_GoScriptStore.end(); ++itr) + { + if (GameObject* go = itr->second) + go->ClearZoneScript(); + } + m_GoScriptStore.clear(); + + for (auto itr = m_CreatureScriptStore.begin(); itr != m_CreatureScriptStore.end(); ++itr) + { + if (Creature* creature = itr->second) + creature->ClearZoneScript(); + } + m_CreatureScriptStore.clear(); + for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) { itr->second->DeleteSpawns(); @@ -251,7 +268,7 @@ void OutdoorPvP::DeleteSpawns() m_capturePoints.clear(); } -OutdoorPvP::OutdoorPvP() : m_TypeId(0), m_sendUpdate(true) { } +OutdoorPvP::OutdoorPvP() : m_TypeId(0), m_sendUpdate(true), m_map(nullptr) { } OutdoorPvP::~OutdoorPvP() { @@ -511,19 +528,19 @@ bool OPvPCapturePoint::HandleCustomSpell(Player* player, uint32 /*spellId*/, Gam return true; } -bool OutdoorPvP::HandleOpenGo(Player* player, ObjectGuid guid) +bool OutdoorPvP::HandleOpenGo(Player* player, GameObject* go) { for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) - if (itr->second->HandleOpenGo(player, guid) >= 0) + if (itr->second->HandleOpenGo(player, go) >= 0) return true; return false; } -bool OutdoorPvP::HandleGossipOption(Player* player, ObjectGuid guid, uint32 id) +bool OutdoorPvP::HandleGossipOption(Player* player, Creature* creature, uint32 id) { for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr) - if (itr->second->HandleGossipOption(player, guid, id)) + if (itr->second->HandleGossipOption(player, creature, id)) return true; return false; @@ -547,7 +564,7 @@ bool OutdoorPvP::HandleDropFlag(Player* player, uint32 id) return false; } -bool OPvPCapturePoint::HandleGossipOption(Player* /*player*/, ObjectGuid /*guid*/, uint32 /*id*/) +bool OPvPCapturePoint::HandleGossipOption(Player* /*player*/, Creature* /*guid*/, uint32 /*id*/) { return false; } @@ -562,13 +579,12 @@ bool OPvPCapturePoint::HandleDropFlag(Player* /*player*/, uint32 /*id*/) return false; } -int32 OPvPCapturePoint::HandleOpenGo(Player* /*player*/, ObjectGuid guid) +int32 OPvPCapturePoint::HandleOpenGo(Player* /*player*/, GameObject* go) { - std::map::iterator itr = m_ObjectTypes.find(guid); + std::map::iterator itr = m_ObjectTypes.find(go->GetSpawnId()); if (itr != m_ObjectTypes.end()) - { return itr->second; - } + return -1; } @@ -621,22 +637,37 @@ void OutdoorPvP::TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2) void OutdoorPvP::OnGameObjectCreate(GameObject* go) { + GoScriptPair sp(go->GetGUID().GetCounter(), go); + m_GoScriptStore.insert(sp); if (go->GetGoType() != GAMEOBJECT_TYPE_CAPTURE_POINT) return; - if (OPvPCapturePoint *cp = GetCapturePoint(go->GetGUID())) + if (OPvPCapturePoint *cp = GetCapturePoint(go->GetSpawnId())) cp->m_capturePoint = go; } void OutdoorPvP::OnGameObjectRemove(GameObject* go) { + m_GoScriptStore.erase(go->GetGUID().GetCounter()); + if (go->GetGoType() != GAMEOBJECT_TYPE_CAPTURE_POINT) return; - if (OPvPCapturePoint *cp = GetCapturePoint(go->GetGUID())) + if (OPvPCapturePoint *cp = GetCapturePoint(go->GetSpawnId())) cp->m_capturePoint = NULL; } +void OutdoorPvP::OnCreatureCreate(Creature* creature) +{ + CreatureScriptPair sp(creature->GetGUID().GetCounter(), creature); + m_CreatureScriptStore.insert(sp); +} + +void OutdoorPvP::OnCreatureRemove(Creature* creature) +{ + m_CreatureScriptStore.erase(creature->GetGUID().GetCounter()); +} + void OutdoorPvP::SendDefenseMessage(uint32 zoneId, uint32 id) { DefenseMessageBuilder builder(zoneId, id); @@ -653,3 +684,12 @@ void OutdoorPvP::BroadcastWorker(Worker& _worker, uint32 zoneId) if (player->GetZoneId() == zoneId) _worker(player); } + +void OutdoorPvP::SetMapFromZone(uint32 zone) +{ + AreaTableEntry const* areaTable = GetAreaEntryByAreaID(zone); + ASSERT(areaTable); + Map* map = sMapMgr->CreateBaseMap(areaTable->mapid); + ASSERT(!map->Instanceable()); + m_map = map; +} diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h index d5839956e3..d075da19eb 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.h +++ b/src/server/game/OutdoorPvP/OutdoorPvP.h @@ -109,7 +109,7 @@ class OPvPCapturePoint virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go); - virtual int32 HandleOpenGo(Player* player, ObjectGuid guid); + virtual int32 HandleOpenGo(Player* player, GameObject* go); // returns true if the state of the objective has changed, in this case, the OutdoorPvP must send a world state ui update. virtual bool Update(uint32 diff); @@ -120,7 +120,7 @@ class OPvPCapturePoint virtual void SendChangePhase(); - virtual bool HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid); + virtual bool HandleGossipOption(Player* player, Creature* guid, uint32 gossipid); virtual bool CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso); @@ -128,7 +128,7 @@ class OPvPCapturePoint virtual void DeleteSpawns(); - ObjectGuid m_capturePointGUID; + uint32 m_capturePointSpawnId; GameObject* m_capturePoint; @@ -178,10 +178,10 @@ class OPvPCapturePoint // map to store the various gameobjects and creatures spawned by the objective // type, guid - std::map m_Objects; - std::map m_Creatures; - std::map m_ObjectTypes; - std::map m_CreatureTypes; + std::map m_Objects; + std::map m_Creatures; + std::map m_ObjectTypes; + std::map m_CreatureTypes; }; // base class for specific outdoor pvp handlers @@ -200,7 +200,9 @@ class OutdoorPvP : public ZoneScript // deletes all gos/creatures spawned by the pvp void DeleteSpawns(); - typedef std::map OPvPCapturePointMap; + typedef std::map OPvPCapturePointMap; + typedef std::pair GoScriptPair; + typedef std::pair CreatureScriptPair; virtual void FillInitialWorldStates(WorldPacket & /*data*/) { } @@ -211,14 +213,15 @@ class OutdoorPvP : public ZoneScript virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go); // called on go use - virtual bool HandleOpenGo(Player* player, ObjectGuid guid); + virtual bool HandleOpenGo(Player* player, GameObject* go); // setup stuff virtual bool SetupOutdoorPvP() {return true;} void OnGameObjectCreate(GameObject* go) override; void OnGameObjectRemove(GameObject* go) override; - void OnCreatureCreate(Creature*) override { } + void OnCreatureCreate(Creature*) override; + void OnCreatureRemove(Creature*) override; // send world state update to all players present void SendUpdateWorldState(uint32 field, uint32 value); @@ -240,7 +243,7 @@ class OutdoorPvP : public ZoneScript virtual bool HandleDropFlag(Player* player, uint32 spellId); - virtual bool HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid); + virtual bool HandleGossipOption(Player* player, Creature* creature, uint32 gossipid); virtual bool CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso); @@ -261,6 +264,8 @@ class OutdoorPvP : public ZoneScript void SendDefenseMessage(uint32 zoneId, uint32 id); + Map* GetMap() const { return m_map; } + protected: // the map of the objectives belonging to this outdoorpvp @@ -284,10 +289,10 @@ class OutdoorPvP : public ZoneScript void AddCapturePoint(OPvPCapturePoint* cp) { - m_capturePoints[cp->m_capturePointGUID] = cp; + m_capturePoints[cp->m_capturePointSpawnId] = cp; } - OPvPCapturePoint * GetCapturePoint(ObjectGuid guid) const + OPvPCapturePoint * GetCapturePoint(uint32 guid) const { OutdoorPvP::OPvPCapturePointMap::const_iterator itr = m_capturePoints.find(guid); if (itr != m_capturePoints.end()) @@ -303,6 +308,13 @@ class OutdoorPvP : public ZoneScript template void BroadcastWorker(Worker& _worker, uint32 zoneId); + + // Hack to store map because this code is just shit + void SetMapFromZone(uint32 zone); + std::map m_GoScriptStore; + std::map m_CreatureScriptStore; + + Map* m_map; }; #endif /*OUTDOOR_PVP_H_*/ diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp index 4d7b80da15..e7b6765c17 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp @@ -123,7 +123,7 @@ void OutdoorPvPMgr::HandlePlayerEnterZone(Player* player, uint32 zoneid) return; itr->second->HandlePlayerEnterZone(player, zoneid); - TC_LOG_DEBUG("outdoorpvp", "Player %u entered outdoorpvp id %u", player->GetGUIDLow(), itr->second->GetTypeId()); + TC_LOG_DEBUG("outdoorpvp", "Player %u entered outdoorpvp id %u", player->GetGUID().GetCounter(), itr->second->GetTypeId()); } void OutdoorPvPMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneid) @@ -137,7 +137,7 @@ void OutdoorPvPMgr::HandlePlayerLeaveZone(Player* player, uint32 zoneid) return; itr->second->HandlePlayerLeaveZone(player, zoneid); - TC_LOG_DEBUG("outdoorpvp", "Player %u left outdoorpvp id %u", player->GetGUIDLow(), itr->second->GetTypeId()); + TC_LOG_DEBUG("outdoorpvp", "Player %u left outdoorpvp id %u", player->GetGUID().GetCounter(), itr->second->GetTypeId()); } OutdoorPvP* OutdoorPvPMgr::GetOutdoorPvPToZoneId(uint32 zoneid) @@ -181,21 +181,21 @@ ZoneScript* OutdoorPvPMgr::GetZoneScript(uint32 zoneId) return NULL; } -bool OutdoorPvPMgr::HandleOpenGo(Player* player, ObjectGuid guid) +bool OutdoorPvPMgr::HandleOpenGo(Player* player, GameObject* go) { for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr) { - if ((*itr)->HandleOpenGo(player, guid)) + if ((*itr)->HandleOpenGo(player, go)) return true; } return false; } -void OutdoorPvPMgr::HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid) +void OutdoorPvPMgr::HandleGossipOption(Player* player, Creature* creature, uint32 gossipid) { for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr) { - if ((*itr)->HandleGossipOption(player, guid, gossipid)) + if ((*itr)->HandleGossipOption(player, creature, gossipid)) return; } } diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h index 4f03dd37fa..542aad0ef0 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h @@ -70,7 +70,7 @@ class OutdoorPvPMgr bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go); // handle custom go if registered - bool HandleOpenGo(Player* player, ObjectGuid guid); + bool HandleOpenGo(Player* player, GameObject* go); ZoneScript* GetZoneScript(uint32 zoneId); @@ -78,7 +78,7 @@ class OutdoorPvPMgr void Update(uint32 diff); - void HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid); + void HandleGossipOption(Player* player, Creature* creature, uint32 gossipid); bool CanTalkTo(Player* player, Creature* creature, GossipMenuItems const& gso); diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index 3f56153991..8f3d4a758f 100644 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -221,8 +221,17 @@ void PoolGroup::Despawn1Object(uint32 guid) { sObjectMgr->RemoveCreatureFromGrid(guid, data); - if (Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, guid), (Creature*)NULL)) - creature->AddObjectToRemoveList(); + Map* map = sMapMgr->CreateBaseMap(data->mapid); + if (!map->Instanceable()) + { + auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(guid); + for (auto itr = creatureBounds.first; itr != creatureBounds.second;) + { + Creature* creature = itr->second; + ++itr; + creature->AddObjectToRemoveList(); + } + } } } @@ -234,8 +243,17 @@ void PoolGroup::Despawn1Object(uint32 guid) { sObjectMgr->RemoveGameobjectFromGrid(guid, data); - if (GameObject* pGameobject = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, guid), (GameObject*)NULL)) - pGameobject->AddObjectToRemoveList(); + Map* map = sMapMgr->CreateBaseMap(data->mapid); + if (!map->Instanceable()) + { + auto gameobjectBounds = map->GetGameObjectBySpawnIdStore().equal_range(guid); + for (auto itr = gameobjectBounds.first; itr != gameobjectBounds.second;) + { + GameObject* go = itr->second; + ++itr; + go->AddObjectToRemoveList(); + } + } } } @@ -507,20 +525,16 @@ void PoolGroup::SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 // Method that does the respawn job on the specified creature template <> -void PoolGroup::ReSpawn1Object(PoolObject* obj) +void PoolGroup::ReSpawn1Object(PoolObject* /*obj*/) { - if (CreatureData const* data = sObjectMgr->GetCreatureData(obj->guid)) - if (Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, obj->guid), (Creature*)NULL)) - creature->GetMap()->AddToMap(creature); + // Creature is still on map, nothing to do } // Method that does the respawn job on the specified gameobject template <> -void PoolGroup::ReSpawn1Object(PoolObject* obj) +void PoolGroup::ReSpawn1Object(PoolObject* /*obj*/) { - if (GameObjectData const* data = sObjectMgr->GetGOData(obj->guid)) - if (GameObject* pGameobject = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, obj->guid), (GameObject*)NULL)) - pGameobject->GetMap()->AddToMap(pGameobject); + // GameObject is still on map, nothing to do } // Nothing to do for a child Pool diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index a3e458503d..a4065fa6f8 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -512,7 +512,7 @@ void ReputationMgr::LoadFromDB(PreparedQueryResult result) // Set initial reputations (so everything is nifty before DB data load) Initialize(); - //QueryResult* result = CharacterDatabase.PQuery("SELECT faction, standing, flags FROM character_reputation WHERE guid = '%u'", GetGUIDLow()); + //QueryResult* result = CharacterDatabase.PQuery("SELECT faction, standing, flags FROM character_reputation WHERE guid = '%u'", GetGUID().GetCounter()); if (result) { @@ -574,12 +574,12 @@ void ReputationMgr::SaveToDB(SQLTransaction& trans) if (itr->second.needSave) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_REPUTATION_BY_FACTION); - stmt->setUInt32(0, _player->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); stmt->setUInt16(1, uint16(itr->second.ID)); trans->Append(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_REPUTATION_BY_FACTION); - stmt->setUInt32(0, _player->GetGUIDLow()); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); stmt->setUInt16(1, uint16(itr->second.ID)); stmt->setInt32(2, itr->second.Standing); stmt->setUInt16(3, uint16(itr->second.Flags)); diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index f5c4375712..a369750b0c 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -114,8 +114,8 @@ inline Player* Map::_GetScriptPlayerSourceOrTarget(Object* source, Object* targe if (!player) TC_LOG_ERROR("scripts", "%s neither source nor target object is player (source: TypeId: %u, Entry: %u, GUID: %u; target: TypeId: %u, Entry: %u, GUID: %u), skipping.", scriptInfo->GetDebugInfo().c_str(), - source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUIDLow() : 0, - target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUIDLow() : 0); + source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().GetCounter() : 0, + target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().GetCounter() : 0); } return player; } @@ -147,8 +147,8 @@ inline Creature* Map::_GetScriptCreatureSourceOrTarget(Object* source, Object* t if (!creature) TC_LOG_ERROR("scripts", "%s neither source nor target are creatures (source: TypeId: %u, Entry: %u, GUID: %u; target: TypeId: %u, Entry: %u, GUID: %u), skipping.", scriptInfo->GetDebugInfo().c_str(), - source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUIDLow() : 0, - target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUIDLow() : 0); + source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().GetCounter() : 0, + target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().GetCounter() : 0); } return creature; } @@ -160,7 +160,7 @@ inline Unit* Map::_GetScriptUnit(Object* obj, bool isSource, const ScriptInfo* s TC_LOG_ERROR("scripts", "%s %s object is NULL.", scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target"); else if (!obj->isType(TYPEMASK_UNIT)) TC_LOG_ERROR("scripts", "%s %s object is not unit (TypeId: %u, Entry: %u, GUID: %u), skipping.", - scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUIDLow()); + scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().GetCounter()); else { unit = obj->ToUnit(); @@ -181,7 +181,7 @@ inline Player* Map::_GetScriptPlayer(Object* obj, bool isSource, const ScriptInf player = obj->ToPlayer(); if (!player) TC_LOG_ERROR("scripts", "%s %s object is not a player (TypeId: %u, Entry: %u, GUID: %u).", - scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUIDLow()); + scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().GetCounter()); } return player; } @@ -196,7 +196,7 @@ inline Creature* Map::_GetScriptCreature(Object* obj, bool isSource, const Scrip creature = obj->ToCreature(); if (!creature) TC_LOG_ERROR("scripts", "%s %s object is not a creature (TypeId: %u, Entry: %u, GUID: %u).", scriptInfo->GetDebugInfo().c_str(), - isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUIDLow()); + isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().GetCounter()); } return creature; } @@ -212,7 +212,7 @@ inline WorldObject* Map::_GetScriptWorldObject(Object* obj, bool isSource, const pWorldObject = dynamic_cast(obj); if (!pWorldObject) TC_LOG_ERROR("scripts", "%s %s object is not a world object (TypeId: %u, Entry: %u, GUID: %u).", - scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUIDLow()); + scriptInfo->GetDebugInfo().c_str(), isSource ? "source" : "target", obj->GetTypeId(), obj->GetEntry(), obj->GetGUID().GetCounter()); } return pWorldObject; } @@ -236,13 +236,13 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script TC_LOG_ERROR("scripts", "%s source object is NULL.", scriptInfo->GetDebugInfo().c_str()); else if (!source->isType(TYPEMASK_UNIT)) TC_LOG_ERROR("scripts", "%s source object is not unit (TypeId: %u, Entry: %u, GUID: %u), skipping.", scriptInfo->GetDebugInfo().c_str(), - source->GetTypeId(), source->GetEntry(), source->GetGUIDLow()); + source->GetTypeId(), source->GetEntry(), source->GetGUID().GetCounter()); else { WorldObject* wSource = dynamic_cast (source); if (!wSource) TC_LOG_ERROR("scripts", "%s source object could not be cast to world object (TypeId: %u, Entry: %u, GUID: %u), skipping.", - scriptInfo->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow()); + scriptInfo->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUID().GetCounter()); else { GameObject* pDoor = _FindGameObject(wSource, guid); @@ -250,7 +250,7 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script TC_LOG_ERROR("scripts", "%s gameobject was not found (guid: %u).", scriptInfo->GetDebugInfo().c_str(), guid); else if (pDoor->GetGoType() != GAMEOBJECT_TYPE_DOOR) TC_LOG_ERROR("scripts", "%s gameobject is not a door (GoType: %u, Entry: %u, GUID: %u).", - scriptInfo->GetDebugInfo().c_str(), pDoor->GetGoType(), pDoor->GetEntry(), pDoor->GetGUIDLow()); + scriptInfo->GetDebugInfo().c_str(), pDoor->GetGoType(), pDoor->GetEntry(), pDoor->GetGUID().GetCounter()); else if (bOpen == (pDoor->GetGoState() == GO_STATE_READY)) { pDoor->UseDoorOrButton(nTimeToToggle); @@ -268,18 +268,11 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script inline GameObject* Map::_FindGameObject(WorldObject* searchObject, uint32 guid) const { - GameObject* gameobject = NULL; + auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid); + if (bounds.first == bounds.second) + return nullptr; - CellCoord p(Trinity::ComputeCellCoord(searchObject->GetPositionX(), searchObject->GetPositionY())); - Cell cell(p); - - Trinity::GameObjectWithDbGUIDCheck goCheck(*searchObject, guid); - Trinity::GameObjectSearcher checker(searchObject, gameobject, goCheck); - - TypeContainerVisitor, GridTypeMapContainer > objectChecker(checker); - cell.Visit(p, objectChecker, *searchObject->GetMap(), *searchObject, searchObject->GetGridActivationRange()); - - return gameobject; + return bounds.first->second; } /// Process queued scripts @@ -300,33 +293,30 @@ void Map::ScriptsProcess() { switch (step.sourceGUID.GetHigh()) { - case HIGHGUID_ITEM: // as well as HIGHGUID_CONTAINER + case HighGuid::Item: // as well as HighGuid::Container if (Player* player = HashMapHolder::Find(step.ownerGUID)) source = player->GetItemByGuid(step.sourceGUID); break; - case HIGHGUID_UNIT: - case HIGHGUID_VEHICLE: - source = HashMapHolder::Find(step.sourceGUID); + case HighGuid::Unit: + case HighGuid::Vehicle: + source = GetCreature(step.sourceGUID); break; - case HIGHGUID_PET: - source = HashMapHolder::Find(step.sourceGUID); + case HighGuid::Pet: + source = GetPet(step.sourceGUID); break; - case HIGHGUID_PLAYER: + case HighGuid::Player: source = HashMapHolder::Find(step.sourceGUID); break; - case HIGHGUID_TRANSPORT: - case HIGHGUID_GAMEOBJECT: - source = HashMapHolder::Find(step.sourceGUID); + case HighGuid::Transport: + case HighGuid::GameObject: + source = GetGameObject(step.sourceGUID); break; - case HIGHGUID_CORPSE: - source = HashMapHolder::Find(step.sourceGUID); + case HighGuid::Corpse: + source = GetCorpse(step.sourceGUID); break; - case HIGHGUID_MO_TRANSPORT: - { - GameObject* go = HashMapHolder::Find(step.sourceGUID); - source = go ? go->ToTransport() : NULL; + case HighGuid::Mo_Transport: + source = GetTransport(step.sourceGUID); break; - } default: TC_LOG_ERROR("scripts", "%s source with unsupported high guid %s.", step.script->GetDebugInfo().c_str(), step.sourceGUID.ToString().c_str()); @@ -339,29 +329,26 @@ void Map::ScriptsProcess() { switch (step.targetGUID.GetHigh()) { - case HIGHGUID_UNIT: - case HIGHGUID_VEHICLE: - target = HashMapHolder::Find(step.targetGUID); + case HighGuid::Unit: + case HighGuid::Vehicle: + target = GetCreature(step.targetGUID); break; - case HIGHGUID_PET: - target = HashMapHolder::Find(step.targetGUID); + case HighGuid::Pet: + target = GetPet(step.targetGUID); break; - case HIGHGUID_PLAYER: // empty GUID case also + case HighGuid::Player: // empty GUID case also target = HashMapHolder::Find(step.targetGUID); break; - case HIGHGUID_TRANSPORT: - case HIGHGUID_GAMEOBJECT: - target = HashMapHolder::Find(step.targetGUID); + case HighGuid::Transport: + case HighGuid::GameObject: + target = GetGameObject(step.targetGUID); break; - case HIGHGUID_CORPSE: - target = HashMapHolder::Find(step.targetGUID); + case HighGuid::Corpse: + target = GetCorpse(step.targetGUID); break; - case HIGHGUID_MO_TRANSPORT: - { - GameObject* go = HashMapHolder::Find(step.targetGUID); - target = go ? go->ToTransport() : NULL; + case HighGuid::Mo_Transport: + target = GetTransport(step.targetGUID); break; - } default: TC_LOG_ERROR("scripts", "%s target with unsupported high guid %s.", step.script->GetDebugInfo().c_str(), step.targetGUID.ToString().c_str()); @@ -470,7 +457,7 @@ void Map::ScriptsProcess() if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount()) TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, Entry: %u, GUID: %u) specified, skipping.", step.script->GetDebugInfo().c_str(), step.script->FlagToggle.FieldID, - cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUIDLow()); + cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUID().GetCounter()); else cSource->SetFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue); } @@ -484,7 +471,7 @@ void Map::ScriptsProcess() if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount()) TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, Entry: %u, GUID: %u) specified, skipping.", step.script->GetDebugInfo().c_str(), step.script->FlagToggle.FieldID, - cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUIDLow()); + cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUID().GetCounter()); else cSource->RemoveFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue); } @@ -526,7 +513,7 @@ void Map::ScriptsProcess() if (source->GetTypeId() != TYPEID_UNIT && source->GetTypeId() != TYPEID_GAMEOBJECT && source->GetTypeId() != TYPEID_PLAYER) { TC_LOG_ERROR("scripts", "%s source is not unit, gameobject or player (TypeId: %u, Entry: %u, GUID: %u), skipping.", - step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow()); + step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUID().GetCounter()); break; } worldObject = dynamic_cast(source); @@ -539,7 +526,7 @@ void Map::ScriptsProcess() if (target->GetTypeId() != TYPEID_UNIT && target->GetTypeId() != TYPEID_GAMEOBJECT && target->GetTypeId() != TYPEID_PLAYER) { TC_LOG_ERROR("scripts", "%s target is not unit, gameobject or player (TypeId: %u, Entry: %u, GUID: %u), skipping.", - step.script->GetDebugInfo().c_str(), target->GetTypeId(), target->GetEntry(), target->GetGUIDLow()); + step.script->GetDebugInfo().c_str(), target->GetTypeId(), target->GetEntry(), target->GetGUID().GetCounter()); break; } worldObject = dynamic_cast(target); @@ -547,8 +534,8 @@ void Map::ScriptsProcess() else { TC_LOG_ERROR("scripts", "%s neither source nor target is player (source: TypeId: %u, Entry: %u, GUID: %u; target: TypeId: %u, Entry: %u, GUID: %u), skipping.", - step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUIDLow(), - target->GetTypeId(), target->GetEntry(), target->GetGUIDLow()); + step.script->GetDebugInfo().c_str(), source->GetTypeId(), source->GetEntry(), source->GetGUID().GetCounter(), + target->GetTypeId(), target->GetEntry(), target->GetGUID().GetCounter()); break; } } @@ -653,7 +640,7 @@ void Map::ScriptsProcess() if (target->GetTypeId() != TYPEID_GAMEOBJECT) { TC_LOG_ERROR("scripts", "%s target object is not gameobject (TypeId: %u, Entry: %u, GUID: %u), skipping.", - step.script->GetDebugInfo().c_str(), target->GetTypeId(), target->GetEntry(), target->GetGUIDLow()); + step.script->GetDebugInfo().c_str(), target->GetTypeId(), target->GetEntry(), target->GetGUID().GetCounter()); break; } @@ -795,22 +782,15 @@ void Map::ScriptsProcess() } Creature* cTarget = NULL; - WorldObject* wSource = dynamic_cast (source); - if (wSource) //using grid searcher + auto creatureBounds = _creatureBySpawnIdStore.equal_range(step.script->CallScript.CreatureEntry); + if (creatureBounds.first != creatureBounds.second) { - CellCoord p(Trinity::ComputeCellCoord(wSource->GetPositionX(), wSource->GetPositionY())); - Cell cell(p); - - Trinity::CreatureWithDbGUIDCheck target_check(wSource, step.script->CallScript.CreatureEntry); - Trinity::CreatureSearcher checker(wSource, cTarget, target_check); - - TypeContainerVisitor, GridTypeMapContainer > unit_checker(checker); - cell.Visit(p, unit_checker, *wSource->GetMap(), *wSource, wSource->GetGridActivationRange()); - } - else //check hashmap holders - { - if (CreatureData const* data = sObjectMgr->GetCreatureData(step.script->CallScript.CreatureEntry)) - cTarget = ObjectAccessor::GetObjectInWorld(data->mapid, data->posX, data->posY, ObjectGuid(HIGHGUID_UNIT, data->id, step.script->CallScript.CreatureEntry), cTarget); + // Prefer alive (last respawned) creature + auto creatureItr = std::find_if(creatureBounds.first, creatureBounds.second, [](Map::CreatureBySpawnIdContainer::value_type const& pair) + { + return pair.second->IsAlive(); + }); + cTarget = creatureItr != creatureBounds.second ? creatureItr->second : creatureBounds.first->second; } if (!cTarget) @@ -839,7 +819,7 @@ void Map::ScriptsProcess() { if (cSource->isDead()) TC_LOG_ERROR("scripts", "%s creature is already dead (Entry: %u, GUID: %u)", - step.script->GetDebugInfo().c_str(), cSource->GetEntry(), cSource->GetGUIDLow()); + step.script->GetDebugInfo().c_str(), cSource->GetEntry(), cSource->GetGUID().GetCounter()); else { cSource->setDeathState(JUST_DIED); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index bb22d27221..e689600317 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -180,9 +180,9 @@ std::string WorldSession::GetPlayerInfo() const } /// Get player guid if available. Use for logging purposes only -uint32 WorldSession::GetGuidLow() const +uint32 WorldSession::GetGUIDLow() const { - return GetPlayer() ? GetPlayer()->GetGUIDLow() : 0; + return GetPlayer() ? GetPlayer()->GetGUID().GetCounter() : 0; } /// Send a packet to the client @@ -538,8 +538,8 @@ void WorldSession::LogoutPlayer(bool save) } //! Broadcast a logout message to the player's friends - sSocialMgr->SendFriendStatus(_player, FRIEND_OFFLINE, _player->GetGUIDLow(), true); - sSocialMgr->RemovePlayerSocial(_player->GetGUIDLow()); + sSocialMgr->SendFriendStatus(_player, FRIEND_OFFLINE, _player->GetGUID().GetCounter(), true); + sSocialMgr->RemovePlayerSocial(_player->GetGUID().GetCounter()); //! Call script hook before deletion sScriptMgr->OnPlayerLogout(_player); @@ -550,7 +550,7 @@ void WorldSession::LogoutPlayer(bool save) // calls to GetMap in this case may cause crashes _player->CleanupsBeforeDelete(); TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Logout Character:[%s] (GUID: %u) Level: %d", - GetAccountId(), GetRemoteAddress().c_str(), _player->GetName().c_str(), _player->GetGUIDLow(), _player->getLevel()); + GetAccountId(), GetRemoteAddress().c_str(), _player->GetName().c_str(), _player->GetGUID().GetCounter(), _player->getLevel()); if (Map* _map = _player->FindMap()) _map->RemovePlayerFromMap(_player, true); @@ -830,7 +830,7 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) { \ TC_LOG_DEBUG("entities.unit", "WorldSession::ReadMovementInfo: Violation of MovementFlags found (%s). " \ "MovementFlags: %u, MovementFlags2: %u for player GUID: %u. Mask %u will be removed.", \ - STRINGIZE(check), mi->GetMovementFlags(), mi->GetExtraMovementFlags(), GetPlayer()->GetGUIDLow(), maskToRemove); \ + STRINGIZE(check), mi->GetMovementFlags(), mi->GetExtraMovementFlags(), GetPlayer()->GetGUID().GetCounter(), maskToRemove); \ mi->RemoveMovementFlag((maskToRemove)); \ } \ } @@ -1082,7 +1082,7 @@ void WorldSession::SetPlayer(Player* player) // set m_GUID that can be used while player loggined and later until m_playerRecentlyLogout not reset if (_player) - m_GUIDLow = _player->GetGUIDLow(); + m_GUIDLow = _player->GetGUID().GetCounter(); } void WorldSession::InitializeQueryCallbackParameters() diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 3753f79676..e597cbff27 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -287,7 +287,7 @@ class WorldSession std::string const& GetPlayerName() const; std::string GetPlayerInfo() const; - uint32 GetGuidLow() const; + uint32 GetGUIDLow() const; void SetSecurity(AccountTypes security) { _security = security; } std::string const& GetRemoteAddress() const { return m_Address; } void SetPlayer(Player* player); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index f7491175a5..0cc075a3dd 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1556,7 +1556,7 @@ void AuraEffect::HandlePhase(AuraApplication const* aurApp, uint8 mode, bool app { newPhase = PHASEMASK_NORMAL; if (Creature* creature = target->ToCreature()) - if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetDBTableGUIDLow())) + if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetSpawnId())) newPhase = data->phaseMask; } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index e380373f4c..e42f66c6ff 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -436,7 +436,7 @@ void Aura::_UnapplyForTarget(Unit* target, Unit* caster, AuraApplication * auraA if (itr == m_applications.end()) { TC_LOG_ERROR("spells", "Aura::_UnapplyForTarget, target:%u, caster:%u, spell:%u was not found in owners application map!", - target->GetGUIDLow(), caster ? caster->GetGUIDLow() : 0, auraApp->GetBase()->GetSpellInfo()->Id); + target->GetGUID().GetCounter(), caster ? caster->GetGUID().GetCounter() : 0, auraApp->GetBase()->GetSpellInfo()->Id); ABORT(); } @@ -1022,9 +1022,6 @@ void Aura::UnregisterSingleTarget() { ASSERT(m_isSingleTarget); Unit* caster = GetCaster(); - /// @todo find a better way to do this. - if (!caster) - caster = ObjectAccessor::GetObjectInOrOutOfWorld(GetCasterGUID(), (Unit*)NULL); ASSERT(caster); caster->GetSingleCastAuras().remove(this); SetIsSingleTarget(false); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index ca6946554d..e1302d48d2 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -210,10 +210,10 @@ ObjectGuid SpellCastTargets::GetOrigUnitTargetGUID() const { switch (m_origObjectTargetGUID.GetHigh()) { - case HIGHGUID_PLAYER: - case HIGHGUID_VEHICLE: - case HIGHGUID_UNIT: - case HIGHGUID_PET: + case HighGuid::Player: + case HighGuid::Vehicle: + case HighGuid::Unit: + case HighGuid::Pet: return m_origObjectTargetGUID; default: return ObjectGuid(); @@ -2218,6 +2218,9 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) uint8 mask = target->effectMask; Unit* unit = m_caster->GetGUID() == target->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, target->targetGUID); + if (!unit && !target->targetGUID.IsPlayer()) // only players may be targeted across maps + return; + if (!unit) { uint8 farMask = 0; @@ -2230,7 +2233,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) if (!farMask) return; // find unit in world - unit = ObjectAccessor::FindUnit(target->targetGUID); + unit = ObjectAccessor::FindPlayer(target->targetGUID); if (!unit) return; @@ -3428,7 +3431,7 @@ void Spell::_handle_finish_phase() if (m_caster->m_extraAttacks && m_spellInfo->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS)) { - if (Unit* victim = ObjectAccessor::FindUnit(m_targets.GetOrigUnitTargetGUID())) + if (Unit* victim = ObjectAccessor::GetUnit(*m_caster, m_targets.GetOrigUnitTargetGUID())) m_caster->HandleProcExtraAttackFor(victim); else m_caster->m_extraAttacks = 0; @@ -3557,7 +3560,7 @@ void Spell::finish(bool ok) SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell); if (spellInfo && spellInfo->SpellIconID == 2056) { - TC_LOG_DEBUG("spells", "Statue %d is unsummoned in spell %d finish", m_caster->GetGUIDLow(), m_spellInfo->Id); + TC_LOG_DEBUG("spells", "Statue %d is unsummoned in spell %d finish", m_caster->GetGUID().GetCounter(), m_spellInfo->Id); m_caster->setDeathState(JUST_DIED); return; } @@ -4241,7 +4244,7 @@ void Spell::TakeCastItem() { // This code is to avoid a crash // I'm not sure, if this is really an error, but I guess every item needs a prototype - TC_LOG_ERROR("spells", "Cast item has no item prototype highId=%d, lowId=%d", m_CastItem->GetGUIDHigh(), m_CastItem->GetGUIDLow()); + TC_LOG_ERROR("spells", "Cast item has no item prototype %s", m_CastItem->GetGUID().ToString().c_str()); return; } @@ -6585,7 +6588,7 @@ SpellEvent::~SpellEvent() else { TC_LOG_ERROR("spells", "~SpellEvent: %s %u tried to delete non-deletable spell %u. Was not deleted, causes memory leak.", - (m_Spell->GetCaster()->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), m_Spell->GetCaster()->GetGUIDLow(), m_Spell->m_spellInfo->Id); + (m_Spell->GetCaster()->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), m_Spell->GetCaster()->GetGUID().GetCounter(), m_Spell->m_spellInfo->Id); ABORT(); } } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 91eb7330dd..10dfbd511d 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1232,7 +1232,7 @@ void Spell::EffectUnlearnSpecialization(SpellEffIndex effIndex) player->RemoveSpell(spellToUnlearn); - TC_LOG_DEBUG("spells", "Spell: Player %u has unlearned spell %u from NpcGUID: %u", player->GetGUIDLow(), spellToUnlearn, m_caster->GetGUIDLow()); + TC_LOG_DEBUG("spells", "Spell: Player %u has unlearned spell %u from NpcGUID: %u", player->GetGUID().GetCounter(), spellToUnlearn, m_caster->GetGUID().GetCounter()); } void Spell::EffectPowerDrain(SpellEffIndex effIndex) @@ -1712,7 +1712,7 @@ void Spell::EffectPersistentAA(SpellEffIndex effIndex) if (!caster->IsInWorld()) return; DynamicObject* dynObj = new DynamicObject(false); - if (!dynObj->CreateDynamicObject(sObjectMgr->GenerateLowGuid(HIGHGUID_DYNAMICOBJECT), caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_AREA_SPELL)) + if (!dynObj->CreateDynamicObject(caster->GetMap()->GenerateLowGuid(), caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_AREA_SPELL)) { delete dynObj; return; @@ -1884,7 +1884,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype) if (!gameObjTarget->isSpawned() && !player->IsGameMaster()) { TC_LOG_ERROR("spells", "Possible hacking attempt: Player %s [guid: %u] tried to loot a gameobject [entry: %u id: %u] which is on respawn time without being in GM mode!", - player->GetName().c_str(), player->GetGUIDLow(), gameObjTarget->GetEntry(), gameObjTarget->GetGUIDLow()); + player->GetName().c_str(), player->GetGUID().GetCounter(), gameObjTarget->GetEntry(), gameObjTarget->GetGUID().GetCounter()); return; } // special case, already has GossipHello inside so return and avoid calling twice @@ -1922,7 +1922,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype) /// @todo possible must be moved to loot release (in different from linked triggering) if (gameObjTarget->GetGOInfo()->chest.eventId) { - TC_LOG_DEBUG("spells", "Chest ScriptStart id %u for GO %u", gameObjTarget->GetGOInfo()->chest.eventId, gameObjTarget->GetDBTableGUIDLow()); + TC_LOG_DEBUG("spells", "Chest ScriptStart id %u for GO %u", gameObjTarget->GetGOInfo()->chest.eventId, gameObjTarget->GetSpawnId()); player->GetMap()->ScriptsStart(sEventScripts, gameObjTarget->GetGOInfo()->chest.eventId, player, gameObjTarget); } @@ -1991,7 +1991,7 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex) /// @todo Add script for spell 41920 - Filling, becouse server it freze when use this spell // handle outdoor pvp object opening, return true if go was registered for handling // these objects must have been spawned by outdoorpvp! - else if (gameObjTarget->GetGOInfo()->type == GAMEOBJECT_TYPE_GOOBER && sOutdoorPvPMgr->HandleOpenGo(player, gameObjTarget->GetGUID())) + else if (gameObjTarget->GetGOInfo()->type == GAMEOBJECT_TYPE_GOOBER && sOutdoorPvPMgr->HandleOpenGo(player, gameObjTarget)) return; lockId = goInfo->GetLockId(); guid = gameObjTarget->GetGUID(); @@ -2032,9 +2032,9 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex) if (gameObjTarget) { // Allow one skill-up until respawned - if (!gameObjTarget->IsInSkillupList(player->GetGUIDLow()) && + if (!gameObjTarget->IsInSkillupList(player->GetGUID().GetCounter()) && player->UpdateGatherSkill(skillId, pureSkillValue, reqSkillValue)) - gameObjTarget->AddToSkillupList(player->GetGUIDLow()); + gameObjTarget->AddToSkillupList(player->GetGUID().GetCounter()); } else if (itemTarget) { @@ -2376,7 +2376,7 @@ void Spell::EffectLearnSpell(SpellEffIndex effIndex) uint32 spellToLearn = (m_spellInfo->Id == 483 || m_spellInfo->Id == 55884) ? damage : m_spellInfo->Effects[effIndex].TriggerSpell; player->LearnSpell(spellToLearn, false); - TC_LOG_DEBUG("spells", "Spell: Player %u has learned spell %u from NpcGUID=%u", player->GetGUIDLow(), spellToLearn, m_caster->GetGUIDLow()); + TC_LOG_DEBUG("spells", "Spell: Player %u has learned spell %u from NpcGUID=%u", player->GetGUID().GetCounter(), spellToLearn, m_caster->GetGUID().GetCounter()); } void Spell::EffectDispel(SpellEffIndex effIndex) @@ -2550,7 +2550,7 @@ void Spell::EffectAddFarsight(SpellEffIndex effIndex) return; DynamicObject* dynObj = new DynamicObject(true); - if (!dynObj->CreateDynamicObject(sObjectMgr->GenerateLowGuid(HIGHGUID_DYNAMICOBJECT), m_caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_FARSIGHT_FOCUS)) + if (!dynObj->CreateDynamicObject(m_caster->GetMap()->GenerateLowGuid(), m_caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_FARSIGHT_FOCUS)) { delete dynObj; return; @@ -2627,7 +2627,7 @@ void Spell::EffectAddHonor(SpellEffIndex /*effIndex*/) if (m_CastItem) { unitTarget->ToPlayer()->RewardHonor(NULL, 1, damage/10); - TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %d honor points (item %u) for player: %u", m_spellInfo->Id, damage/10, m_CastItem->GetEntry(), unitTarget->ToPlayer()->GetGUIDLow()); + TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %d honor points (item %u) for player: %u", m_spellInfo->Id, damage/10, m_CastItem->GetEntry(), unitTarget->ToPlayer()->GetGUID().GetCounter()); return; } @@ -2636,13 +2636,13 @@ void Spell::EffectAddHonor(SpellEffIndex /*effIndex*/) { uint32 honor_reward = Trinity::Honor::hk_honor_at_level(unitTarget->getLevel(), float(damage)); unitTarget->ToPlayer()->RewardHonor(NULL, 1, honor_reward); - TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %u honor points (scale) to player: %u", m_spellInfo->Id, honor_reward, unitTarget->ToPlayer()->GetGUIDLow()); + TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %u honor points (scale) to player: %u", m_spellInfo->Id, honor_reward, unitTarget->ToPlayer()->GetGUID().GetCounter()); } else { //maybe we have correct honor_gain in damage already unitTarget->ToPlayer()->RewardHonor(NULL, 1, damage); - TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %u honor points (non scale) for player: %u", m_spellInfo->Id, damage, unitTarget->ToPlayer()->GetGUIDLow()); + TC_LOG_DEBUG("spells", "SpellEffect::AddHonor (spell_id %u) rewards %u honor points (non scale) for player: %u", m_spellInfo->Id, damage, unitTarget->ToPlayer()->GetGUID().GetCounter()); } } @@ -3502,7 +3502,7 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex) Map* map = target->GetMap(); - if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), gameobject_id, map, + if (!pGameObj->Create(map->GenerateLowGuid(), gameobject_id, map, m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { delete pGameObj; @@ -3527,7 +3527,7 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex) if (uint32 linkedEntry = pGameObj->GetGOInfo()->GetLinkedGameObjectEntry()) { GameObject* linkedGO = new GameObject; - if (linkedGO->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), linkedEntry, map, + if (linkedGO->Create(map->GenerateLowGuid(), linkedEntry, map, m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { linkedGO->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); @@ -4126,7 +4126,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex) Player* target = unitTarget->ToPlayer(); // caster or target already have requested duel - if (caster->duel || target->duel || !target->GetSocial() || target->GetSocial()->HasIgnore(caster->GetGUIDLow())) + if (caster->duel || target->duel || !target->GetSocial() || target->GetSocial()->HasIgnore(caster->GetGUID().GetCounter())) return; // Players can only fight a duel in zones with this flag @@ -4150,7 +4150,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex) uint32 gameobject_id = m_spellInfo->Effects[effIndex].MiscValue; Map* map = m_caster->GetMap(); - if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), gameobject_id, + if (!pGameObj->Create(map->GenerateLowGuid(), gameobject_id, map, m_caster->GetPhaseMask(), m_caster->GetPositionX()+(unitTarget->GetPositionX()-m_caster->GetPositionX())/2, m_caster->GetPositionY()+(unitTarget->GetPositionY()-m_caster->GetPositionY())/2, @@ -4216,7 +4216,7 @@ void Spell::EffectStuck(SpellEffIndex /*effIndex*/) return; TC_LOG_DEBUG("spells", "Spell Effect: Stuck"); - TC_LOG_DEBUG("spells", "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", player->GetName().c_str(), player->GetGUIDLow(), player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); + TC_LOG_DEBUG("spells", "Player %s (guid %u) used auto-unstuck future at map %u (%f, %f, %f)", player->GetName().c_str(), player->GetGUID().GetCounter(), player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); if (player->IsInFlight()) return; @@ -4497,7 +4497,7 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex) m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE); Map* map = m_caster->GetMap(); - if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), go_id, map, + if (!go->Create(map->GenerateLowGuid(), go_id, map, m_caster->GetPhaseMask(), x, y, z, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) { delete go; @@ -5126,7 +5126,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) GameObject* pGameObj = new GameObject; - if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), name_id, cMap, + if (!pGameObj->Create(cMap->GenerateLowGuid(), name_id, cMap, m_caster->GetPhaseMask(), fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { delete pGameObj; @@ -5192,7 +5192,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) if (uint32 linkedEntry = pGameObj->GetGOInfo()->GetLinkedGameObjectEntry()) { GameObject* linkedGO = new GameObject; - if (linkedGO->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), linkedEntry, cMap, + if (linkedGO->Create(cMap->GenerateLowGuid(), linkedEntry, cMap, m_caster->GetPhaseMask(), fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { linkedGO->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index f9ccd2efd1..9f75d917ae 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -202,7 +202,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject CreatureTextMap::const_iterator sList = mTextMap.find(source->GetEntry()); if (sList == mTextMap.end()) { - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find Text for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", source->GetName().c_str(), source->GetEntry(), source->GetGUIDLow()); + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find Text for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", source->GetName().c_str(), source->GetEntry(), source->GetGUID().GetCounter()); return 0; } @@ -210,7 +210,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject CreatureTextHolder::const_iterator itr = textHolder.find(textGroup); if (itr == textHolder.end()) { - TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find TextGroup %u for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", uint32(textGroup), source->GetName().c_str(), source->GetEntry(), source->GetGUIDLow()); + TC_LOG_ERROR("sql.sql", "CreatureTextMgr: Could not find TextGroup %u for Creature %s (Entry %u, GUID %u) in 'creature_text' table. Ignoring.", uint32(textGroup), source->GetName().c_str(), source->GetEntry(), source->GetGUID().GetCounter()); return 0; } diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index 3d26f349ca..a51c9fb16d 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -53,7 +53,7 @@ bool GmTicket::LoadFromDB(Field* fields) // ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, haveTicket uint8 index = 0; _id = fields[ index].GetUInt32(); - _playerGuid = ObjectGuid(HIGHGUID_PLAYER, fields[++index].GetUInt32()); + _playerGuid = ObjectGuid(HighGuid::Player, fields[++index].GetUInt32()); _playerName = fields[++index].GetString(); _message = fields[++index].GetString(); _createTime = fields[++index].GetUInt32(); @@ -63,7 +63,7 @@ bool GmTicket::LoadFromDB(Field* fields) _posZ = fields[++index].GetFloat(); _lastModifiedTime = fields[++index].GetUInt32(); _closedBy = ObjectGuid(uint64(fields[++index].GetInt32())); - _assignedTo = ObjectGuid(HIGHGUID_PLAYER, fields[++index].GetUInt32()); + _assignedTo = ObjectGuid(HighGuid::Player, fields[++index].GetUInt32()); _comment = fields[++index].GetString(); _response = fields[++index].GetString(); _completed = fields[++index].GetBool(); diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 83100d3fbe..8710100d9b 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -408,18 +408,21 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s // make sure the same guid doesn't already exist and is safe to use bool incHighest = true; - if (guid != 0 && guid < sObjectMgr->_hiCharGuid) + if (guid && guid < sObjectMgr->GetGenerator().GetNextAfterMaxUsed()) + { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_GUID); stmt->setUInt32(0, guid); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (result) - guid = sObjectMgr->_hiCharGuid; // use first free if exists + guid = sObjectMgr->GetGenerator().GetNextAfterMaxUsed(); // use first free if exists + else incHighest = false; } else - guid = sObjectMgr->_hiCharGuid; + guid = sObjectMgr->GetGenerator().GetNextAfterMaxUsed(); + // normalize the name if specified and check if it exists if (!normalizePlayerName(name)) @@ -578,9 +581,9 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s if (!changenth(line, 1, newguid)) // character_inventory.guid update ROLLBACK(DUMP_FILE_BROKEN); - if (!changeGuid(line, 2, items, sObjectMgr->_hiItemGuid, true)) + if (!changeGuid(line, 2, items,sObjectMgr->GetGenerator().GetNextAfterMaxUsed(), true)) ROLLBACK(DUMP_FILE_BROKEN); // character_inventory.bag update - if (!changeGuid(line, 4, items, sObjectMgr->_hiItemGuid)) + if (!changeGuid(line, 4, items, sObjectMgr->GetGenerator().GetNextAfterMaxUsed())) ROLLBACK(DUMP_FILE_BROKEN); // character_inventory.item update break; } @@ -596,7 +599,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s { if (!changeGuid(line, 1, mails, sObjectMgr->_mailId)) ROLLBACK(DUMP_FILE_BROKEN); // mail_items.id - if (!changeGuid(line, 2, items, sObjectMgr->_hiItemGuid)) + if (!changeGuid(line, 2, items, sObjectMgr->GetGenerator().GetNextAfterMaxUsed())) ROLLBACK(DUMP_FILE_BROKEN); // mail_items.item_guid if (!changenth(line, 3, newguid)) // mail_items.receiver ROLLBACK(DUMP_FILE_BROKEN); @@ -605,7 +608,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s case DTT_ITEM: { // item, owner, data field:item, owner guid - if (!changeGuid(line, 1, items, sObjectMgr->_hiItemGuid)) + if (!changeGuid(line, 1, items, sObjectMgr->GetGenerator().GetNextAfterMaxUsed())) ROLLBACK(DUMP_FILE_BROKEN); // item_instance.guid update if (!changenth(line, 3, newguid)) // item_instance.owner_guid update ROLLBACK(DUMP_FILE_BROKEN); @@ -615,7 +618,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s { if (!changenth(line, 1, newguid)) // character_gifts.guid update ROLLBACK(DUMP_FILE_BROKEN); - if (!changeGuid(line, 2, items, sObjectMgr->_hiItemGuid)) + if (!changeGuid(line, 2, items, sObjectMgr->GetGenerator().GetNextAfterMaxUsed())) ROLLBACK(DUMP_FILE_BROKEN); // character_gifts.item_guid update break; } @@ -674,13 +677,15 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s CharacterDatabase.CommitTransaction(trans); // in case of name conflict player has to rename at login anyway - sWorld->AddCharacterNameData(ObjectGuid(HIGHGUID_PLAYER, guid), name, gender, race, playerClass, level); + sWorld->AddCharacterNameData(ObjectGuid(HighGuid::Player, guid), name, gender, race, playerClass, level); + + sObjectMgr->GetGenerator().Set(sObjectMgr->GetGenerator().GetNextAfterMaxUsed() + items.size()); - sObjectMgr->_hiItemGuid += items.size(); sObjectMgr->_mailId += mails.size(); if (incHighest) - ++sObjectMgr->_hiCharGuid; + sObjectMgr->GetGenerator().Generate(); + fclose(fin); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index b29f39809c..ce1837fbc8 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1365,11 +1365,6 @@ void World::SetInitialWorldSettings() LoginDatabase.PExecute("UPDATE realmlist SET icon = %u, timezone = %u WHERE id = '%d'", server_type, realm_zone, realmID); // One-time query - ///- Remove the bones (they should not exist in DB though) and old corpses after a restart - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_OLD_CORPSES); - stmt->setUInt32(0, 3 * DAY); - CharacterDatabase.Execute(stmt); - ///- Load the DBC files TC_LOG_INFO("server.loading", "Initialize data stores..."); LoadDBCStores(m_dataPath); @@ -1636,9 +1631,6 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Loading pet level stats..."); sObjectMgr->LoadPetLevelInfo(); - TC_LOG_INFO("server.loading", "Loading Player Corpses..."); - sObjectMgr->LoadCorpses(); - TC_LOG_INFO("server.loading", "Loading Player level dependent mail rewards..."); sObjectMgr->LoadMailLevelRewards(); @@ -2526,7 +2518,7 @@ BanReturn World::BanCharacter(std::string const& name, std::string const& durati guid = (*resultCharacter)[0].GetUInt32(); } else - guid = pBanned->GetGUIDLow(); + guid = pBanned->GetGUID().GetCounter(); // make sure there is only one active ban PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_BAN); @@ -2565,7 +2557,7 @@ bool World::RemoveBanCharacter(std::string const& name) guid = (*resultCharacter)[0].GetUInt32(); } else - guid = pBanned->GetGUIDLow(); + guid = pBanned->GetGUID().GetCounter(); if (!guid) return false; @@ -3209,7 +3201,7 @@ void World::LoadCharacterNameData() do { Field* fields = result->Fetch(); - AddCharacterNameData(ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()), fields[1].GetString(), + AddCharacterNameData(ObjectGuid(HighGuid::Player, fields[0].GetUInt32()), fields[1].GetString(), fields[3].GetUInt8() /*gender*/, fields[2].GetUInt8() /*race*/, fields[4].GetUInt8() /*class*/, fields[5].GetUInt8() /*level*/); ++count; } while (result->NextRow()); diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index 5668c20d6b..04520101d1 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -135,7 +135,7 @@ public: { TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Character:[%s] (GUID: %u) created Account %s (Email: '%s')", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), accountName, email.c_str()); } break; @@ -381,7 +381,7 @@ public: handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided email [%s] is not equal to registration email [%s].", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), email, oldEmail); return false; } @@ -393,7 +393,7 @@ public: handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow()); + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter()); return false; } @@ -412,7 +412,7 @@ public: handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change email, but the provided password is wrong.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow()); + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter()); return false; } @@ -425,7 +425,7 @@ public: sScriptMgr->OnEmailChange(handler->GetSession()->GetAccountId()); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Email from [%s] to [%s].", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), oldEmail, email); break; case AOR_EMAIL_TOO_LONG: @@ -479,7 +479,7 @@ public: handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the provided old password is wrong.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow()); + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter()); return false; } @@ -492,7 +492,7 @@ public: handler->SetSentErrorMessage(true); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Tried to change password, but the entered email [%s] is wrong.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), emailConfirmation); return false; } @@ -515,7 +515,7 @@ public: sScriptMgr->OnPasswordChange(handler->GetSession()->GetAccountId()); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Character:[%s] (GUID: %u) Changed Password.", handler->GetSession()->GetAccountId(), handler->GetSession()->GetRemoteAddress().c_str(), - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow()); + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter()); break; case AOR_PASS_TOO_LONG: handler->SendSysMessage(LANG_PASSWORD_TOO_LONG); diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp index 4993a7484d..4cafb651ad 100644 --- a/src/server/scripts/Commands/cs_arena.cpp +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -144,7 +144,7 @@ public: arena->Disband(); if (handler->GetSession()) TC_LOG_DEBUG("bg.arena", "GameMaster: %s [GUID: %u] disbanded arena team type: %u [Id: %u].", - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), arena->GetType(), teamId); + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), arena->GetType(), teamId); else TC_LOG_DEBUG("bg.arena", "Console: disbanded arena team type: %u [Id: %u].", arena->GetType(), teamId); @@ -209,7 +209,7 @@ public: handler->PSendSysMessage(LANG_ARENA_RENAME, arena->GetId(), oldArenaStr, newArenaStr); if (handler->GetSession()) TC_LOG_DEBUG("bg.arena", "GameMaster: %s [GUID: %u] rename arena team \"%s\"[Id: %u] to \"%s\"", - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), oldArenaStr, arena->GetId(), newArenaStr); + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), oldArenaStr, arena->GetId(), newArenaStr); else TC_LOG_DEBUG("bg.arena", "Console: rename arena team \"%s\"[Id: %u] to \"%s\"", oldArenaStr, arena->GetId(), newArenaStr); @@ -285,10 +285,10 @@ public: handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainNameData->m_name.c_str(), target->GetName().c_str()); if (handler->GetSession()) TC_LOG_DEBUG("bg.arena", "GameMaster: %s [GUID: %u] promoted player: %s [GUID: %u] to leader of arena team \"%s\"[Id: %u]", - handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), target->GetName().c_str(), target->GetGUIDLow(), arena->GetName().c_str(), arena->GetId()); + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), target->GetName().c_str(), target->GetGUID().GetCounter(), arena->GetName().c_str(), arena->GetId()); else TC_LOG_DEBUG("bg.arena", "Console: promoted player: %s [GUID: %u] to leader of arena team \"%s\"[Id: %u]", - target->GetName().c_str(), target->GetGUIDLow(), arena->GetName().c_str(), arena->GetId()); + target->GetName().c_str(), target->GetGUID().GetCounter(), arena->GetName().c_str(), arena->GetId()); return true; } diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index 4b90a672c8..fc24689818 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -318,7 +318,7 @@ public: targetGuid = (*resultCharacter)[0].GetUInt32(); } else - targetGuid = target->GetGUIDLow(); + targetGuid = target->GetGUID().GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_BANINFO); stmt->setUInt32(0, targetGuid); diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 4ef4454be9..405f6fde62 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -133,7 +133,7 @@ public: DeletedInfo info; - info.guid = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()); + info.guid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32()); info.name = fields[1].GetString(); info.accountId = fields[2].GetUInt32(); @@ -483,7 +483,7 @@ public: { handler->PSendSysMessage(LANG_CUSTOMIZE_PLAYER, handler->GetNameLink(target).c_str()); target->SetAtLoginFlag(AT_LOGIN_CUSTOMIZE); - stmt->setUInt32(1, target->GetGUIDLow()); + stmt->setUInt32(1, target->GetGUID().GetCounter()); } else { @@ -511,7 +511,7 @@ public: { handler->PSendSysMessage(LANG_CUSTOMIZE_PLAYER, handler->GetNameLink(target).c_str()); target->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION); - stmt->setUInt32(1, target->GetGUIDLow()); + stmt->setUInt32(1, target->GetGUID().GetCounter()); } else { @@ -539,7 +539,7 @@ public: /// @todo add text into database handler->PSendSysMessage(LANG_CUSTOMIZE_PLAYER, handler->GetNameLink(target).c_str()); target->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE); - stmt->setUInt32(1, target->GetGUIDLow()); + stmt->setUInt32(1, target->GetGUID().GetCounter()); } else { @@ -921,7 +921,7 @@ public: return false; } - if (sObjectMgr->GetPlayerAccountIdByGUID(ObjectGuid(HIGHGUID_PLAYER, guid))) + if (sObjectMgr->GetPlayerAccountIdByGUID(ObjectGuid(HighGuid::Player, guid))) { handler->PSendSysMessage(LANG_CHARACTER_GUID_IN_USE, guid); handler->SetSentErrorMessage(true); @@ -969,7 +969,7 @@ public: ObjectGuid guid; // character name can't start from number if (isNumeric(playerStr)) - guid = ObjectGuid(HIGHGUID_PLAYER, uint32(atoi(playerStr))); + guid = ObjectGuid(HighGuid::Player, uint32(atoi(playerStr))); else { std::string name = handler->extractPlayerNameFromLink(playerStr); diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 7c2ce1a13e..422104fedd 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -502,7 +502,7 @@ public: return false; handler->PSendSysMessage("Loot recipient for creature %s (GUID %u, DB GUID %u) is %s", - target->GetName().c_str(), target->GetGUIDLow(), target->GetDBTableGUIDLow(), + target->GetName().c_str(), target->GetGUID().GetCounter(), target->GetSpawnId(), target->hasLootRecipient() ? (target->GetLootRecipient() ? target->GetLootRecipient()->GetName().c_str() : "offline") : "no loot recipient"); return true; } @@ -597,7 +597,7 @@ public: break; } - handler->PSendSysMessage("bag: %d slot: %d guid: %d - state: %s", bagSlot, item->GetSlot(), item->GetGUIDLow(), st.c_str()); + handler->PSendSysMessage("bag: %d slot: %d guid: %d - state: %s", bagSlot, item->GetSlot(), item->GetGUID().GetCounter(), st.c_str()); } if (updateQueue.empty()) handler->PSendSysMessage("The player's updatequeue is empty"); @@ -618,7 +618,7 @@ public: if (item->GetSlot() != i) { - handler->PSendSysMessage("Item with slot %d and guid %d has an incorrect slot value: %d", i, item->GetGUIDLow(), item->GetSlot()); + handler->PSendSysMessage("Item with slot %d and guid %d has an incorrect slot value: %d", i, item->GetGUID().GetCounter(), item->GetSlot()); error = true; continue; } @@ -642,28 +642,28 @@ public: uint16 qp = item->GetQueuePos(); if (qp > updateQueue.size()) { - handler->PSendSysMessage("The item with slot %d and guid %d has its queuepos (%d) larger than the update queue size! ", item->GetSlot(), item->GetGUIDLow(), qp); + handler->PSendSysMessage("The item with slot %d and guid %d has its queuepos (%d) larger than the update queue size! ", item->GetSlot(), item->GetGUID().GetCounter(), qp); error = true; continue; } if (updateQueue[qp] == NULL) { - handler->PSendSysMessage("The item with slot %d and guid %d has its queuepos (%d) pointing to NULL in the queue!", item->GetSlot(), item->GetGUIDLow(), qp); + handler->PSendSysMessage("The item with slot %d and guid %d has its queuepos (%d) pointing to NULL in the queue!", item->GetSlot(), item->GetGUID().GetCounter(), qp); error = true; continue; } if (updateQueue[qp] != item) { - handler->PSendSysMessage("The item with slot %d and guid %d has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, guid: %d)", item->GetSlot(), item->GetGUIDLow(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUIDLow()); + handler->PSendSysMessage("The item with slot %d and guid %d has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, guid: %d)", item->GetSlot(), item->GetGUID().GetCounter(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUID().GetCounter()); error = true; continue; } } else if (item->GetState() != ITEM_UNCHANGED) { - handler->PSendSysMessage("The item with slot %d and guid %d is not in queue but should be (state: %d)!", item->GetSlot(), item->GetGUIDLow(), item->GetState()); + handler->PSendSysMessage("The item with slot %d and guid %d is not in queue but should be (state: %d)!", item->GetSlot(), item->GetGUID().GetCounter(), item->GetState()); error = true; continue; } @@ -678,7 +678,7 @@ public: if (item2->GetSlot() != j) { - handler->PSendSysMessage("The item in bag %d and slot %d (guid: %d) has an incorrect slot value: %d", bag->GetSlot(), j, item2->GetGUIDLow(), item2->GetSlot()); + handler->PSendSysMessage("The item in bag %d and slot %d (guid: %d) has an incorrect slot value: %d", bag->GetSlot(), j, item2->GetGUID().GetCounter(), item2->GetSlot()); error = true; continue; } @@ -710,28 +710,28 @@ public: uint16 qp = item2->GetQueuePos(); if (qp > updateQueue.size()) { - handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) larger than the update queue size! ", bag->GetSlot(), item2->GetSlot(), item2->GetGUIDLow(), qp); + handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) larger than the update queue size! ", bag->GetSlot(), item2->GetSlot(), item2->GetGUID().GetCounter(), qp); error = true; continue; } if (updateQueue[qp] == NULL) { - handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) that points to NULL in the queue!", bag->GetSlot(), item2->GetSlot(), item2->GetGUIDLow(), qp); + handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) that points to NULL in the queue!", bag->GetSlot(), item2->GetSlot(), item2->GetGUID().GetCounter(), qp); error = true; continue; } if (updateQueue[qp] != item2) { - handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, guid: %d)", bag->GetSlot(), item2->GetSlot(), item2->GetGUIDLow(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUIDLow()); + handler->PSendSysMessage("The item in bag %d at slot %d having guid %d has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, guid: %d)", bag->GetSlot(), item2->GetSlot(), item2->GetGUID().GetCounter(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUID().GetCounter()); error = true; continue; } } else if (item2->GetState() != ITEM_UNCHANGED) { - handler->PSendSysMessage("The item in bag %d at slot %d having guid %d is not in queue but should be (state: %d)!", bag->GetSlot(), item2->GetSlot(), item2->GetGUIDLow(), item2->GetState()); + handler->PSendSysMessage("The item in bag %d at slot %d having guid %d is not in queue but should be (state: %d)!", bag->GetSlot(), item2->GetSlot(), item2->GetGUID().GetCounter(), item2->GetState()); error = true; continue; } @@ -806,14 +806,14 @@ public: ThreatContainer::StorageType const &threatList = target->getThreatManager().getThreatList(); ThreatContainer::StorageType::const_iterator itr; uint32 count = 0; - handler->PSendSysMessage("Threat list of %s (guid %u)", target->GetName().c_str(), target->GetGUIDLow()); + handler->PSendSysMessage("Threat list of %s (guid %u)", target->GetName().c_str(), target->GetGUID().GetCounter()); for (itr = threatList.begin(); itr != threatList.end(); ++itr) { Unit* unit = (*itr)->getTarget(); if (!unit) continue; ++count; - handler->PSendSysMessage(" %u. %s (guid %u) - threat %f", count, unit->GetName().c_str(), unit->GetGUIDLow(), (*itr)->getThreat()); + handler->PSendSysMessage(" %u. %s (guid %u) - threat %f", count, unit->GetName().c_str(), unit->GetGUID().GetCounter(), (*itr)->getThreat()); } handler->SendSysMessage("End of threat list."); return true; @@ -826,13 +826,13 @@ public: target = handler->GetSession()->GetPlayer(); HostileReference* ref = target->getHostileRefManager().getFirst(); uint32 count = 0; - handler->PSendSysMessage("Hostil reference list of %s (guid %u)", target->GetName().c_str(), target->GetGUIDLow()); + handler->PSendSysMessage("Hostil reference list of %s (guid %u)", target->GetName().c_str(), target->GetGUID().GetCounter()); while (ref) { if (Unit* unit = ref->GetSource()->GetOwner()) { ++count; - handler->PSendSysMessage(" %u. %s (guid %u) - threat %f", count, unit->GetName().c_str(), unit->GetGUIDLow(), ref->getThreat()); + handler->PSendSysMessage(" %u. %s (guid %u) - threat %f", count, unit->GetName().c_str(), unit->GetGUID().GetCounter(), ref->getThreat()); } ref = ref->next(); } @@ -929,7 +929,7 @@ public: Map* map = handler->GetSession()->GetPlayer()->GetMap(); - if (!v->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_VEHICLE), map, handler->GetSession()->GetPlayer()->GetPhaseMask(), entry, x, y, z, o, nullptr, id)) + if (!v->Create(map->GenerateLowGuid(), map, handler->GetSession()->GetPlayer()->GetPhaseMask(), entry, x, y, z, o, nullptr, id)) { delete v; return false; @@ -974,7 +974,7 @@ public: uint32 guid = (uint32)atoi(e); uint32 index = (uint32)atoi(f); - Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HIGHGUID_ITEM, 0, guid)); + Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, 0, guid)); if (!i) return false; @@ -1005,7 +1005,7 @@ public: uint32 index = (uint32)atoi(f); uint32 value = (uint32)atoi(g); - Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HIGHGUID_ITEM, 0, guid)); + Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, 0, guid)); if (!i) return false; @@ -1029,7 +1029,7 @@ public: uint32 guid = (uint32)atoi(e); - Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HIGHGUID_ITEM, guid)); + Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, guid)); if (!i) return false; @@ -1054,7 +1054,7 @@ public: static bool HandleDebugLoSCommand(ChatHandler* handler, char const* /*args*/) { if (Unit* unit = handler->getSelectedUnit()) - handler->PSendSysMessage("Unit %s (GuidLow: %u) is %sin LoS", unit->GetName().c_str(), unit->GetGUIDLow(), handler->GetSession()->GetPlayer()->IsWithinLOSInMap(unit) ? "" : "not "); + handler->PSendSysMessage("Unit %s (GuidLow: %u) is %sin LoS", unit->GetName().c_str(), unit->GetGUID().GetCounter(), handler->GetSession()->GetPlayer()->IsWithinLOSInMap(unit) ? "" : "not "); return true; } @@ -1199,7 +1199,7 @@ public: if (opcode >= handler->GetSession()->GetPlayer()->GetValuesCount()) { - handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, handler->GetSession()->GetPlayer()->GetGUIDLow(), handler->GetSession()->GetPlayer()->GetValuesCount()); + handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), handler->GetSession()->GetPlayer()->GetValuesCount()); return false; } @@ -1249,13 +1249,13 @@ public: { value = unit->GetUInt32Value(updateIndex); - handler->PSendSysMessage(LANG_UPDATE, unit->GetGUIDLow(), updateIndex, value); + handler->PSendSysMessage(LANG_UPDATE, unit->GetGUID().GetCounter(), updateIndex, value); return true; } value = atoi(val); - handler->PSendSysMessage(LANG_UPDATE_CHANGE, unit->GetGUIDLow(), updateIndex, value); + handler->PSendSysMessage(LANG_UPDATE_CHANGE, unit->GetGUID().GetCounter(), updateIndex, value); unit->SetUInt32Value(updateIndex, value); @@ -1410,11 +1410,12 @@ public: if (!map) map = player->GetMap(); + handler->PSendSysMessage("Loading all cells (mapId: %u). Current next GameObject %u, Creature %u", map->GetId(), map->GetMaxLowGuid(), map->GetMaxLowGuid()); for (uint32 cellX = 0; cellX < TOTAL_NUMBER_OF_CELLS_PER_MAP; cellX++) for (uint32 cellY = 0; cellY < TOTAL_NUMBER_OF_CELLS_PER_MAP; cellY++) map->LoadGrid((cellX + 0.5f - CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL, (cellY + 0.5f - CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL); - handler->PSendSysMessage("Cells loaded (mapId: %u)", map->GetId()); + handler->PSendSysMessage("Cells loaded (mapId: %u) After load - Next GameObject %u, Creature %u", map->GetId(), map->GetMaxLowGuid(), map->GetMaxLowGuid()); return true; } }; diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index 1ddfaa4bfd..ce1a42e6e7 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -135,21 +135,9 @@ public: float z = fields[2].GetFloat(); float o = fields[3].GetFloat(); uint32 mapId = fields[4].GetUInt16(); - uint32 guid = fields[5].GetUInt32(); - uint32 id = fields[6].GetUInt32(); Transport* transport = NULL; - if (Creature* creature = ObjectAccessor::GetObjectInWorld(ObjectGuid(HIGHGUID_UNIT, id, guid), (Creature*)NULL)) - { - x = creature->GetPositionX(); - y = creature->GetPositionY(); - z = creature->GetPositionZ(); - o = creature->GetOrientation(); - mapId = creature->GetMapId(); - transport = creature->GetTransport(); - } - if (!MapManager::IsValidMapCoord(mapId, x, y, z, o) || sObjectMgr->IsTransportMap(mapId)) { handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, x, y, mapId); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 0142cfa0e5..591f797bfe 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -150,7 +150,7 @@ public: Map* map = player->GetMap(); GameObject* object = new GameObject; - uint32 guidLow = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT); + uint32 guidLow = map->GenerateLowGuid(); if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMaskForSpawn(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) { @@ -324,7 +324,7 @@ public: return false; } - GameObject* target = handler->GetSession()->GetPlayer()->GetMap()->GetGameObject(ObjectGuid(HIGHGUID_GAMEOBJECT, id, guidLow)); + GameObject* target = handler->GetSession()->GetPlayer()->GetMap()->GetGameObject(ObjectGuid(HighGuid::GameObject, id, guidLow)); handler->PSendSysMessage(LANG_GAMEOBJECT_DETAIL, guidLow, objectInfo->name.c_str(), guidLow, id, x, y, z, mapId, o, phase); @@ -373,7 +373,7 @@ public: Unit* owner = ObjectAccessor::GetUnit(*handler->GetSession()->GetPlayer(), ownerGuid); if (!owner || !ownerGuid.IsPlayer()) { - handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, ownerGuid.GetCounter(), object->GetGUIDLow()); + handler->PSendSysMessage(LANG_COMMAND_DELOBJREFERCREATURE, ownerGuid.GetCounter(), object->GetGUID().GetCounter()); handler->SetSentErrorMessage(true); return false; } @@ -385,7 +385,7 @@ public: object->Delete(); object->DeleteFromDB(); - handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, object->GetGUIDLow()); + handler->PSendSysMessage(LANG_COMMAND_DELOBJMESSAGE, object->GetGUID().GetCounter()); return true; } @@ -434,7 +434,7 @@ public: object->SaveToDB(); object->Refresh(); - handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow(), o); + handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetGUID().GetCounter(), object->GetGOInfo()->name.c_str(), object->GetGUID().GetCounter(), o); return true; } @@ -499,7 +499,7 @@ public: object->SaveToDB(); object->Refresh(); - handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetGUIDLow(), object->GetGOInfo()->name.c_str(), object->GetGUIDLow()); + handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetGUID().GetCounter(), object->GetGOInfo()->name.c_str(), object->GetGUID().GetCounter()); return true; } diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index c0a4b2cfea..8152508c5d 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -269,7 +269,7 @@ public: const char* onlineState = ""; // Parse the guid to uint32... - ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args))); + ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args))); // ... and try to extract a player out of it. if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp index 8bb64a454d..2de22714a1 100644 --- a/src/server/scripts/Commands/cs_lfg.cpp +++ b/src/server/scripts/Commands/cs_lfg.cpp @@ -80,7 +80,7 @@ public: ObjectGuid guidTarget; std::string nameTarget; - ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args))); + ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args))); if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) { diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index 3e4b46804f..fb051832d7 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -476,7 +476,7 @@ public: if (!*args) return false; - ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args))); + ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args))); if (sObjectMgr->GetPlayerNameByGUID(parseGUID, targetName)) { diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 7baef48986..dfb1d84c6c 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -641,7 +641,7 @@ public: return false; } - handler->PSendSysMessage(LANG_OBJECT_GUID, guid.GetCounter(), guid.GetHigh()); + handler->PSendSysMessage(LANG_OBJECT_GUID, guid.ToString().c_str()); return true; } @@ -1421,7 +1421,7 @@ public: PreparedStatement* stmt = NULL; // To make sure we get a target, we convert our guid to an omniversal... - ObjectGuid parseGUID(HIGHGUID_PLAYER, uint32(atoul(args))); + ObjectGuid parseGUID(HighGuid::Player, uint32(atoul(args))); // ... and make sure we get a target, somehow. if (sObjectMgr->GetPlayerNameByGUID(parseGUID, targetName)) @@ -2018,7 +2018,7 @@ public: return false; } - handler->PSendSysMessage(LANG_MOVEGENS_LIST, (unit->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), unit->GetGUIDLow()); + handler->PSendSysMessage(LANG_MOVEGENS_LIST, (unit->GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), unit->GetGUID().GetCounter()); MotionMaster* motionMaster = unit->GetMotionMaster(); float x, y, z; @@ -2061,9 +2061,9 @@ public: if (!target) handler->SendSysMessage(LANG_MOVEGENS_CHASE_NULL); else if (target->GetTypeId() == TYPEID_PLAYER) - handler->PSendSysMessage(LANG_MOVEGENS_CHASE_PLAYER, target->GetName().c_str(), target->GetGUIDLow()); + handler->PSendSysMessage(LANG_MOVEGENS_CHASE_PLAYER, target->GetName().c_str(), target->GetGUID().GetCounter()); else - handler->PSendSysMessage(LANG_MOVEGENS_CHASE_CREATURE, target->GetName().c_str(), target->GetGUIDLow()); + handler->PSendSysMessage(LANG_MOVEGENS_CHASE_CREATURE, target->GetName().c_str(), target->GetGUID().GetCounter()); break; } case FOLLOW_MOTION_TYPE: @@ -2077,9 +2077,9 @@ public: if (!target) handler->SendSysMessage(LANG_MOVEGENS_FOLLOW_NULL); else if (target->GetTypeId() == TYPEID_PLAYER) - handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_PLAYER, target->GetName().c_str(), target->GetGUIDLow()); + handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_PLAYER, target->GetName().c_str(), target->GetGUID().GetCounter()); else - handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_CREATURE, target->GetName().c_str(), target->GetGUIDLow()); + handler->PSendSysMessage(LANG_MOVEGENS_FOLLOW_CREATURE, target->GetName().c_str(), target->GetGUID().GetCounter()); break; } case HOME_MOTION_TYPE: diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index 9fd0260ed2..bf82b81a8b 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -292,7 +292,7 @@ public: uint32 flag = target->GetUInt32Value(UNIT_FIELD_FLAGS); uint32 npcflag = target->GetUInt32Value(UNIT_NPC_FLAGS); uint32 dyflag = target->GetUInt32Value(UNIT_DYNAMIC_FLAGS); - handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUIDLow(), factionid, flag, npcflag, dyflag); + handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUID().GetCounter(), factionid, flag, npcflag, dyflag); return true; } @@ -328,7 +328,7 @@ public: return false; } - handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUIDLow(), factionid, flag, npcflag, dyflag); + handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUID().GetCounter(), factionid, flag, npcflag, dyflag); target->setFaction(factionid); target->SetUInt32Value(UNIT_FIELD_FLAGS, flag); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 09a41fd82b..dcf75d0c5d 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -260,7 +260,7 @@ public: if (Transport* trans = chr->GetTransport()) { - uint32 guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT); + uint32 guid = map->GenerateLowGuid(); CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid); data.id = id; data.phaseMask = chr->GetPhaseMaskForSpawn(); @@ -278,7 +278,7 @@ public: } Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) + if (!creature->Create(map->GenerateLowGuid(), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) { delete creature; return false; @@ -286,7 +286,7 @@ public: creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn()); - uint32 db_guid = creature->GetDBTableGUIDLow(); + uint32 db_guid = creature->GetSpawnId(); // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells() // current "creature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior @@ -494,7 +494,7 @@ public: return false; if (CreatureData const* cr_data = sObjectMgr->GetCreatureData(lowguid)) - unit = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HIGHGUID_UNIT, cr_data->id, lowguid)); + unit = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, cr_data->id, lowguid)); } else unit = handler->getSelectedCreature(); @@ -705,7 +705,7 @@ public: std::string curRespawnDelayStr = secsToTimeString(uint64(curRespawnDelay), true); std::string defRespawnDelayStr = secsToTimeString(target->GetRespawnDelay(), true); - handler->PSendSysMessage(LANG_NPCINFO_CHAR, target->GetDBTableGUIDLow(), target->GetGUIDLow(), faction, npcflags, Entry, displayid, nativeid); + handler->PSendSysMessage(LANG_NPCINFO_CHAR, target->GetSpawnId(), target->GetGUID().GetCounter(), faction, npcflags, Entry, displayid, nativeid); handler->PSendSysMessage(LANG_NPCINFO_LEVEL, target->getLevel()); handler->PSendSysMessage(LANG_NPCINFO_EQUIPMENT, target->GetCurrentEquipmentId(), target->GetOriginalEquipmentId()); handler->PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), target->GetMaxHealth(), target->GetHealth()); @@ -823,7 +823,7 @@ public: } else { - lowguid = creature->GetDBTableGUIDLow(); + lowguid = creature->GetSpawnId(); } float x = handler->GetSession()->GetPlayer()->GetPositionX(); @@ -833,7 +833,7 @@ public: if (creature) { - if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetDBTableGUIDLow())) + if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetSpawnId())) { const_cast(data)->posX = x; const_cast(data)->posY = y; @@ -977,7 +977,7 @@ public: creature = handler->getSelectedCreature(); if (!creature || creature->IsPet()) return false; - lowguid = creature->GetDBTableGUIDLow(); + lowguid = creature->GetSpawnId(); } else // case .setmovetype #creature_guid $move_type (with selected creature) { @@ -985,7 +985,7 @@ public: /* impossible without entry if (lowguid) - creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), MAKE_GUID(lowguid, HIGHGUID_UNIT)); + creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), MAKE_GUID(lowguid, HighGuid::Unit)); */ // attempt check creature existence by DB data @@ -1001,7 +1001,7 @@ public: } else { - lowguid = creature->GetDBTableGUIDLow(); + lowguid = creature->GetSpawnId(); } } @@ -1104,7 +1104,7 @@ public: uint32 guidLow = 0; if (creature) - guidLow = creature->GetDBTableGUIDLow(); + guidLow = creature->GetSpawnId(); else return false; @@ -1153,7 +1153,7 @@ public: uint32 guidLow = 0; if (creature) - guidLow = creature->GetDBTableGUIDLow(); + guidLow = creature->GetSpawnId(); else return false; @@ -1282,7 +1282,7 @@ public: return false; } - ObjectGuid receiver_guid(HIGHGUID_PLAYER, uint32(atoul(receiver_str))); + ObjectGuid receiver_guid(HighGuid::Player, uint32(atoul(receiver_str))); // check online security Player* receiver = ObjectAccessor::FindPlayer(receiver_guid); @@ -1417,14 +1417,14 @@ public: uint32 leaderGUID = (uint32) atoi((char*)args); Creature* creature = handler->getSelectedCreature(); - if (!creature || !creature->GetDBTableGUIDLow()) + if (!creature || !creature->GetSpawnId()) { handler->SendSysMessage(LANG_SELECT_CREATURE); handler->SetSentErrorMessage(true); return false; } - uint32 lowguid = creature->GetDBTableGUIDLow(); + uint32 lowguid = creature->GetSpawnId(); if (creature->GetFormation()) { handler->PSendSysMessage("Selected creature is already member of group %u", creature->GetFormation()->GetId()); @@ -1477,21 +1477,21 @@ public: return false; } - if (!creature->GetDBTableGUIDLow()) + if (!creature->GetSpawnId()) { - handler->PSendSysMessage("Selected creature %u isn't in creature table", creature->GetGUIDLow()); + handler->PSendSysMessage("Selected creature %u isn't in creature table", creature->GetGUID().GetCounter()); handler->SetSentErrorMessage(true); return false; } - if (!sObjectMgr->SetCreatureLinkedRespawn(creature->GetDBTableGUIDLow(), linkguid)) + if (!sObjectMgr->SetCreatureLinkedRespawn(creature->GetSpawnId(), linkguid)) { handler->PSendSysMessage("Selected creature can't link with guid '%u'", linkguid); handler->SetSentErrorMessage(true); return false; } - handler->PSendSysMessage("LinkGUID '%u' added to creature with DBTableGUID: '%u'", linkguid, creature->GetDBTableGUIDLow()); + handler->PSendSysMessage("LinkGUID '%u' added to creature with DBTableGUID: '%u'", linkguid, creature->GetSpawnId()); return true; } diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 9ad12bd094..82904efc94 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -243,7 +243,7 @@ public: // prepare Quest Tracker datas PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE); stmt->setUInt32(0, quest->GetQuestId()); - stmt->setUInt32(1, player->GetGUIDLow()); + stmt->setUInt32(1, player->GetGUID().GetCounter()); // add to Quest Tracker CharacterDatabase.Execute(stmt); diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp index e7ea4bc99d..57ea44a67b 100644 --- a/src/server/scripts/Commands/cs_send.cpp +++ b/src/server/scripts/Commands/cs_send.cpp @@ -77,7 +77,7 @@ public: std::string text = msgText; // from console show not existed sender - MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); + MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUID().GetCounter() : 0, MAIL_STATIONERY_GM); /// @todo Fix poor design SQLTransaction trans = CharacterDatabase.BeginTransaction(); @@ -176,7 +176,7 @@ public: } // from console show not existed sender - MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); + MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUID().GetCounter() : 0, MAIL_STATIONERY_GM); // fill mail MailDraft draft(subject, text); @@ -236,7 +236,7 @@ public: std::string text = msgText; // from console show not existed sender - MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM); + MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUID().GetCounter() : 0, MAIL_STATIONERY_GM); SQLTransaction trans = CharacterDatabase.BeginTransaction(); diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index c9da1ed963..00b8bec51c 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -179,7 +179,7 @@ public: return true; } - guidLow = target->GetDBTableGUIDLow(); + guidLow = target->GetSpawnId(); PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_ADDON_BY_GUID); @@ -246,7 +246,7 @@ public: return true; } - uint32 guildLow = target->GetDBTableGUIDLow(); + uint32 guildLow = target->GetSpawnId(); if (target->GetCreatureAddon()) { @@ -568,7 +568,7 @@ public: } // The visual waypoint - wpGuid = target->GetGUIDLow(); + wpGuid = target->GetGUID().GetCounter(); // User did select a visual waypoint? @@ -579,7 +579,7 @@ public: if (!result) { - handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDSEARCH, target->GetGUIDLow()); + handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDSEARCH, target->GetGUID().GetCounter()); // Select waypoint number from database // Since we compare float values, we have to deal with // some difficulties. @@ -628,7 +628,7 @@ 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))) + if (Creature* wpCreature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, wpGuid))) { wpCreature->CombatStop(); wpCreature->DeleteFromDB(); @@ -661,7 +661,7 @@ public: // Respawn the owner of the waypoints if (wpGuid != 0) { - if (Creature* wpCreature = map->GetCreature(ObjectGuid(HIGHGUID_UNIT, VISUAL_WAYPOINT, wpGuid))) + if (Creature* wpCreature = map->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, wpGuid))) { wpCreature->CombatStop(); wpCreature->DeleteFromDB(); @@ -669,7 +669,7 @@ public: } // re-create Creature* wpCreature2 = new Creature(); - if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) + 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; @@ -680,7 +680,7 @@ public: 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->GetDBTableGUIDLow(), map)) + if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetSpawnId(), map)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); delete wpCreature2; @@ -782,7 +782,7 @@ public: } stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_ALL_BY_WPGUID); - stmt->setUInt32(0, target->GetGUIDLow()); + stmt->setUInt32(0, target->GetGUID().GetCounter()); PreparedQueryResult result = WorldDatabase.Query(stmt); if (!result) @@ -842,7 +842,7 @@ public: { Field* fields = result2->Fetch(); uint32 wpguid = fields[0].GetUInt32(); - Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HIGHGUID_UNIT, VISUAL_WAYPOINT, wpguid)); + Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, wpguid)); if (!creature) { @@ -886,7 +886,7 @@ public: float o = chr->GetOrientation(); Creature* wpCreature = new Creature(); - if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) + if (!wpCreature->Create(map->GenerateLowGuid(), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); delete wpCreature; @@ -895,14 +895,14 @@ public: // Set "wpguid" column to the visual waypoint stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID); - stmt->setInt32(0, int32(wpCreature->GetGUIDLow())); + stmt->setInt32(0, int32(wpCreature->GetGUID().GetCounter())); 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->GetDBTableGUIDLow(), map)) + if (!wpCreature->LoadCreatureFromDB(wpCreature->GetSpawnId(), map)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); delete wpCreature; @@ -948,7 +948,7 @@ public: Map* map = chr->GetMap(); Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) + if (!creature->Create(map->GenerateLowGuid(), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); delete creature; @@ -956,7 +956,7 @@ public: } creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn()); - if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map)) + if (!creature->LoadCreatureFromDB(creature->GetSpawnId(), map)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); delete creature; @@ -997,7 +997,7 @@ public: Map* map = chr->GetMap(); Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) + if (!creature->Create(map->GenerateLowGuid(), map, chr->GetPhaseMaskForSpawn(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); delete creature; @@ -1005,7 +1005,7 @@ public: } creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn()); - if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map)) + if (!creature->LoadCreatureFromDB(creature->GetSpawnId(), map)) { handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); delete creature; @@ -1038,7 +1038,7 @@ public: { Field* fields = result->Fetch(); uint32 guid = fields[0].GetUInt32(); - Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HIGHGUID_UNIT, VISUAL_WAYPOINT, guid)); + Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, guid)); if (!creature) { handler->PSendSysMessage(LANG_WAYPOINT_NOTREMOVED, guid); diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index ab2e82171f..427d4bae21 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -272,7 +272,7 @@ public: if (killer->GetGUID() == legoso->GetGUID() || (group && group->IsMember(killer->GetGUID())) || - killer->GetGUIDLow() == legoso->AI()->GetData(DATA_EVENT_STARTER_GUID)) + killer->GetGUID().GetCounter() == legoso->AI()->GetData(DATA_EVENT_STARTER_GUID)) legoso->AI()->DoAction(ACTION_LEGOSO_SIRONAS_KILLED); } } @@ -370,7 +370,7 @@ public: { if (quest->GetQuestId() == QUEST_ENDING_THEIR_WORLD) { - SetData(DATA_EVENT_STARTER_GUID, player->GetGUIDLow()); + SetData(DATA_EVENT_STARTER_GUID, player->GetGUID().GetCounter()); Start(true, true, player->GetGUID(), quest); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index abeaff421c..aeaf8a70ba 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -376,7 +376,7 @@ class boss_prince_keleseth_icc : public CreatureScript void InitializeAI() override { - if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow())) + if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetSpawnId())) if (data->curhealth) _spawnHealth = data->curhealth; @@ -591,7 +591,7 @@ class boss_prince_taldaram_icc : public CreatureScript void InitializeAI() override { - if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow())) + if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetSpawnId())) if (data->curhealth) _spawnHealth = data->curhealth; @@ -815,7 +815,7 @@ class boss_prince_valanar_icc : public CreatureScript void InitializeAI() override { - if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow())) + if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetSpawnId())) if (data->curhealth) _spawnHealth = data->curhealth; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 68430f6f0f..78730b535a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -492,7 +492,7 @@ public: _caster->CastSpell(_caster, _spellId, true); _caster->GetTransport()->AddObjectToRemoveList(); - if (GameObject* go = HashMapHolder::Find(_otherTransport)) + if (Transport* go = HashMapHolder::Find(_otherTransport)) go->AddObjectToRemoveList(); return true; @@ -770,9 +770,8 @@ class npc_gunship : public CreatureScript if (isVictory) { - if (GameObject* go = HashMapHolder::Find(instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE))) - if (Transport* otherTransport = go->ToTransport()) - otherTransport->EnableMovement(true); + if (Transport* otherTransport = HashMapHolder::Find(instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE))) + otherTransport->EnableMovement(true); me->GetTransport()->EnableMovement(true); @@ -1035,9 +1034,8 @@ class npc_high_overlord_saurfang_igb : public CreatureScript if (Transport* orgrimsHammer = me->GetTransport()) orgrimsHammer->SummonPassenger(NPC_TELEPORT_PORTAL, OrgrimsHammerTeleportPortal, TEMPSUMMON_TIMED_DESPAWN, NULL, 21000); - if (GameObject* go = HashMapHolder::Find(_instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE))) - if (Transport* skybreaker = go->ToTransport()) - skybreaker->SummonPassenger(NPC_TELEPORT_EXIT, SkybreakerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000); + if (Transport* skybreaker = HashMapHolder::Find(_instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE))) + skybreaker->SummonPassenger(NPC_TELEPORT_EXIT, SkybreakerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000); _events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6000); _events.ScheduleEvent(EVENT_ADDS, 60000); @@ -1308,9 +1306,8 @@ class npc_muradin_bronzebeard_igb : public CreatureScript if (Transport* skybreaker = me->GetTransport()) skybreaker->SummonPassenger(NPC_TELEPORT_PORTAL, SkybreakerTeleportPortal, TEMPSUMMON_TIMED_DESPAWN, NULL, 21000); - if (GameObject* go = HashMapHolder::Find(_instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE))) - if (Transport* orgrimsHammer = go->ToTransport()) - orgrimsHammer->SummonPassenger(NPC_TELEPORT_EXIT, OrgrimsHammerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000); + if (Transport* orgrimsHammer = HashMapHolder::Find(_instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE))) + orgrimsHammer->SummonPassenger(NPC_TELEPORT_EXIT, OrgrimsHammerTeleportExit, TEMPSUMMON_TIMED_DESPAWN, NULL, 23000); _events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6000); _events.ScheduleEvent(EVENT_ADDS, 60000); @@ -1454,9 +1451,8 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI if (!myTransport) return; - if (GameObject* go = HashMapHolder::Find(Instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE))) - if (Transport* destTransport = go->ToTransport()) - destTransport->CalculatePassengerPosition(x, y, z, &o); + if (Transport* destTransport = HashMapHolder::Find(Instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE))) + destTransport->CalculatePassengerPosition(x, y, z, &o); float angle = frand(0, float(M_PI) * 2.0f); x += 2.0f * std::cos(angle); @@ -2352,7 +2348,7 @@ class spell_igb_gunship_fall_teleport : public SpellScriptLoader void SelectTransport(WorldObject*& target) { if (InstanceScript* instance = target->GetInstanceScript()) - target = HashMapHolder::Find(instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)); + target = HashMapHolder::Find(instance->GetGuidData(DATA_ICECROWN_GUNSHIP_BATTLE)); } void RelocateDest(SpellEffIndex /*effIndex*/) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index e908d08855..65d99b022d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -648,7 +648,7 @@ class npc_spinestalker : public CreatureScript // Increase add count if (!me->isDead()) { - _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade + _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade Reset(); } } @@ -671,7 +671,7 @@ class npc_spinestalker : public CreatureScript void JustRespawned() override { ScriptedAI::JustRespawned(); - _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade + _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade } void JustDied(Unit* /*killer*/) override @@ -784,7 +784,7 @@ class npc_rimefang : public CreatureScript // Increase add count if (!me->isDead()) { - _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade + _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade Reset(); } } @@ -807,7 +807,7 @@ class npc_rimefang : public CreatureScript void JustRespawned() override { ScriptedAI::JustRespawned(); - _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade + _instance->SetData(DATA_SINDRAGOSA_FROSTWYRMS, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade } void JustDied(Unit* /*killer*/) override @@ -951,7 +951,7 @@ class npc_sindragosa_trash : public CreatureScript if (!me->isDead()) { if (me->GetEntry() == NPC_FROSTWING_WHELP) - _instance->SetData(_frostwyrmId, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade + _instance->SetData(_frostwyrmId, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade Reset(); } } @@ -974,7 +974,7 @@ class npc_sindragosa_trash : public CreatureScript // Increase add count if (me->GetEntry() == NPC_FROSTWING_WHELP) - _instance->SetData(_frostwyrmId, me->GetDBTableGUIDLow()); // this cannot be in Reset because reset also happens on evade + _instance->SetData(_frostwyrmId, me->GetSpawnId()); // this cannot be in Reset because reset also happens on evade } void SetData(uint32 type, uint32 data) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 7af550582a..f083513589 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -156,7 +156,7 @@ class RisenArchmageCheck bool operator()(Creature* creature) { return creature->IsAlive() && creature->GetEntry() == NPC_RISEN_ARCHMAGE && - creature->GetDBTableGUIDLow() && !creature->IsInCombat(); + creature->GetSpawnId() && !creature->IsInCombat(); } }; @@ -244,7 +244,7 @@ class ValithriaDespawner : public BasicEvent creature->DespawnOrUnsummon(); return; case NPC_RISEN_ARCHMAGE: - if (!creature->GetDBTableGUIDLow()) + if (!creature->GetSpawnId()) { creature->DespawnOrUnsummon(); return; @@ -297,7 +297,7 @@ class boss_valithria_dreamwalker : public CreatureScript void InitializeAI() override { - if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetDBTableGUIDLow())) + if (CreatureData const* data = sObjectMgr->GetCreatureData(me->GetSpawnId())) if (data->curhealth) _spawnHealth = data->curhealth; @@ -712,7 +712,7 @@ class npc_risen_archmage : public CreatureScript void EnterCombat(Unit* /*target*/) override { me->FinishSpell(CURRENT_CHANNELED_SPELL, false); - if (me->GetDBTableGUIDLow() && _canCallEnterCombat) + if (me->GetSpawnId() && _canCallEnterCombat) { std::list archmages; RisenArchmageCheck check; @@ -750,7 +750,7 @@ class npc_risen_archmage : public CreatureScript void UpdateAI(uint32 diff) override { if (!me->IsInCombat()) - if (me->GetDBTableGUIDLow()) + if (me->GetSpawnId()) if (!me->GetCurrentSpell(CURRENT_CHANNELED_SPELL)) DoCast(me, SPELL_CORRUPTION); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index ab1450a87e..f05fc48c07 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -545,7 +545,7 @@ class npc_highlord_tirion_fordring_lh : public CreatureScript case EVENT_MURADIN_RUN: case EVENT_SAURFANG_RUN: if (Creature* factionNPC = ObjectAccessor::GetCreature(*me, _factionNPC)) - factionNPC->GetMotionMaster()->MovePath(factionNPC->GetDBTableGUIDLow()*10, false); + factionNPC->GetMotionMaster()->MovePath(factionNPC->GetSpawnId() * 10, false); me->setActive(false); _damnedKills = 3; break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 992ca0b4d7..5354d1772b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -417,14 +417,14 @@ class instance_icecrown_citadel : public InstanceMapScript if (creature->AI()->GetData(1/*DATA_FROSTWYRM_OWNER*/) == DATA_SPINESTALKER) { - SpinestalkerTrash.erase(creature->GetDBTableGUIDLow()); + SpinestalkerTrash.erase(creature->GetSpawnId()); if (SpinestalkerTrash.empty()) if (Creature* spinestalk = instance->GetCreature(SpinestalkerGUID)) spinestalk->AI()->DoAction(ACTION_START_FROSTWYRM); } else { - RimefangTrash.erase(creature->GetDBTableGUIDLow()); + RimefangTrash.erase(creature->GetSpawnId()); if (RimefangTrash.empty()) if (Creature* spinestalk = instance->GetCreature(RimefangGUID)) spinestalk->AI()->DoAction(ACTION_START_FROSTWYRM); @@ -439,7 +439,7 @@ class instance_icecrown_citadel : public InstanceMapScript if (GetBossState(DATA_SINDRAGOSA) == DONE) return; - FrostwyrmGUIDs.erase(creature->GetDBTableGUIDLow()); + FrostwyrmGUIDs.erase(creature->GetSpawnId()); if (FrostwyrmGUIDs.empty()) { instance->LoadGrid(SindragosaSpawnPos.GetPositionX(), SindragosaSpawnPos.GetPositionY()); diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index 7c99fe40e3..d1f2be5525 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -80,7 +80,7 @@ public: void SpawnGameObject(uint32 entry, Position const& pos) { GameObject* go = new GameObject(); - if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), entry, instance, + if (!go->Create(instance->GenerateLowGuid(), entry, instance, PHASEMASK_NORMAL, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), 0, 0, 0, 0, 120, GO_STATE_READY)) { diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp index f5514cc51a..79a20da970 100644 --- a/src/server/scripts/Northrend/isle_of_conquest.cpp +++ b/src/server/scripts/Northrend/isle_of_conquest.cpp @@ -248,7 +248,7 @@ class spell_ioc_launch : public SpellScriptLoader x = GetExplTargetDest()->GetPositionX(); y = GetExplTargetDest()->GetPositionY(); z = GetExplTargetDest()->GetPositionZ(); - GetCaster()->ToCreature()->m_Events.AddEvent(new StartLaunchEvent(x, y, z, GetHitPlayer()->GetGUIDLow()), GetCaster()->ToCreature()->m_Events.CalculateTime(2500)); + GetCaster()->ToCreature()->m_Events.AddEvent(new StartLaunchEvent(x, y, z, GetHitPlayer()->GetGUID().GetCounter()), GetCaster()->ToCreature()->m_Events.CalculateTime(2500)); } void Register() override diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp index dec236e5f3..9224817b69 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "MapManager.h" #include "ScriptMgr.h" #include "OutdoorPvPEP.h" #include "WorldPacket.h" @@ -70,16 +71,14 @@ void OPvPCapturePointEP_EWT::ChangeState() break; } - GameObject* flag = HashMapHolder::Find(m_capturePointGUID); - GameObject* flag2 = HashMapHolder::Find(m_Objects[EP_EWT_FLAGS]); - if (flag) - { - flag->SetGoArtKit(artkit); - } - if (flag2) - { - flag2->SetGoArtKit(artkit); - } + Map* map = sMapMgr->FindMap(0, 0); + auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); + + bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_EWT_FLAGS]); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); UpdateTowerState(); @@ -180,16 +179,14 @@ void OPvPCapturePointEP_NPT::ChangeState() break; } - GameObject* flag = HashMapHolder::Find(m_capturePointGUID); - GameObject* flag2 = HashMapHolder::Find(m_Objects[EP_NPT_FLAGS]); - if (flag) - { - flag->SetGoArtKit(artkit); - } - if (flag2) - { - flag2->SetGoArtKit(artkit); - } + Map* map = sMapMgr->FindMap(0, 0); + auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); + + bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_NPT_FLAGS]); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); UpdateTowerState(); @@ -223,9 +220,12 @@ void OPvPCapturePointEP_NPT::SummonGO(uint32 team) m_SummonedGOSide = team; DelObject(EP_NPT_BUFF); AddObject(EP_NPT_BUFF, EP_NPT_LordaeronShrine.entry, EP_NPT_LordaeronShrine.map, EP_NPT_LordaeronShrine.x, EP_NPT_LordaeronShrine.y, EP_NPT_LordaeronShrine.z, EP_NPT_LordaeronShrine.o, EP_NPT_LordaeronShrine.rot0, EP_NPT_LordaeronShrine.rot1, EP_NPT_LordaeronShrine.rot2, EP_NPT_LordaeronShrine.rot3); - GameObject* go = HashMapHolder::Find(m_Objects[EP_NPT_BUFF]); - if (go) - go->SetUInt32Value(GAMEOBJECT_FACTION, (team == ALLIANCE ? 84 : 83)); + + Map* map = sMapMgr->FindMap(0, 0); + auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_NPT_BUFF]); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + if (GameObject* go = itr->second) + go->SetUInt32Value(GAMEOBJECT_FACTION, (team == ALLIANCE ? 84 : 83)); } } @@ -274,16 +274,14 @@ void OPvPCapturePointEP_CGT::ChangeState() break; } - GameObject* flag = HashMapHolder::Find(m_capturePointGUID); - GameObject* flag2 = HashMapHolder::Find(m_Objects[EP_CGT_FLAGS]); - if (flag) - { - flag->SetGoArtKit(artkit); - } - if (flag2) - { - flag2->SetGoArtKit(artkit); - } + Map* map = sMapMgr->FindMap(0, 0); + auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); + + bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_CGT_FLAGS]); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); UpdateTowerState(); @@ -375,16 +373,14 @@ void OPvPCapturePointEP_PWT::ChangeState() break; } - GameObject* flag = HashMapHolder::Find(m_capturePointGUID); - GameObject* flag2 = HashMapHolder::Find(m_Objects[EP_PWT_FLAGS]); - if (flag) - { - flag->SetGoArtKit(artkit); - } - if (flag2) - { - flag2->SetGoArtKit(artkit); - } + Map* map = sMapMgr->FindMap(0, 0); + auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); + + bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_PWT_FLAGS]); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); UpdateTowerState(); @@ -479,6 +475,7 @@ bool OutdoorPvPEP::SetupOutdoorPvP() AddCapturePoint(new OPvPCapturePointEP_PWT(this)); AddCapturePoint(new OPvPCapturePointEP_CGT(this)); AddCapturePoint(new OPvPCapturePointEP_NPT(this)); + SetMapFromZone(EPBuffZones[0]); return true; } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp index f8a7647a1d..a639962efd 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "MapManager.h" #include "ScriptMgr.h" #include "OutdoorPvPHP.h" #include "OutdoorPvP.h" @@ -58,6 +59,7 @@ OutdoorPvPHP::OutdoorPvPHP() m_TypeId = OUTDOOR_PVP_HP; m_AllianceTowersControlled = 0; m_HordeTowersControlled = 0; + SetMapFromZone(OutdoorPvPHPBuffZones[0]); } bool OutdoorPvPHP::SetupOutdoorPvP() @@ -238,16 +240,14 @@ void OPvPCapturePointHP::ChangeState() break; } - GameObject* flag = HashMapHolder::Find(m_capturePointGUID); - GameObject* flag2 = HashMapHolder::Find(m_Objects[m_TowerType]); - if (flag) - { - flag->SetGoArtKit(artkit); - } - if (flag2) - { - flag2->SetGoArtKit(artkit2); - } + Map* map = sMapMgr->FindMap(530, 0); + auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); + + bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[m_TowerType]); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit2); // send world state update if (field) diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp index 761e12b226..8664acdfc5 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "MapManager.h" #include "ScriptMgr.h" #include "OutdoorPvPNA.h" #include "Player.h" @@ -43,7 +44,7 @@ void OutdoorPvPNA::HandleKillImpl(Player* player, Unit* killed) uint32 OPvPCapturePointNA::GetAliveGuardsCount() { uint32 cnt = 0; - for (std::map::iterator itr = m_Creatures.begin(); itr != m_Creatures.end(); ++itr) + for (std::map::iterator itr = m_Creatures.begin(); itr != m_Creatures.end(); ++itr) { switch (itr->first) { @@ -62,10 +63,13 @@ uint32 OPvPCapturePointNA::GetAliveGuardsCount() case NA_NPC_GUARD_13: case NA_NPC_GUARD_14: case NA_NPC_GUARD_15: - if (Creature const* const cr = HashMapHolder::Find(itr->second)) - if (cr->IsAlive()) + { + auto bounds = m_PvP->GetMap()->GetCreatureBySpawnIdStore().equal_range(itr->second); + for (auto itr2 = bounds.first; itr2 != bounds.second; ++itr2) + if (itr2->second->IsAlive()) ++cnt; break; + } default: break; } @@ -186,6 +190,7 @@ bool OutdoorPvPNA::SetupOutdoorPvP() { // m_TypeId = OUTDOOR_PVP_NA; _MUST_ be set in ctor, because of spawns cleanup // add the zones affected by the pvp buff + SetMapFromZone(NA_BUFF_ZONE); RegisterZone(NA_BUFF_ZONE); // halaa @@ -372,9 +377,9 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO return false; } -int32 OPvPCapturePointNA::HandleOpenGo(Player* player, ObjectGuid guid) +int32 OPvPCapturePointNA::HandleOpenGo(Player* player, GameObject* go) { - int32 retval = OPvPCapturePoint::HandleOpenGo(player, guid); + int32 retval = OPvPCapturePoint::HandleOpenGo(player, go); if (retval >= 0) { const go_type * gos = NULL; @@ -567,11 +572,9 @@ void OPvPCapturePointNA::ChangeState() break; } - GameObject* flag = HashMapHolder::Find(m_capturePointGUID); - if (flag) - { - flag->SetGoArtKit(artkit); - } + auto bounds = sMapMgr->FindMap(530, 0)->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); UpdateHalaaWorldState(); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h index fac9d8fa35..07bf6919b7 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h @@ -269,7 +269,7 @@ class OPvPCapturePointNA : public OPvPCapturePoint bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go) override; - int32 HandleOpenGo(Player* player, ObjectGuid guid) override; + int32 HandleOpenGo(Player* player, GameObject* go) override; uint32 GetAliveGuardsCount(); uint32 GetControllingFaction() const; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index f052824538..94ec7acba1 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -58,6 +58,8 @@ void OutdoorPvPSI::UpdateWorldState() bool OutdoorPvPSI::SetupOutdoorPvP() { + SetMapFromZone(OutdoorPvPSIBuffZones[0]); + for (uint8 i = 0; i < OutdoorPvPSIBuffZonesNum; ++i) RegisterZone(OutdoorPvPSIBuffZones[i]); return true; @@ -166,7 +168,7 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) return true; } - if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) + if (!go->Create(map->GenerateLowGuid(), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) { delete go; return true; @@ -200,7 +202,7 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) return true; } - if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) + if (!go->Create(map->GenerateLowGuid(), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) { delete go; return true; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp index 17736c7747..0b68a45f8a 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "MapManager.h" #include "ScriptMgr.h" #include "OutdoorPvPTF.h" #include "OutdoorPvPMgr.h" @@ -227,6 +228,8 @@ bool OutdoorPvPTF::SetupOutdoorPvP() second_digit = 0; first_digit = 0; + SetMapFromZone(OutdoorPvPTFBuffZones[0]); + // add the zones affected by the pvp buff for (uint8 i = 0; i < OutdoorPvPTFBuffZonesNum; ++i) RegisterZone(OutdoorPvPTFBuffZones[i]); @@ -310,9 +313,9 @@ void OPvPCapturePointTF::ChangeState() break; } - GameObject* flag = HashMapHolder::Find(m_capturePointGUID); - if (flag) - flag->SetGoArtKit(artkit); + auto bounds = sMapMgr->FindMap(530, 0)->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); + for (auto itr = bounds.first; itr != bounds.second; ++itr) + itr->second->SetGoArtKit(artkit); UpdateTowerState(); } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp index ee86d8efc9..54aa815617 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "MapManager.h" #include "ScriptMgr.h" #include "OutdoorPvPZM.h" #include "ObjectMgr.h" @@ -151,6 +152,8 @@ bool OutdoorPvPZM::SetupOutdoorPvP() m_AllianceTowersControlled = 0; m_HordeTowersControlled = 0; + SetMapFromZone(OutdoorPvPZMBuffZones[0]); + // add the zones affected by the pvp buff for (uint8 i = 0; i < OutdoorPvPZMBuffZonesNum; ++i) RegisterZone(OutdoorPvPZMBuffZones[i]); @@ -181,9 +184,9 @@ bool OPvPCapturePointZM_GraveYard::Update(uint32 /*diff*/) return retval; } -int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, ObjectGuid guid) +int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, GameObject* go) { - int32 retval = OPvPCapturePoint::HandleOpenGo(player, guid); + int32 retval = OPvPCapturePoint::HandleOpenGo(player, go); if (retval >= 0) { if (player->HasAura(ZM_BATTLE_STANDARD_A) && m_GraveYardState != ZM_GRAVEYARD_A) @@ -297,8 +300,8 @@ void OPvPCapturePointZM_GraveYard::SetBeaconState(uint32 controlling_faction) bool OPvPCapturePointZM_GraveYard::CanTalkTo(Player* player, Creature* c, GossipMenuItems const& /*gso*/) { - ObjectGuid guid = c->GetGUID(); - std::map::iterator itr = m_CreatureTypes.find(guid); + std::map::iterator itr = m_CreatureTypes.find(c->GetSpawnId()); + if (itr != m_CreatureTypes.end()) { if (itr->second == ZM_ALLIANCE_FIELD_SCOUT && player->GetTeam() == ALLIANCE && m_BothControllingFaction == ALLIANCE && !m_FlagCarrierGUID && m_GraveYardState != ZM_GRAVEYARD_A) @@ -309,25 +312,23 @@ bool OPvPCapturePointZM_GraveYard::CanTalkTo(Player* player, Creature* c, Gossip return false; } -bool OPvPCapturePointZM_GraveYard::HandleGossipOption(Player* player, ObjectGuid guid, uint32 /*gossipid*/) +bool OPvPCapturePointZM_GraveYard::HandleGossipOption(Player* player, Creature* creature, uint32 /*gossipid*/) { - std::map::iterator itr = m_CreatureTypes.find(guid); + std::map::iterator itr = m_CreatureTypes.find(creature->GetSpawnId()); + if (itr != m_CreatureTypes.end()) { - Creature* cr = HashMapHolder::Find(guid); - if (!cr) - return true; // if the flag is already taken, then return if (m_FlagCarrierGUID) return true; if (itr->second == ZM_ALLIANCE_FIELD_SCOUT) { - cr->CastSpell(player, ZM_BATTLE_STANDARD_A, true); + creature->CastSpell(player, ZM_BATTLE_STANDARD_A, true); m_FlagCarrierGUID = player->GetGUID(); } else if (itr->second == ZM_HORDE_FIELD_SCOUT) { - cr->CastSpell(player, ZM_BATTLE_STANDARD_H, true); + creature->CastSpell(player, ZM_BATTLE_STANDARD_H, true); m_FlagCarrierGUID = player->GetGUID(); } UpdateTowerState(); diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h index a07905b3ae..4be0d0eedb 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h @@ -192,11 +192,11 @@ class OPvPCapturePointZM_GraveYard : public OPvPCapturePoint void UpdateTowerState(); - int32 HandleOpenGo(Player* player, ObjectGuid guid) override; + int32 HandleOpenGo(Player* player, GameObject* go) override; void SetBeaconState(uint32 controlling_team); // not good atm - bool HandleGossipOption(Player* player, ObjectGuid guid, uint32 gossipid) override; + bool HandleGossipOption(Player* player, Creature* creature, uint32 gossipid) override; bool HandleDropFlag(Player* player, uint32 spellId) override; diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index da50f471f1..23a6cdee8a 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -233,7 +233,7 @@ class spell_rog_deadly_poison : public SpellScriptLoader SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(enchant->spellid[s]); if (!spellInfo) { - TC_LOG_ERROR("spells", "Player::CastItemCombatSpell Enchant %i, player (Name: %s, GUID: %u) cast unknown spell %i", enchant->ID, player->GetName().c_str(), player->GetGUIDLow(), enchant->spellid[s]); + TC_LOG_ERROR("spells", "Player::CastItemCombatSpell Enchant %i, player (Name: %s, GUID: %u) cast unknown spell %i", enchant->ID, player->GetName().c_str(), player->GetGUID().GetCounter(), enchant->spellid[s]); continue; } diff --git a/src/server/scripts/World/action_ip_logger.cpp b/src/server/scripts/World/action_ip_logger.cpp index 50195887ec..4a60a80ee5 100644 --- a/src/server/scripts/World/action_ip_logger.cpp +++ b/src/server/scripts/World/action_ip_logger.cpp @@ -201,7 +201,7 @@ class CharacterActionIpLogger : public PlayerScript // We declare all the required variables uint32 playerGuid = player->GetSession()->GetAccountId(); - uint32 characterGuid = player->GetGUIDLow(); + uint32 characterGuid = player->GetGUID().GetCounter(); const std::string currentIp = player->GetSession()->GetRemoteAddress(); std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it... diff --git a/src/server/shared/Containers.h b/src/server/shared/Containers.h index 58379e1fef..0e5752ccd6 100644 --- a/src/server/shared/Containers.h +++ b/src/server/shared/Containers.h @@ -92,6 +92,20 @@ namespace Trinity return false; } + + template class M, class... Rest> + void MultimapErasePair(M& multimap, K const& key, V const& value) + { + auto range = multimap.equal_range(key); + for (auto itr = range.first; itr != range.second;) + { + if (itr->second == value) + itr = multimap.erase(itr); + else + ++itr; + } + } + } //! namespace Containers } diff --git a/src/server/shared/Dynamic/TypeContainer.h b/src/server/shared/Dynamic/TypeContainer.h index 2165945d11..b68dec00da 100644 --- a/src/server/shared/Dynamic/TypeContainer.h +++ b/src/server/shared/Dynamic/TypeContainer.h @@ -25,6 +25,7 @@ */ #include +#include #include #include "Define.h" #include "Dynamic/TypeList.h" @@ -35,37 +36,40 @@ * By itself its meaningless but collaborate along with TypeContainers, * it become the most powerfully container in the whole system. */ -template struct ContainerMapList +template +struct ContainerMapList { //std::map _element; GridRefManager _element; }; -template<> struct ContainerMapList /* nothing is in type null */ +template<> +struct ContainerMapList /* nothing is in type null */ { }; -template struct ContainerMapList > +template +struct ContainerMapList > { ContainerMapList _elements; ContainerMapList _TailElements; }; -/* - * @class ContaierArrayList is a multi-type container for - * array of elements. - */ -template struct ContainerArrayList +template +struct ContainerUnorderedMap { - std::vector _element; + std::unordered_map _element; }; -// termination condition -template<> struct ContainerArrayList { }; -// recursion -template struct ContainerArrayList > +template +struct ContainerUnorderedMap { - ContainerArrayList _elements; - ContainerArrayList _TailElements; +}; + +template +struct ContainerUnorderedMap, KEY_TYPE> +{ + ContainerUnorderedMap _elements; + ContainerUnorderedMap _TailElements; }; /* @@ -101,14 +105,16 @@ class TypeMapContainer template size_t Count() const { return Trinity::Count(i_elements, (SPECIFIC_TYPE*)NULL); } /// inserts a specific object into the container - template bool insert(SPECIFIC_TYPE *obj) + template + bool insert(SPECIFIC_TYPE *obj) { SPECIFIC_TYPE* t = Trinity::Insert(i_elements, obj); return (t != NULL); } /// Removes the object from the container, and returns the removed object - //template bool remove(SPECIFIC_TYPE* obj) + //template + //bool remove(SPECIFIC_TYPE* obj) //{ // SPECIFIC_TYPE* t = Trinity::Remove(i_elements, obj); // return (t != NULL); @@ -120,5 +126,35 @@ class TypeMapContainer private: ContainerMapList i_elements; }; + +template +class TypeUnorderedMapContainer +{ +public: + template + bool Insert(KEY_TYPE const& handle, SPECIFIC_TYPE* obj) + { + return Trinity::Insert(_elements, handle, obj); + } + + template + bool Remove(KEY_TYPE const& handle) + { + return Trinity::Remove(_elements, handle, (SPECIFIC_TYPE*)NULL); + } + + template + SPECIFIC_TYPE* Find(KEY_TYPE const& handle) + { + return Trinity::Find(_elements, handle, (SPECIFIC_TYPE*)NULL); + } + + ContainerUnorderedMap& GetElements() { return _elements; } + ContainerUnorderedMap const& GetElements() const { return _elements; } + +private: + ContainerUnorderedMap _elements; +}; + #endif diff --git a/src/server/shared/Dynamic/TypeContainerFunctions.h b/src/server/shared/Dynamic/TypeContainerFunctions.h index a89f5bd10d..bd6d4c348b 100644 --- a/src/server/shared/Dynamic/TypeContainerFunctions.h +++ b/src/server/shared/Dynamic/TypeContainerFunctions.h @@ -28,60 +28,163 @@ #include "Define.h" #include "Dynamic/TypeList.h" #include +#include namespace Trinity { + // Helpers + // Insert helpers + template + bool Insert(ContainerUnorderedMap& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj) + { + auto i = elements._element.find(handle); + if (i == elements._element.end()) + { + elements._element[handle] = obj; + return true; + } + else + { + ASSERT(i->second == obj, "Object with certain key already in but objects are different!"); + return false; + } + } + + template + bool Insert(ContainerUnorderedMap& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/) + { + return false; + } + + template + bool Insert(ContainerUnorderedMap& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/) + { + return false; + } + + template + bool Insert(ContainerUnorderedMap, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* obj) + { + bool ret = Insert(elements._elements, handle, obj); + return ret ? ret : Insert(elements._TailElements, handle, obj); + } + + // Find helpers + template + SPECIFIC_TYPE* Find(ContainerUnorderedMap const& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/) + { + auto i = elements._element.find(handle); + if (i == elements._element.end()) + return nullptr; + else + return i->second; + } + + template + SPECIFIC_TYPE* Find(ContainerUnorderedMap const& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/) + { + return nullptr; + } + + template + SPECIFIC_TYPE* Find(ContainerUnorderedMap const& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/) + { + return nullptr; + } + + template + SPECIFIC_TYPE* Find(ContainerUnorderedMap, KEY_TYPE> const& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/) + { + SPECIFIC_TYPE* ret = Find(elements._elements, handle, (SPECIFIC_TYPE*)nullptr); + return ret ? ret : Find(elements._TailElements, handle, (SPECIFIC_TYPE*)nullptr); + } + + // Erase helpers + template + bool Remove(ContainerUnorderedMap& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/) + { + elements._element.erase(handle); + return true; + } + + template + bool Remove(ContainerUnorderedMap& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/) + { + return false; + } + + template + bool Remove(ContainerUnorderedMap& /*elements*/, KEY_TYPE const& /*handle*/, SPECIFIC_TYPE* /*obj*/) + { + return false; + } + + template + bool Remove(ContainerUnorderedMap, KEY_TYPE>& elements, KEY_TYPE const& handle, SPECIFIC_TYPE* /*obj*/) + { + bool ret = Remove(elements._elements, handle, (SPECIFIC_TYPE*)nullptr); + return ret ? ret : Remove(elements._TailElements, handle, (SPECIFIC_TYPE*)nullptr); + } + /* ContainerMapList Helpers */ // count functions - template size_t Count(const ContainerMapList &elements, SPECIFIC_TYPE* /*fake*/) + template + size_t Count(ContainerMapList const& elements, SPECIFIC_TYPE* /*fake*/) { return elements._element.getSize(); } - template size_t Count(const ContainerMapList &/*elements*/, SPECIFIC_TYPE* /*fake*/) + template + size_t Count(ContainerMapList const& /*elements*/, SPECIFIC_TYPE* /*fake*/) { return 0; } - template size_t Count(const ContainerMapList &/*elements*/, SPECIFIC_TYPE* /*fake*/) + template + size_t Count(ContainerMapList const& /*elements*/, SPECIFIC_TYPE* /*fake*/) { return 0; } - template size_t Count(const ContainerMapList >&elements, SPECIFIC_TYPE* fake) + template + size_t Count(ContainerMapList> const& elements, SPECIFIC_TYPE* fake) { return Count(elements._elements, fake); } - template size_t Count(const ContainerMapList >&elements, SPECIFIC_TYPE* fake) + template + size_t Count(ContainerMapList> const& elements, SPECIFIC_TYPE* fake) { return Count(elements._TailElements, fake); } // non-const insert functions - template SPECIFIC_TYPE* Insert(ContainerMapList &elements, SPECIFIC_TYPE *obj) - { + template + SPECIFIC_TYPE* Insert(ContainerMapList& elements, SPECIFIC_TYPE* obj) { //elements._element[hdl] = obj; obj->AddToGrid(elements._element); return obj; } - template SPECIFIC_TYPE* Insert(ContainerMapList &/*elements*/, SPECIFIC_TYPE * /*obj*/) + template + SPECIFIC_TYPE* Insert(ContainerMapList& /*elements*/, SPECIFIC_TYPE* /*obj*/) { - return NULL; + return nullptr; } // this is a missed - template SPECIFIC_TYPE* Insert(ContainerMapList &/*elements*/, SPECIFIC_TYPE * /*obj*/) + template + SPECIFIC_TYPE* Insert(ContainerMapList& /*elements*/, SPECIFIC_TYPE* /*obj*/) { - return NULL; // a missed + return nullptr; // a missed } // Recursion - template SPECIFIC_TYPE* Insert(ContainerMapList >&elements, SPECIFIC_TYPE *obj) + template + SPECIFIC_TYPE* Insert(ContainerMapList>& elements, SPECIFIC_TYPE* obj) { - SPECIFIC_TYPE* t= Insert(elements._elements, obj); - return (t != NULL ? t : Insert(elements._TailElements, obj)); + SPECIFIC_TYPE* t = Insert(elements._elements, obj); + return (t != nullptr ? t : Insert(elements._TailElements, obj)); } //// non-const remove method @@ -93,20 +196,20 @@ namespace Trinity //template SPECIFIC_TYPE* Remove(ContainerMapList &/*elements*/, SPECIFIC_TYPE * /*obj*/) //{ - // return NULL; + // return nullptr; //} //// this is a missed //template SPECIFIC_TYPE* Remove(ContainerMapList &/*elements*/, SPECIFIC_TYPE * /*obj*/) //{ - // return NULL; // a missed + // return nullptr; // a missed //} //template SPECIFIC_TYPE* Remove(ContainerMapList > &elements, SPECIFIC_TYPE *obj) //{ // // The head element is bad // SPECIFIC_TYPE* t = Remove(elements._elements, obj); - // return ( t != NULL ? t : Remove(elements._TailElements, obj) ); + // return ( t != nullptr ? t : Remove(elements._TailElements, obj) ); //} } #endif diff --git a/src/server/shared/Dynamic/TypeContainerVisitor.h b/src/server/shared/Dynamic/TypeContainerVisitor.h index 514b52d3df..e10a2331e2 100644 --- a/src/server/shared/Dynamic/TypeContainerVisitor.h +++ b/src/server/shared/Dynamic/TypeContainerVisitor.h @@ -37,21 +37,6 @@ template void VisitorHelper(VISITOR &v, TYP v.Visit(c); } -// terminate condition for container list -template void VisitorHelper(VISITOR &/*v*/, ContainerList &/*c*/) { } - -template void VisitorHelper(VISITOR &v, ContainerList &c) -{ - v.Visit(c._element); -} - -// recursion for container list -template void VisitorHelper(VISITOR &v, ContainerList > &c) -{ - VisitorHelper(v, c._elements); - VisitorHelper(v, c._TailElements); -} - // terminate condition container map list template void VisitorHelper(VISITOR &/*v*/, ContainerMapList &/*c*/) { } @@ -67,23 +52,31 @@ template void VisitorHelper(VISITOR &v, Contain VisitorHelper(v, c._TailElements); } -// array list -template void VisitorHelper(VISITOR &v, ContainerArrayList &c) +// for TypeMapContainer +template void VisitorHelper(VISITOR &v, TypeMapContainer &c) +{ + VisitorHelper(v, c.GetElements()); +} + +// TypeUnorderedMapContainer +template +void VisitorHelper(VISITOR& /*v*/, ContainerUnorderedMap& /*c*/) { } + +template +void VisitorHelper(VISITOR& v, ContainerUnorderedMap& c) { v.Visit(c._element); } -template void VisitorHelper(VISITOR &/*v*/, ContainerArrayList &/*c*/) { } - -// recursion -template void VisitorHelper(VISITOR &v, ContainerArrayList > &c) +template +void VisitorHelper(VISITOR& v, ContainerUnorderedMap, KEY_TYPE>& c) { VisitorHelper(v, c._elements); VisitorHelper(v, c._TailElements); } -// for TypeMapContainer -template void VisitorHelper(VISITOR &v, TypeMapContainer &c) +template +void VisitorHelper(VISITOR& v, TypeUnorderedMapContainer& c) { VisitorHelper(v, c.GetElements()); } diff --git a/src/server/shared/Dynamic/TypeList.h b/src/server/shared/Dynamic/TypeList.h index f1ccca9b04..f035592970 100644 --- a/src/server/shared/Dynamic/TypeList.h +++ b/src/server/shared/Dynamic/TypeList.h @@ -40,5 +40,6 @@ struct TypeList #define TYPELIST_3(T1, T2, T3) TypeList #define TYPELIST_4(T1, T2, T3, T4) TypeList #define TYPELIST_5(T1, T2, T3, T4, T5) TypeList +#define TYPELIST_6(T1, T2, T3, T4, T5, T6) TypeList #endif diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 387fb156de..cf33ba300f 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -254,10 +254,10 @@ extern int main(int argc, char** argv) sWorldSocketMgr.StopNetwork(); sInstanceSaveMgr->Unload(); + sOutdoorPvPMgr->Die(); sMapMgr->UnloadAll(); // unload all grids (including locked in memory) sObjectAccessor->UnloadAll(); // unload 'i_player2corpse' storage and remove from world sScriptMgr->Unload(); - sOutdoorPvPMgr->Die(); // set server offline LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realmID); From 0453320b6b12377d10bc667abf33276d148293f3 Mon Sep 17 00:00:00 2001 From: m_pan Date: Tue, 22 Sep 2015 18:58:28 -0500 Subject: [PATCH 046/524] Revise MaxPrimaryTradeSkill comment see https://github.com/TrinityCore/TrinityCore/issues/15575 --- src/server/worldserver/worldserver.conf.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 8e06c1c9ca..5f4566f44e 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -956,7 +956,7 @@ Guild.BankEventLogRecordsCount = 25 # # MaxPrimaryTradeSkill # Description: Maximum number of primary professions a character can learn. -# Range: 0-10 +# Range: 0-11 # Default: 2 MaxPrimaryTradeSkill = 2 From 595f819632880b4cf74d2ebb3959f456634b16d7 Mon Sep 17 00:00:00 2001 From: m_pan Date: Tue, 22 Sep 2015 19:11:58 -0500 Subject: [PATCH 047/524] Config ; Minor Typo # Updates.SourcePath > # Updates.MySqlCLIPath --- src/server/worldserver/worldserver.conf.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 5f4566f44e..65c07d5632 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1148,7 +1148,7 @@ Updates.EnableDatabases = 0 Updates.SourcePath = "" # -# 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" From c5cc95d008ed6119b6eefd62fcf957d62e641ac9 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 23 Sep 2015 05:05:30 +0200 Subject: [PATCH 048/524] DB/Creature: More Naxx pathing update By Malcrom --- sql/updates/world/2015_09_23_00_world.sql | 612 ++++++++++++++++++++++ 1 file changed, 612 insertions(+) create mode 100644 sql/updates/world/2015_09_23_00_world.sql diff --git a/sql/updates/world/2015_09_23_00_world.sql b/sql/updates/world/2015_09_23_00_world.sql new file mode 100644 index 0000000000..5483d78b2c --- /dev/null +++ b/sql/updates/world/2015_09_23_00_world.sql @@ -0,0 +1,612 @@ +-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT' +SET @NPC := 127866; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3454.462,`position_y`=-3562.112,`position_z`=267.593 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3454.462,-3562.112,267.593,0,0,0,0,100,0), -- 18:40:27 +(@PATH,2,3454.662,-3548.537,267.593,0,0,0,0,100,0), -- 18:40:38 +(@PATH,3,3464.026,-3545.334,267.593,0,0,0,0,100,0), -- 18:40:43 +(@PATH,4,3469.727,-3539.112,267.593,0,0,0,0,100,0), -- 18:40:47 +(@PATH,5,3471.318,-3524.515,267.593,0,0,0,0,100,0), -- 18:40:50 +(@PATH,6,3465.038,-3515.349,267.593,0,0,0,0,100,0), -- 18:40:56 +(@PATH,7,3454.185,-3511.259,267.593,0,0,0,0,100,0), -- 18:41:01 +(@PATH,8,3442.813,-3514.244,267.593,0,0,0,0,100,0), -- 18:41:06 +(@PATH,9,3435.952,-3524.05,267.593,0,0,0,0,100,0), -- 18:41:11 +(@PATH,10,3436.82,-3538.214,267.593,0,0,0,0,100,0), -- 18:41:16 +(@PATH,11,3445.783,-3546.556,267.593,0,0,0,0,100,0), -- 18:41:21 +(@PATH,12,3453.797,-3548.311,267.593,0,0,0,0,100,0), -- 18:41:25 +(@PATH,13,3453.227,-3570.022,267.593,0,0,0,0,100,0), -- 18:41:29 +(@PATH,14,3453.297,-3589.868,267.593,0,0,0,0,100,0), -- 18:41:38 +(@PATH,15,3452.981,-3624.833,269.3551,0,0,0,0,100,0), -- 18:41:46 +(@PATH,16,3453.006,-3638.403,276.4746,0,0,0,0,100,0), -- 18:41:59 +(@PATH,17,3453.413,-3650.563,282.8547,0,0,0,0,100,0), -- 18:42:06 +(@PATH,18,3453.339,-3674.839,294.1114,0,0,0,0,100,0), -- 18:42:12 +(@PATH,19,3453.625,-3707.783,294.6607,0,0,0,0,100,0), -- 18:42:23 +(@PATH,20,3453.646,-3719.333,294.6607,0,0,0,0,100,0), -- 18:42:36 +(@PATH,21,3440.435,-3724.057,294.6607,0,0,0,0,100,0), -- 18:42:41 +(@PATH,22,3433.669,-3735.089,294.6609,0,0,0,0,100,0), -- 18:42:46 +(@PATH,23,3435.129,-3747.669,294.6607,0,0,0,0,100,0), -- 18:42:50 +(@PATH,24,3444.191,-3756.717,294.6607,0,0,0,0,100,0), -- 18:42:55 +(@PATH,25,3457.736,-3759.273,294.6607,0,0,0,0,100,0), -- 18:43:01 +(@PATH,26,3468.683,-3752.32,294.6607,0,0,0,0,100,0), -- 18:43:06 +(@PATH,27,3473.417,-3741.013,294.6607,0,0,0,0,100,0), -- 18:43:12 +(@PATH,28,3469.141,-3727.593,294.6607,0,0,0,0,100,0), -- 18:43:17 +(@PATH,29,3461.402,-3721.552,294.6607,0,0,0,0,100,0), -- 18:43:22 +(@PATH,30,3453.865,-3719.445,294.6607,0,0,0,0,100,0), -- 18:43:27 +(@PATH,31,3453.944,-3707.97,294.6607,0,0,0,0,100,0), -- 18:43:29 +(@PATH,32,3453.922,-3674.717,294.0525,0,0,0,0,100,0), -- 18:43:34 +(@PATH,33,3454.177,-3650.563,282.855,0,0,0,0,100,0), -- 18:43:47 +(@PATH,34,3454.576,-3638.243,276.3913,0,0,0,0,100,0), -- 18:43:58 +(@PATH,35,3454.075,-3614.297,267.5918,0,0,0,0,100,0), -- 18:44:03 +(@PATH,36,3454.152,-3589.311,267.593,0,0,0,0,100,0); -- 18:44:14 + +-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT' +SET @NPC := 127867; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3454.462,`position_y`=-3569.112,`position_z`=267.593 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3454.462,-3562.112,267.593,0,0,0,0,100,0), -- 18:40:27 +(@PATH,2,3454.662,-3548.537,267.593,0,0,0,0,100,0), -- 18:40:38 +(@PATH,3,3464.026,-3545.334,267.593,0,0,0,0,100,0), -- 18:40:43 +(@PATH,4,3469.727,-3539.112,267.593,0,0,0,0,100,0), -- 18:40:47 +(@PATH,5,3471.318,-3524.515,267.593,0,0,0,0,100,0), -- 18:40:50 +(@PATH,6,3465.038,-3515.349,267.593,0,0,0,0,100,0), -- 18:40:56 +(@PATH,7,3454.185,-3511.259,267.593,0,0,0,0,100,0), -- 18:41:01 +(@PATH,8,3442.813,-3514.244,267.593,0,0,0,0,100,0), -- 18:41:06 +(@PATH,9,3435.952,-3524.05,267.593,0,0,0,0,100,0), -- 18:41:11 +(@PATH,10,3436.82,-3538.214,267.593,0,0,0,0,100,0), -- 18:41:16 +(@PATH,11,3445.783,-3546.556,267.593,0,0,0,0,100,0), -- 18:41:21 +(@PATH,12,3453.797,-3548.311,267.593,0,0,0,0,100,0), -- 18:41:25 +(@PATH,13,3453.227,-3570.022,267.593,0,0,0,0,100,0), -- 18:41:29 +(@PATH,14,3453.297,-3589.868,267.593,0,0,0,0,100,0), -- 18:41:38 +(@PATH,15,3452.981,-3624.833,269.3551,0,0,0,0,100,0), -- 18:41:46 +(@PATH,16,3453.006,-3638.403,276.4746,0,0,0,0,100,0), -- 18:41:59 +(@PATH,17,3453.413,-3650.563,282.8547,0,0,0,0,100,0), -- 18:42:06 +(@PATH,18,3453.339,-3674.839,294.1114,0,0,0,0,100,0), -- 18:42:12 +(@PATH,19,3453.625,-3707.783,294.6607,0,0,0,0,100,0), -- 18:42:23 +(@PATH,20,3453.646,-3719.333,294.6607,0,0,0,0,100,0), -- 18:42:36 +(@PATH,21,3440.435,-3724.057,294.6607,0,0,0,0,100,0), -- 18:42:41 +(@PATH,22,3433.669,-3735.089,294.6609,0,0,0,0,100,0), -- 18:42:46 +(@PATH,23,3435.129,-3747.669,294.6607,0,0,0,0,100,0), -- 18:42:50 +(@PATH,24,3444.191,-3756.717,294.6607,0,0,0,0,100,0), -- 18:42:55 +(@PATH,25,3457.736,-3759.273,294.6607,0,0,0,0,100,0), -- 18:43:01 +(@PATH,26,3468.683,-3752.32,294.6607,0,0,0,0,100,0), -- 18:43:06 +(@PATH,27,3473.417,-3741.013,294.6607,0,0,0,0,100,0), -- 18:43:12 +(@PATH,28,3469.141,-3727.593,294.6607,0,0,0,0,100,0), -- 18:43:17 +(@PATH,29,3461.402,-3721.552,294.6607,0,0,0,0,100,0), -- 18:43:22 +(@PATH,30,3453.865,-3719.445,294.6607,0,0,0,0,100,0), -- 18:43:27 +(@PATH,31,3453.944,-3707.97,294.6607,0,0,0,0,100,0), -- 18:43:29 +(@PATH,32,3453.922,-3674.717,294.0525,0,0,0,0,100,0), -- 18:43:34 +(@PATH,33,3454.177,-3650.563,282.855,0,0,0,0,100,0), -- 18:43:47 +(@PATH,34,3454.576,-3638.243,276.3913,0,0,0,0,100,0), -- 18:43:58 +(@PATH,35,3454.075,-3614.297,267.5918,0,0,0,0,100,0), -- 18:44:03 +(@PATH,36,3454.152,-3589.311,267.593,0,0,0,0,100,0); -- 18:44:14 + +-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT' +SET @NPC := 127862; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3234.124,`position_y`=-3743.281,`position_z`=280.9517 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3234.124,-3743.281,280.9517,0,0,0,0,100,0), -- 18:45:33 +(@PATH,2,3234.624,-3733.446,282.4194,0,0,0,0,100,0), -- 18:45:43 +(@PATH,3,3252.519,-3730.217,279.2638,0,0,0,0,100,0), -- 18:45:46 +(@PATH,4,3276.249,-3724.284,275.8947,0,0,0,0,100,0), -- 18:45:54 +(@PATH,5,3309.417,-3714.943,266.8448,0,0,0,0,100,0), -- 18:46:03 +(@PATH,6,3322.029,-3700.557,262.8869,0,0,0,0,100,0), -- 18:46:18 +(@PATH,7,3298.23,-3700.239,271.5519,0,0,0,0,100,0), -- 18:46:26 +(@PATH,8,3280.485,-3698.461,278.4746,0,0,0,0,100,0), -- 18:46:36 +(@PATH,9,3298.23,-3700.239,271.5519,0,0,0,0,100,0), -- 18:46:45 +(@PATH,10,3321.937,-3700.525,262.8836,0,0,0,0,100,0), -- 18:46:52 +(@PATH,11,3309.417,-3714.943,266.8448,0,0,0,0,100,0), -- 18:47:02 +(@PATH,12,3276.249,-3724.284,275.8947,0,0,0,0,100,0), -- 18:47:10 +(@PATH,13,3252.581,-3730.202,279.2548,0,0,0,0,100,0), -- 18:47:25 +(@PATH,14,3234.624,-3733.446,282.4194,0,0,0,0,100,0), -- 18:47:34 +(@PATH,15,3234.132,-3743.128,280.9408,0,0,0,0,100,0), -- 18:47:42 +(@PATH,16,3247.629,-3762.814,277.5423,0,0,0,0,100,0), -- 18:47:45 +(@PATH,17,3232.144,-3779.076,273.1304,0,0,0,0,100,0), -- 18:47:55 +(@PATH,18,3247.629,-3762.814,277.5423,0,0,0,0,100,0); -- 18:48:06 + +-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT' +SET @NPC := 127863; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3232.124,`position_y`=-3751.281,`position_z`=280.9517 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3234.124,-3743.281,280.9517,0,0,0,0,100,0), -- 18:45:33 +(@PATH,2,3234.624,-3733.446,282.4194,0,0,0,0,100,0), -- 18:45:43 +(@PATH,3,3252.519,-3730.217,279.2638,0,0,0,0,100,0), -- 18:45:46 +(@PATH,4,3276.249,-3724.284,275.8947,0,0,0,0,100,0), -- 18:45:54 +(@PATH,5,3309.417,-3714.943,266.8448,0,0,0,0,100,0), -- 18:46:03 +(@PATH,6,3322.029,-3700.557,262.8869,0,0,0,0,100,0), -- 18:46:18 +(@PATH,7,3298.23,-3700.239,271.5519,0,0,0,0,100,0), -- 18:46:26 +(@PATH,8,3280.485,-3698.461,278.4746,0,0,0,0,100,0), -- 18:46:36 +(@PATH,9,3298.23,-3700.239,271.5519,0,0,0,0,100,0), -- 18:46:45 +(@PATH,10,3321.937,-3700.525,262.8836,0,0,0,0,100,0), -- 18:46:52 +(@PATH,11,3309.417,-3714.943,266.8448,0,0,0,0,100,0), -- 18:47:02 +(@PATH,12,3276.249,-3724.284,275.8947,0,0,0,0,100,0), -- 18:47:10 +(@PATH,13,3252.581,-3730.202,279.2548,0,0,0,0,100,0), -- 18:47:25 +(@PATH,14,3234.624,-3733.446,282.4194,0,0,0,0,100,0), -- 18:47:34 +(@PATH,15,3234.132,-3743.128,280.9408,0,0,0,0,100,0), -- 18:47:42 +(@PATH,16,3247.629,-3762.814,277.5423,0,0,0,0,100,0), -- 18:47:45 +(@PATH,17,3232.144,-3779.076,273.1304,0,0,0,0,100,0), -- 18:47:55 +(@PATH,18,3247.629,-3762.814,277.5423,0,0,0,0,100,0); -- 18:48:06 + +-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT' +SET @NPC := 127872; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3282.724,`position_y`=-3894.288,`position_z`=294.6608 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3282.724,-3894.288,294.6608,0,0,0,0,100,0), -- 18:48:08 +(@PATH,2,3280.431,-3878.874,294.6607,0,0,0,0,100,0), -- 18:48:14 +(@PATH,3,3288.137,-3862.199,294.6597,0,0,0,0,100,0), -- 18:48:21 +(@PATH,4,3300.762,-3854.986,294.6609,0,0,0,0,100,0), -- 18:48:28 +(@PATH,5,3317.737,-3854.183,294.6609,0,0,0,0,100,0), -- 18:48:34 +(@PATH,6,3337.437,-3853.406,294.6607,0,0,0,0,100,0), -- 18:48:41 +(@PATH,7,3359.545,-3831.036,294.662,0,0,0,0,100,0), -- 18:48:48 +(@PATH,8,3383.364,-3807.658,294.6969,0,0,0,0,100,0), -- 18:49:02 +(@PATH,9,3407.369,-3783.911,294.661,0,0,0,0,100,0), -- 18:49:15 +(@PATH,10,3425.444,-3761.708,294.6607,0,0,0,0,100,0), -- 18:49:29 +(@PATH,11,3425.071,-3748.542,294.6605,0,0,0,0,100,0), -- 18:49:39 +(@PATH,12,3425.387,-3729.456,294.6607,0,0,0,0,100,0), -- 18:49:44 +(@PATH,13,3435.633,-3715.143,294.6598,0,0,0,0,100,0), -- 18:49:53 +(@PATH,14,3453.195,-3709.209,294.6607,0,0,0,0,100,0), -- 18:49:59 +(@PATH,15,3465.947,-3712.353,294.6602,0,0,0,0,100,0), -- 18:50:07 +(@PATH,16,3477.195,-3720.679,294.6599,0,0,0,0,100,0), -- 18:50:12 +(@PATH,17,3483.336,-3735.452,294.6605,0,0,0,0,100,0), -- 18:50:17 +(@PATH,18,3481.773,-3748.506,294.66,0,0,0,0,100,0), -- 18:50:24 +(@PATH,19,3474.602,-3761.479,294.6591,0,0,0,0,100,0), -- 18:50:29 +(@PATH,20,3459.724,-3768.537,294.6591,0,0,0,0,100,0), -- 18:50:35 +(@PATH,21,3444.191,-3767.875,294.6595,0,0,0,0,100,0), -- 18:50:41 +(@PATH,22,3431.064,-3767.097,294.6601,0,0,0,0,100,0), -- 18:50:49 +(@PATH,23,3410.49,-3782.893,294.6607,0,0,0,0,100,0), -- 18:50:53 +(@PATH,24,3385.208,-3808.768,294.6991,0,0,0,0,100,0), -- 18:51:03 +(@PATH,25,3361.281,-3832.754,294.662,0,0,0,0,100,0), -- 18:51:18 +(@PATH,26,3338.748,-3854.621,294.6607,0,0,0,0,100,0), -- 18:51:32 +(@PATH,27,3338.51,-3872.156,294.6597,0,0,0,0,100,0), -- 18:51:44 +(@PATH,28,3339.48,-3888.635,294.6605,0,0,0,0,100,0), -- 18:51:51 +(@PATH,29,3325.759,-3908.016,294.6607,0,0,0,0,100,0), -- 18:51:58 +(@PATH,30,3310.214,-3913.58,294.6595,0,0,0,0,100,0), -- 18:52:08 +(@PATH,31,3292.234,-3906.752,294.6605,0,0,0,0,100,0); -- 18:52:14 + +-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT' +SET @NPC := 127873; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3286.724,`position_y`=-3902.288,`position_z`=294.6608 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3282.724,-3894.288,294.6608,0,0,0,0,100,0), -- 18:48:08 +(@PATH,2,3280.431,-3878.874,294.6607,0,0,0,0,100,0), -- 18:48:14 +(@PATH,3,3288.137,-3862.199,294.6597,0,0,0,0,100,0), -- 18:48:21 +(@PATH,4,3300.762,-3854.986,294.6609,0,0,0,0,100,0), -- 18:48:28 +(@PATH,5,3317.737,-3854.183,294.6609,0,0,0,0,100,0), -- 18:48:34 +(@PATH,6,3337.437,-3853.406,294.6607,0,0,0,0,100,0), -- 18:48:41 +(@PATH,7,3359.545,-3831.036,294.662,0,0,0,0,100,0), -- 18:48:48 +(@PATH,8,3383.364,-3807.658,294.6969,0,0,0,0,100,0), -- 18:49:02 +(@PATH,9,3407.369,-3783.911,294.661,0,0,0,0,100,0), -- 18:49:15 +(@PATH,10,3425.444,-3761.708,294.6607,0,0,0,0,100,0), -- 18:49:29 +(@PATH,11,3425.071,-3748.542,294.6605,0,0,0,0,100,0), -- 18:49:39 +(@PATH,12,3425.387,-3729.456,294.6607,0,0,0,0,100,0), -- 18:49:44 +(@PATH,13,3435.633,-3715.143,294.6598,0,0,0,0,100,0), -- 18:49:53 +(@PATH,14,3453.195,-3709.209,294.6607,0,0,0,0,100,0), -- 18:49:59 +(@PATH,15,3465.947,-3712.353,294.6602,0,0,0,0,100,0), -- 18:50:07 +(@PATH,16,3477.195,-3720.679,294.6599,0,0,0,0,100,0), -- 18:50:12 +(@PATH,17,3483.336,-3735.452,294.6605,0,0,0,0,100,0), -- 18:50:17 +(@PATH,18,3481.773,-3748.506,294.66,0,0,0,0,100,0), -- 18:50:24 +(@PATH,19,3474.602,-3761.479,294.6591,0,0,0,0,100,0), -- 18:50:29 +(@PATH,20,3459.724,-3768.537,294.6591,0,0,0,0,100,0), -- 18:50:35 +(@PATH,21,3444.191,-3767.875,294.6595,0,0,0,0,100,0), -- 18:50:41 +(@PATH,22,3431.064,-3767.097,294.6601,0,0,0,0,100,0), -- 18:50:49 +(@PATH,23,3410.49,-3782.893,294.6607,0,0,0,0,100,0), -- 18:50:53 +(@PATH,24,3385.208,-3808.768,294.6991,0,0,0,0,100,0), -- 18:51:03 +(@PATH,25,3361.281,-3832.754,294.662,0,0,0,0,100,0), -- 18:51:18 +(@PATH,26,3338.748,-3854.621,294.6607,0,0,0,0,100,0), -- 18:51:32 +(@PATH,27,3338.51,-3872.156,294.6597,0,0,0,0,100,0), -- 18:51:44 +(@PATH,28,3339.48,-3888.635,294.6605,0,0,0,0,100,0), -- 18:51:51 +(@PATH,29,3325.759,-3908.016,294.6607,0,0,0,0,100,0), -- 18:51:58 +(@PATH,30,3310.214,-3913.58,294.6595,0,0,0,0,100,0), -- 18:52:08 +(@PATH,31,3292.234,-3906.752,294.6605,0,0,0,0,100,0); -- 18:52:14 + +-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT' +SET @NPC := 127864; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3118.083,`position_y`=-3883.491,`position_z`=267.593 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3118.083,-3883.491,267.593,0,0,0,0,100,0), -- 18:36:24 +(@PATH,2,3114.162,-3894.186,267.593,0,0,0,0,100,0), -- 18:36:33 +(@PATH,3,3104.3,-3900.575,267.593,0,0,0,0,100,0), -- 18:36:38 +(@PATH,4,3093.041,-3899.523,267.593,0,0,0,0,100,0), -- 18:36:43 +(@PATH,5,3083.292,-3890.907,267.593,0,0,0,0,100,0), -- 18:36:48 +(@PATH,6,3082.536,-3878.924,267.593,0,0,0,0,100,0), -- 18:36:53 +(@PATH,7,3088.724,-3868.493,267.593,0,0,0,0,100,0), -- 18:36:57 +(@PATH,8,3103.835,-3863.884,267.593,0,0,0,0,100,0), -- 18:37:02 +(@PATH,9,3114.156,-3873.857,267.593,0,0,0,0,100,0), -- 18:37:08 +(@PATH,10,3118.014,-3882.239,267.593,0,0,0,0,100,0), -- 18:37:14 +(@PATH,11,3142.844,-3882.002,267.593,0,0,0,0,100,0), -- 18:37:18 +(@PATH,12,3166.273,-3881.469,267.5934,0,0,0,0,100,0), -- 18:37:28 +(@PATH,13,3194.12,-3881.767,268.6533,0,0,0,0,100,0), -- 18:37:37 +(@PATH,14,3207.929,-3881.54,275.8944,0,0,0,0,100,0), -- 18:37:48 +(@PATH,15,3221.411,-3881.945,282.9668,0,0,0,0,100,0), -- 18:37:54 +(@PATH,16,3241.861,-3882.487,292.3779,0,0,0,0,100,0), -- 18:38:01 +(@PATH,17,3260.216,-3882.229,294.6607,0,0,0,0,100,0), -- 18:38:10 +(@PATH,18,3279.568,-3882.604,294.6607,0,0,0,0,100,0), -- 18:38:17 +(@PATH,19,3290.396,-3881.747,294.6607,0,0,0,0,100,0), -- 18:38:25 +(@PATH,20,3296.476,-3869.041,294.6607,0,0,0,0,100,0), -- 18:38:30 +(@PATH,21,3307.822,-3864.203,294.6607,0,0,0,0,100,0), -- 18:46:32 +(@PATH,22,3321.301,-3868.157,294.6607,0,0,0,0,100,0), -- 18:46:37 +(@PATH,23,3328.406,-3877.447,294.6597,0,0,0,0,100,0), -- 18:46:43 +(@PATH,24,3327.705,-3889.598,294.6607,0,0,0,0,100,0), -- 18:46:47 +(@PATH,25,3320.085,-3897.669,294.6607,0,0,0,0,100,0), -- 18:46:52 +(@PATH,26,3312.01,-3901.51,294.6607,0,0,0,0,100,0), -- 18:46:57 +(@PATH,27,3297.603,-3897.307,294.6607,0,0,0,0,100,0), -- 18:47:00 +(@PATH,28,3292.267,-3890.234,294.6607,0,0,0,0,100,0), -- 18:47:07 +(@PATH,29,3290.384,-3882.75,294.6607,0,0,0,0,100,0), -- 18:47:10 +(@PATH,30,3279.155,-3882.98,294.6607,0,0,0,0,100,0), -- 18:47:14 +(@PATH,31,3260.253,-3882.767,294.6607,0,0,0,0,100,0), -- 18:47:17 +(@PATH,32,3241.78,-3882.872,292.339,0,0,0,0,100,0), -- 18:47:25 +(@PATH,33,3221.214,-3882.398,282.8636,0,0,0,0,100,0), -- 18:47:33 +(@PATH,34,3207.818,-3881.953,275.8358,0,0,0,0,100,0), -- 18:47:42 +(@PATH,35,3194.124,-3882.38,268.655,0,0,0,0,100,0), -- 18:47:48 +(@PATH,36,3166.121,-3882.08,267.5934,0,0,0,0,100,0), -- 18:47:54 +(@PATH,37,3142.54,-3882.999,267.593,0,0,0,0,100,0); -- 18:48:06 + +-- Pathing for Venom Stalker Entry: 15976 'TDB FORMAT' +SET @NPC := 127865; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3126.083,`position_y`=-3882.491,`position_z`=267.593 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3118.083,-3883.491,267.593,0,0,0,0,100,0), -- 18:36:24 +(@PATH,2,3114.162,-3894.186,267.593,0,0,0,0,100,0), -- 18:36:33 +(@PATH,3,3104.3,-3900.575,267.593,0,0,0,0,100,0), -- 18:36:38 +(@PATH,4,3093.041,-3899.523,267.593,0,0,0,0,100,0), -- 18:36:43 +(@PATH,5,3083.292,-3890.907,267.593,0,0,0,0,100,0), -- 18:36:48 +(@PATH,6,3082.536,-3878.924,267.593,0,0,0,0,100,0), -- 18:36:53 +(@PATH,7,3088.724,-3868.493,267.593,0,0,0,0,100,0), -- 18:36:57 +(@PATH,8,3103.835,-3863.884,267.593,0,0,0,0,100,0), -- 18:37:02 +(@PATH,9,3114.156,-3873.857,267.593,0,0,0,0,100,0), -- 18:37:08 +(@PATH,10,3118.014,-3882.239,267.593,0,0,0,0,100,0), -- 18:37:14 +(@PATH,11,3142.844,-3882.002,267.593,0,0,0,0,100,0), -- 18:37:18 +(@PATH,12,3166.273,-3881.469,267.5934,0,0,0,0,100,0), -- 18:37:28 +(@PATH,13,3194.12,-3881.767,268.6533,0,0,0,0,100,0), -- 18:37:37 +(@PATH,14,3207.929,-3881.54,275.8944,0,0,0,0,100,0), -- 18:37:48 +(@PATH,15,3221.411,-3881.945,282.9668,0,0,0,0,100,0), -- 18:37:54 +(@PATH,16,3241.861,-3882.487,292.3779,0,0,0,0,100,0), -- 18:38:01 +(@PATH,17,3260.216,-3882.229,294.6607,0,0,0,0,100,0), -- 18:38:10 +(@PATH,18,3279.568,-3882.604,294.6607,0,0,0,0,100,0), -- 18:38:17 +(@PATH,19,3290.396,-3881.747,294.6607,0,0,0,0,100,0), -- 18:38:25 +(@PATH,20,3296.476,-3869.041,294.6607,0,0,0,0,100,0), -- 18:38:30 +(@PATH,21,3307.822,-3864.203,294.6607,0,0,0,0,100,0), -- 18:46:32 +(@PATH,22,3321.301,-3868.157,294.6607,0,0,0,0,100,0), -- 18:46:37 +(@PATH,23,3328.406,-3877.447,294.6597,0,0,0,0,100,0), -- 18:46:43 +(@PATH,24,3327.705,-3889.598,294.6607,0,0,0,0,100,0), -- 18:46:47 +(@PATH,25,3320.085,-3897.669,294.6607,0,0,0,0,100,0), -- 18:46:52 +(@PATH,26,3312.01,-3901.51,294.6607,0,0,0,0,100,0), -- 18:46:57 +(@PATH,27,3297.603,-3897.307,294.6607,0,0,0,0,100,0), -- 18:47:00 +(@PATH,28,3292.267,-3890.234,294.6607,0,0,0,0,100,0), -- 18:47:07 +(@PATH,29,3290.384,-3882.75,294.6607,0,0,0,0,100,0), -- 18:47:10 +(@PATH,30,3279.155,-3882.98,294.6607,0,0,0,0,100,0), -- 18:47:14 +(@PATH,31,3260.253,-3882.767,294.6607,0,0,0,0,100,0), -- 18:47:17 +(@PATH,32,3241.78,-3882.872,292.339,0,0,0,0,100,0), -- 18:47:25 +(@PATH,33,3221.214,-3882.398,282.8636,0,0,0,0,100,0), -- 18:47:33 +(@PATH,34,3207.818,-3881.953,275.8358,0,0,0,0,100,0), -- 18:47:42 +(@PATH,35,3194.124,-3882.38,268.655,0,0,0,0,100,0), -- 18:47:48 +(@PATH,36,3166.121,-3882.08,267.5934,0,0,0,0,100,0), -- 18:47:54 +(@PATH,37,3142.54,-3882.999,267.593,0,0,0,0,100,0); -- 18:48:06 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127862,127863,127864,127865,127866,127867,127872,127873); +DELETE FROM `creature_formations` WHERE `memberGUID` IN (127862,127863,127864,127865,127866,127867,127872,127873); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127866,127866,0,0,2,0,0), +(127866,127867,8,360,2,0,0), +(127862,127862,0,0,2,0,0), +(127862,127863,8,360,2,0,0), +(127872,127872,0,0,2,0,0), +(127872,127873,8,360,2,0,0), +(127864,127864,0,0,2,0,0), +(127864,127865,8,360,2,0,0); + +-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT' +SET @NPC := 127907; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3074.529,`position_y`=-3897.057,`position_z`=267.593 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''), +(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3074.529,-3897.057,267.593,0,0,1,0,100,0), -- 18:49:16 +(@PATH,2,3079.677,-3905.275,267.5924,0,0,1,0,100,0), -- 18:49:18 +(@PATH,3,3100.693,-3912.941,267.593,0,0,1,0,100,0), -- 18:49:19 +(@PATH,4,3117.195,-3907.615,267.5934,0,0,1,0,100,0), -- 18:49:21 +(@PATH,5,3127.366,-3895.706,267.593,0,0,1,0,100,0), -- 18:49:22 +(@PATH,6,3140.936,-3884.294,267.593,0,0,1,0,100,0), -- 18:49:24 +(@PATH,7,3158.318,-3883.925,267.593,0,0,1,0,100,0), -- 18:49:26 +(@PATH,8,3174.53,-3883.984,267.5941,0,0,1,0,100,0), -- 18:49:27 +(@PATH,9,3194.791,-3884.305,269.0044,0,0,1,0,100,0), -- 18:49:30 +(@PATH,10,3205.072,-3884.625,274.395,0,0,1,0,100,0), -- 18:49:31 +(@PATH,11,3215.293,-3885.147,279.7566,0,0,1,0,100,0), -- 18:49:32 +(@PATH,12,3223.794,-3885.607,284.2162,0,0,1,0,100,0), -- 18:49:33 +(@PATH,13,3237.89,-3886.143,290.4647,0,0,1,0,100,0), -- 18:49:35 +(@PATH,14,3247.501,-3886.756,294.6604,0,0,1,0,100,0), -- 18:49:36 +(@PATH,15,3267.746,-3887.45,294.6607,0,0,1,0,100,0), -- 18:49:37 +(@PATH,16,3282.858,-3895.334,294.6606,0,0,1,0,100,0), -- 18:49:39 +(@PATH,17,3295.857,-3909.075,294.6605,0,0,1,0,100,0), -- 18:49:41 +(@PATH,18,3313.104,-3913.105,294.6597,0,0,1,0,100,0), -- 18:49:43 +(@PATH,19,3331.879,-3904.76,294.6607,0,0,1,0,100,0), -- 18:49:44 +(@PATH,20,3338.559,-3891.88,294.6608,0,0,1,0,100,0), -- 18:49:47 +(@PATH,21,3339.517,-3878.169,294.6594,0,0,1,0,100,0), -- 18:49:48 +(@PATH,22,3332.953,-3864.011,294.6603,0,0,1,0,100,0), -- 18:49:49 +(@PATH,23,3319.689,-3854.916,294.6607,0,0,1,0,100,0), -- 18:49:50 +(@PATH,24,3304.591,-3853.372,294.6609,0,0,1,0,100,0), -- 18:49:53 +(@PATH,25,3288.425,-3861.284,294.6596,0,0,1,0,100,0), -- 18:49:54 +(@PATH,26,3280.122,-3870.386,294.6606,0,0,1,0,100,0), -- 18:49:56 +(@PATH,27,3267.866,-3880.449,294.6615,0,0,1,0,100,0), -- 18:49:58 +(@PATH,28,3247.675,-3880.42,294.6608,0,0,1,0,100,0), -- 18:49:59 +(@PATH,29,3237.588,-3880.728,290.3199,0,0,1,0,100,0), -- 18:50:01 +(@PATH,30,3224.797,-3880.583,284.7434,0,0,1,0,100,0), -- 18:50:02 +(@PATH,31,3215.042,-3880.425,279.6261,0,0,1,0,100,0), -- 18:50:04 +(@PATH,32,3195.322,-3880.004,269.2845,0,0,1,0,100,0), -- 18:50:05 +(@PATH,33,3175.766,-3879.59,267.5942,0,0,1,0,100,0), -- 18:50:06 +(@PATH,34,3158.302,-3879.587,267.593,0,0,1,0,100,0), -- 18:50:09 +(@PATH,35,3140.589,-3879.343,267.593,0,0,1,0,100,0), -- 18:50:11 +(@PATH,36,3127.137,-3869.814,267.5929,0,0,1,0,100,0), -- 18:50:12 +(@PATH,37,3118.936,-3859.253,267.5927,0,0,1,0,100,0), -- 18:50:13 +(@PATH,38,3103.765,-3853.207,267.5929,0,0,1,0,100,0), -- 18:50:15 +(@PATH,39,3087.844,-3856.353,267.593,0,0,1,0,100,0), -- 18:50:17 +(@PATH,40,3075.642,-3865.845,267.5934,0,0,1,0,100,0), -- 18:50:18 +(@PATH,41,3070.007,-3884.099,267.593,0,0,1,0,100,0); -- 18:50:19 +-- 0x1C3B1C42A00F9A400063AC0000019CDF .go 3074.529 -3897.057 267.593 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,6,150,2,0,0), +(@NPC,@NPC+2,6,100,2,0,0), +(@NPC,@NPC+3,6,50,2,0,0), +(@NPC,@NPC+4,6,360,2,0,0), +(@NPC,@NPC+5,6,310,2,0,0), +(@NPC,@NPC+6,6,240,2,0,0), +(@NPC,@NPC+7,6,190,2,0,0); + +-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT' +SET @NPC := 127963; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3224.441,`position_y`=-3876.754,`position_z`=284.5573 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''), +(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3224.441,-3876.754,284.5573,0,0,1,0,100,0), -- 18:48:59 +(@PATH,2,3243.073,-3881.118,292.9622,0,0,1,0,100,0), -- 18:49:03 +(@PATH,3,3264.531,-3885.239,294.6607,0,0,1,0,100,0), -- 18:49:04 +(@PATH,4,3280.712,-3887.944,294.6607,0,0,1,0,100,0), -- 18:49:07 +(@PATH,5,3286.485,-3901.147,294.66,0,0,1,0,100,0), -- 18:49:08 +(@PATH,6,3299.353,-3910.954,294.6605,0,0,1,0,100,0), -- 18:49:10 +(@PATH,7,3310.171,-3913.553,294.6593,0,0,1,0,100,0), -- 18:49:12 +(@PATH,8,3320.141,-3911.575,294.6602,0,0,1,0,100,0), -- 18:49:13 +(@PATH,9,3327.62,-3907.016,294.6607,0,0,1,0,100,0), -- 18:49:14 +(@PATH,10,3337.314,-3895.928,294.6607,0,0,1,0,100,0), -- 18:49:15 +(@PATH,11,3339.708,-3878.755,294.6594,0,0,1,0,100,0), -- 18:49:16 +(@PATH,12,3333.498,-3863.702,294.6603,0,0,1,0,100,0), -- 18:49:18 +(@PATH,13,3323.844,-3856.551,294.6607,0,0,1,0,100,0), -- 18:49:20 +(@PATH,14,3309.547,-3852.652,294.6601,0,0,1,0,100,0), -- 18:49:21 +(@PATH,15,3294.998,-3857.095,294.6609,0,0,1,0,100,0), -- 18:49:22 +(@PATH,16,3284.745,-3868.869,294.6604,0,0,1,0,100,0), -- 18:49:24 +(@PATH,17,3280.295,-3878.902,294.6607,0,0,1,0,100,0), -- 18:49:25 +(@PATH,18,3264.526,-3882.421,294.6607,0,0,1,0,100,0), -- 18:49:26 +(@PATH,19,3243.129,-3885.538,292.9888,0,0,1,0,100,0), -- 18:49:29 +(@PATH,20,3225,-3889.948,284.8481,0,0,1,0,100,0), -- 18:49:30 +(@PATH,21,3207.006,-3898.323,275.4061,0,0,1,0,100,0), -- 18:49:32 +(@PATH,22,3182.24,-3901.498,267.5922,0,0,1,0,100,0), -- 18:49:35 +(@PATH,23,3181.843,-3882.055,267.5952,0,0,1,0,100,0), -- 18:49:37 +(@PATH,24,3181.309,-3863.954,267.6013,0,0,1,0,100,0), -- 18:49:39 +(@PATH,25,3202.393,-3869.113,272.9927,0,0,1,0,100,0); -- 18:49:41 +-- 0x1C3B1C42A00F9A400063AC0004019CDF .go 3224.441 -3876.754 284.5573 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,6,150,2,0,0), +(@NPC,@NPC+2,6,100,2,0,0), +(@NPC,@NPC+3,6,50,2,0,0), +(@NPC,@NPC+4,6,360,2,0,0), +(@NPC,@NPC+5,6,310,2,0,0), +(@NPC,@NPC+6,6,240,2,0,0), +(@NPC,@NPC+7,6,190,2,0,0); + +-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT' +SET @NPC := 127915; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3435.956,`position_y`=-3606.878,`position_z`=267.5925 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''), +(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3435.956,-3606.878,267.5925,0,0,1,0,100,0), -- 18:40:42 +(@PATH,2,3435.056,-3623.646,268.7272,0,0,1,0,100,0), -- 18:40:43 +(@PATH,3,3434.696,-3642.454,278.5947,0,0,1,0,100,0), -- 18:40:45 +(@PATH,4,3451.302,-3657.603,286.5476,0,0,1,0,100,0), -- 18:40:47 +(@PATH,5,3451.777,-3674.688,294.0381,0,0,1,0,100,0), -- 18:40:49 +(@PATH,6,3450.148,-3687.086,294.6606,0,0,1,0,100,0), -- 18:40:52 +(@PATH,7,3448.747,-3700.197,294.6606,0,0,1,0,100,0), -- 18:40:53 +(@PATH,8,3441.068,-3712.697,294.6603,0,0,1,0,100,0), -- 18:40:54 +(@PATH,9,3427.858,-3724.603,294.6606,0,0,1,0,100,0), -- 18:40:56 +(@PATH,10,3424.089,-3742.215,294.6599,0,0,1,0,100,0), -- 18:40:58 +(@PATH,11,3432.195,-3760.958,294.6607,0,0,1,0,100,0), -- 18:40:59 +(@PATH,12,3446.482,-3768.38,294.6594,0,0,1,0,100,0), -- 18:41:02 +(@PATH,13,3458.209,-3769.1,294.6591,0,0,1,0,100,0), -- 18:41:03 +(@PATH,14,3474.842,-3761.217,294.6591,0,0,1,0,100,0), -- 18:41:04 +(@PATH,15,3483.013,-3745.727,294.6602,0,0,1,0,100,0), -- 18:44:04 +(@PATH,16,3482.468,-3731.778,294.6606,0,0,1,0,100,0), -- 18:43:22 +(@PATH,17,3476.008,-3718.655,294.6598,0,0,1,0,100,0), -- 18:43:24 +(@PATH,18,3463.966,-3711.199,294.6607,0,0,1,0,100,0), -- 18:43:25 +(@PATH,19,3458.016,-3700.416,294.6607,0,0,1,0,100,0), -- 18:43:26 +(@PATH,20,3456.704,-3687.183,294.6606,0,0,1,0,100,0), -- 18:43:27 +(@PATH,21,3453.893,-3674.658,294.0241,0,0,1,0,100,0), -- 18:43:28 +(@PATH,22,3453.96,-3657.726,286.6128,0,0,1,0,100,0), -- 18:43:30 +(@PATH,23,3469.155,-3643.573,279.192,0,0,1,0,100,0), -- 18:43:32 +(@PATH,24,3470.532,-3624.281,269.0706,0,0,1,0,100,0), -- 18:43:34 +(@PATH,25,3470.325,-3607.22,267.5942,0,0,1,0,100,0), -- 18:43:37 +(@PATH,26,3451.28,-3607.224,267.5939,0,0,1,0,100,0); -- 18:43:38 +-- 0x1C3B1C42A00F9A400063AC0000019CE0 .go 3435.956 -3606.878 267.5925 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,6,150,2,0,0), +(@NPC,@NPC+2,6,100,2,0,0), +(@NPC,@NPC+3,6,50,2,0,0), +(@NPC,@NPC+4,6,360,2,0,0), +(@NPC,@NPC+5,6,310,2,0,0), +(@NPC,@NPC+6,6,240,2,0,0), +(@NPC,@NPC+7,6,190,2,0,0); + +-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT' +SET @NPC := 127971; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3295.49,`position_y`=-3908.793,`position_z`=294.6605 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''), +(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3295.49,-3908.793,294.6605,0,0,1,0,100,0), -- 18:51:17 +(@PATH,2,3315.678,-3912.224,294.6599,0,0,1,0,100,0), -- 18:51:19 +(@PATH,3,3333.155,-3901.934,294.6607,0,0,1,0,100,0), -- 18:51:21 +(@PATH,4,3340.176,-3885.257,294.6602,0,0,1,0,100,0), -- 18:51:23 +(@PATH,5,3340.906,-3871.007,294.6597,0,0,1,0,100,0), -- 18:51:24 +(@PATH,6,3346.968,-3852.773,294.6607,0,0,1,0,100,0), -- 18:51:27 +(@PATH,7,3351.746,-3834.469,294.661,0,0,1,0,100,0), -- 18:51:28 +(@PATH,8,3355.633,-3811.367,294.6529,0,0,1,0,100,0), -- 18:51:30 +(@PATH,9,3364.557,-3793.01,294.6719,0,0,1,0,100,0), -- 18:51:33 +(@PATH,10,3373.259,-3788.029,294.6747,0,0,1,0,100,0), -- 18:51:34 +(@PATH,11,3386.617,-3791.233,294.6732,0,0,1,0,100,0), -- 18:51:35 +(@PATH,12,3403.893,-3786.905,294.6616,0,0,1,0,100,0), -- 18:51:36 +(@PATH,13,3417.919,-3780.905,294.6603,0,0,1,0,100,0), -- 18:51:39 +(@PATH,14,3435.631,-3777.892,294.6598,0,0,1,0,100,0), -- 18:51:40 +(@PATH,15,3453.584,-3770.242,294.6595,0,0,1,0,100,0), -- 18:51:41 +(@PATH,16,3473.68,-3761.83,294.6591,0,0,1,0,100,0), -- 18:51:44 +(@PATH,17,3482.105,-3748.733,294.66,0,0,1,0,100,0), -- 18:51:46 +(@PATH,18,3481.656,-3730.049,294.6605,0,0,1,0,100,0), -- 18:51:47 +(@PATH,19,3466.719,-3713.448,294.6601,0,0,1,0,100,0), -- 18:51:50 +(@PATH,20,3442.352,-3711.847,294.6607,0,0,1,0,100,0), -- 18:51:52 +(@PATH,21,3425.655,-3728.148,294.6607,0,0,1,0,100,0), -- 18:51:55 +(@PATH,22,3424.592,-3744.035,294.6601,0,0,1,0,100,0), -- 18:51:57 +(@PATH,23,3425.272,-3756.561,294.6607,0,0,1,0,100,0), -- 18:51:58 +(@PATH,24,3416.304,-3774.603,294.6607,0,0,1,0,100,0), -- 18:51:59 +(@PATH,25,3405.274,-3797.244,294.6658,0,0,1,0,100,0), -- 18:52:02 +(@PATH,26,3394.972,-3815.078,294.7111,0,0,1,0,100,0), -- 18:52:04 +(@PATH,27,3377.224,-3831.485,294.6744,0,0,1,0,100,0), -- 18:52:06 +(@PATH,28,3355.986,-3838.537,294.661,0,0,1,0,100,0), -- 18:52:08 +(@PATH,29,3337.649,-3843.212,294.6607,0,0,1,0,100,0), -- 18:52:10 +(@PATH,30,3316.94,-3850.059,294.6604,0,0,1,0,100,0), -- 18:52:13 +(@PATH,31,3304.55,-3853.525,294.6609,0,0,1,0,100,0), -- 18:52:15 +(@PATH,32,3288.827,-3861.687,294.6596,0,0,1,0,100,0), -- 18:52:16 +(@PATH,33,3281.996,-3873.274,294.6607,0,0,1,0,100,0), -- 18:52:18 +(@PATH,34,3281.982,-3891.924,294.6607,0,0,1,0,100,0); -- 18:52:19 +-- 0x1C3B1C42A00F9A400063AC0004019CE0 .go 3295.49 -3908.793 294.6605 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,6,150,2,0,0), +(@NPC,@NPC+2,6,100,2,0,0), +(@NPC,@NPC+3,6,50,2,0,0), +(@NPC,@NPC+4,6,360,2,0,0), +(@NPC,@NPC+5,6,310,2,0,0), +(@NPC,@NPC+6,6,240,2,0,0), +(@NPC,@NPC+7,6,190,2,0,0); + +-- Pathing for Poisonous Skitterer Entry: 15977 'TDB FORMAT' +SET @NPC := 127923; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3445.511,`position_y`=-3562.019,`position_z`=267.5927 WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''), +(@NPC+4,@PATH,0,0,1,0, ''),(@NPC+5,@PATH,0,0,1,0, ''),(@NPC+6,@PATH,0,0,1,0, ''),(@NPC+7,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,3445.511,-3562.019,267.5927,0,0,1,0,100,0), -- 18:50:41 +(@PATH,2,3436.16,-3553.894,267.5926,0,0,1,0,100,0), -- 18:50:40 +(@PATH,3,3427.388,-3543.853,267.5927,0,0,1,0,100,0), -- 18:50:39 +(@PATH,4,3424.374,-3524.575,267.593,0,0,1,0,100,0), -- 18:50:36 +(@PATH,5,3430.726,-3510.367,267.5926,0,0,1,0,100,0), -- 18:50:35 +(@PATH,6,3450.23,-3500.03,267.593,0,0,1,0,100,0), -- 18:50:33 +(@PATH,7,3467.847,-3503.534,267.592,0,0,1,0,100,0), -- 18:50:32 +(@PATH,8,3476.588,-3510.952,267.5963,0,0,1,0,100,0), -- 18:50:30 +(@PATH,9,3481.654,-3519.189,267.599,0,0,1,0,100,0), -- 18:50:29 +(@PATH,10,3483.025,-3534.862,267.5939,0,0,1,0,100,0), -- 18:50:28 +(@PATH,11,3476.475,-3549.416,267.5925,0,0,1,0,100,0), -- 18:50:26 +(@PATH,12,3462.348,-3561.076,267.5923,0,0,1,0,100,0), -- 18:50:24 +(@PATH,13,3457.105,-3576.026,267.593,0,0,1,0,100,0), -- 18:50:22 +(@PATH,14,3456.484,-3596.646,267.5931,0,0,1,0,100,0), -- 18:50:21 +(@PATH,15,3456.006,-3616.097,267.5933,0,0,1,0,100,0), -- 18:50:18 +(@PATH,16,3455.418,-3633.274,273.7843,0,0,1,0,100,0), -- 18:50:17 +(@PATH,17,3455.296,-3644.975,279.9232,0,0,1,0,100,0), -- 18:50:16 +(@PATH,18,3455.71,-3658.097,286.8079,0,0,1,0,100,0), -- 18:50:13 +(@PATH,19,3454.985,-3676.887,294.6609,0,0,1,0,100,0), -- 18:50:12 +(@PATH,20,3455.906,-3694.337,294.6607,0,0,1,0,100,0), -- 18:50:10 +(@PATH,21,3467.804,-3706.619,294.66,0,0,1,0,100,0), -- 18:50:09 +(@PATH,22,3476.442,-3720.346,294.6599,0,0,1,0,100,0), -- 18:50:06 +(@PATH,23,3483.089,-3735.734,294.6605,0,0,1,0,100,0), -- 18:50:05 +(@PATH,24,3480.588,-3752.523,294.6599,0,0,1,0,100,0), -- 18:50:04 +(@PATH,25,3467.757,-3765.589,294.6591,0,0,1,0,100,0), -- 18:50:01 +(@PATH,26,3453.585,-3770.197,294.6595,0,0,1,0,100,0), -- 18:50:00 +(@PATH,27,3436.298,-3764.208,294.6599,0,0,1,0,100,0), -- 18:49:59 +(@PATH,28,3426.811,-3752.177,294.6607,0,0,1,0,100,0), -- 18:49:56 +(@PATH,29,3423.844,-3737.633,294.6601,0,0,1,0,100,0), -- 18:49:55 +(@PATH,30,3429.387,-3722.426,294.6605,0,0,1,0,100,0), -- 18:49:54 +(@PATH,31,3441.138,-3712.122,294.6603,0,0,1,0,100,0), -- 18:49:52 +(@PATH,32,3449.993,-3694.774,294.6606,0,0,1,0,100,0), -- 18:49:50 +(@PATH,33,3450.414,-3676.926,294.6604,0,0,1,0,100,0), -- 18:49:48 +(@PATH,34,3451.136,-3657.843,286.6731,0,0,1,0,100,0), -- 18:49:47 +(@PATH,35,3451.486,-3645.041,279.957,0,0,1,0,100,0), -- 18:49:46 +(@PATH,36,3451.301,-3632.746,273.5061,0,0,1,0,100,0), -- 18:49:43 +(@PATH,37,3451.295,-3615.899,267.594,0,0,1,0,100,0), -- 18:49:41 +(@PATH,38,3451.307,-3596.557,267.5931,0,0,1,0,100,0), -- 18:49:39 +(@PATH,39,3451.611,-3575.75,267.5927,0,0,1,0,100,0); -- 18:49:37 +-- 0x1C3B1C42A00F9A400063AC0008019CDF .go 3445.511 -3562.019 267.5927 + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +DELETE FROM `creature_formations` WHERE `memberGUID` IN (@NPC,@NPC+1,@NPC+2,@NPC+3,@NPC+4,@NPC+5,@NPC+6,@NPC+7); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,6,150,2,0,0), +(@NPC,@NPC+2,6,100,2,0,0), +(@NPC,@NPC+3,6,50,2,0,0), +(@NPC,@NPC+4,6,360,2,0,0), +(@NPC,@NPC+5,6,310,2,0,0), +(@NPC,@NPC+6,6,240,2,0,0), +(@NPC,@NPC+7,6,190,2,0,0); From a5131d299f8b5822f600aebc67149655172aef0a Mon Sep 17 00:00:00 2001 From: mthsena Date: Wed, 23 Sep 2015 11:35:50 -0300 Subject: [PATCH 049/524] Config: Typo/Cosmetic changes --- src/server/worldserver/worldserver.conf.dist | 21 ++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 65c07d5632..aeeb90a048 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1667,6 +1667,7 @@ GM.WhisperingTo = 2 # applied on players when using the .freeze command # Default: 0 - (Original aura duration. Lasts until the .unfreeze command is used) # N - (Aura duration if unspecified in .freeze command, in seconds) + GM.FreezeAuraDuration = 0 # @@ -2148,7 +2149,7 @@ AutoBroadcast.Center = 0 # # AutoBroadcast.Timer # Description: Timer (in milliseconds) for auto broadcasts. -# Default: 60000 - (10 minutes) +# Default: 600000 - (10 minutes) AutoBroadcast.Timer = 600000 @@ -2556,14 +2557,14 @@ CharDelete.KeepDays = 30 # # AllowTrackBothResources # Description: Allows players to track herbs and minerals at the same time (if they have the skills) -# Default: 0 (do not allow) -# 1 (allow) +# Default: 0 - (Do not allow) +# 1 - (Allow) # -# Note: The following are client limitations and cannot be coded for: -# * The minimap tracking icon will display whichever skill is activated second -# * The minimap tracking list will only show a check mark next to the last skill activated (sometimes this -# bugs out and doesn't switch the check mark. It has no effect on the actual tracking though). -# * The minimap dots are yellow for both resources +# Note: The following are client limitations and cannot be coded for: +# * The minimap tracking icon will display whichever skill is activated second. +# * The minimap tracking list will only show a check mark next to the last skill activated (sometimes this +# bugs out and doesn't switch the check mark. It has no effect on the actual tracking though). +# * The minimap dots are yellow for both resources. AllowTrackBothResources = 0 @@ -2965,8 +2966,8 @@ AuctionHouseBot.Items.ItemLevel.Max = 0 # # AuctionHouseBot.Items.ReqLevel.* -# Prevent seller from listing items below/above this required level -# Default: - 0 (Disabled) +# Description: Prevent seller from listing items below/above this required level +# Default: 0 - (Disabled) AuctionHouseBot.Items.ReqLevel.Min = 0 AuctionHouseBot.Items.ReqLevel.Max = 0 From e7e9f7713f6fb6ec415889af3830435b9f507920 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Wed, 23 Sep 2015 17:22:20 +0200 Subject: [PATCH 050/524] DB/Path: Dragonmaw Subjugator & Dragonmaw Shaman - Also delete some npc's that shouldn't be there. --- sql/updates/world/2015_09_23_01_world.sql | 155 ++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 sql/updates/world/2015_09_23_01_world.sql diff --git a/sql/updates/world/2015_09_23_01_world.sql b/sql/updates/world/2015_09_23_01_world.sql new file mode 100644 index 0000000000..a90442e8b5 --- /dev/null +++ b/sql/updates/world/2015_09_23_01_world.sql @@ -0,0 +1,155 @@ +DELETE FROM `creature` WHERE `guid` IN (86098, 86097, 86092, 86091, 86090, 86088, 86089, 86087, 86086, 86085); + +-- Pathing for Dragonmaw Shaman Entry: 21720 'TDB FORMAT' +SET @NPC := 75806; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4178.686,`position_y`=490.5659,`position_z`=30.16439 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4178.686,490.5659,30.16439,0,0,0,0,100,0), -- 10:20:24 +(@PATH,2,-4197.292,485.9068,30.38932,0,0,0,0,100,0), -- 10:20:35 +(@PATH,3,-4225.723,467.5575,41.27721,0,0,0,0,100,0), -- 10:20:44 +(@PATH,4,-4215.874,436.8994,48.21687,0,0,0,0,100,0), -- 10:20:57 +(@PATH,5,-4237.429,402.9925,63.27236,0,0,0,0,100,0), -- 10:21:13 +(@PATH,6,-4257.311,375.9668,78.98435,0,0,0,0,100,0), -- 10:21:30 +(@PATH,7,-4218.265,427.3583,49.21005,0,0,0,0,100,0), -- 10:21:59 +(@PATH,8,-4226.337,464.256,42.97073,0,0,0,0,100,0), -- 10:22:17 +(@PATH,9,-4205.016,481.8601,31.38265,0,0,0,0,100,0), -- 10:22:32 +(@PATH,10,-4193.525,487.0911,30.10522,0,0,0,0,100,0), -- 10:22:46 +(@PATH,11,-4172.567,476.759,31.17034,0,0,0,0,100,0), -- 10:22:55 +(@PATH,12,-4151.987,448.1165,33.53831,0,0,0,0,100,0), -- 10:23:06 +(@PATH,13,-4113.85,424.8085,34.97233,0,0,0,0,100,0), -- 10:23:18 +(@PATH,14,-4147.163,444.2449,34.1104,0,0,0,0,100,0), -- 10:23:38 +(@PATH,15,-4157.673,454.7521,31.41072,0,0,0,0,100,0); -- 10:23:57 + +-- Pathing for Dragonmaw Shaman Entry: 21720 'TDB FORMAT' +SET @NPC := 75803; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4294.086,`position_y`=400.621,`position_z`=81.62926 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,233, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4294.086,400.621,81.62926,0,25000,0,0,100,0), -- 10:13:30 +(@PATH,2,-4292.586,399.621,81.62926,0,25000,0,0,100,0); -- 10:13:50 + +-- Pathing for Dragonmaw Shaman Entry: 21720 'TDB FORMAT' +SET @NPC := 75798; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4244.082,`position_y`=315.9884,`position_z`=134.664 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4244.082,315.9884,134.664,0,0,0,0,100,0), -- 10:12:22 +(@PATH,2,-4235.726,319.797,134.6712,0,0,0,0,100,0), -- 10:12:25 +(@PATH,3,-4229.505,315.7428,134.6895,0,0,0,0,100,0), -- 10:12:28 +(@PATH,4,-4194.724,303.9587,136.7709,0,0,0,0,100,0), -- 10:12:30 +(@PATH,5,-4190.966,294.0813,135.7594,0,0,0,0,100,0), -- 10:12:45 +(@PATH,6,-4183.756,287.0773,135.6553,0,0,0,0,100,0), -- 10:14:20 +(@PATH,7,-4191.174,297.8928,136.033,0,0,0,0,100,0), -- 10:14:26 +(@PATH,8,-4220.702,310.0533,134.9795,0,0,0,0,100,0), -- 10:14:30 +(@PATH,9,-4229.358,315.7001,134.6958,0,0,0,0,100,0), -- 10:14:45 +(@PATH,10,-4230.426,317.3666,134.676,0,0,0,0,100,0), -- 10:14:48 +(@PATH,11,-4235.935,319.6286,134.6698,0,0,0,0,100,0), -- 10:14:50 +(@PATH,12,-4255.562,318.7018,134.6108,0,0,0,0,100,0), -- 10:14:54 +(@PATH,13,-4249.844,317.125,134.6809,0,0,0,0,100,0), -- 10:15:00 +(@PATH,14,-4243.675,313.4105,134.6629,0,0,0,0,100,0), -- 10:15:06 +(@PATH,15,-4235.89,308.923,134.6676,0,0,0,0,100,0), -- 10:15:08 +(@PATH,16,-4230.517,310.4198,134.6871,0,0,0,0,100,0), -- 10:15:11 +(@PATH,17,-4194.894,303.7994,136.77,0,0,0,0,100,0), -- 10:15:14 +(@PATH,18,-4188.841,309.6393,135.933,0,0,0,0,100,0), -- 10:15:29 +(@PATH,19,-4175.213,316.2365,135.7092,0,0,0,0,100,0), -- 10:15:34 +(@PATH,20,-4161.508,360.043,141.9081,0,0,0,0,100,0), -- 10:15:40 +(@PATH,21,-4171.737,320.0564,135.9073,0,0,0,0,100,0), -- 10:16:01 +(@PATH,22,-4185.639,313.6697,135.3489,0,0,0,0,100,0), -- 10:16:20 +(@PATH,23,-4191.21,305.0679,136.4015,0,0,0,0,100,0), -- 10:16:26 +(@PATH,24,-4220.617,309.9903,134.8077,0,0,0,0,100,0), -- 10:16:31 +(@PATH,25,-4229.755,310.8228,134.6904,0,0,0,0,100,0), -- 10:16:45 +(@PATH,26,-4235.208,308.5773,134.6808,0,0,0,0,100,0), -- 10:16:48 +(@PATH,27,-4243.492,313.3849,134.6674,0,0,0,0,100,0), -- 10:16:51 +(@PATH,28,-4255.519,318.5628,134.6098,0,0,0,0,100,0), -- 10:16:54 +(@PATH,29,-4249.62,317.301,134.6521,0,0,0,0,100,0); -- 10:17:00 + +-- Pathing for Dragonmaw Shaman Entry: 21720 'TDB FORMAT' +SET @NPC := 75801; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4263.521,`position_y`=408.381,`position_z`=79.67068 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4263.521,408.381,79.67068,0,0,0,0,100,0), -- 10:12:48 +(@PATH,2,-4275.601,391.1442,81.45609,0,0,0,0,100,0), -- 10:13:03 +(@PATH,3,-4276.916,384.2662,79.99209,0,0,0,0,100,0), -- 10:13:13 +(@PATH,4,-4272.852,367.3383,83.40826,0,0,0,0,100,0), -- 10:13:19 +(@PATH,5,-4299.143,333.1703,109.8589,0,0,0,0,100,0), -- 10:13:24 +(@PATH,6,-4291.638,298.5769,121.6239,0,0,0,0,100,0), -- 10:13:44 +(@PATH,7,-4284.62,294.5884,122.3762,0,0,0,0,100,0), -- 10:14:00 +(@PATH,8,-4265.867,286.0486,122.6935,0,0,0,0,100,0), -- 10:14:11 +(@PATH,9,-4231.655,272.0292,122.6157,0,0,0,0,100,0), -- 10:14:22 +(@PATH,10,-4221.664,271.404,122.5952,0,0,0,0,100,0), -- 10:14:30 +(@PATH,11,-4221.826,271.2171,122.3309,0,0,0,0,100,0), -- 10:14:42 +(@PATH,12,-4241.433,272.7845,122.9299,0,0,0,0,100,0), -- 10:14:50 +(@PATH,13,-4243.721,273.0889,123.1742,0,0,0,0,100,0), -- 10:15:00 +(@PATH,14,-4287.71,296.0865,122.0869,0,0,0,0,100,0), -- 10:15:09 +(@PATH,15,-4299.358,330.6028,110.9833,0,0,0,0,100,0), -- 10:15:20 +(@PATH,16,-4274.684,364.696,85.32684,0,0,0,0,100,0), -- 10:15:36 +(@PATH,17,-4269.528,373.963,80.26889,0,0,0,0,100,0), -- 10:15:57 +(@PATH,18,-4276.889,385.2,79.98441,0,0,0,0,100,0); -- 10:16:01 + +-- Dragonmaw Subjugator SAI +SET @ENTRY := 21718; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,1,0,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Out of Combat - Enable Combat Movement (No Repeat)"), +(@ENTRY,0,1,2,4,0,100,1,0,0,0,0,11,9613,0,0,0,0,0,2,0,0,0,0,0,0,0,"Dragonmaw Subjugator - On Aggro - Cast 'Shadow Bolt' (No Repeat)"), +(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - On Aggro - Increment Phase By 1 (No Repeat)"), +(@ENTRY,0,3,0,9,1,100,0,0,40,2400,3800,11,9613,0,0,0,0,0,2,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Within 0-40 Range - Cast 'Shadow Bolt' (No Repeat)"), +(@ENTRY,0,4,5,3,1,100,1,0,15,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Mana - Enable Combat Movement (Phase 1) (No Repeat)"), +(@ENTRY,0,5,0,61,1,100,0,0,0,0,0,23,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Mana - Increment Phase By 1 (Phase 1) (No Repeat)"), +(@ENTRY,0,6,0,9,1,100,1,35,80,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Within 35-80 Range - Enable Combat Movement (Phase 1) (No Repeat)"), +(@ENTRY,0,7,0,9,1,100,1,5,15,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Within 5-15 Range - Disable Combat Movement (Phase 1) (No Repeat)"), +(@ENTRY,0,8,0,9,1,100,1,0,5,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Within 0-5 Range - Enable Combat Movement (Phase 1) (No Repeat)"), +(@ENTRY,0,9,0,3,2,100,0,30,100,100,100,23,0,1,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 30-100% Mana - Decrement Phase By 1 (Phase 1) (No Repeat)"), +(@ENTRY,0,10,11,2,0,100,1,0,15,0,0,22,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Health - Set Event Phase 3 (No Repeat)"), +(@ENTRY,0,11,12,61,0,100,0,0,0,0,0,21,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Health - Enable Combat Movement (No Repeat)"), +(@ENTRY,0,12,0,61,0,100,0,0,0,0,0,25,1,0,0,0,0,0,0,0,0,0,0,0,0,0,"Dragonmaw Subjugator - Between 0-15% Health - Flee For Assist (No Repeat)"), +(@ENTRY,0,13,0,6,0,100,1,0,0,0,0,33,22197,0,0,0,0,0,7,0,0,0,0,0,0,0,"Dragonmaw Subjugator - On Just Died - Quest Credit 'Infiltrating Dragonmaw Fortress' (No Repeat)"); + +-- Pathing for Dragonmaw Subjugator Entry: 21718 'TDB FORMAT' +SET @NPC := 75774; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4102.015,`position_y`=377.2606,`position_z`=30.89463 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4102.015,377.2606,30.89463,0,0,0,0,100,0), -- 10:20:43 +(@PATH,2,-4108.736,382.3355,30.58962,0,0,0,0,100,0), -- 10:20:47 +(@PATH,3,-4115.181,384.7361,30.83398,0,0,0,0,100,0), -- 10:20:49 +(@PATH,4,-4115.945,392.739,30.79796,0,0,0,0,100,0), -- 10:20:53 +(@PATH,5,-4111.743,392.8836,30.53397,0,0,0,0,100,0), -- 10:20:54 +(@PATH,6,-4106.752,389.3356,30.54209,0,0,0,0,100,0), -- 10:20:57 +(@PATH,7,-4103.535,395.7037,30.67706,0,0,0,0,100,0), -- 10:21:00 +(@PATH,8,-4103.445,396.1037,30.62162,0,0,0,0,100,0), -- 10:21:02 +(@PATH,9,-4099.806,402.0006,30.79059,0,0,0,0,100,0), -- 10:21:14 +(@PATH,10,-4099.44,401.964,30.87934,0,0,0,0,100,0), -- 10:21:15 +(@PATH,11,-4086.569,405.2619,30.82691,0,0,0,0,100,0), -- 10:21:21 +(@PATH,12,-4089.497,392.9045,30.76514,0,0,0,0,100,0), -- 10:21:26 +(@PATH,13,-4089.03,381.2375,31.16474,0,0,0,0,100,0), -- 10:21:31 +(@PATH,14,-4091.608,379.7381,30.97511,0,0,0,0,100,0); -- 10:21:33 + +-- Pathing for Dragonmaw Subjugator Entry: 21718 'TDB FORMAT' +SET @NPC := 75780; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4192.549,`position_y`=463.3147,`position_z`=30.76653 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4192.549,463.3147,30.76653,0,0,0,0,100,0), -- 10:21:58 +(@PATH,2,-4188.431,467.3629,30.58786,0,0,0,0,100,0); -- 10:22:00 From d3ebb79d78b9d914c1c782e3824060d4fdb91893 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 23 Sep 2015 17:28:01 +0200 Subject: [PATCH 051/524] DB/Path: Add Dragonmaw Transporter paths And Remove wrong spawns Thanks to @Kittnz --- sql/updates/world/2015_09_23_02_world.sql | 176 ++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 sql/updates/world/2015_09_23_02_world.sql diff --git a/sql/updates/world/2015_09_23_02_world.sql b/sql/updates/world/2015_09_23_02_world.sql new file mode 100644 index 0000000000..fa89371371 --- /dev/null +++ b/sql/updates/world/2015_09_23_02_world.sql @@ -0,0 +1,176 @@ +-- +SET @GUID1 := -78496; +SET @GUID2 := -52330; +UPDATE `creature` SET `position_x`= -4236.136230, `position_y`= 313.865417, `position_z`= 160.389038, `orientation`= 3.5595 WHERE `guid`= 78496; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (22317, 23188, 22253); +UPDATE `creature_template` SET `InhabitType`= 4 WHERE `entry`=23225; +DELETE FROM `creature` WHERE `guid` IN (132815, 132816, 132817) AND `id`=23188; -- remove wrong spawns +UPDATE `smart_scripts` SET `event_type`=25 WHERE `entryorguid`=23311 AND `source_type`=0 AND `id`=11; -- Fix an aura set by spawn instead of reset +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@GUID1, -52330, 23188, 22253) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (22317*100, 22317*100+1, 22317*100+2, 2318800, 2318801, 2318802, 2318803, 22253*100) AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@GUID1,0,0,0,1,0,100,0,2000,4000,12000,16000,12,23188,7,0,0,0,0,8,0,0,0,-4236.136230, 313.865417, 160.389038, 3.9795,"Netherwing Drake Escape Dummy - OOC - Summon Creature 'Dragonmaw Transporter'"), +(@GUID1,0,1,0,63,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Netherwing Drake Escape Dummy - Just created - Set active"), +(23188,0,0,0,54,0,100,0,0,0,0,0,87,2318800,2318801,2318802,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Just summoned - action list"), +(2318800,9,0,0,0,0,100,0,0,0,0,0,53,1,231880,0,0,0,2,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Start Waypoint"), +(2318800,9,1,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Set Active On"), +(2318801,9,0,0,0,0,100,0,0,0,0,0,53,1,231881,0,0,0,2,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Start Waypoint"), +(2318801,9,1,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Set Active On"), +(2318802,9,0,0,0,0,100,0,0,0,0,0,53,1,231882,0,0,0,2,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Start Waypoint"), +(2318802,9,1,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Action list - Set Active On"), +(23188,0,1,0,58,0,100,0,27,231880,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - On Waypoint Finished - Despawn Instant"), +(23188,0,2,0,58,0,100,0,31,231881,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - On Waypoint Finished - Despawn Instant"), +(23188,0,3,0,58,0,100,0,25,231882,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - On Waypoint Finished - Despawn Instant"), +(23188,0,4,0,58,0,100,0,26,231883,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - On Waypoint Finished - Despawn Instant"), +(22253, 0, 0, 0, 0, 0, 100, 0, 3000, 5000, 7000, 7000, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Cleave"), +(22253, 0, 1, 0, 0, 0, 100, 0, 5000, 7000, 8000, 10000, 11, 17547, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Mortal Strike"), +(22253, 0, 2, 0, 0, 0, 100, 0, 4000, 7000, 9000, 12000, 11, 10966, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Uppercut"), +(@GUID2, 0, 0, 0, 0, 0, 100, 0, 3000, 5000, 7000, 7000, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Cleave"), +(@GUID2, 0, 1, 0, 0, 0, 100, 0, 5000, 7000, 8000, 10000, 11, 17547, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Mortal Strike"), +(@GUID2, 0, 2, 0, 0, 0, 100, 0, 4000, 7000, 9000, 12000, 11, 10966, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Ascendant - IC - Cast Uppercut"), +(@GUID2,0,3,0,1,0,100,0,2000,5000,12000,16000,12,23188,7,0,0,0,0,8,0,0,0,-4933.316895, 31.134706, 61.772137, 0.480736,"Dragonmaw Ascendant - OOC - Summon Creature 'Dragonmaw Transporter'"), +(@GUID2,0,4,0,63,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Ascendant - Just created - Set active"), +(23188,0,5,0,54,0,100,0,0,0,0,0,80,2318803,2,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - Just summoned - action list"), +(2318803,9,0,0,0,0,100,0,0,0,0,0,53,1,231883,0,0,0,2,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - action list - Start Waypoint"), +(2318803,9,1,0,0,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dragonmaw Transporter - action list - Set Active On"), +(23188, 0, 6, 0, 0, 0, 100, 0, 3000, 5000, 7000, 7000, 11, 38861, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Transporter- IC - Aimed Shot"), +(23188, 0, 7, 0, 0, 0, 100, 0, 5000, 7000, 8000, 10000, 11, 19503, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Transporter - IC - Scatter Shot"), +(23188, 0, 8, 0, 0, 0, 100, 0, 4000, 7000, 9000, 12000, 11, 38859, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Transporter - IC - Serpent Sting"), +(23188, 0, 9, 0, 0, 0, 100, 0, 1000, 2000, 3000, 4000, 11, 38858, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Dragonmaw Transporter - IC - Shoot"); + +DELETE FROM conditions WHERE SourceTypeOrReferenceId=22 AND SourceEntry=23188; +INSERT INTO conditions (SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, ConditionTarget, ConditionValue1, ConditionValue2, ConditionValue3, NegativeCondition, ErrorTextId, ScriptName, Comment) VALUES +(22, 1, 23188, 0, 0, 23, 0, 3939, 0, 0, 0, 0, '', 'Execute SmartAI for Dragonmaw Transporter if the area is 3759'), +(22, 6, 23188, 0, 0, 23, 0, 3759, 0, 0, 0, 0, '', 'Execute SmartAI for Dragonmaw Transporter if the area is 3759'); + +SET @PATH := 231880; +DELETE FROM `waypoints` WHERE `entry`=@PATH; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(@PATH,1,-4234.259,316.7951,194.5695, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,2,-4278.778,291.9364,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,3,-4315.755,272.5735,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,4,-4332.82,267.5372,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,5,-4354.233,260.8795,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,6,-4391.55,249.5022,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,7,-4429.059,238.4517,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,8,-4470.008,227.2337,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,9,-4489.761,222.9549,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,10,-4502.434,220.6088,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,11,-4528.817,218.5281,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,12,-4546.15,218.6741,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,13,-4595.704,217.5207,162.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,14,-4641.978,205.2794,147.0265, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,15,-4662.014,198.3955,118.6931, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,16,-4686.042,195.7724,92.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,17,-4720.744,183.9892,92.33202, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,18,-4745.649,173.8856,98.19311, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,19,-4756.257,154.736,105.7487, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,20,-4761.057,143.5172,108.3876, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,21,-4787.247,129.8356,110.6098, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,22,-4815.383,124.4918,109.6376, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,23,-4841.104,99.13585,116.1653, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,24,-4876.217,68.20888,99.16536, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,25,-4887.112,56.80024,92.74867, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,26,-4921.727,36.11827,73.94312, 'Dragonmaw Transporter'), -- 07:14:59 +(@PATH,27,-4924.737,36.20354,61.87088, 'Dragonmaw Transporter'); -- 07:14:59 +-- 0x1C09FC424016A500000019000022323C .go -4234.259 316.7951 194.5695 + +-- Pathing for Dragonmaw Transporter Entry: 23188 'TDB FORMAT' +SET @PATH := 231881; +DELETE FROM `waypoints` WHERE `entry`=@PATH; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(@PATH,1,-4235.772,310.6806,195.9172, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,2,-4266.868,305.2986,170.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,3,-4289.381,299.2866,169.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,4,-4313.463,296.8451,169.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,5,-4334.991,295.7913,169.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,6,-4355.52,290.1741,169.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,7,-4382.983,278.409,169.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,8,-4419.237,271.8036,169.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,9,-4448.44,268.7892,169.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,10,-4463.974,265.9718,169.0554, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,11,-4486.522,265.1359,165.4998, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,12,-4515.319,266.4659,154.3332, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,13,-4538.145,266.9955,143.7777, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,14,-4565.51,267.0066,134.7498, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,15,-4574.724,266.6996,130.4999, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,16,-4585.344,265.8585,125.2221, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,17,-4610.452,266.8059,114.0276, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,18,-4648.119,265.0245,89.41651, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,19,-4679.999,264.3499,80.02769, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,20,-4726.6,265.6508,91.11095, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,21,-4757.61,263.9644,96.61092, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,22,-4790.494,252.6213,107.7221, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,23,-4830.46,243.5237,113.6109, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,24,-4850.946,232.3608,114.611, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,25,-4865.539,204.393,115.9165, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,26,-4867.515,184.822,112.5276, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,27,-4869.98,147.345,96.99986, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,28,-4875.779,115.5371,89.69432, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,29,-4900.512,79.47276,79.22215, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,30,-4920.873,41.16504,69.30544, 'Dragonmaw Transporter'), -- 07:15:20 +(@PATH,31,-4924.737,36.20354,61.87088, 'Dragonmaw Transporter'); -- 07:15:20 +-- 0x1C09FC424016A5000000190000223259 .go -4235.772 310.6806 195.9172 + +-- Pathing for Dragonmaw Transporter Entry: 23188 'TDB FORMAT' +SET @PATH := 231882; +DELETE FROM `waypoints` WHERE `entry`=@PATH; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(@PATH,1,-4235.186,312.622,195.6112, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,2,-4234.272,312.2153,195.6112, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,3,-4293.566,245.1756,179.3634, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,4,-4305.508,238.4082,179.3634, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,5,-4329.843,217.8027,179.3634, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,6,-4362.729,186.0796,186.419, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,7,-4434.846,123.756,230.3912, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,8,-4459.073,85.18902,233.9189, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,9,-4482.534,56.35666,232.5023, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,10,-4493.029,34.64518,235.1689, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,11,-4503.293,2.772352,232.5856, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,12,-4536.873,-16.30306,224.7523, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,13,-4579.444,-18.38878,223.5301, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,14,-4611.417,9.642578,219.03, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,15,-4660.565,11.25814,228.7522, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,16,-4698.878,14.15853,227.3911, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,17,-4734.97,25.07422,223.0023, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,18,-4766.538,46.62153,220.8356, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,19,-4794.966,67.12045,197.8634, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,20,-4815.075,72.55089,183.6967, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,21,-4855.917,67.18316,133.6689, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,22,-4868.51,61.47526,116.2801, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,23,-4890.089,51.30317,92.11338, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,24,-4922.806,35.50499,72.91895, 'Dragonmaw Transporter'), -- 07:18:37 +(@PATH,25,-4924.737,36.20354,61.87088, 'Dragonmaw Transporter'); -- 07:18:37 +-- 0x1C09FC424016A50000001900002232FF .go -4235.186 312.622 195.6112 + +-- Pathing for Dragonmaw Transporter Entry: 23188 'TDB FORMAT' +SET @PATH := 231883; +DELETE FROM `waypoints` WHERE `entry`=@PATH; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(@PATH,1,-4921.116,38.40239,62.79848, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,2,-4920.266,38.92785,62.79848, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,3,-4911.522,44.50662,65.54009, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,4,-4897.991,49.12988,69.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,5,-4854.699,71.66743,69.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,6,-4811.554,91.95888,69.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,7,-4782.642,107.2382,69.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,8,-4749.689,123.6898,102.4568, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,9,-4717.377,120.1987,102.5401, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,10,-4677.343,111.8249,122.37344, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,11,-4642.299,106.9923,122.62343, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,12,-4595.685,101.0696,122.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,13,-4568.682,107.7912,122.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,14,-4532.451,105.1658,122.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,15,-4502.495,109.315,122.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,16,-4478.215,118.6488,122.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,17,-4437.049,132.6271,122.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,18,-4401.484,131.5858,122.23454, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,19,-4360.693,156.9551,122.37343, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,20,-4324.191,184.9894,122.9568, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,21,-4299.081,216.2382,141.7901, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,22,-4292.715,227.4521,179.9077, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,23,-4281.613,263.6761,179.9077, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,24,-4260.6,294.3777,179.9077, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,25,-4240.507,326.8979,154.0465, 'Dragonmaw Transporter'), -- 07:15:14 +(@PATH,26,-4240.507,326.8979,154.0465, 'Dragonmaw Transporter'); -- 07:15:14 +-- 0x1C09FC424016A5000000190000223269 .go -4921.116 38.40239 62.79848 From d476e0eff24af5849bbbc21128aa461a24d4fe9b Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 23 Sep 2015 18:01:12 +0200 Subject: [PATCH 052/524] DB/Creature: Scripts for Ring of the law encounter in Black Rock Depths Closes #8158 Closes #14598 --- sql/updates/world/2015_09_23_03_world.sql | 80 +++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 sql/updates/world/2015_09_23_03_world.sql diff --git a/sql/updates/world/2015_09_23_03_world.sql b/sql/updates/world/2015_09_23_03_world.sql new file mode 100644 index 0000000000..7a241bafd4 --- /dev/null +++ b/sql/updates/world/2015_09_23_03_world.sql @@ -0,0 +1,80 @@ +-- +SET @DredgeWorm:= 8925; +SET @DeepStinger:= 8926; +SET @DarkScreecher:= 8927; +SET @Burrowing:= 8928; +SET @Creeper:= 8933; +SET @Beetle:= 8932; +SET @Gorosh:= 9027; +SET @Grizzle:= 9028; +SET @Eviscerator:= 9029; +SET @Okthor:= 9030; +SET @Anubshiah:= 9031; +SET @Hedrum:= 9032; + +UPDATE `creature_template` SET `AIName`="SmartAI", `ScriptName`='' WHERE `entry` IN (@DredgeWorm, @DeepStinger, @DarkScreecher, @Burrowing, @Creeper, @Beetle, @Gorosh, @Grizzle, @Eviscerator, @Okthor, @Anubshiah, @Hedrum); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@DredgeWorm, @DeepStinger, @DarkScreecher, @Burrowing, @Creeper, @Beetle, @Gorosh, @Grizzle, @Eviscerator, @Okthor, @Anubshiah, @Hedrum) 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 +(@DredgeWorm,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@DeepStinger,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@DarkScreecher,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Burrowing,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Creeper,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Beetle,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Gorosh,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Grizzle,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Eviscerator,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Okthor,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Anubshiah,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@Hedrum,0,0,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,21,100,0,0,0,0,0,0,"@DredgeWorm - Just summoned - Start Attack"), +(@DredgeWorm,0,1,0,0,0,100,0,3000,4000,10000,15000,11,14535,0,0,0,0,0,5,0,0,0,0,0,0,0,"Dredge Worm - In Combat - Cast Dredge Sickness"), +(@DredgeWorm,0,2,0,0,0,100,0,4000,4000,8000,8000,11,13298,32,0,0,0,0,5,0,0,0,0,0,0,0,"Dredge Worm - In Combat - Cast Poison"), +(@DredgeWorm,0,3,0,0,0,100,0,5000,6000,3000,3000,11,6917,0,0,0,0,0,5,0,0,0,0,0,0,0,"Dredge Worm - In Combat - Cast Venom Spit)"), +(@DeepStinger,0,1,0,0,0,100,0,2000,2000,6000,8000,11,14534,0,0,0,0,0,5,0,0,0,0,0,0,0,"Deep Stinger - In Combat - Cast Barbed Sting"), +(@DeepStinger,0,2,0,0,0,100,0,4000,4000,4000,4000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0,"Deep Stinger - In Combat - Cast Cleave"), +(@DarkScreecher,0,1,0,0,0,100,0,2000,2000,6000,8000,11,14538,0,0,0,0,0,5,0,0,0,0,0,0,0,"Dark Screecher - In Combat - Cast Aural Shock"), +(@DarkScreecher,0,2,0,0,0,100,0,4000,4000,9000,10000,11,8281,0,0,0,0,0,5,0,0,0,0,0,0,0,"Dark Screecher - In Combat - Cast Sonic Burst"), +(@Burrowing,0,1,0,0,0,100,0,2000,2000,30000,30000,11,14533,0,0,0,0,0,5,0,0,0,0,0,0,0,"Burrowing Thundersnout - In Combat - Cast Disjonction"), +(@Burrowing,0,2,0,0,0,100,0,3000,3000,3000,3000,11,15611,0,0,0,0,0,5,0,0,0,0,0,0,0,"Burrowing Thundersnout - In Combat - Cast Lizard Bolt"), +(@Burrowing,0,3,0,0,0,100,0,5000,5000,8000,8000,11,15548,0,0,0,0,0,5,0,0,0,0,0,0,0,"Burrowing Thundersnout - In Combat - Cast Thunderclap"), +(@Creeper,0,1,0,0,0,100,0,2000,2000,20000,20000,11,14532,0,0,0,0,0,5,0,0,0,0,0,0,0,"Cave Creeper - In Combat - Cast Creeper Venom"), +(@Creeper,0,2,0,0,0,100,0,4000,4000,8000,8000,11,745,0,0,0,0,0,2,0,0,0,0,0,0,0,"Cave Creeper - In Combat - Cast Web"), +(@Creeper,0,3,0,0,0,100,0,5000,6000,4000,8000,11,15656,0,0,0,0,0,5,0,0,0,0,0,0,0,"Cave Creeper - In Combat - Cast Poisonous Stab"), +(@Beetle,0,1,0,0,0,100,0,2000,2000,30000,30000,11,14539,0,0,0,0,0,2,0,0,0,0,0,0,0,"Borer Beetle - In Combat - Cast Putrid Enzyme"), +(@Beetle,0,2,0,0,0,100,0,4000,4000,15000,20000,11,6016,0,0,0,0,0,5,0,0,0,0,0,0,0,"Borer Beetle - In Combat - Cast Pierce Armor"), +(@Gorosh,0,1,0,0,0,100,0,2000,4000,6000,8000,11,13736,0,0,0,0,0,2,0,0,0,0,0,0,0,"Gorosh the Dervish - In Combat - Cast Whirlwind"), +(@Gorosh,0,2,0,0,0,100,0,4000,6000,5000,6000,11,15708,0,0,0,0,0,2,0,0,0,0,0,0,0,"Gorosh the Dervish - In Combat - Cast Mortal Strike"), +(@Gorosh,0,3,0,0,0,100,1,10000,15000,10000,15000,11,21049,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gorosh the Dervish - In Combat - Cast Bloodlust"), +(@Grizzle,0,1,0,0,0,100,0,2000,3000,4000,5000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grizzle the Dervish - In Combat - Cast Cleave"), +(@Grizzle,0,2,0,0,0,100,0,4000,5000,8000,9000,11,6524,0,0,0,0,0,2,0,0,0,0,0,0,0,"Grizzle the Dervish - In Combat - Cast Ground Tremor"), +(@Grizzle,0,3,0,0,0,100,1,10000,15000,10000,15000,11,8269,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzle the Dervish - In Combat - Cast Frenzy"), +(@Grizzle,0,4,0,0,0,100,0,6000,7000,6000,9000,11,24458,0,0,0,0,0,5,0,0,0,0,0,0,0,"Grizzle the Dervish - In Combat - Cast Shadow Shock"), +(@Eviscerator,0,1,0,0,0,100,0,2000,3000,14000,15000,11,14331,0,0,0,0,0,2,0,0,0,0,0,0,0,"Eviscerator - In Combat - Cast Vicious Rend"), +(@Eviscerator,0,2,0,0,0,100,0,4000,5000,4000,5000,11,15245,0,0,0,0,0,2,0,0,0,0,0,0,0,"Eviscerator - In Combat - Cast Shadow Bolt Volley"), +(@Eviscerator,0,3,0,0,0,100,0,5000,6000,15000,16000,11,8269,0,0,0,0,0,1,0,0,0,0,0,0,0,"Eviscerator - In Combat - Cast Anti-Magic Shield"), +(@Okthor,0,1,0,0,0,100,0,2000,3000,4000,5000,11,15254,0,0,0,0,0,2,0,0,0,0,0,0,0,"Okthor - In Combat - Cast Arcane Bolt"), +(@Okthor,0,2,0,0,0,100,0,5000,6000,6000,7000,11,15453,0,0,0,0,0,2,0,0,0,0,0,0,0,"Okthor - In Combat - Cast Arcane Explosion"), +(@Okthor,0,3,0,0,0,100,0,9000,11000,11000,12000,11,13323,0,0,0,0,0,5,0,0,0,0,0,0,0,"Okthor - In Combat - Cast Polymorph"), +(@Okthor,0,4,0,0,0,100,0,7000,8000,9000,10000,11,13747,0,0,0,0,0,5,0,0,0,0,0,0,0,"Okthor - In Combat - Cast Slow"), +(@Anubshiah,0,1,0,0,0,100,0,5000,7000,10000,11000,11,8994,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Banish"), +(@Anubshiah,0,2,0,0,0,100,0,2000,3000,8000,9000,11,15470,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Curse of Tongues"), +(@Anubshiah,0,3,0,0,0,100,0,4000,5000,13000,15000,11,12493,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Curse of Weakness"), +(@Anubshiah,0,4,0,0,0,100,0,1000,1000,300000,300000,11,13787,0,0,0,0,0,1,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Demon Armor"), +(@Anubshiah,0,5,0,0,0,100,0,7000,8000,10000,13000,11,15471,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Enveloping Web"), +(@Anubshiah,0,6,0,0,0,100,0,3000,4000,4000,5000,11,15472,0,0,0,0,0,5,0,0,0,0,0,0,0,"Anubshiah - In Combat - Cast Shadow Bolt"), +(@Hedrum,0,1,0,0,0,100,0,2000,2000,15000,18000,11,15475,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hedrum - In Combat - Cast Baneful Poison"), +(@Hedrum,0,2,0,0,0,100,0,7000,9000,15000,18000,11,3609,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hedrum - In Combat - Cast Paralyzing Poison"), +(@Hedrum,0,3,0,0,0,100,1,10000,15000,20000,25000,11,15474,0,0,0,0,0,5,0,0,0,0,0,0,0,"Hedrum - In Combat - Cast Web Explosion"); + +UPDATE `creature_template` SET `unit_flags`=131904 WHERE `entry`=10096; +DELETE FROM `creature_template_addon` WHERE `entry` IN (@DeepStinger); +INSERT INTO `creature_template_addon` (`entry`, `bytes2`, `auras`) VALUES +(@DeepStinger, 1, '8601'); + +UPDATE `creature_text` SET `groupid`=4, `id`=1 WHERE `BroadcastTextId`=5441 AND `entry`=10096; +UPDATE `creature_text` SET `groupid`=0, `id`=1 WHERE `BroadcastTextId`=5442 AND `entry`=10096; +UPDATE `creature_text` SET `groupid`=1, `id`=1 WHERE `BroadcastTextId`=5443 AND `entry`=10096; +UPDATE `creature_text` SET `groupid`=5, `id`=1 WHERE `BroadcastTextId`=5444 AND `entry`=10096; +UPDATE `creature_text` SET `groupid`=2, `id`=1 WHERE `BroadcastTextId`=5445 AND `entry`=10096; +UPDATE `creature_text` SET `groupid`=3, `id`=1 WHERE `BroadcastTextId`=5446 AND `entry`=10096; +UPDATE `creature_text` SET `id`=0 WHERE `entry`=10096; From a3dbb0dd9caa1af61ff4e313ef1b75a98c17e30b Mon Sep 17 00:00:00 2001 From: Dr-J Date: Wed, 23 Sep 2015 19:21:59 +0100 Subject: [PATCH 053/524] DB/Loot: Netherwing Relic Netherwing Relic should have 100% chance to drop from dragonmaw transporter if player is on quest. --- sql/updates/world/2015_09_23_04_world.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2015_09_23_04_world.sql diff --git a/sql/updates/world/2015_09_23_04_world.sql b/sql/updates/world/2015_09_23_04_world.sql new file mode 100644 index 0000000000..e44acde69d --- /dev/null +++ b/sql/updates/world/2015_09_23_04_world.sql @@ -0,0 +1 @@ +UPDATE `creature_loot_template` SET `Chance`=100 WHERE `Entry`=23188 AND `Item`=32509; From 722a22801b53a9dfde25a05c6c66b03cc6ae36d7 Mon Sep 17 00:00:00 2001 From: unknown-8H3D Date: Wed, 23 Sep 2015 21:32:57 +0300 Subject: [PATCH 054/524] Fix typo --- src/server/worldserver/worldserver.conf.dist | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index aeeb90a048..022c38a6ff 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -118,9 +118,9 @@ CharacterDatabase.WorkerThreads = 1 # WorldDatabase.SynchThreads # CharacterDatabase.SynchThreads # Description: The amount of MySQL connections spawned to handle. -# Default: 1 - (LoginDatabase.WorkerThreads) -# 1 - (WorldDatabase.WorkerThreads) -# 2 - (CharacterDatabase.WorkerThreads) +# Default: 1 - (LoginDatabase.SynchThreads) +# 1 - (WorldDatabase.SynchThreads) +# 2 - (CharacterDatabase.SynchThreads) LoginDatabase.SynchThreads = 1 WorldDatabase.SynchThreads = 1 From 3c188ac10e48f448489b7d9067d56a60e107c1ca Mon Sep 17 00:00:00 2001 From: pete318 Date: Thu, 17 Sep 2015 23:57:11 +0100 Subject: [PATCH 055/524] Combat with distant creatures Iterate creatures in combat with players during map update, and also visit their cells if greater than player visibility distance away. --- src/server/game/Maps/Map.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 22cc1f1bbd..b50099b978 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -678,6 +678,26 @@ void Map::Update(const uint32 t_diff) player->Update(t_diff); VisitNearbyCellsOf(player, grid_object_update, world_object_update); + + // Handle updates for creatures in combat with player and are more than 60 yards away + if (player->IsInCombat()) + { + std::vector updateList; + HostileReference* ref = player->getHostileRefManager().getFirst(); + + while (ref) + { + if (Unit* unit = ref->GetSource()->GetOwner()) + if (unit->ToCreature() && unit->GetMapId() == player->GetMapId() && !unit->IsWithinDistInMap(player, GetVisibilityRange(), false)) + updateList.push_back(unit->ToCreature()); + + ref = ref->next(); + } + + // Process deferred update list for player + for (Creature* c : updateList) + VisitNearbyCellsOf(c, grid_object_update, world_object_update); + } } // non-player active objects, increasing iterator in the loop in case of object removal From 38b3ea4a0780db4d73aefa6775698d20d8d7f1a5 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 23 Sep 2015 22:59:43 +0200 Subject: [PATCH 056/524] DB/Creature: Misc formations fixes By Malcrom. --- sql/updates/world/2015_09_23_05_world.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 sql/updates/world/2015_09_23_05_world.sql diff --git a/sql/updates/world/2015_09_23_05_world.sql b/sql/updates/world/2015_09_23_05_world.sql new file mode 100644 index 0000000000..1347b79a61 --- /dev/null +++ b/sql/updates/world/2015_09_23_05_world.sql @@ -0,0 +1,9 @@ +-- +UPDATE `creature_formations` SET `point_1`=2, `point_2`=8 WHERE `leaderGUID`=126083 AND `memberGUID`<>126083; +UPDATE `creature_formations` SET `point_1`=1, `point_2`=5 WHERE `leaderGUID`=201700 AND `memberGUID`<>201700; +UPDATE `creature_formations` SET `point_1`=5, `point_2`=11 WHERE `leaderGUID`=202823 AND `memberGUID`<>202823; +UPDATE `creature_formations` SET `point_1`=1, `point_2`=8 WHERE `leaderGUID`=126981 AND `memberGUID`<>126981; +UPDATE `creature_formations` SET `point_1`=3, `point_2`=7 WHERE `leaderGUID`=131931 AND `memberGUID`<>131931; +UPDATE `creature_formations` SET `point_1`=1, `point_2`=5 WHERE `leaderGUID`=131920 AND `memberGUID`<>131920; +UPDATE `creature_formations` SET `point_1`=1, `point_2`=5 WHERE `leaderGUID`=131926 AND `memberGUID`<>131926; +UPDATE `creature_formations` SET `point_1`=1, `point_2`=10 WHERE `leaderGUID`=202231 AND `memberGUID`<>202231; From 6fd289dd2e3f36c8e795ad192ded0c6eac3d4815 Mon Sep 17 00:00:00 2001 From: Pirricli Date: Wed, 23 Sep 2015 23:11:50 +0200 Subject: [PATCH 057/524] minor typo --- src/server/worldserver/worldserver.conf.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index aeeb90a048..60d90bdfc5 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2997,7 +2997,7 @@ AuctionHouseBot.Items.Amount.Orange = 0 AuctionHouseBot.Items.Amount.Yellow = 0 # -# AustionHouseBot.Class.* +# AuctionHouseBot.Class.* # Description: Here you can set the class of items you prefer to be show on AH # These value are sorted by preference, from 0 (disabled) to 10 (max. preference) # Default: Consumable: 6 From 3b164c5047dabd8d40c08a0309ef7d7fd121a43a Mon Sep 17 00:00:00 2001 From: Carbenium Date: Thu, 24 Sep 2015 00:12:05 +0200 Subject: [PATCH 058/524] Build: Fix non-pch build after dcb7082277447c21b11c4a1d59f105fa342c172e --- src/server/game/Grids/GridDefines.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h index 3572fff63d..8eae906ba8 100644 --- a/src/server/game/Grids/GridDefines.h +++ b/src/server/game/Grids/GridDefines.h @@ -20,6 +20,7 @@ #define TRINITY_GRIDDEFINES_H #include "Common.h" +#include "ObjectGuid.h" #include "NGrid.h" #include From e1b322cda19b2e8fa0321dee8e2c27e4a6bd1628 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 24 Sep 2015 00:38:17 +0200 Subject: [PATCH 059/524] DB/Creature: More Naxx pathing update By Malcrom. --- sql/updates/world/2015_09_24_00_world.sql | 209 ++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 sql/updates/world/2015_09_24_00_world.sql diff --git a/sql/updates/world/2015_09_24_00_world.sql b/sql/updates/world/2015_09_24_00_world.sql new file mode 100644 index 0000000000..5047e4c44b --- /dev/null +++ b/sql/updates/world/2015_09_24_00_world.sql @@ -0,0 +1,209 @@ +-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT' +SET @NPC := 127640; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2556.952,`position_y`=-3294.904,`position_z`=267.5933 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2556.952,`position_y`=-3294.904,`position_z`=267.5933 WHERE `guid` IN (127685,127686,127656,127657); +DELETE FROM `creature_addon` WHERE `guid` IN (127685,127686,127656,127657); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(127685,@PATH,0,0,1,0, ''), (127686,@PATH,0,0,1,0, ''), (127656,@PATH,0,0,1,0, ''), (127657,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2556.952,-3294.904,267.5933,0,0,0,0,100,0), +(@PATH,2,2556.655,-3273.629,266.7731,0,0,0,0,100,0), +(@PATH,3,2556.505,-3258.446,260.2637,0,0,0,0,100,0), +(@PATH,4,2556.29,-3229.774,245.2207,0,0,0,0,100,0), +(@PATH,5,2555.99,-3205.854,240.5267,0,0,0,0,100,0), +(@PATH,6,2555.881,-3183.735,240.5253,0,0,0,0,100,0), +(@PATH,7,2556.055,-3164.447,240.5253,0,0,0,0,100,0), +(@PATH,8,2556.121,-3141.804,240.5253,0,0,0,0,100,0), +(@PATH,9,2556.055,-3164.447,240.5253,0,0,0,0,100,0), +(@PATH,10,2555.881,-3183.735,240.5253,0,0,0,0,100,0), +(@PATH,11,2555.99,-3205.854,240.5267,0,0,0,0,100,0), +(@PATH,12,2556.29,-3229.774,245.2207,0,0,0,0,100,0), +(@PATH,13,2556.505,-3258.446,260.2637,0,0,0,0,100,0), +(@PATH,14,2556.655,-3273.629,266.7731,0,0,0,0,100,0), +(@PATH,15,2556.952,-3294.904,267.5933,0,0,0,0,100,0), +(@PATH,16,2556.716,-3318.195,267.593,0,0,0,0,100,0), +(@PATH,17,2556.767,-3335.356,267.593,0,0,0,0,100,0), +(@PATH,18,2556.716,-3318.195,267.593,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127640); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127640,127640,0,0,2,0,0), +(127640,127685,3,360,2,8,17), +(127640,127686,3,40,2,8,17), +(127640,127656,3,320,2,8,17), +(127640,127657,3,260,2,8,17); + +-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT' +SET @NPC := 127641; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2540.547,`position_y`=-3209.821,`position_z`=240.5256 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2540.547,`position_y`=-3209.821,`position_z`=240.5256 WHERE `guid` IN (127687,127688,127658,127659); +DELETE FROM `creature_addon` WHERE `guid` IN (127687,127688,127658,127659); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(127687,@PATH,0,0,1,0, ''), (127688,@PATH,0,0,1,0, ''), (127658,@PATH,0,0,1,0, ''), (127659,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2540.547,-3209.821,240.5256,0,0,0,0,100,0), +(@PATH,2,2550.174,-3195.296,240.5253,0,0,0,0,100,0), +(@PATH,3,2550.015,-3178.325,240.5252,0,0,0,0,100,0), +(@PATH,4,2542.807,-3161.292,240.5246,0,0,0,0,100,0), +(@PATH,5,2531.76,-3145.814,240.5244,0,0,0,0,100,0), +(@PATH,6,2526.761,-3124.435,240.5252,0,0,0,0,100,0), +(@PATH,7,2535.071,-3107.707,240.5244,0,0,0,0,100,0), +(@PATH,8,2553.146,-3099.002,240.5252,0,0,0,0,100,0), +(@PATH,9,2568.556,-3098.702,240.5253,0,0,0,0,100,0), +(@PATH,10,2586.523,-3091.121,240.5253,0,0,0,0,100,0), +(@PATH,11,2599.675,-3076.474,240.5264,0,0,0,0,100,0), +(@PATH,12,2599.267,-3055.494,240.5239,0,0,0,0,100,0), +(@PATH,13,2618.495,-3035.821,240.5235,0,0,0,0,100,0), +(@PATH,14,2634.81,-3052.702,240.5237,0,0,0,0,100,0), +(@PATH,15,2651.288,-3069.151,240.5216,0,0,0,0,100,0), +(@PATH,16,2628.244,-3086.696,240.5232,0,0,0,0,100,0), +(@PATH,17,2608.684,-3085.287,240.5264,0,0,0,0,100,0), +(@PATH,18,2595.005,-3098.484,240.5253,0,0,0,0,100,0), +(@PATH,19,2587.623,-3116.573,240.5246,0,0,0,0,100,0), +(@PATH,20,2586.39,-3131.935,240.525,0,0,0,0,100,0), +(@PATH,21,2577.873,-3150.335,240.524,0,0,0,0,100,0), +(@PATH,22,2565.028,-3163.529,240.5253,0,0,0,0,100,0), +(@PATH,23,2559.751,-3177.576,240.5253,0,0,0,0,100,0), +(@PATH,24,2559.432,-3195.028,240.5254,0,0,0,0,100,0), +(@PATH,25,2570.551,-3210.158,240.5293,0,0,0,0,100,0), +(@PATH,26,2555.933,-3210.18,240.5274,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127641); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127641,127641,0,0,2,0,0), +(127641,127687,3,360,2,0,0), +(127641,127688,3,40,2,0,0), +(127641,127658,3,320,2,0,0), +(127641,127659,3,260,2,0,0); + +-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT' +SET @NPC := 127642; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2781.675,`position_y`=-2973.126,`position_z`=240.5271 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2781.675,`position_y`=-2973.126,`position_z`=240.5271 WHERE `guid` IN (127689,127690,127660,127661); +DELETE FROM `creature_addon` WHERE `guid` IN (127689,127690,127660,127661); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(127689,@PATH,0,0,1,0, ''), (127690,@PATH,0,0,1,0, ''), (127660,@PATH,0,0,1,0, ''), (127661,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2781.675,-2973.126,240.5271,0,0,0,0,100,0), +(@PATH,2,2781.545,-2987.27,240.5265,0,0,0,0,100,0), +(@PATH,3,2781.296,-2999.196,240.5251,0,0,0,0,100,0), +(@PATH,4,2761.818,-2991.876,240.525,0,0,0,0,100,0), +(@PATH,5,2741.577,-2996.512,240.5255,0,0,0,0,100,0), +(@PATH,6,2720.587,-3007.503,240.5255,0,0,0,0,100,0), +(@PATH,7,2702.402,-3013.772,240.5244,0,0,0,0,100,0), +(@PATH,8,2678.602,-3021.83,240.5253,0,0,0,0,100,0), +(@PATH,9,2662.359,-3033.787,240.5253,0,0,0,0,100,0), +(@PATH,10,2656.579,-3044.628,240.5232,0,0,0,0,100,0), +(@PATH,11,2654.518,-3070.607,240.5216,0,0,0,0,100,0), +(@PATH,12,2642.806,-3082.523,240.5241,0,0,0,0,100,0), +(@PATH,13,2625.915,-3067.382,240.5231,0,0,0,0,100,0), +(@PATH,14,2613.159,-3055.652,240.5243,0,0,0,0,100,0), +(@PATH,15,2603.647,-3046.96,240.5242,0,0,0,0,100,0), +(@PATH,16,2613.084,-3036.567,240.5217,0,0,0,0,100,0), +(@PATH,17,2640.296,-3028.944,240.525,0,0,0,0,100,0), +(@PATH,18,2652.006,-3024.45,240.5253,0,0,0,0,100,0), +(@PATH,19,2664.795,-3009.59,240.5253,0,0,0,0,100,0), +(@PATH,20,2670.619,-2990.552,240.5244,0,0,0,0,100,0), +(@PATH,21,2679.347,-2964.029,240.5253,0,0,0,0,100,0), +(@PATH,22,2697.98,-2955.501,240.5241,0,0,0,0,100,0), +(@PATH,23,2719.132,-2962.616,240.5251,0,0,0,0,100,0), +(@PATH,24,2741.907,-2976.874,240.5253,0,0,0,0,100,0), +(@PATH,25,2760.453,-2981.653,240.5253,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127642); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127642,127642,0,0,2,0,0), +(127642,127689,3,360,2,0,0), +(127642,127690,3,40,2,0,0), +(127642,127660,3,320,2,0,0), +(127642,127661,3,260,2,0,0); + +-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT' +SET @NPC := 127645; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2584.613,`position_y`=-3100.685,`position_z`=240.5253 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2584.613,`position_y`=-3100.685,`position_z`=240.5253 WHERE `guid` IN (127691,127692,127664,127665); +DELETE FROM `creature_addon` WHERE `guid` IN (127691,127692,127664,127665); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(127691,@PATH,0,0,1,0, ''), (127692,@PATH,0,0,1,0, ''), (127664,@PATH,0,0,1,0, ''), (127665,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2584.613,-3100.685,240.5253,0,0,0,0,100,0), +(@PATH,2,2601.56,-3083.452,240.5258,0,0,0,0,100,0), +(@PATH,3,2629.143,-3055.421,240.5237,0,0,0,0,100,0), +(@PATH,4,2650.178,-3034.592,240.526,0,0,0,0,100,0), +(@PATH,5,2667.962,-3017.14,240.5253,0,0,0,0,100,0), +(@PATH,6,2680.883,-3004.51,240.5252,0,0,0,0,100,0), +(@PATH,7,2699.352,-2986.865,240.5253,0,0,0,0,100,0), +(@PATH,8,2680.883,-3004.51,240.5252,0,0,0,0,100,0), +(@PATH,9,2667.962,-3017.14,240.5253,0,0,0,0,100,0), +(@PATH,10,2650.178,-3034.592,240.526,0,0,0,0,100,0), +(@PATH,11,2629.143,-3055.421,240.5237,0,0,0,0,100,0), +(@PATH,12,2601.56,-3083.452,240.5258,0,0,0,0,100,0), +(@PATH,13,2584.613,-3100.685,240.5253,0,0,0,0,100,0), +(@PATH,14,2570.169,-3114.794,240.5253,0,0,0,0,100,0), +(@PATH,15,2556.747,-3128.429,240.5253,0,0,0,0,100,0), +(@PATH,16,2570.169,-3114.794,240.5253,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127645); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127645,127645,0,0,2,0,0), +(127645,127691,3,360,2,7,15), +(127645,127692,3,40,2,7,15), +(127645,127664,3,320,2,7,15), +(127645,127665,3,260,2,7,15); + +-- Pathing for Death Knight Captain Entry: 16145 'TDB FORMAT' +SET @NPC := 127649; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2871.322,`position_y`=-2985.748,`position_z`=267.593 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2871.322,`position_y`=-2985.748,`position_z`=267.593 WHERE `guid` IN (127701,127702,127670,127671); +DELETE FROM `creature_addon` WHERE `guid` IN (127701,127702,127670,127671); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(127701,@PATH,0,0,1,0, ''), (127702,@PATH,0,0,1,0, ''), (127670,@PATH,0,0,1,0, ''), (127671,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,2871.322,-2985.748,267.593,0,0,0,0,100,0), +(@PATH,2,2852.31,-2985.821,267.593,0,0,0,0,100,0), +(@PATH,3,2838.662,-2985.802,264.0277,0,0,0,0,100,0), +(@PATH,4,2807.427,-2985.919,248.8516,0,0,0,0,100,0), +(@PATH,5,2784.644,-2986.206,240.5265,0,0,0,0,100,0), +(@PATH,6,2760.957,-2986.261,240.5249,0,0,0,0,100,0), +(@PATH,7,2735.987,-2986.227,240.5253,0,0,0,0,100,0), +(@PATH,8,2716.594,-2986.268,240.5253,0,0,0,0,100,0), +(@PATH,9,2700.477,-2986.242,240.525,0,0,0,0,100,0), +(@PATH,10,2716.594,-2986.268,240.5253,0,0,0,0,100,0), +(@PATH,11,2735.987,-2986.227,240.5253,0,0,0,0,100,0), +(@PATH,12,2760.708,-2986.261,240.5253,0,0,0,0,100,0), +(@PATH,13,2784.644,-2986.206,240.5265,0,0,0,0,100,0), +(@PATH,14,2807.427,-2985.919,248.8516,0,0,0,0,100,0), +(@PATH,15,2838.662,-2985.802,264.0277,0,0,0,0,100,0), +(@PATH,16,2852.31,-2985.821,267.593,0,0,0,0,100,0), +(@PATH,17,2871.322,-2985.748,267.593,0,0,0,0,100,0), +(@PATH,18,2893.314,-2985.45,267.593,0,0,0,0,100,0), +(@PATH,19,2908.467,-2985.152,267.5937,0,0,0,0,100,0), +(@PATH,20,2893.314,-2985.45,267.593,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127649); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127649,127649,0,0,2,0,0), +(127649,127701,3,360,2,9,19), +(127649,127702,3,40,2,9,19), +(127649,127670,3,320,2,9,19), +(127649,127671,3,260,2,9,19); From ae0a01bd9f1bf41125ec2daecee78419e01f5f8d Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 24 Sep 2015 00:59:03 +0200 Subject: [PATCH 060/524] DB/Creature: More Naxx pathing update By Malcrom --- sql/updates/world/2015_09_24_01_world.sql | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 sql/updates/world/2015_09_24_01_world.sql diff --git a/sql/updates/world/2015_09_24_01_world.sql b/sql/updates/world/2015_09_24_01_world.sql new file mode 100644 index 0000000000..9bf41b75a7 --- /dev/null +++ b/sql/updates/world/2015_09_24_01_world.sql @@ -0,0 +1,24 @@ +-- +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127640); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127640,127640,0,0,2,0,0), +(127640,127685,3,360,2,0,0), +(127640,127686,3,40,2,0,0), +(127640,127656,3,320,2,0,0), +(127640,127657,3,260,2,0,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127645); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127645,127645,0,0,2,0,0), +(127645,127691,3,360,2,0,0), +(127645,127692,3,40,2,0,0), +(127645,127664,3,320,2,0,0), +(127645,127665,3,260,2,0,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127649); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127649,127649,0,0,2,0,0), +(127649,127701,3,360,2,0,0), +(127649,127702,3,40,2,0,0), +(127649,127670,3,320,2,0,0), +(127649,127671,3,260,2,0,0); From facb6569201b5d2ea950b66fa72374d9ad5c4a4c Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 24 Sep 2015 02:46:51 +0200 Subject: [PATCH 061/524] DB/Misc: Multiple DB Fixes Add SAI to Drakuru Raptor to fix vehicle behavior Add animation for Steam Burst Add Equipments for 7th Legion Infantryman Add a missing aura for Risen Gryphon Rider Fix a DB error --- sql/updates/world/2015_09_24_02_world.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 sql/updates/world/2015_09_24_02_world.sql diff --git a/sql/updates/world/2015_09_24_02_world.sql b/sql/updates/world/2015_09_24_02_world.sql new file mode 100644 index 0000000000..a02d7b25d8 --- /dev/null +++ b/sql/updates/world/2015_09_24_02_world.sql @@ -0,0 +1,19 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `Entry` IN (29698, 26043); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (29698, 26043) 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 +(29698,0,0,0,4,0,100,0,0,0,0,0,11,54487,0,0,0,0,0,2,0,0,0,0,0,0,0,'Drakuru Raptor - On aggro - Cast Jump Attack'), +(26043,0,0,0,1,0,100,0,2000,8000,8000,15000,11,46400,0,0,0,0,0,1,0,0,0,0,0,0,0,'Steam Burst - OOC - Cast Steam Weapon'); + +UPDATE `creature_equip_template` SET `ItemID1`=21573, `ItemID2`=143 WHERE `creatureid`=27160; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `Entry`=27375; + +DELETE FROM `creature_template_addon` WHERE `entry`= 27268; +INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES (27268,0,0,1,48553); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (13) AND `SourceEntry`=48551; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`, `NegativeCondition`) VALUES +(13, 1, 48551, 0, 31, 3, 27375, 0, 0, '', 'Vengeful Stormhammer only on Risen Gryphon Rider Target', 0); + +DELETE FROM `creature_addon` WHERE `guid`= 86097; +DELETE FROM `waypoint_data` WHERE `id`= 860970; From f84655cac7e2fd669c85b1c7eca84aa92ad271b9 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 24 Sep 2015 14:46:16 +0200 Subject: [PATCH 062/524] Core/Creature: Better formations implementation By Malcrom --- src/server/game/Entities/Creature/CreatureGroups.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index b622618de5..f29e896f05 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -227,15 +227,8 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z) continue; if (itr->second->point_1) - { if (m_leader->GetCurrentWaypointID() == itr->second->point_1 - 1 || m_leader->GetCurrentWaypointID() == itr->second->point_2 - 1) - { - if (itr->second->follow_angle > float(M_PI)) - itr->second->follow_angle = itr->second->follow_angle - float(M_PI); - else - itr->second->follow_angle = itr->second->follow_angle + float(M_PI); - } - } + itr->second->follow_angle = float(M_PI) * 2 - itr->second->follow_angle; float angle = itr->second->follow_angle; float dist = itr->second->follow_dist; From e649ec97701041c7cc26a97101a30782256562b7 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 24 Sep 2015 14:49:31 +0200 Subject: [PATCH 063/524] DB/Creature: Some formations fixes By Malcrom --- sql/updates/world/2015_09_24_03_world.sql | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 sql/updates/world/2015_09_24_03_world.sql diff --git a/sql/updates/world/2015_09_24_03_world.sql b/sql/updates/world/2015_09_24_03_world.sql new file mode 100644 index 0000000000..ea71a59cf1 --- /dev/null +++ b/sql/updates/world/2015_09_24_03_world.sql @@ -0,0 +1,24 @@ +-- +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127649); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127649,127649,0,0,2,0,0), +(127649,127701,3,360,2,9,19), +(127649,127702,3,40,2,9,19), +(127649,127670,3,320,2,9,19), +(127649,127671,3,260,2,9,19); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127645); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127645,127645,0,0,2,0,0), +(127645,127691,3,360,2,7,15), +(127645,127692,3,40,2,7,15), +(127645,127664,3,320,2,7,15), +(127645,127665,3,260,2,7,15); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127640); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(127640,127640,0,0,2,0,0), +(127640,127685,3,360,2,8,17), +(127640,127686,3,40,2,8,17), +(127640,127656,3,320,2,8,17), +(127640,127657,3,260,2,8,17); From d57193df444b719757ae1da4a5f19e204074f6ae Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 13 Sep 2015 22:02:38 +0200 Subject: [PATCH 064/524] Core/Creature: Add facilities to the Creature class to allow setting an automated, periodic pulse that puts every player in the zone in combat and on the creature's threat list. Scripts/BossAI: Set the BossAI parent class to make use of this in its _EnterCombat and _Reset methods. Combat pulses happen every 5 seconds. --- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 2 ++ .../game/Entities/Creature/Creature.cpp | 21 ++++++++++++++++++- src/server/game/Entities/Creature/Creature.h | 10 +++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 8e2a82dbfd..7b145268d2 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -470,6 +470,7 @@ void BossAI::_Reset() if (!me->IsAlive()) return; + me->SetCombatPulseDelay(0); me->ResetLootMode(); events.Reset(); summons.DespawnAll(); @@ -500,6 +501,7 @@ void BossAI::_EnterCombat() instance->SetBossState(_bossId, IN_PROGRESS); } + me->SetCombatPulseDelay(5); me->setActive(true); DoZoneInCombat(); ScheduleTasks(); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 7fe3628f89..d3cfff7422 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -138,7 +138,7 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(), m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0), m_lootRecipient(), m_lootRecipientGroup(0), _skinner(), _pickpocketLootRestore(0), m_corpseRemoveTime(0), m_respawnTime(0), -m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_reactState(REACT_AGGRESSIVE), +m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_combatPulseTime(0), m_combatPulseDelay(0), m_reactState(REACT_AGGRESSIVE), m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(NULL), m_creatureData(NULL), m_waypointID(0), m_path_id(0), m_formation(NULL) @@ -539,10 +539,29 @@ void Creature::Update(uint32 diff) LastCharmerGUID.Clear(); } + // if periodic combat pulse is enabled and we are both in combat and in a dungeon, do this now + if (m_combatPulseDelay > 0 && IsInCombat() && GetMap()->IsDungeon()) + { + if (diff > m_combatPulseTime) + m_combatPulseTime = 0; + else + m_combatPulseTime -= diff; + + if (m_combatPulseTime == 0) + { + if (AI()) + AI()->DoZoneInCombat(); + else + SetInCombatWithZone(); + m_combatPulseTime = m_combatPulseDelay * IN_MILLISECONDS; + } + } + if (!IsInEvadeMode() && IsAIEnabled) { // do not allow the AI to be changed during update m_AI_locked = true; + i_AI->UpdateAI(diff); m_AI_locked = false; } diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 3e38106377..79832b70f5 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -601,6 +601,14 @@ class Creature : public Unit, public GridObject, public MapObject float GetRespawnRadius() const { return m_respawnradius; } void SetRespawnRadius(float dist) { m_respawnradius = dist; } + uint32 GetCombatPulseDelay() const { return m_combatPulseDelay; } + void SetCombatPulseDelay(uint32 delay) // (secs) interval at which the creature pulses the entire zone into combat (only works in dungeons) + { + m_combatPulseDelay = delay; + if (m_combatPulseTime == 0 || m_combatPulseTime > delay) + m_combatPulseTime = delay; + } + uint32 m_groupLootTimer; // (msecs)timer used for group loot uint32 lootingGroupLowGUID; // used to find group which is looting corpse @@ -686,6 +694,8 @@ class Creature : public Unit, public GridObject, public MapObject uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning uint32 m_corpseDelay; // (secs) delay between death and corpse disappearance float m_respawnradius; + uint32 m_combatPulseTime; // (msecs) remaining time for next zone-in-combat pulse + uint32 m_combatPulseDelay; // (secs) how often the creature puts the entire zone in combat (only works in dungeons) ReactStates m_reactState; // for AI, not charmInfo void RegenerateMana(); From f446538cb16dad3dcd04e79aebc944feefc16275 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 13 Sep 2015 03:29:28 +0200 Subject: [PATCH 065/524] Clean up SmartAI::MoveInLineOfSight. Remove tons of duplicate logic and forward to CreatureAI::MoveInLineOfSight instead of using its own (incorrect) implementation. Move the removal of the 'distracted' state from SmartAI to UnitAI.cpp. Fixes and closes #7197 and #15482. --- src/server/game/AI/CoreAI/UnitAI.cpp | 8 +++++ src/server/game/AI/SmartScripts/SmartAI.cpp | 36 ++------------------- 2 files changed, 11 insertions(+), 33 deletions(-) diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index 5aa6ea8ea7..f0d9d34db6 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -29,7 +29,15 @@ void UnitAI::AttackStart(Unit* victim) { if (victim && me->Attack(victim, true)) + { + // Clear distracted state on attacking + if (me->HasUnitState(UNIT_STATE_DISTRACTED)) + { + me->ClearUnitState(UNIT_STATE_DISTRACTED); + me->GetMotionMaster()->Clear(); + } me->GetMotionMaster()->MoveChase(victim); + } } void UnitAI::AttackStartCaster(Unit* victim, float dist) diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 1a51bb2d89..f30c992f3d 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -453,45 +453,15 @@ void SmartAI::MoveInLineOfSight(Unit* who) GetScript()->OnMoveInLineOfSight(who); - if (me->HasReactState(REACT_PASSIVE) || AssistPlayerInCombat(who)) + if (AssistPlayerInCombat(who)) return; - if (!CanAIAttack(who)) - return; - - if (!me->CanStartAttack(who, false)) - return; - - if (me->IsHostileTo(who)) - { - float fAttackRadius = me->GetAttackDistance(who); - if (me->IsWithinDistInMap(who, fAttackRadius) && me->IsWithinLOSInMap(who)) - { - if (!me->GetVictim()) - { - // Clear distracted state on combat - if (me->HasUnitState(UNIT_STATE_DISTRACTED)) - { - me->ClearUnitState(UNIT_STATE_DISTRACTED); - me->GetMotionMaster()->Clear(); - } - - AttackStart(who); - } - else/* if (me->GetMap()->IsDungeon())*/ - { - who->SetInCombatWith(me); - me->AddThreat(who, 0.0f); - } - } - } + CreatureAI::MoveInLineOfSight(who); } bool SmartAI::CanAIAttack(const Unit* /*who*/) const { - if (me->GetReactState() == REACT_PASSIVE) - return false; - return true; + return !(me->HasReactState(REACT_PASSIVE)); } bool SmartAI::AssistPlayerInCombat(Unit* who) From 6a8524c068d418092c193a3419b65818f3fd3443 Mon Sep 17 00:00:00 2001 From: treeston Date: Fri, 25 Sep 2015 15:14:53 +0200 Subject: [PATCH 066/524] Custom logic for putting people in combat instead of relying on CreatureAI or Creature methods. --- .../game/Entities/Creature/Creature.cpp | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index d3cfff7422..c8a258ad38 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -549,10 +549,25 @@ void Creature::Update(uint32 diff) if (m_combatPulseTime == 0) { - if (AI()) - AI()->DoZoneInCombat(); - else - SetInCombatWithZone(); + Map::PlayerList const &players = GetMap()->GetPlayers(); + if (!players.isEmpty()) + for (Map::PlayerList::const_iterator it = players.begin(); it != players.end(); ++it) + { + if (Player* player = it->GetSource()) + { + if (player->IsGameMaster()) + continue; + + if (player->IsAlive() && this->IsHostileTo(player)) + { + if (CanHaveThreatList()) + AddThreat(player, 0.0f); + this->SetInCombatWith(player); + player->SetInCombatWith(this); + } + } + } + m_combatPulseTime = m_combatPulseDelay * IN_MILLISECONDS; } } From 9207304d3225c04bf15e04cf0cbbd5cf90a535ed Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 16 May 2015 12:12:47 +0200 Subject: [PATCH 067/524] Core/Commands: Fixed .gobject add command (cherry picked from commit b4d044aa13b06ae50b4e468d6647bd7a9eb1cc3e) --- src/server/scripts/Commands/cs_gobject.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 591f797bfe..990b925697 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -166,6 +166,8 @@ public: // fill the gameobject data and save to the db object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMaskForSpawn()); + guidLow = object->GetSpawnId(); + // delete the old object and do a clean load from DB with a fresh new GameObject instance. // this is required to avoid weird behavior and memory leaks delete object; From e68ff4186e685de00362b12bc0b5084a4d6065dd Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 25 Sep 2015 21:26:31 +0200 Subject: [PATCH 068/524] Core/Commands: Fixed .gobject move and turn (cherry picked from commit 7eb25f1af6b74d3559b541d45da6cce50e657ba4) Closes #3802 Closes #15598 --- .../game/Entities/GameObject/GameObject.h | 1 + .../game/Entities/Transport/Transport.cpp | 2 + src/server/scripts/Commands/cs_gobject.cpp | 53 +++++++++++++------ 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 26c712730c..b91f1b6eee 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -843,6 +843,7 @@ class GameObject : public WorldObject, public GridObject, public Map float GetStationaryY() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); } float GetStationaryZ() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); } float GetStationaryO() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); } + void RelocateStationaryPosition(float x, float y, float z, float o) { m_stationaryPosition.Relocate(x, y, z, o); } float GetInteractionDistance(); diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 9cd3945d44..236675a7d2 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -352,6 +352,7 @@ GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data go->m_movementInfo.transport.pos.Relocate(x, y, z, o); CalculatePassengerPosition(x, y, z, &o); go->Relocate(x, y, z, o); + go->RelocateStationaryPosition(x, y, z, o); if (!go->IsPositionValid()) { @@ -704,6 +705,7 @@ void Transport::UpdatePassengerPositions(PassengerSet& passengers) break; case TYPEID_GAMEOBJECT: GetMap()->GameObjectRelocation(passenger->ToGameObject(), x, y, z, o, false); + passenger->ToGameObject()->RelocateStationaryPosition(x, y, z, o); break; case TYPEID_DYNAMICOBJECT: GetMap()->DynamicObjectRelocation(passenger->ToDynObject(), x, y, z, o); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 990b925697..0a45506c73 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -428,16 +428,26 @@ public: o = player->GetOrientation(); } + Map* map = object->GetMap(); + object->Relocate(object->GetPositionX(), object->GetPositionY(), object->GetPositionZ(), o); object->UpdateRotationFields(); - object->DestroyForNearbyPlayers(); - object->UpdateObjectVisibility(); - object->SaveToDB(); - object->Refresh(); - handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetGUID().GetCounter(), object->GetGOInfo()->name.c_str(), object->GetGUID().GetCounter(), o); + // Generate a completely new spawn with new guid + // 3.3.5a client caches recently deleted objects and brings them back to life + // when CreateObject block for this guid is received again + // however it entirely skips parsing that block and only uses already known location + object->Delete(); + object = new GameObject(); + if (!object->LoadGameObjectFromDB(guidLow, map)) + { + delete object; + return false; + } + + handler->PSendSysMessage(LANG_COMMAND_TURNOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name.c_str(), object->GetSpawnId()); return true; } @@ -470,21 +480,20 @@ public: char* toY = strtok(NULL, " "); char* toZ = strtok(NULL, " "); + float x, y, z; if (!toX) { Player* player = handler->GetSession()->GetPlayer(); - object->Relocate(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), object->GetOrientation()); - object->DestroyForNearbyPlayers(); - object->UpdateObjectVisibility(); + player->GetPosition(x, y, z); } else { if (!toY || !toZ) return false; - float x = (float)atof(toX); - float y = (float)atof(toY); - float z = (float)atof(toZ); + x = (float)atof(toX); + y = (float)atof(toY); + z = (float)atof(toZ); if (!MapManager::IsValidMapCoord(object->GetMapId(), x, y, z)) { @@ -492,17 +501,27 @@ public: handler->SetSentErrorMessage(true); return false; } - - object->Relocate(x, y, z, object->GetOrientation()); - object->DestroyForNearbyPlayers(); - object->UpdateObjectVisibility(); } + Map* map = object->GetMap(); + + object->Relocate(x, y, z, object->GetOrientation()); object->SaveToDB(); - object->Refresh(); - handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetGUID().GetCounter(), object->GetGOInfo()->name.c_str(), object->GetGUID().GetCounter()); + // Generate a completely new spawn with new guid + // 3.3.5a client caches recently deleted objects and brings them back to life + // when CreateObject block for this guid is received again + // however it entirely skips parsing that block and only uses already known location + object->Delete(); + object = new GameObject(); + if (!object->LoadGameObjectFromDB(guidLow, map)) + { + delete object; + return false; + } + + handler->PSendSysMessage(LANG_COMMAND_MOVEOBJMESSAGE, object->GetSpawnId(), object->GetGOInfo()->name.c_str(), object->GetSpawnId()); return true; } From 62af7a57cf5eb46ee6197178f6a7fb75ab995f3f Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 26 Sep 2015 21:17:21 +0200 Subject: [PATCH 069/524] DB/Item: Sylvanas Music Box Closes #7865 --- sql/updates/world/2015_09_26_00_world.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 sql/updates/world/2015_09_26_00_world.sql diff --git a/sql/updates/world/2015_09_26_00_world.sql b/sql/updates/world/2015_09_26_00_world.sql new file mode 100644 index 0000000000..a6fdcf8198 --- /dev/null +++ b/sql/updates/world/2015_09_26_00_world.sql @@ -0,0 +1,11 @@ +-- +SET @LAMENTER := 39048; +UPDATE `creature_template` SET `AIName`='SmartAI', `InhabitType`=4 WHERE `entry`=@LAMENTER; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@LAMENTER AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@LAMENTER*100 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@LAMENTER, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, @LAMENTER*100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sylvanas'' Lamenter - On Summoned - Action list'), +(@LAMENTER*100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 37090, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sylvanas'' Lamenter - Action list - Cast Lament of the Highborne: Highborne Aura'), +(@LAMENTER*100, 9, 1, 0, 0, 0, 100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sylvanas'' Lamenter - Action list - Set run off"), +(@LAMENTER*100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 114, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sylvanas'' Lamenter - Action list - Rise up'), +(@LAMENTER*100, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 4, 15095, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sylvanas'' Lamenter - Action list - Play Sound Lament of the Highborne'); From 610fab8968e1a19b76ff40c331bc6d6d9ecc33fc Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 26 Sep 2015 21:21:44 +0200 Subject: [PATCH 070/524] DB/Misc: Fix some Unit flags Add Sai for Released Soul Add some missing auras --- sql/updates/world/2015_09_26_01_world.sql | 40 +++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 sql/updates/world/2015_09_26_01_world.sql diff --git a/sql/updates/world/2015_09_26_01_world.sql b/sql/updates/world/2015_09_26_01_world.sql new file mode 100644 index 0000000000..17fc710b80 --- /dev/null +++ b/sql/updates/world/2015_09_26_01_world.sql @@ -0,0 +1,40 @@ +-- +UPDATE `creature_template` SET `unit_flags`=33555200 WHERE `entry`=28253; + +SET @ENTRY := 30736; +UPDATE `creature_template` SET `AIName`="SmartAI", `unit_flags`=33555200, `InhabitType`=4 WHERE `entry` IN (@ENTRY); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY) 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 +(@ENTRY,0,0,1,54,0,100,0,0,0,0,0,75,57806,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Add aura"), +(@ENTRY,0,1,2,61,0,100,0,0,0,0,0,4,37,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Play sound"), +(@ENTRY,0,2,3,61,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Set run off"), +(@ENTRY,0,3,0,61,0,100,0,0,0,0,0,114,40,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Rise up"), +(@ENTRY,0,4,0,54,0,100,0,0,0,0,0,41,10000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Released Soul - Just summoned - Despawn"); + +UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry` IN (30850,30852,30841); + +UPDATE `creature_template` SET `unit_flags`=131076, `flags_extra`=66 WHERE `entry`=25534; + +UPDATE `creature_template` SET `unit_flags`=32768 WHERE `entry`=26271; +UPDATE `creature` SET `unit_flags`=537166592 WHERE `guid` IN (110812, 110813, 110814, 110815, 110816, 110817); + +DELETE FROM `creature_addon` WHERE `guid` IN (110812, 110813, 110814, 110815, 110816, 110817); +INSERT INTO `creature_addon` (`guid`, `bytes2`, `auras`) VALUES +(110812, 1, "29266"), +(110813, 1, "29266"), +(110814, 1, "29266"), +(110815, 1, "29266"), +(110816, 1, "29266"), +(110817, 1, "29266"); + +UPDATE `creature_template` SET `unit_flags`=512 WHERE `entry`=31402; + +UPDATE `creature_template` SET `unit_flags`=33536 WHERE `entry`=30501; + +DELETE FROM `creature` WHERE `guid`=120496 AND `id`=28414; + +DELETE FROM `creature_template_addon` WHERE `entry` IN (28413); +INSERT INTO `creature_template_addon` (`entry`, `bytes2`, `auras`) VALUES +(28413, 0, "54450"); + +UPDATE `creature_template` SET `flags_extra`=2 WHERE `entry` IN (28413); From 706053129ac82dc3e143fb40b931afa9926c0de1 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 26 Sep 2015 22:05:03 +0200 Subject: [PATCH 071/524] DB/Creature: Eversong Ranger SAI fix Closes #15602 --- sql/updates/world/2015_09_26_02_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2015_09_26_02_world.sql diff --git a/sql/updates/world/2015_09_26_02_world.sql b/sql/updates/world/2015_09_26_02_world.sql new file mode 100644 index 0000000000..c5cee6530d --- /dev/null +++ b/sql/updates/world/2015_09_26_02_world.sql @@ -0,0 +1,6 @@ +-- Eversong Ranger +DELETE FROM `smart_scripts` WHERE `entryorguid`=15938 AND `source_type`=0 AND `id`<14; +UPDATE `smart_scripts` SET `id`= `id`-12 WHERE `entryorguid`=15938 AND `source_type`=0 AND `id`>13; +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 +(15938,0,0,0,0,0,100,0,0,0,2200,3800,11,6660,64,0,0,0,0,2,0,0,0,0,0,0,0,"Eversong Ranger - In Combat CMC - Cast 'Shoot'"), +(15938,0,1,0,2,0,100,1,0,15,0,0,25,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Eversong Ranger - Between 0-15% Health - Flee For Assist (No Repeat)"); From 1b360c8ec890758a0670cc942e7455addca292e3 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 26 Sep 2015 22:08:13 +0200 Subject: [PATCH 072/524] DB/Creature: Iceskin Sentry Add missing aura Fix movements and react --- sql/updates/world/2015_09_26_03_world.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2015_09_26_03_world.sql diff --git a/sql/updates/world/2015_09_26_03_world.sql b/sql/updates/world/2015_09_26_03_world.sql new file mode 100644 index 0000000000..b5ee16e808 --- /dev/null +++ b/sql/updates/world/2015_09_26_03_world.sql @@ -0,0 +1,5 @@ +-- Iceskin Sentry +UPDATE `creature` SET `movementtype`=0, `spawndist`=0 WHERE `id`=31012; +UPDATE `creature_addon` SET `bytes1`=50331657 WHERE `guid`=121512; +UPDATE `creature_template` SET `unit_flags`=2147778560 WHERE `entry`=31012; +UPDATE `creature_addon` SET `auras`="58269" WHERE `guid` IN (121497, 121498, 121499, 121500, 121502, 121503, 121504, 121505, 121506, 121507, 121508, 121509, 121510, 121511, 121512); From 51ac4872f509f7bad79a3a8bc2a74d946ea1cd68 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 26 Sep 2015 23:24:17 +0200 Subject: [PATCH 073/524] DB/Creature: Add channeling cosmetic spell for Shadow Channeler Add 2 missing spawns Add emote for Cult Researcher --- sql/updates/world/2015_09_26_04_world.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 sql/updates/world/2015_09_26_04_world.sql diff --git a/sql/updates/world/2015_09_26_04_world.sql b/sql/updates/world/2015_09_26_04_world.sql new file mode 100644 index 0000000000..bcc71a7646 --- /dev/null +++ b/sql/updates/world/2015_09_26_04_world.sql @@ -0,0 +1,13 @@ +UPDATE `creature` SET `movementtype`=0, `spawndist`=0 WHERE `id`=32264; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=32264; +DELETE FROM `smart_scripts` WHERE `entryorguid`=32262 AND `source_type`=0 AND `id`=3; +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 +(32262, 0, 3, 0, 1, 0, 100, 1, 0, 0, 0, 0, 11, 60309, 0, 0, 0, 0, 0, 19, 32264, 30, 0, 0, 0, 0, 0, 'Shadow Channeler - OOC - Cast Channel Souls'); + +SET @guid=120996; +DELETE FROM `creature` WHERE `guid` IN (@guid+0, @guid+1); +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES +(@guid+0, 32262, 571, 0, 0, 1, 1, 10631, 1, 8138.115, 2063.47, 550.596, 5.449381, 300, 0, 0, 9740, 8636, 0, 0, 0, 0), +(@guid+1, 32262, 571, 0, 0, 1, 1, 10631, 1, 8163.586, 2059.63, 550.596, 3.768629, 300, 0, 0, 9740, 8636, 0, 0, 0, 0); + +UPDATE `creature_addon` SET `emote`=396 WHERE `guid`IN (121534,121535,121532); From 747a3f1d38abdb9b711877c168243f0d398b615f Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 26 Sep 2015 23:40:13 +0200 Subject: [PATCH 074/524] DB: Fix a Typo on trinity string By @galathil Closes #15567 --- sql/updates/world/2015_09_26_05_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_09_26_05_world.sql diff --git a/sql/updates/world/2015_09_26_05_world.sql b/sql/updates/world/2015_09_26_05_world.sql new file mode 100644 index 0000000000..955588cdd5 --- /dev/null +++ b/sql/updates/world/2015_09_26_05_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `trinity_string` SET `content_default`='Invalid item count (%u) for item %u' WHERE `entry`=52; From 817a2ce4f744d75e8526e351b35ed1c787cc5b01 Mon Sep 17 00:00:00 2001 From: Tomatoes Date: Thu, 17 Sep 2015 13:12:37 -0500 Subject: [PATCH 075/524] Server/Game/AuctionHouse Fixes world config value of less than 1 being ignored by deposit formula. Had problems with the last commits and pr, sorry Update AuctionHouseMgr.cpp Adds another check to config to handle values over 1 and properly adjust the minimum higher. Thanks jackpoz! --- src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 4b48f1f341..7c708cb1ae 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -66,7 +66,7 @@ uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 uint32 MSV = pItem->GetTemplate()->SellPrice; if (MSV <= 0) - return AH_MINIMUM_DEPOSIT; + return AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT); float multiplier = CalculatePct(float(entry->depositPercent), 3); uint32 timeHr = (((time / 60) / 60) / 12); @@ -77,8 +77,8 @@ uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 TC_LOG_DEBUG("auctionHouse", "Multiplier: %f", multiplier); TC_LOG_DEBUG("auctionHouse", "Deposit: %u", deposit); - if (deposit < AH_MINIMUM_DEPOSIT) - return AH_MINIMUM_DEPOSIT; + if (deposit < AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT)) + return AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT); else return deposit; } From 513b756ea8afcfeb65b97e8227669681e9cd9a40 Mon Sep 17 00:00:00 2001 From: Rushor Date: Fri, 31 Jul 2015 19:03:29 +0200 Subject: [PATCH 076/524] Merge pull request #15191 from Rushor/action Core/SAI: Add SMART_ACTION_RISE_UP for Z Axis (cherry picked from commit ba6da26e5db8cd6c3418d2a401e84d8701ac89f1) --- src/server/game/AI/SmartScripts/SmartScript.cpp | 8 ++++++++ src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 1 + src/server/game/AI/SmartScripts/SmartScriptMgr.h | 3 ++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 4b43ac889c..efee565e15 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1136,6 +1136,14 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u me->GetMotionMaster()->MovePoint(SMART_RANDOM_POINT, x, y, z); break; } + case SMART_ACTION_RISE_UP: + { + if (!me) + break; + + me->GetMotionMaster()->MovePoint(SMART_RANDOM_POINT, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + (float)e.action.moveRandom.distance); + break; + } case SMART_ACTION_SET_VISIBILITY: { if (me) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 6ccc581c54..f0e3c3caff 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1198,6 +1198,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_ADD_GO_FLAG: case SMART_ACTION_REMOVE_GO_FLAG: case SMART_ACTION_SUMMON_CREATURE_GROUP: + case SMART_ACTION_RISE_UP: 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 60a4ce5e8e..2f9b032c14 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -539,8 +539,9 @@ enum SMART_ACTION SMART_ACTION_GAME_EVENT_STOP = 111, // GameEventId SMART_ACTION_GAME_EVENT_START = 112, // GameEventId SMART_ACTION_START_CLOSEST_WAYPOINT = 113, // wp1, wp2, wp3, wp4, wp5, wp6, wp7 + SMART_ACTION_RISE_UP = 114, // distance - SMART_ACTION_END = 114 + SMART_ACTION_END = 115 }; struct SmartAction From eac6f22c95435f027d1e58d183f2ae163e75c226 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 7 Aug 2015 00:12:41 +0200 Subject: [PATCH 077/524] Buildsystem/MSVC: Enabled /Zc:throwingNew for Visual Studio 2015 builds More info here: http://blogs.msdn.com/b/vcblog/archive/2015/08/06/new-in-vs-2015-zc-throwingnew.aspx Closes #15230 (cherry picked from commit dcb1990e93bb879c88f1b43eb13292afa6baac86) --- cmake/compiler/msvc/settings.cmake | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/cmake/compiler/msvc/settings.cmake b/cmake/compiler/msvc/settings.cmake index ae59a4758e..7df8c34fbe 100644 --- a/cmake/compiler/msvc/settings.cmake +++ b/cmake/compiler/msvc/settings.cmake @@ -18,9 +18,11 @@ if(PLATFORM EQUAL 64) add_definitions("-D_WIN64") message(STATUS "MSVC: 64-bit platform, enforced -D_WIN64 parameter") - #Enable extended object support for debug compiles on X64 (not required on X86) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") - message(STATUS "MSVC: Enabled increased number of sections in object files") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.23026.0) + #Enable extended object support for debug compiles on X64 (not required on X86) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG} /bigobj") + message(STATUS "MSVC: Enabled increased number of sections in object files") + endif() else() # mark 32 bit executables large address aware so they can use > 2GB address space set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE") @@ -39,6 +41,17 @@ add_definitions(-D_BUILD_DIRECTIVE=\\"$(ConfigurationName)\\") # multithreaded compiling on VS set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") +# /Zc:throwingNew. +# When you specify Zc:throwingNew on the command line, it instructs the compiler to assume +# that the program will eventually be linked with a conforming operator new implementation, +# and can omit all of these extra null checks from your program. +# http://blogs.msdn.com/b/vcblog/archive/2015/08/06/new-in-vs-2015-zc-throwingnew.aspx +if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.23026.0)) + # also enable /bigobj for ALL builds under visual studio 2015, increased number of templates in standard library + # makes this flag a requirement to build TC at all + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:throwingNew /bigobj") +endif() + # Define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES - eliminates the warning by changing the strcpy call to strcpy_s, which prevents buffer overruns add_definitions(-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES) message(STATUS "MSVC: Overloaded standard names") From 12f5c766c92d8d9008eaffea9b7133e148362026 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 7 Aug 2015 09:29:28 +0200 Subject: [PATCH 078/524] Buildsystem/MSVC: Added missed change (cherry picked from commit 7732ad5153783ca31d32c6812f21c2b723fd589a) --- cmake/compiler/msvc/settings.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/compiler/msvc/settings.cmake b/cmake/compiler/msvc/settings.cmake index 7df8c34fbe..2810434b3b 100644 --- a/cmake/compiler/msvc/settings.cmake +++ b/cmake/compiler/msvc/settings.cmake @@ -20,7 +20,7 @@ if(PLATFORM EQUAL 64) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.23026.0) #Enable extended object support for debug compiles on X64 (not required on X86) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_DEBUG} /bigobj") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj") message(STATUS "MSVC: Enabled increased number of sections in object files") endif() else() From 0d0c2e1ca648461bb803f9feb42d9a5aa30a7ef0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 25 Aug 2015 00:37:55 +0200 Subject: [PATCH 079/524] Core/Misc: Fixed macro redefinition warnings when building for running under helgrind (cherry picked from commit ec5700c2a25e64842a9d3f81b48535b349a9d466) --- src/common/Define.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/Define.h b/src/common/Define.h index 97e07cef8b..7332bdc4cf 100644 --- a/src/common/Define.h +++ b/src/common/Define.h @@ -33,6 +33,8 @@ # endif # if defined(HELGRIND) # include +# undef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE +# undef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER # define _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) ANNOTATE_HAPPENS_BEFORE(A) # define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A) # endif From d2076ef8b09f6a59aaa634cc754b805d637ffc8a Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 26 Aug 2015 17:00:26 +0200 Subject: [PATCH 080/524] Core/DBLayer: Optimized prepared statement query results by eliminating unneeded buffer copies * Improved error logs for using incorrect Field getters to also include table name, field name and field index. (cherry picked from commit 65dbc7082a60b67b76966259130aedc337af3eca) Conflicts: src/server/database/Database/Field.h src/server/game/Globals/ObjectMgr.cpp --- src/server/database/Database/Field.cpp | 13 +- src/server/database/Database/Field.h | 80 +++++++++---- src/server/database/Database/QueryResult.cpp | 118 +++++++++++-------- src/server/database/Database/QueryResult.h | 11 +- 4 files changed, 130 insertions(+), 92 deletions(-) diff --git a/src/server/database/Database/Field.cpp b/src/server/database/Database/Field.cpp index 89195b699b..f7794bd897 100644 --- a/src/server/database/Database/Field.cpp +++ b/src/server/database/Database/Field.cpp @@ -30,18 +30,11 @@ Field::~Field() CleanUp(); } -void Field::SetByteValue(const void* newValue, const size_t newSize, enum_field_types newType, uint32 length) +void Field::SetByteValue(void* newValue, enum_field_types newType, uint32 length) { - if (data.value) - CleanUp(); - // This value stores raw bytes that have to be explicitly cast later - if (newValue) - { - data.value = new char[newSize]; - memcpy(data.value, newValue, newSize); - data.length = length; - } + data.value = newValue; + data.length = length; data.type = newType; data.raw = true; } diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h index 1bbd264482..42a842e628 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -29,6 +29,8 @@ class Field friend class PreparedResultSet; public: + Field(); + ~Field(); bool GetBool() const // Wrapper, actually gets integer { @@ -43,7 +45,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_TINY)) { - TC_LOG_WARN("sql.sql", "Warning: GetUInt8() on non-tinyint field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetUInt8() on non-tinyint field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0; } #endif @@ -61,7 +64,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_TINY)) { - TC_LOG_WARN("sql.sql", "Warning: GetInt8() on non-tinyint field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetInt8() on non-tinyint field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0; } #endif @@ -79,7 +83,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_SHORT) && !IsType(MYSQL_TYPE_YEAR)) { - TC_LOG_WARN("sql.sql", "Warning: GetUInt16() on non-smallint field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetUInt16() on non-smallint field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0; } #endif @@ -97,7 +102,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_SHORT) && !IsType(MYSQL_TYPE_YEAR)) { - TC_LOG_WARN("sql.sql", "Warning: GetInt16() on non-smallint field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetInt16() on non-smallint field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0; } #endif @@ -115,7 +121,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_INT24) && !IsType(MYSQL_TYPE_LONG)) { - TC_LOG_WARN("sql.sql", "Warning: GetUInt32() on non-(medium)int field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetUInt32() on non-(medium)int field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0; } #endif @@ -133,7 +140,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_INT24) && !IsType(MYSQL_TYPE_LONG)) { - TC_LOG_WARN("sql.sql", "Warning: GetInt32() on non-(medium)int field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetInt32() on non-(medium)int field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0; } #endif @@ -151,7 +159,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_LONGLONG) && !IsType(MYSQL_TYPE_BIT)) { - TC_LOG_WARN("sql.sql", "Warning: GetUInt64() on non-bigint field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetUInt64() on non-bigint field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0; } #endif @@ -169,7 +178,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_LONGLONG) && !IsType(MYSQL_TYPE_BIT)) { - TC_LOG_WARN("sql.sql", "Warning: GetInt64() on non-bigint field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetInt64() on non-bigint field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0; } #endif @@ -187,7 +197,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_FLOAT)) { - TC_LOG_WARN("sql.sql", "Warning: GetFloat() on non-float field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetFloat() on non-float field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0.0f; } #endif @@ -205,7 +216,8 @@ class Field #ifdef TRINITY_DEBUG if (!IsType(MYSQL_TYPE_DOUBLE)) { - TC_LOG_WARN("sql.sql", "Warning: GetDouble() on non-double field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Warning: GetDouble() on non-double field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0.0f; } #endif @@ -223,7 +235,8 @@ class Field #ifdef TRINITY_DEBUG if (IsNumeric()) { - TC_LOG_WARN("sql.sql", "Error: GetCString() on numeric field. Using type: %s.", FieldTypeToString(data.type)); + TC_LOG_WARN("sql.sql", "Error: GetCString() on numeric field %s.%s (%s.%s) at index %u. Using type: %s.", + meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return NULL; } #endif @@ -236,14 +249,11 @@ class Field if (!data.value) return ""; - if (data.raw) - { - char const* string = GetCString(); - if (!string) - string = ""; - return std::string(string, data.length); - } - return std::string((char*)data.value); + char const* string = GetCString(); + if (!string) + return ""; + + return std::string(string, data.length); } bool IsNull() const @@ -251,10 +261,17 @@ class Field return data.value == NULL; } - protected: - Field(); - ~Field(); + struct Metadata + { + char const* TableName; + char const* TableAlias; + char const* Name; + char const* Alias; + char const* Type; + uint32 Index; + }; + protected: #pragma pack(push, 1) struct { @@ -265,12 +282,14 @@ class Field } data; #pragma pack(pop) - void SetByteValue(void const* newValue, size_t const newSize, enum_field_types newType, uint32 length); + void SetByteValue(void* newValue, enum_field_types newType, uint32 length); void SetStructuredValue(char* newValue, enum_field_types newType); void CleanUp() { - delete[] ((char*)data.value); + // Field does not own the data if fetched with prepared statement + if (!data.raw) + delete[] ((char*)data.value); data.value = NULL; } @@ -375,6 +394,19 @@ class Field default: return "-Unknown-"; } } + + void SetMetadata(MYSQL_FIELD* field, uint32 fieldIndex) + { + meta.TableName = field->org_table; + meta.TableAlias = field->table; + meta.Name = field->org_name; + meta.Alias = field->name; + meta.Type = FieldTypeToString(field->type); + meta.Index = fieldIndex; + } + + Metadata meta; + #endif }; diff --git a/src/server/database/Database/QueryResult.cpp b/src/server/database/Database/QueryResult.cpp index 02352f221a..563e18b523 100644 --- a/src/server/database/Database/QueryResult.cpp +++ b/src/server/database/Database/QueryResult.cpp @@ -26,7 +26,10 @@ _result(result), _fields(fields) { _currentRow = new Field[_fieldCount]; - ASSERT(_currentRow); +#ifdef TRINITY_DEBUG + for (uint32 i = 0; i < _fieldCount; i++) + _currentRow[i].SetMetadata(&_fields[i], i); +#endif } PreparedResultSet::PreparedResultSet(MYSQL_STMT* stmt, MYSQL_RES *result, uint64 rowCount, uint32 fieldCount) : @@ -35,11 +38,11 @@ m_rowPosition(0), m_fieldCount(fieldCount), m_rBind(NULL), m_stmt(stmt), -m_res(result), +m_metadataResult(result), m_isNull(NULL), m_length(NULL) { - if (!m_res) + if (!m_metadataResult) return; if (m_stmt->bind_result_done) @@ -66,50 +69,44 @@ m_length(NULL) return; } - //- This is where we prepare the buffer based on metadata - uint32 i = 0; - MYSQL_FIELD* field = mysql_fetch_field(m_res); - while (field) - { - size_t size = Field::SizeForType(field); + m_rowCount = mysql_stmt_num_rows(m_stmt); - m_rBind[i].buffer_type = field->type; - m_rBind[i].buffer = malloc(size); - memset(m_rBind[i].buffer, 0, size); + //- This is where we prepare the buffer based on metadata + MYSQL_FIELD* field = mysql_fetch_fields(m_metadataResult); + for (uint32 i = 0; i < m_fieldCount; ++i) + { + size_t size = Field::SizeForType(&field[i]); + + m_rBind[i].buffer_type = field[i].type; + m_rBind[i].buffer = new char[size * m_rowCount]; m_rBind[i].buffer_length = size; m_rBind[i].length = &m_length[i]; m_rBind[i].is_null = &m_isNull[i]; m_rBind[i].error = NULL; - m_rBind[i].is_unsigned = field->flags & UNSIGNED_FLAG; - - ++i; - field = mysql_fetch_field(m_res); + m_rBind[i].is_unsigned = field[i].flags & UNSIGNED_FLAG; } //- This is where we bind the bind the buffer to the statement if (mysql_stmt_bind_result(m_stmt, m_rBind)) { TC_LOG_WARN("sql.sql", "%s:mysql_stmt_bind_result, cannot bind result from MySQL server. Error: %s", __FUNCTION__, mysql_stmt_error(m_stmt)); - delete[] m_rBind; + mysql_stmt_free_result(m_stmt); + CleanUp(); delete[] m_isNull; delete[] m_length; return; } - m_rowCount = mysql_stmt_num_rows(m_stmt); - - m_rows.resize(uint32(m_rowCount)); + m_rows.resize(uint32(m_rowCount) * m_fieldCount); while (_NextRow()) { - m_rows[uint32(m_rowPosition)] = new Field[m_fieldCount]; - for (uint64 fIndex = 0; fIndex < m_fieldCount; ++fIndex) + for (uint32 fIndex = 0; fIndex < m_fieldCount; ++fIndex) { + unsigned long buffer_length = m_rBind[fIndex].buffer_length; + unsigned long fetched_length = *m_rBind[fIndex].length; if (!*m_rBind[fIndex].is_null) - m_rows[uint32(m_rowPosition)][fIndex].SetByteValue(m_rBind[fIndex].buffer, - m_rBind[fIndex].buffer_length, - m_rBind[fIndex].buffer_type, - *m_rBind[fIndex].length); - else + { + void* buffer = m_stmt->bind[fIndex].buffer; switch (m_rBind[fIndex].buffer_type) { case MYSQL_TYPE_TINY_BLOB: @@ -118,24 +115,42 @@ m_length(NULL) case MYSQL_TYPE_BLOB: case MYSQL_TYPE_STRING: case MYSQL_TYPE_VAR_STRING: - m_rows[uint32(m_rowPosition)][fIndex].SetByteValue("", - m_rBind[fIndex].buffer_length, - m_rBind[fIndex].buffer_type, - *m_rBind[fIndex].length); - break; - default: - m_rows[uint32(m_rowPosition)][fIndex].SetByteValue(nullptr, - m_rBind[fIndex].buffer_length, - m_rBind[fIndex].buffer_type, - *m_rBind[fIndex].length); + // warning - the string will not be null-terminated if there is no space for it in the buffer + // when mysql_stmt_fetch returned MYSQL_DATA_TRUNCATED + // we cannot blindly null-terminate the data either as it may be retrieved as binary blob and not specifically a string + // in this case using Field::GetCString will result in garbage + // TODO: remove Field::GetCString and use boost::string_ref (currently proposed for TS as string_view, maybe in C++17) + if (fetched_length < buffer_length) + *((char*)buffer + fetched_length) = '\0'; + break; } + + m_rows[uint32(m_rowPosition) * m_fieldCount + fIndex].SetByteValue( + buffer, + m_rBind[fIndex].buffer_type, + fetched_length); + + // move buffer pointer to next part + m_stmt->bind[fIndex].buffer = (char*)buffer + buffer_length; + } + else + { + m_rows[uint32(m_rowPosition) * m_fieldCount + fIndex].SetByteValue( + nullptr, + m_rBind[fIndex].buffer_type, + *m_rBind[fIndex].length); + } + +#ifdef TRINITY_DEBUG + m_rows[uint32(m_rowPosition) * m_fieldCount + fIndex].SetMetadata(&field[fIndex], fIndex); +#endif } m_rowPosition++; } m_rowPosition = 0; /// All data is buffered, let go of mysql c api structures - CleanUp(); + mysql_stmt_free_result(m_stmt); } ResultSet::~ResultSet() @@ -145,8 +160,7 @@ ResultSet::~ResultSet() PreparedResultSet::~PreparedResultSet() { - for (uint32 i = 0; i < uint32(m_rowCount); ++i) - delete[] m_rows[i]; + CleanUp(); } bool ResultSet::NextRow() @@ -207,18 +221,18 @@ void ResultSet::CleanUp() void PreparedResultSet::CleanUp() { - /// More of the in our code allocated sources are deallocated by the poorly documented mysql c api - if (m_res) - mysql_free_result(m_res); + if (m_metadataResult) + mysql_free_result(m_metadataResult); - FreeBindBuffer(); - mysql_stmt_free_result(m_stmt); + if (m_rBind) + { + for (uint32 i = 0; i < m_fieldCount; ++i) + { + delete[]((char*)m_rBind[i].buffer); + m_rBind[i].buffer = nullptr; + } - delete[] m_rBind; -} - -void PreparedResultSet::FreeBindBuffer() -{ - for (uint32 i = 0; i < m_fieldCount; ++i) - free (m_rBind[i].buffer); + delete[] m_rBind; + m_rBind = nullptr; + } } diff --git a/src/server/database/Database/QueryResult.h b/src/server/database/Database/QueryResult.h index a61fb6331c..0447ecaae5 100644 --- a/src/server/database/Database/QueryResult.h +++ b/src/server/database/Database/QueryResult.h @@ -73,18 +73,18 @@ class PreparedResultSet Field* Fetch() const { ASSERT(m_rowPosition < m_rowCount); - return m_rows[uint32(m_rowPosition)]; + return const_cast(&m_rows[uint32(m_rowPosition) * m_fieldCount]); } - const Field & operator [] (uint32 index) const + Field const& operator[](uint32 index) const { ASSERT(m_rowPosition < m_rowCount); ASSERT(index < m_fieldCount); - return m_rows[uint32(m_rowPosition)][index]; + return m_rows[uint32(m_rowPosition) * m_fieldCount + index]; } protected: - std::vector m_rows; + std::vector m_rows; uint64 m_rowCount; uint64 m_rowPosition; uint32 m_fieldCount; @@ -92,12 +92,11 @@ class PreparedResultSet private: MYSQL_BIND* m_rBind; MYSQL_STMT* m_stmt; - MYSQL_RES* m_res; + MYSQL_RES* m_metadataResult; ///< Field metadata, returned by mysql_stmt_result_metadata my_bool* m_isNull; unsigned long* m_length; - void FreeBindBuffer(); void CleanUp(); bool _NextRow(); From 25c03039768fefa79dd75d491997c28e451a09a7 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 27 Aug 2015 00:54:49 +0200 Subject: [PATCH 081/524] Core/DBLayer: Added compile time validation for prepared statement indexes passed to DatabaseWorkerPool::GetPreparedStatement turning mistakes like the one fixed in 0327927fa61434d432f9749fd9242ae5dce9a5cd into compiler errors. (cherry picked from commit 7c75160f590812f0c5d70fd9c68441068e2ded48) Conflicts: src/server/database/Database/Implementation/HotfixDatabase.h src/server/shared/DataStores/DB2StorageLoader.cpp src/server/shared/DataStores/DB2StorageLoader.h src/server/shared/DataStores/DB2Store.h --- .../database/Database/DatabaseWorkerPool.h | 4 ++- .../Implementation/CharacterDatabase.h | 28 ++++++++++--------- .../Database/Implementation/LoginDatabase.h | 28 ++++++++++--------- .../Database/Implementation/WorldDatabase.h | 28 ++++++++++--------- src/server/database/Database/QueryResult.cpp | 2 ++ 5 files changed, 50 insertions(+), 40 deletions(-) diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index 6a0cf71cca..32837daf5d 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -428,10 +428,12 @@ class DatabaseWorkerPool Other */ + typedef typename T::Statements PreparedStatementIndex; + //! Automanaged (internally) pointer to a prepared statement object for usage in upper level code. //! Pointer is deleted in this->DirectExecute(PreparedStatement*), this->Query(PreparedStatement*) or PreparedStatementTask::~PreparedStatementTask. //! This object is not tied to the prepared statement on the MySQL context yet until execution. - PreparedStatement* GetPreparedStatement(uint32 index) + PreparedStatement* GetPreparedStatement(PreparedStatementIndex index) { return new PreparedStatement(index); } diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index a7ab5d00cb..5ebafe0d0f 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -21,19 +21,6 @@ #include "DatabaseWorkerPool.h" #include "MySQLConnection.h" -class CharacterDatabaseConnection : public MySQLConnection -{ - public: - //- Constructors for sync and async connections - CharacterDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { } - CharacterDatabaseConnection(ProducerConsumerQueue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { } - - //- Loads database type specific prepared statements - void DoPrepareStatements() override; -}; - -typedef DatabaseWorkerPool CharacterDatabaseWorkerPool; - enum CharacterDatabaseStatements { /* Naming standard for defines: @@ -546,4 +533,19 @@ enum CharacterDatabaseStatements MAX_CHARACTERDATABASE_STATEMENTS }; +class CharacterDatabaseConnection : public MySQLConnection +{ +public: + typedef CharacterDatabaseStatements Statements; + + //- Constructors for sync and async connections + CharacterDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { } + CharacterDatabaseConnection(ProducerConsumerQueue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { } + + //- Loads database type specific prepared statements + void DoPrepareStatements() override; +}; + +typedef DatabaseWorkerPool CharacterDatabaseWorkerPool; + #endif diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h index 7f6cffa520..79b7a53cb6 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.h +++ b/src/server/database/Database/Implementation/LoginDatabase.h @@ -21,19 +21,6 @@ #include "DatabaseWorkerPool.h" #include "MySQLConnection.h" -class LoginDatabaseConnection : public MySQLConnection -{ - public: - //- Constructors for sync and async connections - LoginDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { } - LoginDatabaseConnection(ProducerConsumerQueue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { } - - //- Loads database type specific prepared statements - void DoPrepareStatements() override; -}; - -typedef DatabaseWorkerPool LoginDatabaseWorkerPool; - enum LoginDatabaseStatements { /* Naming standard for defines: @@ -133,4 +120,19 @@ enum LoginDatabaseStatements MAX_LOGINDATABASE_STATEMENTS }; +class LoginDatabaseConnection : public MySQLConnection +{ +public: + typedef LoginDatabaseStatements Statements; + + //- Constructors for sync and async connections + LoginDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { } + LoginDatabaseConnection(ProducerConsumerQueue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { } + + //- Loads database type specific prepared statements + void DoPrepareStatements() override; +}; + +typedef DatabaseWorkerPool LoginDatabaseWorkerPool; + #endif diff --git a/src/server/database/Database/Implementation/WorldDatabase.h b/src/server/database/Database/Implementation/WorldDatabase.h index 36fd6fbb18..c5475835fb 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.h +++ b/src/server/database/Database/Implementation/WorldDatabase.h @@ -21,19 +21,6 @@ #include "DatabaseWorkerPool.h" #include "MySQLConnection.h" -class WorldDatabaseConnection : public MySQLConnection -{ - public: - //- Constructors for sync and async connections - WorldDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { } - WorldDatabaseConnection(ProducerConsumerQueue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { } - - //- Loads database type specific prepared statements - void DoPrepareStatements() override; -}; - -typedef DatabaseWorkerPool WorldDatabaseWorkerPool; - enum WorldDatabaseStatements { /* Naming standard for defines: @@ -116,4 +103,19 @@ enum WorldDatabaseStatements MAX_WORLDDATABASE_STATEMENTS }; +class WorldDatabaseConnection : public MySQLConnection +{ +public: + typedef WorldDatabaseStatements Statements; + + //- Constructors for sync and async connections + WorldDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) { } + WorldDatabaseConnection(ProducerConsumerQueue* q, MySQLConnectionInfo& connInfo) : MySQLConnection(q, connInfo) { } + + //- Loads database type specific prepared statements + void DoPrepareStatements() override; +}; + +typedef DatabaseWorkerPool WorldDatabaseWorkerPool; + #endif diff --git a/src/server/database/Database/QueryResult.cpp b/src/server/database/Database/QueryResult.cpp index 563e18b523..6afc949d6a 100644 --- a/src/server/database/Database/QueryResult.cpp +++ b/src/server/database/Database/QueryResult.cpp @@ -123,6 +123,8 @@ m_length(NULL) if (fetched_length < buffer_length) *((char*)buffer + fetched_length) = '\0'; break; + default: + break; } m_rows[uint32(m_rowPosition) * m_fieldCount + fIndex].SetByteValue( From 5c3ba60d54ce01cc1571e9e2d36a34e1fb64021a Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 4 Sep 2015 00:18:12 +0200 Subject: [PATCH 082/524] Core/DBLayer: Allocate a single buffer for entire prepared result set instead of separate ones for each field (cherry picked from commit 8652f4b4de5ed02c89f9db91367125a04ce52dd4) --- src/server/database/Database/QueryResult.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/server/database/Database/QueryResult.cpp b/src/server/database/Database/QueryResult.cpp index 6afc949d6a..983ffee24c 100644 --- a/src/server/database/Database/QueryResult.cpp +++ b/src/server/database/Database/QueryResult.cpp @@ -73,12 +73,13 @@ m_length(NULL) //- This is where we prepare the buffer based on metadata MYSQL_FIELD* field = mysql_fetch_fields(m_metadataResult); + std::size_t rowSize = 0; for (uint32 i = 0; i < m_fieldCount; ++i) { size_t size = Field::SizeForType(&field[i]); + rowSize += size; m_rBind[i].buffer_type = field[i].type; - m_rBind[i].buffer = new char[size * m_rowCount]; m_rBind[i].buffer_length = size; m_rBind[i].length = &m_length[i]; m_rBind[i].is_null = &m_isNull[i]; @@ -86,6 +87,13 @@ m_length(NULL) m_rBind[i].is_unsigned = field[i].flags & UNSIGNED_FLAG; } + char* dataBuffer = new char[rowSize * m_rowCount]; + for (uint32 i = 0, offset = 0; i < m_fieldCount; ++i) + { + m_rBind[i].buffer = dataBuffer + offset; + offset += m_rBind[i].buffer_length; + } + //- This is where we bind the bind the buffer to the statement if (mysql_stmt_bind_result(m_stmt, m_rBind)) { @@ -133,7 +141,7 @@ m_length(NULL) fetched_length); // move buffer pointer to next part - m_stmt->bind[fIndex].buffer = (char*)buffer + buffer_length; + m_stmt->bind[fIndex].buffer = (char*)buffer + rowSize; } else { @@ -228,12 +236,7 @@ void PreparedResultSet::CleanUp() if (m_rBind) { - for (uint32 i = 0; i < m_fieldCount; ++i) - { - delete[]((char*)m_rBind[i].buffer); - m_rBind[i].buffer = nullptr; - } - + delete[](char*)m_rBind->buffer; delete[] m_rBind; m_rBind = nullptr; } From fcc6ef6b1881196bbcebf5949fe682056b366b46 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 27 Sep 2015 17:19:49 +0200 Subject: [PATCH 083/524] Core/DBLayer: Build fix in addition to 25c03039768fefa79dd75d491997c28e451a09a7 --- src/server/game/Server/WorldSession.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index e689600317..53da37bc73 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -709,7 +709,7 @@ void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask) void WorldSession::SetAccountData(AccountDataType type, time_t tm, std::string const& data) { uint32 id = 0; - uint32 index = 0; + CharacterDatabaseStatements index; if ((1 << type) & GLOBAL_CACHE_MASK) { id = GetAccountId(); From ea1c783b84d4fa489436531667f3c121631b25d4 Mon Sep 17 00:00:00 2001 From: treeston Date: Fri, 25 Sep 2015 13:01:36 +0200 Subject: [PATCH 084/524] Scripts/Naxxramas: Adjustments to the Loatheb encounter - Adjusted doom cast timings as per boss mod timers. - Add Deathbloom's final tick using spellscript - Move Spores' Fungal Creep cast handling to Loatheb's cpp instead of handling it in SmartAI - Fungal Creep should also be cast if the spore expires (important for Spore Loser achievement) - Remove Fungal Creep from players on reset to avoid cheesy strats --- sql/updates/world/2015_09_25_15596_world.sql | 12 +++ .../Northrend/Naxxramas/boss_loatheb.cpp | 84 +++++++++++++++---- 2 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 sql/updates/world/2015_09_25_15596_world.sql diff --git a/sql/updates/world/2015_09_25_15596_world.sql b/sql/updates/world/2015_09_25_15596_world.sql new file mode 100644 index 0000000000..068255d4e0 --- /dev/null +++ b/sql/updates/world/2015_09_25_15596_world.sql @@ -0,0 +1,12 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=16286 AND `source_type`=0; +UPDATE `creature_template` SET `AIName`="" WHERE `entry`=16286; + +DELETE FROM `spell_script_names` WHERE `spell_id` IN (29865,55053); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(29865,"spell_loatheb_deathbloom"), +(55053,"spell_loatheb_deathbloom"); + +DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (55594); +INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES +(55594,55594,55601); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp index 33fb43b6bb..db6a7a7758 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp @@ -27,7 +27,10 @@ enum Spells SPELL_WARN_NECROTIC_AURA = 59481, SPELL_SUMMON_SPORE = 29234, SPELL_DEATHBLOOM = 29865, - SPELL_INEVITABLE_DOOM = 29204 + SPELL_INEVITABLE_DOOM = 29204, + SPELL_FUNGAL_CREEP = 29232, + + SPELL_DEATHBLOOM_FINAL_DAMAGE = 55594, }; enum Texts @@ -72,29 +75,35 @@ class boss_loatheb : public CreatureScript void Reset() override { _Reset(); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FUNGAL_CREEP); Initialize(); } void EnterCombat(Unit* /*who*/) override { _EnterCombat(); - events.ScheduleEvent(EVENT_NECROTIC_AURA, 17000); - events.ScheduleEvent(EVENT_DEATHBLOOM, 5000); - events.ScheduleEvent(EVENT_SPORE, IsHeroic() ? 18000 : 36000); - events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 120000); + events.ScheduleEvent(EVENT_NECROTIC_AURA, 17 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_DEATHBLOOM, 5 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_SPORE, RAID_MODE(36,18) * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 2 * MINUTE * IN_MILLISECONDS); } - void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override { _sporeLoserData = false; + summon->CastSpell(summon,SPELL_FUNGAL_CREEP,true); + } + + void SummonedCreatureDespawn(Creature* summon) override + { + summons.Despawn(summon); + if (summon->IsAlive()) + summon->CastSpell(summon,SPELL_FUNGAL_CREEP,true); } uint32 GetData(uint32 id) const override { - if (id != DATA_ACHIEVEMENT_SPORE_LOSER) - return 0; - - return uint32(_sporeLoserData); + return (_sporeLoserData && id == DATA_ACHIEVEMENT_SPORE_LOSER) ? 1u : 0u; } void UpdateAI(uint32 diff) override @@ -111,21 +120,29 @@ class boss_loatheb : public CreatureScript case EVENT_NECROTIC_AURA: DoCastAOE(SPELL_NECROTIC_AURA); DoCast(me, SPELL_WARN_NECROTIC_AURA); - events.ScheduleEvent(EVENT_NECROTIC_AURA, 20000); - events.ScheduleEvent(EVENT_NECROTIC_AURA_FADING, 14000); + events.ScheduleEvent(EVENT_NECROTIC_AURA, 20 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_NECROTIC_AURA_FADING, 14 * IN_MILLISECONDS); break; case EVENT_DEATHBLOOM: DoCastAOE(SPELL_DEATHBLOOM); - events.ScheduleEvent(EVENT_DEATHBLOOM, 30000); + events.ScheduleEvent(EVENT_DEATHBLOOM, 30 * IN_MILLISECONDS); break; case EVENT_INEVITABLE_DOOM: _doomCounter++; DoCastAOE(SPELL_INEVITABLE_DOOM); - events.ScheduleEvent(EVENT_INEVITABLE_DOOM, std::max(120000 - _doomCounter * 15000, 15000)); // needs to be confirmed + if (_doomCounter > 6) + { + if (_doomCounter & 1) // odd + events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 14 * IN_MILLISECONDS); + else + events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 17 * IN_MILLISECONDS); + } + else + events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 30 * IN_MILLISECONDS); break; case EVENT_SPORE: DoCast(me, SPELL_SUMMON_SPORE, false); - events.ScheduleEvent(EVENT_SPORE, IsHeroic() ? 18000 : 36000); + events.ScheduleEvent(EVENT_SPORE, RAID_MODE(36,18) * IN_MILLISECONDS); break; case EVENT_NECROTIC_AURA_FADING: Talk(SAY_NECROTIC_AURA_FADING); @@ -203,9 +220,46 @@ class spell_loatheb_necrotic_aura_warning : public SpellScriptLoader } }; +class spell_loatheb_deathbloom : public SpellScriptLoader +{ + public: + spell_loatheb_deathbloom() : SpellScriptLoader("spell_loatheb_deathbloom") { } + + class spell_loatheb_deathbloom_AuraScript : public AuraScript + { + PrepareAuraScript(spell_loatheb_deathbloom_AuraScript); + + bool Validate(SpellInfo const* /*spell*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DEATHBLOOM_FINAL_DAMAGE)) + return false; + return true; + } + + void AfterRemove(AuraEffect const* eff, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) + return; + + GetTarget()->CastSpell(nullptr, SPELL_DEATHBLOOM_FINAL_DAMAGE, true, nullptr, eff, GetCasterGUID()); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_loatheb_deathbloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_loatheb_deathbloom_AuraScript(); + } +}; + void AddSC_boss_loatheb() { new boss_loatheb(); new achievement_spore_loser(); new spell_loatheb_necrotic_aura_warning(); + new spell_loatheb_deathbloom(); } From 01ae5c4bf6bce7e2a9a0621eb8edcf0197bc3d2c Mon Sep 17 00:00:00 2001 From: pete318 Date: Sun, 27 Sep 2015 21:27:23 +0100 Subject: [PATCH 085/524] Auction house changes: - Stop storing guid for auctioneer. - Store instead house ID - No separate ID for various houses. Only Horde, Alliance and Neutral. - Removed non-needed faction checks. - Use enum for auction house IDs NOTE: This will expire all current auctions and return item to player (or award to high bidder) in order to prepare database for the changes. --- sql/base/characters_database.sql | 4 +- .../2015_09_28_00_characters_335.sql | 5 ++ .../Implementation/CharacterDatabase.cpp | 4 +- .../game/AuctionHouse/AuctionHouseMgr.cpp | 80 ++++++++----------- .../game/AuctionHouse/AuctionHouseMgr.h | 16 ++-- .../AuctionHouseBot/AuctionHouseBotSeller.cpp | 12 +-- .../game/Handlers/AuctionHouseHandler.cpp | 30 +++++-- 7 files changed, 83 insertions(+), 68 deletions(-) create mode 100644 sql/updates/characters/2015_09_28_00_characters_335.sql diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 571b74a749..3ac09fe99c 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -190,7 +190,7 @@ DROP TABLE IF EXISTS `auctionhouse`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `auctionhouse` ( `id` int(10) unsigned NOT NULL DEFAULT '0', - `auctioneerguid` int(10) unsigned NOT NULL DEFAULT '0', + `houseid` tinyint(3) unsigned NOT NULL DEFAULT '7', `itemguid` int(10) unsigned NOT NULL DEFAULT '0', `itemowner` int(10) unsigned NOT NULL DEFAULT '0', `buyoutprice` int(10) unsigned NOT NULL DEFAULT '0', @@ -2509,7 +2509,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/2015_09_28_00_characters_335.sql b/sql/updates/characters/2015_09_28_00_characters_335.sql new file mode 100644 index 0000000000..f2ce50fd4c --- /dev/null +++ b/sql/updates/characters/2015_09_28_00_characters_335.sql @@ -0,0 +1,5 @@ +UPDATE `auctionhouse` +SET `time` = 0, `auctioneerguid` = 7; + +ALTER TABLE `auctionhouse` + CHANGE COLUMN `auctioneerguid` `houseid` TINYINT(3) UNSIGNED NOT NULL DEFAULT '7' AFTER `id`; diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 6494f92b52..cc5b3771e1 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -127,8 +127,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_ACTIONS_SPEC, "SELECT button, action, type FROM character_action WHERE guid = ? AND spec = ? ORDER BY button", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_MAILITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, item_guid, itemEntry, owner_guid FROM mail_items mi JOIN item_instance ii ON mi.item_guid = ii.guid WHERE mail_id = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_AUCTION_ITEMS, "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text, itemguid, itemEntry FROM auctionhouse ah JOIN item_instance ii ON ah.itemguid = ii.guid", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_AUCTIONS, "SELECT id, auctioneerguid, itemguid, itemEntry, count, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid", CONNECTION_SYNCH); - PrepareStatement(CHAR_INS_AUCTION, "INSERT INTO auctionhouse (id, auctioneerguid, itemguid, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_AUCTIONS, "SELECT id, houseid, itemguid, itemEntry, count, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit FROM auctionhouse ah INNER JOIN item_instance ii ON ii.guid = ah.itemguid", CONNECTION_SYNCH); + PrepareStatement(CHAR_INS_AUCTION, "INSERT INTO auctionhouse (id, houseid, itemguid, itemowner, buyoutprice, time, buyguid, lastbid, startbid, deposit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_AUCTION, "DELETE FROM auctionhouse WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_AUCTION_BID, "UPDATE auctionhouse SET buyguid = ?, lastbid = ? WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_MAIL, "INSERT INTO mail(id, messageType, stationery, mailTemplateId, sender, receiver, subject, body, has_items, expire_time, deliver_time, money, cod, checked) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 265eb6f38b..96a4fd42f5 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -61,6 +61,19 @@ AuctionHouseObject* AuctionHouseMgr::GetAuctionsMap(uint32 factionTemplateId) return &mNeutralAuctions; } +AuctionHouseObject* AuctionHouseMgr::GetAuctionsMapByHouseId(uint8 auctionHouseId) +{ + if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION)) + return &mNeutralAuctions; + + switch(auctionHouseId) + { + case AUCTIONHOUSE_ALLIANCE : return &mAllianceAuctions; + case AUCTIONHOUSE_HORDE : return &mHordeAuctions; + default : return &mNeutralAuctions; + } +} + uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count) { uint32 MSV = pItem->GetTemplate()->SellPrice; @@ -342,7 +355,7 @@ void AuctionHouseMgr::LoadAuctions() continue; } - GetAuctionsMap(aItem->factionTemplateId)->AddAuction(aItem); + GetAuctionsMapByHouseId(aItem->houseId)->AddAuction(aItem); ++count; } while (result->NextRow()); @@ -385,44 +398,32 @@ void AuctionHouseMgr::Update() AuctionHouseEntry const* AuctionHouseMgr::GetAuctionHouseEntry(uint32 factionTemplateId) { - uint32 houseid = 7; // goblin auction house + uint32 houseid = AUCTIONHOUSE_NEUTRAL; // goblin auction house if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION)) { // FIXME: found way for proper auctionhouse selection by another way // AuctionHouse.dbc have faction field with _player_ factions associated with auction house races. // but no easy way convert creature faction to player race faction for specific city - switch (factionTemplateId) - { - case 12: houseid = 1; break; // human - case 29: houseid = 6; break; // orc, and generic for horde - case 55: houseid = 2; break; // dwarf, and generic for alliance - case 68: houseid = 4; break; // undead - case 80: houseid = 3; break; // n-elf - case 104: houseid = 5; break; // trolls - case 120: houseid = 7; break; // booty bay, neutral - case 474: houseid = 7; break; // gadgetzan, neutral - case 855: houseid = 7; break; // everlook, neutral - case 1604: houseid = 6; break; // b-elfs, - default: // for unknown case - { - FactionTemplateEntry const* u_entry = sFactionTemplateStore.LookupEntry(factionTemplateId); - if (!u_entry) - houseid = 7; // goblin auction house - else if (u_entry->ourMask & FACTION_MASK_ALLIANCE) - houseid = 1; // human auction house - else if (u_entry->ourMask & FACTION_MASK_HORDE) - houseid = 6; // orc auction house - else - houseid = 7; // goblin auction house - break; - } - } + FactionTemplateEntry const* u_entry = sFactionTemplateStore.LookupEntry(factionTemplateId); + if (!u_entry) + houseid = AUCTIONHOUSE_NEUTRAL; // goblin auction house + else if (u_entry->ourMask & FACTION_MASK_ALLIANCE) + houseid = AUCTIONHOUSE_ALLIANCE; // human auction house + else if (u_entry->ourMask & FACTION_MASK_HORDE) + houseid = AUCTIONHOUSE_HORDE; // orc auction house + else + houseid = AUCTIONHOUSE_NEUTRAL; // goblin auction house } return sAuctionHouseStore.LookupEntry(houseid); } +AuctionHouseEntry const* AuctionHouseMgr::GetAuctionHouseEntryFromHouse(uint8 houseId) +{ + return (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION)) ? sAuctionHouseStore.LookupEntry(AUCTIONHOUSE_NEUTRAL) : sAuctionHouseStore.LookupEntry(houseId); +} + void AuctionHouseObject::AddAuction(AuctionEntry* auction) { ASSERT(auction); @@ -687,7 +688,7 @@ void AuctionEntry::SaveToDB(SQLTransaction& trans) const { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_AUCTION); stmt->setUInt32(0, Id); - stmt->setUInt32(1, auctioneer); + stmt->setUInt8(1, houseId); stmt->setUInt32(2, itemGUIDLow); stmt->setUInt32(3, owner); stmt->setUInt32(4, buyout); @@ -702,7 +703,7 @@ void AuctionEntry::SaveToDB(SQLTransaction& trans) const bool AuctionEntry::LoadFromDB(Field* fields) { Id = fields[0].GetUInt32(); - auctioneer = fields[1].GetUInt32(); + houseId = fields[1].GetUInt8(); itemGUIDLow = fields[2].GetUInt32(); itemEntry = fields[3].GetUInt32(); itemCount = fields[4].GetUInt32(); @@ -714,25 +715,10 @@ bool AuctionEntry::LoadFromDB(Field* fields) startbid = fields[10].GetUInt32(); deposit = fields[11].GetUInt32(); - CreatureData const* auctioneerData = sObjectMgr->GetCreatureData(auctioneer); - if (!auctioneerData) - { - TC_LOG_ERROR("misc", "Auction %u has not a existing auctioneer (GUID : %u)", Id, auctioneer); - return false; - } - - CreatureTemplate const* auctioneerInfo = sObjectMgr->GetCreatureTemplate(auctioneerData->id); - if (!auctioneerInfo) - { - TC_LOG_ERROR("misc", "Auction %u has not a existing auctioneer (GUID : %u Entry: %u)", Id, auctioneer, auctioneerData->id); - return false; - } - - factionTemplateId = auctioneerInfo->faction; - auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(factionTemplateId); + auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntryFromHouse(houseId); if (!auctionHouseEntry) { - TC_LOG_ERROR("misc", "Auction %u has auctioneer (GUID : %u Entry: %u) with wrong faction %u", Id, auctioneer, auctioneerData->id, factionTemplateId); + TC_LOG_ERROR("misc", "Auction %u has invalid house id %u", Id, houseId); return false; } diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index d67c814399..f05d858332 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -61,10 +61,17 @@ enum MailAuctionAnswers AUCTION_SALE_PENDING = 6 }; +enum AuctionHouses +{ + AUCTIONHOUSE_ALLIANCE = 2, + AUCTIONHOUSE_HORDE = 6, + AUCTIONHOUSE_NEUTRAL = 7 +}; + struct AuctionEntry { uint32 Id; - uint32 auctioneer; // creature low guid + uint8 houseId; uint32 itemGUIDLow; uint32 itemEntry; uint32 itemCount; @@ -76,11 +83,9 @@ struct AuctionEntry uint32 bidder; uint32 deposit; //deposit can be calculated only when creating auction AuctionHouseEntry const* auctionHouseEntry; // in AuctionHouse.dbc - uint32 factionTemplateId; // helpers - uint32 GetHouseId() const { return auctionHouseEntry->houseId; } - uint32 GetHouseFaction() const { return auctionHouseEntry->faction; } + uint8 GetHouseId() const { return houseId; } uint32 GetAuctionCut() const; uint32 GetAuctionOutBid() const; bool BuildAuctionInfo(WorldPacket & data) const; @@ -148,6 +153,7 @@ class AuctionHouseMgr typedef std::unordered_map ItemMap; AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId); + AuctionHouseObject* GetAuctionsMapByHouseId(uint8 auctionHouseId); AuctionHouseObject* GetBidsMap(uint32 factionTemplateId); Item* GetAItem(uint32 id) @@ -169,7 +175,7 @@ class AuctionHouseMgr static uint32 GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item* pItem, uint32 count); static AuctionHouseEntry const* GetAuctionHouseEntry(uint32 factionTemplateId); - + static AuctionHouseEntry const* GetAuctionHouseEntryFromHouse(uint8 houseId); public: //load first auction items, because of check if item exists, when loading diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index e6164b7700..22dc5bb0bd 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -906,15 +906,17 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config) items = sAuctionBotConfig->GetItemPerCycleNormal(); uint32 houseid = 0; - uint32 auctioneer = 0; switch (config.GetHouseType()) { case AUCTION_HOUSE_ALLIANCE: - houseid = 1; auctioneer = 79707; break; + houseid = AUCTIONHOUSE_ALLIANCE; + break; case AUCTION_HOUSE_HORDE: - houseid = 6; auctioneer = 4656; break; + houseid = AUCTIONHOUSE_HORDE; + break; default: - houseid = 7; auctioneer = 23442; break; + houseid = AUCTIONHOUSE_NEUTRAL; + break; } AuctionHouseEntry const* ahEntry = sAuctionHouseStore.LookupEntry(houseid); @@ -995,7 +997,7 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config) auctionEntry->itemEntry = item->GetEntry(); auctionEntry->startbid = bidPrice; auctionEntry->buyout = buyoutPrice; - auctionEntry->auctioneer = auctioneer; + auctionEntry->houseId = houseid; auctionEntry->bidder = 0; auctionEntry->bid = 0; auctionEntry->deposit = sAuctionMgr->GetAuctionDeposit(ahEntry, etime, item, stackCount); diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index aa51b19a65..0293901c9e 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -154,7 +154,6 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) return; } - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(auctioneer, UNIT_NPC_FLAG_AUCTIONEER); if (!creature) { @@ -259,9 +258,26 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) AuctionEntry* AH = new AuctionEntry(); if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_AUCTION)) - AH->auctioneer = 23442; ///@TODO - HARDCODED DB GUID, BAD BAD BAD + AH->houseId = AUCTIONHOUSE_NEUTRAL; else - AH->auctioneer = auctioneer.GetCounter(); + { + CreatureData const* auctioneerData = sObjectMgr->GetCreatureData(creature->GetSpawnId()); + if (!auctioneerData) + { + TC_LOG_ERROR("misc", "Data for auctioneer not found (%s)", auctioneer.ToString().c_str()); + return; + } + + CreatureTemplate const* auctioneerInfo = sObjectMgr->GetCreatureTemplate(auctioneerData->id); + if (!auctioneerInfo) + { + TC_LOG_ERROR("misc", "Non existing auctioneer (%s)", auctioneer.ToString().c_str()); + return; + } + + const AuctionHouseEntry* AHEntry = sAuctionMgr->GetAuctionHouseEntry(auctioneerInfo->faction); + AH->houseId = AHEntry->houseId; + } // Required stack size of auction matches to current item stack size, just move item to auctionhouse if (itemsCount == 1 && item->GetCount() == count[0]) @@ -285,8 +301,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) AH->deposit = deposit; AH->auctionHouseEntry = auctionHouseEntry; - TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) to auctioneer %u with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", - _player->GetName().c_str(), _player->GetGUID().GetCounter(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUID().GetCounter(), AH->auctioneer, item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); + TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", + _player->GetName().c_str(), _player->GetGUID().GetCounter(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUID().GetCounter(), item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); sAuctionMgr->AddAItem(item); auctionHouse->AddAuction(AH); @@ -333,8 +349,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) AH->deposit = deposit; AH->auctionHouseEntry = auctionHouseEntry; - TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) to auctioneer %u with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", - _player->GetName().c_str(), _player->GetGUID().GetCounter(), newItem->GetTemplate()->Name1.c_str(), newItem->GetEntry(), newItem->GetGUID().GetCounter(), AH->auctioneer, newItem->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); + TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", + _player->GetName().c_str(), _player->GetGUID().GetCounter(), newItem->GetTemplate()->Name1.c_str(), newItem->GetEntry(), newItem->GetGUID().GetCounter(), newItem->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); sAuctionMgr->AddAItem(newItem); auctionHouse->AddAuction(AH); From e5e2b093d20cda27ff4a24e82deed980d15ab523 Mon Sep 17 00:00:00 2001 From: r00ty Date: Mon, 28 Sep 2015 23:19:27 +0200 Subject: [PATCH 086/524] DB/Characters: Updated character create for update hash Updated hash for 2015_08_26_00_characters_335.sql for map local guids commit Closes https://github.com/TrinityCore/TrinityCore/issues/15601 --- sql/base/characters_database.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 3ac09fe99c..fe1a0ed8f1 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2509,7 +2509,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; From c0224d787470fcfe74b04137d1706dddc61eeb8f Mon Sep 17 00:00:00 2001 From: Sean Rhone Date: Mon, 28 Sep 2015 19:12:29 -0400 Subject: [PATCH 087/524] Update authserver.conf.dist - Added new line for consistency --- src/server/authserver/authserver.conf.dist | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist index 437ec221e9..1b10fa4e31 100644 --- a/src/server/authserver/authserver.conf.dist +++ b/src/server/authserver/authserver.conf.dist @@ -155,6 +155,7 @@ LoginDatabase.WorkerThreads = 1 # 1 - (Enabled) Wrong.Password.Login.Logging = 0 + # ################################################################################################### From 9d395ae8c08be538f8efa3e2e84ada1ba5d800ba Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Sep 2015 14:23:41 +0200 Subject: [PATCH 088/524] DB/Quest: Blackout Closes #15617 --- sql/updates/world/2015_09_29_00_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2015_09_29_00_world.sql diff --git a/sql/updates/world/2015_09_29_00_world.sql b/sql/updates/world/2015_09_29_00_world.sql new file mode 100644 index 0000000000..9acc58d0e2 --- /dev/null +++ b/sql/updates/world/2015_09_29_00_world.sql @@ -0,0 +1,6 @@ +-- +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=27075; +DELETE FROM `smart_scripts` WHERE `entryorguid`IN (27627) 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 +(27075,0,0,1,8,0,100,0,47935,0,0,0,33,27075,0,0,0,0,0,7,0,0,0,0,0,0,0,"Dun Argol Power Core - On Spellhit - Credit Kill"), +(27075,0,1,0,61,0,100,0,0,0,0,0,51,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dun Argol Power Core - On Spellhit - Kill Self"); From 70a5cdfc04f510d39af5ea050757f33804ae7723 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Sep 2015 14:29:35 +0200 Subject: [PATCH 089/524] DB/Quest: Anatoly Will Talk Closes #15618 --- sql/updates/world/2015_09_29_01_world.sql | 36 +++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 sql/updates/world/2015_09_29_01_world.sql diff --git a/sql/updates/world/2015_09_29_01_world.sql b/sql/updates/world/2015_09_29_01_world.sql new file mode 100644 index 0000000000..d3dd352b5c --- /dev/null +++ b/sql/updates/world/2015_09_29_01_world.sql @@ -0,0 +1,36 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=5 AND `SourceEntry`=27626; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 5, 27626, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'execute sai only if the player is the summoner'); + +UPDATE `creature_template` SET `npcflag`=16777216 WHERE `entry`=27626; +UPDATE `npc_spellclick_spells` SET `cast_flags`=1 WHERE `npc_entry`=27626 AND `spell_id`=49138; +DELETE FROM `smart_scripts` WHERE `entryorguid`=27626 AND `source_type`=0 AND `id`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=27627 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `event_phase_mask`=0 WHERE `entryorguid`=27626 AND `source_type`=0 AND `id`=4; +UPDATE `vehicle_template_accessory` SET `minion`=1, `summontype`=5, `summontimer`=0 WHERE `entry`=27626; + +UPDATE `smart_scripts` SET `event_param1`=11000, `event_param2`=11000, `action_param1`=61647 WHERE `entryorguid`=2693500 AND `source_type`=9 AND `id`=3; +UPDATE `smart_scripts` SET `event_param1`=3000, `event_param2`=3000, `action_type`=51, `comment`="Anatoly - On Script - Kill self" WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=10; +UPDATE `smart_scripts` SET `id`=11 WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=10 AND `action_type`=51; +UPDATE `smart_scripts` SET `id`=10 WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=9 AND `action_type`=69; +UPDATE `smart_scripts` SET `id`=9 WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=8 AND `action_type`=45; +UPDATE `smart_scripts` SET `id`=8 WHERE `entryorguid`=2697100 AND `source_type`=9 AND `id`=7 and `action_type`=1; + +DELETE FROM `smart_scripts` WHERE `entryorguid`IN (2697100) AND `source_type`=9 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 +(2697100,9,7,0,0,0,100,0,0,0,0,0,51,0,0,0,0,0,0,19,27632,20,0,0,0,0,0,"Anatoly - On Script - Kill Tatjana"); + +DELETE FROM `smart_scripts` WHERE `entryorguid`IN (27626) 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 +(27626,0,8,9,61,0,100,0,0,0,0,0,11,49162,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tatjana's Horse - On Waypoint 19 Reached - Summon Tatjana"), +(27626,0,9,10,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,19,27627,20,0,0,0,0,0,"Tatjana's Horse - On Waypoint 19 Reached - Despawn"), +(27626,0,10,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tatjana's Horse - On Waypoint 19 Reached - Despawn"); + +DELETE FROM `smart_scripts` WHERE `entryorguid`IN (27627) AND `source_type`=0 AND `id`= 6; +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 +(27627,0,6,0,8,0,100,0,49134,0,0,0,20,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Tatjana - On Spellhit 'Tranquilizer Dart' - Stop Attack"); + +DELETE FROM `creature_template_addon` WHERE `entry`=27632; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`auras`) VALUES +(27632,0,0,"49135"); From 402a3c45ffe65597d9863dce5fb76362795d706a Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 28 Sep 2015 17:20:27 +0200 Subject: [PATCH 090/524] Core/Maps: Moved corpse management to map level (cherry picked from commit cd27fd38b93884797c094a82dc7beb0498e2f124) # Conflicts: # src/server/database/Database/Implementation/CharacterDatabase.cpp # src/server/database/Database/Implementation/CharacterDatabase.h # src/server/game/Entities/Corpse/Corpse.cpp # src/server/game/Entities/Creature/GossipDef.cpp # src/server/game/Entities/Player/Player.cpp # src/server/game/Entities/Player/Player.h # src/server/game/Globals/ObjectAccessor.cpp # src/server/game/Globals/ObjectAccessor.h # src/server/game/Globals/ObjectMgr.cpp # src/server/game/Globals/ObjectMgr.h # src/server/game/Grids/ObjectGridLoader.cpp # src/server/game/Handlers/AuctionHouseHandler.cpp # src/server/game/Handlers/CharacterHandler.cpp # src/server/game/Handlers/ChatHandler.cpp # src/server/game/Handlers/QueryHandler.cpp # src/server/game/Maps/Map.cpp # src/server/game/Server/Packets/CharacterPackets.cpp # src/server/game/World/World.cpp # src/server/scripts/Commands/cs_reload.cpp --- .../Implementation/CharacterDatabase.cpp | 1 + .../Implementation/CharacterDatabase.h | 1 + src/server/game/AI/SmartScripts/SmartAI.cpp | 6 +- src/server/game/Battlefield/Battlefield.cpp | 2 +- .../game/Battlegrounds/Battleground.cpp | 9 +- src/server/game/Entities/Corpse/Corpse.cpp | 17 +- src/server/game/Entities/Corpse/Corpse.h | 1 + src/server/game/Entities/Object/Object.cpp | 2 +- src/server/game/Entities/Player/Player.cpp | 70 ++++--- src/server/game/Entities/Player/Player.h | 35 ++-- src/server/game/Globals/ObjectAccessor.cpp | 188 +----------------- src/server/game/Globals/ObjectAccessor.h | 106 ++++------ src/server/game/Globals/ObjectMgr.cpp | 16 +- src/server/game/Globals/ObjectMgr.h | 7 +- src/server/game/Grids/ObjectGridLoader.cpp | 56 ++---- src/server/game/Handlers/CharacterHandler.cpp | 15 +- src/server/game/Handlers/MiscHandler.cpp | 1 - src/server/game/Handlers/MovementHandler.cpp | 4 +- src/server/game/Handlers/NPCHandler.cpp | 10 +- src/server/game/Handlers/QueryHandler.cpp | 27 ++- src/server/game/Maps/Map.cpp | 109 +++++++++- src/server/game/Maps/Map.h | 24 +++ src/server/game/Maps/MapManager.cpp | 7 +- src/server/game/World/World.cpp | 11 +- src/server/game/World/World.h | 2 + src/server/scripts/Commands/cs_instance.cpp | 4 +- src/server/scripts/Commands/cs_misc.cpp | 8 +- src/server/scripts/Commands/cs_server.cpp | 2 +- .../scripts/Kalimdor/zone_bloodmyst_isle.cpp | 4 +- src/server/worldserver/Main.cpp | 1 - 30 files changed, 328 insertions(+), 418 deletions(-) diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index cc5b3771e1..b5b79a3e11 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -320,6 +320,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_INS_CORPSE, "INSERT INTO corpse (guid, posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CORPSE, "DELETE FROM corpse WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CORPSES_FROM_MAP, "DELETE FROM corpse WHERE mapId = ? AND instanceId = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CORPSE_LOCATION, "SELECT mapId, posX, posY, posZ, orientation FROM corpse WHERE guid = ?", CONNECTION_ASYNC); // Creature respawn PrepareStatement(CHAR_SEL_CREATURE_RESPAWNS, "SELECT guid, respawnTime FROM creature_respawn WHERE mapId = ? AND instanceId = ?", CONNECTION_SYNCH); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index 5ebafe0d0f..c76c584a0a 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -269,6 +269,7 @@ enum CharacterDatabaseStatements CHAR_INS_CORPSE, CHAR_DEL_CORPSE, CHAR_DEL_CORPSES_FROM_MAP, + CHAR_SEL_CORPSE_LOCATION, CHAR_SEL_CREATURE_RESPAWNS, CHAR_REP_CREATURE_RESPAWN, diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 1a51bb2d89..7c507ad59b 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -208,7 +208,7 @@ void SmartAI::EndPath(bool fail) if (targets->size() == 1 && GetScript()->IsPlayer((*targets->begin()))) { Player* player = (*targets->begin())->ToPlayer(); - if (!fail && player->IsAtGroupRewardDistance(me) && !player->GetCorpse()) + if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse()) player->GroupEventHappens(mEscortQuestID, me); if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE) @@ -220,7 +220,7 @@ void SmartAI::EndPath(bool fail) { Player* groupGuy = groupRef->GetSource(); - if (!fail && groupGuy->IsAtGroupRewardDistance(me) && !groupGuy->GetCorpse()) + if (!fail && groupGuy->IsAtGroupRewardDistance(me) && !groupGuy->HasCorpse()) groupGuy->AreaExploredOrEventHappens(mEscortQuestID); if (fail && groupGuy->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE) groupGuy->FailQuest(mEscortQuestID); @@ -233,7 +233,7 @@ void SmartAI::EndPath(bool fail) if (GetScript()->IsPlayer((*iter))) { Player* player = (*iter)->ToPlayer(); - if (!fail && player->IsAtGroupRewardDistance(me) && !player->GetCorpse()) + if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse()) player->AreaExploredOrEventHappens(mEscortQuestID); if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE) player->FailQuest(mEscortQuestID); diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 4618101171..d22ac0ea5d 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -695,7 +695,7 @@ void BfGraveyard::Resurrect() player->CastSpell(player, 6962, true); player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true); - sObjectAccessor->ConvertCorpseForPlayer(player->GetGUID()); + player->SpawnCorpseBones(false); } m_ResurrectQueue.clear(); diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 2b4d5a4df5..ad8a7b9e72 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -367,7 +367,7 @@ inline void Battleground::_ProcessResurrect(uint32 diff) player->ResurrectPlayer(1.0f); player->CastSpell(player, 6962, true); player->CastSpell(player, SPELL_SPIRIT_HEAL_MANA, true); - sObjectAccessor->ConvertCorpseForPlayer(*itr); + player->SpawnCorpseBones(false); } m_ResurrectQueue.clear(); } @@ -889,8 +889,11 @@ void Battleground::RemovePlayerAtLeave(ObjectGuid guid, bool Transport, bool Sen player->SpawnCorpseBones(); } } - else // try to resurrect the offline player. If he is alive nothing will happen - sObjectAccessor->ConvertCorpseForPlayer(guid); + else + { + SQLTransaction trans(nullptr); + Player::OfflineResurrect(guid, trans); + } RemovePlayer(player, guid, team); // BG subclass specific code diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 11c0885bee..360cfdf1ae 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -22,6 +22,7 @@ #include "UpdateMask.h" #include "ObjectAccessor.h" #include "DatabaseEnv.h" +#include "World.h" Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type) { @@ -138,10 +139,14 @@ void Corpse::DeleteBonesFromWorld() void Corpse::DeleteFromDB(SQLTransaction& trans) { - PreparedStatement* stmt = NULL; - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSE); - stmt->setUInt32(0, GetOwnerGUID().GetCounter()); - trans->Append(stmt); + DeleteFromDB(GetOwnerGUID(), trans); +} + +void Corpse::DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans) +{ + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSE); + stmt->setUInt32(0, ownerGuid.GetCounter()); + CharacterDatabase.ExecuteOrAppend(trans, stmt); } bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields) @@ -193,6 +198,10 @@ bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields) bool Corpse::IsExpired(time_t t) const { + // Deleted character + if (!sWorld->GetCharacterNameData(GetOwnerGUID())) + return true; + if (m_type == CORPSE_BONES) return m_time < t - 60 * MINUTE; else diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index c3a693d30d..eeb22a064b 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -63,6 +63,7 @@ class Corpse : public WorldObject, public GridObject void DeleteBonesFromWorld(); void DeleteFromDB(SQLTransaction& trans); + static void DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans); ObjectGuid GetOwnerGUID() const { return GetGuidValue(CORPSE_FIELD_OWNER); } diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index f5af355633..21a65440a5 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1743,7 +1743,7 @@ void WorldObject::SendObjectDeSpawnAnim(ObjectGuid guid) void WorldObject::SetMap(Map* map) { ASSERT(map); - ASSERT(!IsInWorld() || GetTypeId() == TYPEID_CORPSE); + ASSERT(!IsInWorld()); if (m_currMap == map) // command add npc: first create, than loadfromdb return; if (m_currMap) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index b5d3ebaa56..e4452b84da 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2022,6 +2022,8 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data) uint32 charFlags = 0; uint32 playerFlags = fields[14].GetUInt32(); + if (atLoginFlags & AT_LOGIN_RESURRECT) + playerFlags &= ~PLAYER_FLAGS_GHOST; if (playerFlags & PLAYER_FLAGS_HIDE_HELM) charFlags |= CHARACTER_FLAG_HIDE_HELM; if (playerFlags & PLAYER_FLAGS_HIDE_CLOAK) @@ -4537,10 +4539,6 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe charDelete_method = CHAR_DELETE_REMOVE; } - // convert corpse to bones if exist (to prevent exiting Corpse in World without DB entry) - // bones will be deleted by corpse/bones deleting thread shortly - sObjectAccessor->ConvertCorpseForPlayer(playerguid); - if (uint32 guildId = GetGuildIdFromDB(playerguid)) if (Guild* guild = sGuildMgr->GetGuildById(guildId)) guild->DeleteMember(playerguid, false, false, true); @@ -4841,6 +4839,8 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt32(0, guid); trans->Append(stmt); + Corpse::DeleteFromDB(playerguid, trans); + CharacterDatabase.CommitTransaction(trans); break; } @@ -4940,18 +4940,17 @@ void Player::BuildPlayerRepop() // there must be SMSG.FORCE_RUN_SPEED_CHANGE, SMSG.FORCE_SWIM_SPEED_CHANGE, SMSG.MOVE_WATER_WALK // there must be SMSG.STOP_MIRROR_TIMER - // there we must send 888 opcode - // the player cannot have a corpse already, only bones which are not returned by GetCorpse - if (GetCorpse()) + // the player cannot have a corpse already on current map, only bones which are not returned by GetCorpse + WorldLocation corpseLocation = GetCorpseLocation(); + if (corpseLocation.GetMapId() == GetMapId()) { TC_LOG_ERROR("entities.player", "BuildPlayerRepop: player %s(%d) already has a corpse", GetName().c_str(), GetGUID().GetCounter()); return; } // create a corpse and place it at the player's location - CreateCorpse(); - Corpse* corpse = GetCorpse(); + Corpse* corpse = CreateCorpse(); if (!corpse) { TC_LOG_ERROR("entities.player", "Error creating corpse for Player %s [%u]", GetName().c_str(), GetGUID().GetCounter()); @@ -5093,7 +5092,16 @@ void Player::KillPlayer() UpdateObjectVisibility(); } -void Player::CreateCorpse() +void Player::OfflineResurrect(ObjectGuid const& guid, SQLTransaction& trans) +{ + Corpse::DeleteFromDB(guid, trans); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); + stmt->setUInt16(0, uint16(AT_LOGIN_RESURRECT)); + stmt->setUInt64(1, guid.GetCounter()); + CharacterDatabase.ExecuteOrAppend(trans, stmt); +} + +Corpse* Player::CreateCorpse() { // prevent existence 2 corpse for player SpawnCorpseBones(); @@ -5106,9 +5114,11 @@ void Player::CreateCorpse() if (!corpse->Create(GetMap()->GenerateLowGuid(), this)) { delete corpse; - return; + return nullptr; } + _corpseLocation.WorldRelocate(*this); + _uf = GetUInt32Value(UNIT_FIELD_BYTES_0); _pb = GetUInt32Value(PLAYER_BYTES); _pb2 = GetUInt32Value(PLAYER_BYTES_2); @@ -5159,19 +5169,21 @@ void Player::CreateCorpse() corpse->SaveToDB(); // register for player, but not show - sObjectAccessor->AddCorpse(corpse); + GetMap()->AddCorpse(corpse); + return corpse; } -void Player::SpawnCorpseBones() +void Player::SpawnCorpseBones(bool triggerSave /*= true*/) { - if (sObjectAccessor->ConvertCorpseForPlayer(GetGUID())) - if (!GetSession()->PlayerLogoutWithSave()) // at logout we will already store the player - SaveToDB(); // prevent loading as ghost without corpse + _corpseLocation.WorldRelocate(); + if (GetMap()->ConvertCorpseToBones(GetGUID())) + if (triggerSave && !GetSession()->PlayerLogoutWithSave()) // at logout we will already store the player + SaveToDB(); // prevent loading as ghost without corpse } Corpse* Player::GetCorpse() const { - return sObjectAccessor->GetCorpseForPlayerGUID(GetGUID()); + return GetMap()->GetCorpseByPlayer(GetGUID()); } void Player::DurabilityLossAll(double percent, bool inventory) @@ -8580,9 +8592,11 @@ void Player::RemovedInsignia(Player* looterPlr) RepopAtGraveyard(); } + _corpseLocation.WorldRelocate(); + // We have to convert player corpse to bones, not to be able to resurrect there // SpawnCorpseBones isn't handy, 'cos it saves player while he in BG - Corpse* bones = sObjectAccessor->ConvertCorpseForPlayer(GetGUID(), true); + Corpse* bones = GetMap()->ConvertCorpseToBones(GetGUID(), true); if (!bones) return; @@ -17910,18 +17924,24 @@ void Player::_LoadGlyphAuras() } } -void Player::LoadCorpse() +void Player::LoadCorpse(PreparedQueryResult result) { - if (IsAlive()) - sObjectAccessor->ConvertCorpseForPlayer(GetGUID()); - else + if (IsAlive() || HasAtLoginFlag(AT_LOGIN_RESURRECT)) + SpawnCorpseBones(false); + + if (!IsAlive()) { - if (Corpse* corpse = GetCorpse()) - ApplyModFlag(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTE_RELEASE_TIMER, corpse && !sMapStore.LookupEntry(corpse->GetMapId())->Instanceable()); + if (result && !HasAtLoginFlag(AT_LOGIN_RESURRECT)) + { + Field* fields = result->Fetch(); + _corpseLocation.WorldRelocate(fields[0].GetUInt16(), fields[1].GetFloat(), fields[2].GetFloat(), fields[3].GetFloat(), fields[4].GetFloat()); + ApplyModFlag(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTE_RELEASE_TIMER, !sMapStore.LookupEntry(_corpseLocation.GetMapId())->Instanceable()); + } else - //Prevent Dead Player login without corpse ResurrectPlayer(0.5f); } + + RemoveAtLoginFlag(AT_LOGIN_RESURRECT); } void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 94d0fa5697..e798f5d98d 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -503,15 +503,16 @@ enum PlayerExtraFlags // 2^n values enum AtLoginFlags { - AT_LOGIN_NONE = 0x00, - AT_LOGIN_RENAME = 0x01, - AT_LOGIN_RESET_SPELLS = 0x02, - AT_LOGIN_RESET_TALENTS = 0x04, - AT_LOGIN_CUSTOMIZE = 0x08, - AT_LOGIN_RESET_PET_TALENTS = 0x10, - AT_LOGIN_FIRST = 0x20, - AT_LOGIN_CHANGE_FACTION = 0x40, - AT_LOGIN_CHANGE_RACE = 0x80 + AT_LOGIN_NONE = 0x000, + AT_LOGIN_RENAME = 0x001, + AT_LOGIN_RESET_SPELLS = 0x002, + AT_LOGIN_RESET_TALENTS = 0x004, + AT_LOGIN_CUSTOMIZE = 0x008, + AT_LOGIN_RESET_PET_TALENTS = 0x010, + AT_LOGIN_FIRST = 0x020, + AT_LOGIN_CHANGE_FACTION = 0x040, + AT_LOGIN_CHANGE_RACE = 0x080, + AT_LOGIN_RESURRECT = 0x100, }; typedef std::map QuestStatusMap; @@ -819,6 +820,7 @@ enum PlayerLoginQueryIndex PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES = 30, PLAYER_LOGIN_QUERY_LOAD_SEASONAL_QUEST_STATUS = 31, PLAYER_LOGIN_QUERY_LOAD_MONTHLY_QUEST_STATUS = 32, + PLAYER_LOGIN_QUERY_LOAD_CORPSE_LOCATION = 33, MAX_PLAYER_LOGIN_QUERY }; @@ -1343,7 +1345,7 @@ class Player : public Unit, public GridObject void AddItemDurations(Item* item); void RemoveItemDurations(Item* item); void SendItemDurations(); - void LoadCorpse(); + void LoadCorpse(PreparedQueryResult result); void LoadPet(); bool AddItem(uint32 itemId, uint32 count); @@ -1835,17 +1837,20 @@ class Player : public Unit, public GridObject bool UpdatePosition(const Position &pos, bool teleport = false) { return UpdatePosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teleport); } void UpdateUnderwaterState(Map* m, float x, float y, float z) override; - void SendMessageToSet(WorldPacket* data, bool self) override {SendMessageToSetInRange(data, GetVisibilityRange(), self); }// overwrite Object::SendMessageToSet - void SendMessageToSetInRange(WorldPacket* data, float fist, bool self) override;// overwrite Object::SendMessageToSetInRange + void SendMessageToSet(WorldPacket* data, bool self) override { SendMessageToSetInRange(data, GetVisibilityRange(), self); } + void SendMessageToSetInRange(WorldPacket* data, float dist, bool self) override; void SendMessageToSetInRange(WorldPacket* data, float dist, bool self, bool own_team_only); void SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr) override; void SendTeleportAckPacket(); Corpse* GetCorpse() const; - void SpawnCorpseBones(); - void CreateCorpse(); + void SpawnCorpseBones(bool triggerSave = true); + Corpse* CreateCorpse(); void KillPlayer(); + static void OfflineResurrect(ObjectGuid const& guid, SQLTransaction& trans); + bool HasCorpse() const { return _corpseLocation.GetMapId() != MAPID_INVALID; } + WorldLocation GetCorpseLocation() const { return _corpseLocation; } uint32 GetResurrectionSpellId(); void ResurrectPlayer(float restore_percent, bool applySickness = false); void BuildPlayerRepop(); @@ -2624,6 +2629,8 @@ class Player : public Unit, public GridObject uint32 _pendingBindTimer; uint32 _activeCheats; + + WorldLocation _corpseLocation; }; void AddItemsSetItem(Player* player, Item* item); diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index f5e9b6bb5b..ca974ba9a3 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -34,10 +34,6 @@ #include #include -ObjectAccessor::ObjectAccessor() { } - -ObjectAccessor::~ObjectAccessor() { } - WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid const& guid) { switch (guid.GetHigh()) @@ -210,6 +206,11 @@ Player* ObjectAccessor::FindConnectedPlayerByName(std::string const& name) return NULL; } +HashMapHolder::MapType const& ObjectAccessor::GetPlayers() +{ + return HashMapHolder::GetContainer(); +} + void ObjectAccessor::SaveAllPlayers() { boost::shared_lock lock(*HashMapHolder::GetLock()); @@ -219,185 +220,6 @@ void ObjectAccessor::SaveAllPlayers() itr->second->SaveToDB(); } -Corpse* ObjectAccessor::GetCorpseForPlayerGUID(ObjectGuid const& guid) -{ - boost::shared_lock lock(_corpseLock); - - Player2CorpsesMapType::iterator iter = i_player2corpse.find(guid); - if (iter == i_player2corpse.end()) - return NULL; - - ASSERT(iter->second->GetType() != CORPSE_BONES); - - return iter->second; -} - -void ObjectAccessor::RemoveCorpse(Corpse* corpse) -{ - ASSERT(corpse && corpse->GetType() != CORPSE_BONES); - - boost::upgrade_lock lock(_corpseLock); - - /// @todo more works need to be done for corpse and other world object - if (Map* map = corpse->FindMap()) - { - corpse->DestroyForNearbyPlayers(); - if (corpse->IsInGrid()) - map->RemoveFromMap(corpse, false); - else - { - corpse->RemoveFromWorld(); - corpse->ResetMap(); - } - } - else - corpse->RemoveFromWorld(); - - // Critical section - { - boost::upgrade_to_unique_lock uniqueLock(lock); - - Player2CorpsesMapType::iterator iter = i_player2corpse.find(corpse->GetOwnerGUID()); - if (iter == i_player2corpse.end()) /// @todo Fix this - return; - - // build mapid*cellid -> guid_set map - CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY()); - sObjectMgr->DeleteCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), corpse->GetOwnerGUID().GetCounter()); - - i_player2corpse.erase(iter); - } -} - -void ObjectAccessor::AddCorpse(Corpse* corpse) -{ - ASSERT(corpse && corpse->GetType() != CORPSE_BONES); - - // Critical section - { - boost::unique_lock lock(_corpseLock); - - ASSERT(i_player2corpse.find(corpse->GetOwnerGUID()) == i_player2corpse.end()); - i_player2corpse[corpse->GetOwnerGUID()] = corpse; - - // build mapid*cellid -> guid_set map - CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY()); - sObjectMgr->AddCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), corpse->GetOwnerGUID().GetCounter(), corpse->GetInstanceId()); - } -} - -void ObjectAccessor::AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map) -{ - boost::shared_lock lock(_corpseLock); - - for (Player2CorpsesMapType::iterator iter = i_player2corpse.begin(); iter != i_player2corpse.end(); ++iter) - { - // We need this check otherwise a corpose may be added to a grid twice - if (iter->second->IsInGrid()) - continue; - - if (iter->second->GetGridCoord() == gridpair) - { - // verify, if the corpse in our instance (add only corpses which are) - if (map->Instanceable()) - { - if (iter->second->GetInstanceId() == map->GetInstanceId()) - grid.AddWorldObject(iter->second); - } - else - grid.AddWorldObject(iter->second); - } - } -} - -Corpse* ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid const& player_guid, bool insignia /*=false*/) -{ - Corpse* corpse = GetCorpseForPlayerGUID(player_guid); - if (!corpse) - { - //in fact this function is called from several places - //even when player doesn't have a corpse, not an error - return NULL; - } - - TC_LOG_DEBUG("misc", "Deleting Corpse and spawned bones."); - - // Map can be NULL - Map* map = corpse->FindMap(); - - // remove corpse from player_guid -> corpse map and from current map - RemoveCorpse(corpse); - - // remove corpse from DB - SQLTransaction trans = CharacterDatabase.BeginTransaction(); - corpse->DeleteFromDB(trans); - CharacterDatabase.CommitTransaction(trans); - - Corpse* bones = NULL; - // create the bones only if the map and the grid is loaded at the corpse's location - // ignore bones creating option in case insignia - - if (map && (insignia || - (map->IsBattlegroundOrArena() ? sWorld->getBoolConfig(CONFIG_DEATH_BONES_BG_OR_ARENA) : sWorld->getBoolConfig(CONFIG_DEATH_BONES_WORLD))) && - !map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY())) - { - // Create bones, don't change Corpse - bones = new Corpse; - bones->Create(corpse->GetGUID().GetCounter(), map); - - for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type - bones->SetUInt32Value(i, corpse->GetUInt32Value(i)); - - bones->SetGridCoord(corpse->GetGridCoord()); - // bones->m_time = m_time; // don't overwrite time - // bones->m_type = m_type; // don't overwrite type - bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation()); - bones->SetPhaseMask(corpse->GetPhaseMask(), false); - - bones->SetUInt32Value(CORPSE_FIELD_FLAGS, CORPSE_FLAG_UNK2 | CORPSE_FLAG_BONES); - bones->SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid::Empty); - - for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i) - { - if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i)) - bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0); - } - - // add bones in grid store if grid loaded where corpse placed - map->AddToMap(bones); - } - - // all references to the corpse should be removed at this point - delete corpse; - - return bones; -} - -void ObjectAccessor::RemoveOldCorpses() -{ - time_t now = time(NULL); - Player2CorpsesMapType::iterator next; - for (Player2CorpsesMapType::iterator itr = i_player2corpse.begin(); itr != i_player2corpse.end(); itr = next) - { - next = itr; - ++next; - - if (!itr->second->IsExpired(now)) - continue; - - ConvertCorpseForPlayer(itr->first); - } -} - -void ObjectAccessor::UnloadAll() -{ - for (Player2CorpsesMapType::const_iterator itr = i_player2corpse.begin(); itr != i_player2corpse.end(); ++itr) - { - itr->second->RemoveFromWorld(); - delete itr->second; - } -} - /// Define the static members of HashMapHolder template typename HashMapHolder::MapType HashMapHolder::_objectMap; diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 54e2a7298e..d5fb8564b9 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -85,85 +85,47 @@ class HashMapHolder static MapType _objectMap; }; -class ObjectAccessor +namespace ObjectAccessor { - private: - ObjectAccessor(); - ~ObjectAccessor(); - ObjectAccessor(const ObjectAccessor&); - ObjectAccessor& operator=(const ObjectAccessor&); + // these functions return objects only if in map of specified object + WorldObject* GetWorldObject(WorldObject const&, ObjectGuid const&); + Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const&, uint32 typemask); + Corpse* GetCorpse(WorldObject const& u, ObjectGuid const& guid); + GameObject* GetGameObject(WorldObject const& u, ObjectGuid const& guid); + Transport* GetTransport(WorldObject const& u, ObjectGuid const& guid); + DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const& guid); + Unit* GetUnit(WorldObject const&, ObjectGuid const& guid); + Creature* GetCreature(WorldObject const& u, ObjectGuid const& guid); + Pet* GetPet(WorldObject const&, ObjectGuid const& guid); + Player* GetPlayer(Map const*, ObjectGuid const& guid); + Player* GetPlayer(WorldObject const&, ObjectGuid const& guid); + Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid const&); - public: - /// @todo: Override these template functions for each holder type and add assertions + // these functions return objects if found in whole world + // ACCESS LIKE THAT IS NOT THREAD SAFE + Player* FindPlayer(ObjectGuid const&); + Player* FindPlayerByName(std::string const& name); - static ObjectAccessor* instance() - { - static ObjectAccessor instance; - return &instance; - } + // this returns Player even if he is not in world, for example teleporting + Player* FindConnectedPlayer(ObjectGuid const&); + Player* FindConnectedPlayerByName(std::string const& name); - // these functions return objects only if in map of specified object - static WorldObject* GetWorldObject(WorldObject const&, ObjectGuid const&); - static Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const&, uint32 typemask); - static Corpse* GetCorpse(WorldObject const& u, ObjectGuid const& guid); - static GameObject* GetGameObject(WorldObject const& u, ObjectGuid const& guid); - static Transport* GetTransport(WorldObject const& u, ObjectGuid const& guid); - static DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const& guid); - static Unit* GetUnit(WorldObject const&, ObjectGuid const& guid); - static Creature* GetCreature(WorldObject const& u, ObjectGuid const& guid); - static Pet* GetPet(WorldObject const&, ObjectGuid const& guid); - static Player* GetPlayer(Map const*, ObjectGuid const& guid); - static Player* GetPlayer(WorldObject const&, ObjectGuid const& guid); - static Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid const&); + // when using this, you must use the hashmapholder's lock + HashMapHolder::MapType const& GetPlayers(); - // these functions return objects if found in whole world - // ACCESS LIKE THAT IS NOT THREAD SAFE - static Player* FindPlayer(ObjectGuid const&); - static Player* FindPlayerByName(std::string const& name); + template + void AddObject(T* object) + { + HashMapHolder::Insert(object); + } - // this returns Player even if he is not in world, for example teleporting - static Player* FindConnectedPlayer(ObjectGuid const&); - static Player* FindConnectedPlayerByName(std::string const& name); + template + void RemoveObject(T* object) + { + HashMapHolder::Remove(object); + } - // when using this, you must use the hashmapholder's lock - static HashMapHolder::MapType const& GetPlayers() - { - return HashMapHolder::GetContainer(); - } - - template static void AddObject(T* object) - { - HashMapHolder::Insert(object); - } - - template static void RemoveObject(T* object) - { - HashMapHolder::Remove(object); - } - - static void SaveAllPlayers(); - - //non-static functions - - //Thread safe - Corpse* GetCorpseForPlayerGUID(ObjectGuid const& guid); - void RemoveCorpse(Corpse* corpse); - void AddCorpse(Corpse* corpse); - void AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map); - Corpse* ConvertCorpseForPlayer(ObjectGuid const& player_guid, bool insignia = false); - - //Thread unsafe - void RemoveOldCorpses(); - void UnloadAll(); - - private: - typedef std::unordered_map Player2CorpsesMapType; - typedef std::unordered_map::value_type UpdateDataValueType; - - Player2CorpsesMapType i_player2corpse; - - boost::shared_mutex _corpseLock; + void SaveAllPlayers(); }; -#define sObjectAccessor ObjectAccessor::instance() #endif diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 4bf86facbe..b5d8d08a6a 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7358,20 +7358,6 @@ void ObjectMgr::DeleteGOData(uint32 guid) _gameObjectDataStore.erase(guid); } -void ObjectMgr::AddCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid, uint32 instance) -{ - // corpses are always added to spawn mode 0 and they are spawned by their instance id - CellObjectGuids& cell_guids = _mapObjectGuidsStore[MAKE_PAIR32(mapid, 0)][cellid]; - cell_guids.corpses[player_guid] = instance; -} - -void ObjectMgr::DeleteCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid) -{ - // corpses are always added to spawn mode 0 and they are spawned by their instance id - CellObjectGuids& cell_guids = _mapObjectGuidsStore[MAKE_PAIR32(mapid, 0)][cellid]; - cell_guids.corpses.erase(player_guid); -} - void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, QuestRelationsReverse* reverseMap, std::string const& table, bool starter, bool go) { uint32 oldMSTime = getMSTime(); @@ -8590,7 +8576,7 @@ void ObjectMgr::LoadScriptNames() do { - _scriptNamesStore.emplace_back((*result)[0].GetCString()); + _scriptNamesStore.push_back((*result)[0].GetString()); } while (result->NextRow()); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index b9d755636c..462370001d 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -445,13 +445,11 @@ struct BroadcastText typedef std::unordered_map BroadcastTextContainer; -typedef std::set CellGuidSet; -typedef std::map CellCorpseSet; +typedef std::set CellGuidSet; struct CellObjectGuids { CellGuidSet creatures; CellGuidSet gameobjects; - CellCorpseSet corpses; }; typedef std::unordered_map CellObjectGuidsMap; typedef std::unordered_map MapObjectGuids; @@ -1219,9 +1217,6 @@ class ObjectMgr LocaleConstant GetDBCLocaleIndex() const { return DBCLocaleIndex; } void SetDBCLocaleIndex(LocaleConstant locale) { DBCLocaleIndex = locale; } - void AddCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid, uint32 instance); - void DeleteCorpseCellData(uint32 mapid, uint32 cellid, uint32 player_guid); - // grid objects void AddCreatureToGrid(uint32 guid, CreatureData const* data); void RemoveCreatureFromGrid(uint32 guid, CreatureData const* data); diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index d0ae90d002..de0ab490e9 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -62,7 +62,7 @@ class ObjectWorldLoader { public: explicit ObjectWorldLoader(ObjectGridLoader& gloader) - : i_cell(gloader.i_cell), i_map(gloader.i_map), i_corpses (0) + : i_cell(gloader.i_cell), i_map(gloader.i_map), i_grid(gloader.i_grid), i_corpses(gloader.i_corpses) { } void Visit(CorpseMapType &m); @@ -72,8 +72,9 @@ class ObjectWorldLoader private: Cell i_cell; Map* i_map; + NGridType& i_grid; public: - uint32 i_corpses; + uint32& i_corpses; }; template void ObjectGridLoader::SetObjectCell(T* /*obj*/, CellCoord const& /*cellCoord*/) { } @@ -129,38 +130,6 @@ void LoadHelper(CellGuidSet const& guid_set, CellCoord &cell, GridRefManager } } -void LoadHelper(CellCorpseSet const& cell_corpses, CellCoord &cell, CorpseMapType &m, uint32 &count, Map* map) -{ - if (cell_corpses.empty()) - return; - - for (CellCorpseSet::const_iterator itr = cell_corpses.begin(); itr != cell_corpses.end(); ++itr) - { - if (itr->second != map->GetInstanceId()) - continue; - - ObjectGuid player_guid(HighGuid::Player, itr->first); - - Corpse* obj = sObjectAccessor->GetCorpseForPlayerGUID(player_guid); - if (!obj) - continue; - - /// @todo this is a hack - // corpse's map should be reset when the map is unloaded - // but it may still exist when the grid is unloaded but map is not - // in that case map == currMap - obj->SetMap(map); - - if (obj->IsInGrid()) - { - obj->AddToWorld(); - continue; - } - - AddObjectHelper(cell, m, count, map, obj); - } -} - void ObjectGridLoader::Visit(GameObjectMapType &m) { CellCoord cellCoord = i_cell.GetCellCoord(); @@ -175,22 +144,28 @@ void ObjectGridLoader::Visit(CreatureMapType &m) LoadHelper(cell_guids.creatures, cellCoord, m, i_creatures, i_map); } -void ObjectWorldLoader::Visit(CorpseMapType &m) +void ObjectWorldLoader::Visit(CorpseMapType& /*m*/) { CellCoord cellCoord = i_cell.GetCellCoord(); - // corpses are always added to spawn mode 0 and they are spawned by their instance id - CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), 0, cellCoord.GetId()); - LoadHelper(cell_guids.corpses, cellCoord, m, i_corpses, i_map); + if (std::unordered_set const* corpses = i_map->GetCorpsesInCell(cellCoord.GetId())) + { + for (Corpse* corpse : *corpses) + { + corpse->AddToWorld(); + i_grid.GetGridType(i_cell.CellX(), i_cell.CellY()).AddWorldObject(corpse); + ++i_corpses; + } + } } void ObjectGridLoader::LoadN(void) { i_gameObjects = 0; i_creatures = 0; i_corpses = 0; i_cell.data.Part.cell_y = 0; - for (unsigned int x=0; x < MAX_NUMBER_OF_CELLS; ++x) + for (uint32 x = 0; x < MAX_NUMBER_OF_CELLS; ++x) { i_cell.data.Part.cell_x = x; - for (unsigned int y=0; y < MAX_NUMBER_OF_CELLS; ++y) + for (uint32 y = 0; y < MAX_NUMBER_OF_CELLS; ++y) { i_cell.data.Part.cell_y = y; @@ -205,7 +180,6 @@ void ObjectGridLoader::LoadN(void) ObjectWorldLoader worker(*this); TypeContainerVisitor visitor(worker); i_grid.VisitGrid(x, y, visitor); - i_corpses += worker.i_corpses; } } } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 61b2837dc1..ba22ab6aa0 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -203,6 +203,10 @@ bool LoginQueryHolder::Initialize() stmt->setUInt32(0, m_accountId); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES, stmt); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSE_LOCATION); + stmt->setUInt64(0, lowGuid); + res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_CORPSE_LOCATION, stmt); + return res; } @@ -892,7 +896,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) pCurrChar->TeleportTo(pCurrChar->m_homebindMapId, pCurrChar->m_homebindX, pCurrChar->m_homebindY, pCurrChar->m_homebindZ, pCurrChar->GetOrientation()); } - sObjectAccessor->AddObject(pCurrChar); + ObjectAccessor::AddObject(pCurrChar); //TC_LOG_DEBUG("Player %s added to Map.", pCurrChar->GetName().c_str()); pCurrChar->SendInitialPacketsAfterAddToMap(); @@ -923,7 +927,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) sSocialMgr->SendFriendStatus(pCurrChar, FRIEND_ONLINE, pCurrChar->GetGUID().GetCounter(), true); // Place character in world (and load zone) before some object loading - pCurrChar->LoadCorpse(); + pCurrChar->LoadCorpse(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CORPSE_LOCATION)); // setting Ghost+speed if dead if (pCurrChar->m_deathState != ALIVE) @@ -1672,11 +1676,11 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) } } - // resurrect the character in case he's dead - sObjectAccessor->ConvertCorpseForPlayer(factionChangeInfo.Guid); - SQLTransaction trans = CharacterDatabase.BeginTransaction(); + // resurrect the character in case he's dead + Player::OfflineResurrect(factionChangeInfo.Guid, trans); + CharacterDatabase.EscapeString(factionChangeInfo.Name); Player::Customize(&factionChangeInfo, trans); @@ -1820,6 +1824,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) trans->Append(stmt); } + /// @todo: make this part async if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD)) { // Reset guild diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 51f7e3f840..2eebbfc100 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -741,7 +741,6 @@ void WorldSession::HandleReclaimCorpseOpcode(WorldPacket& recvData) return; Corpse* corpse = _player->GetCorpse(); - if (!corpse) return; diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 518baa42e9..84816bf3f3 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -142,8 +142,8 @@ void WorldSession::HandleMoveWorldportAckOpcode() } // resurrect character at enter into instance where his corpse exist after add to map - Corpse* corpse = GetPlayer()->GetCorpse(); - if (corpse && corpse->GetType() != CORPSE_BONES && corpse->GetMapId() == GetPlayer()->GetMapId()) + Corpse* corpse = GetPlayer()->GetMap()->GetCorpseByPlayer(GetPlayer()->GetGUID()); + if (corpse && corpse->GetType() != CORPSE_BONES) { if (mEntry->IsDungeon()) { diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 14436a864f..f8d7f73e07 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -403,10 +403,12 @@ void WorldSession::SendSpiritResurrect() // get corpse nearest graveyard WorldSafeLocsEntry const* corpseGrave = NULL; - Corpse* corpse = _player->GetCorpse(); - if (corpse) - corpseGrave = sObjectMgr->GetClosestGraveYard( - corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetMapId(), _player->GetTeam()); + WorldLocation corpseLocation = _player->GetCorpseLocation(); + if (_player->HasCorpse()) + { + corpseGrave = sObjectMgr->GetClosestGraveYard(corpseLocation.GetPositionX(), corpseLocation.GetPositionY(), + corpseLocation.GetPositionZ(), corpseLocation.GetMapId(), _player->GetTeam()); + } // now can spawn bones _player->SpawnCorpseBones(); diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 906c301710..6d896bee26 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -218,11 +218,7 @@ void WorldSession::HandleGameObjectQueryOpcode(WorldPacket& recvData) void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recvData*/) { - TC_LOG_DEBUG("network", "WORLD: Received MSG_CORPSE_QUERY"); - - Corpse* corpse = GetPlayer()->GetCorpse(); - - if (!corpse) + if (!_player->HasCorpse()) { WorldPacket data(MSG_CORPSE_QUERY, 1); data << uint8(0); // corpse not found @@ -230,24 +226,25 @@ void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recvData*/) return; } - uint32 mapid = corpse->GetMapId(); - float x = corpse->GetPositionX(); - float y = corpse->GetPositionY(); - float z = corpse->GetPositionZ(); - uint32 corpsemapid = mapid; + WorldLocation corpseLocation = _player->GetCorpseLocation(); + uint32 corpseMapID = corpseLocation.GetMapId(); + uint32 mapID = corpseLocation.GetMapId(); + float x = corpseLocation.GetPositionX(); + float y = corpseLocation.GetPositionY(); + float z = corpseLocation.GetPositionZ(); // if corpse at different map - if (mapid != _player->GetMapId()) + if (mapID != _player->GetMapId()) { // search entrance map for proper show entrance - if (MapEntry const* corpseMapEntry = sMapStore.LookupEntry(mapid)) + if (MapEntry const* corpseMapEntry = sMapStore.LookupEntry(mapID)) { if (corpseMapEntry->IsDungeon() && corpseMapEntry->entrance_map >= 0) { // if corpse map have entrance if (Map const* entranceMap = sMapMgr->CreateBaseMap(corpseMapEntry->entrance_map)) { - mapid = corpseMapEntry->entrance_map; + mapID = corpseMapEntry->entrance_map; x = corpseMapEntry->entrance_x; y = corpseMapEntry->entrance_y; z = entranceMap->GetHeight(GetPlayer()->GetPhaseMask(), x, y, MAX_HEIGHT); @@ -258,11 +255,11 @@ void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recvData*/) WorldPacket data(MSG_CORPSE_QUERY, 1+(6*4)); data << uint8(1); // corpse found - data << int32(mapid); + data << int32(mapID); data << float(x); data << float(y); data << float(z); - data << int32(corpsemapid); + data << int32(corpseMapID); data << uint32(0); // unknown SendPacket(&data); } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index b50099b978..7acafb3c34 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -50,9 +50,9 @@ GridState* si_GridStates[MAX_GRID_STATE]; Map::~Map() { - sScriptMgr->OnDestroyMap(this); + // UnloadAll must be called before deleting the map - UnloadAll(); + sScriptMgr->OnDestroyMap(this); while (!i_worldObjects.empty()) { @@ -400,7 +400,7 @@ void Map::DeleteFromWorld(T* obj) template<> void Map::DeleteFromWorld(Player* player) { - sObjectAccessor->RemoveObject(player); + ObjectAccessor::RemoveObject(player); RemoveUpdateObject(player); /// @todo I do not know why we need this, it should be removed in ~Object anyway delete player; } @@ -468,8 +468,6 @@ bool Map::EnsureGridLoaded(const Cell &cell) ObjectGridLoader loader(*grid, this, cell); loader.LoadN(); - // Add resurrectable corpses to world object list in grid - sObjectAccessor->AddCorpsesToGrid(GridCoord(cell.GridX(), cell.GridY()), grid->GetGridType(cell.CellX(), cell.CellY()), this); Balance(); return true; } @@ -507,6 +505,9 @@ bool Map::AddPlayerToMap(Player* player) player->m_clientGUIDs.clear(); player->UpdateObjectVisibility(false); + if (player->IsAlive()) + ConvertCorpseToBones(player->GetGUID()); + sScriptMgr->OnPlayerEnterMap(this, player); return true; } @@ -2610,7 +2611,7 @@ void Map::SendObjectUpdates() _updateObjects.erase(_updateObjects.begin()); obj->BuildUpdate(update_players); } - + WorldPacket packet; // here we allocate a std::vector with a size of 0x10000 for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter) { @@ -3530,7 +3531,6 @@ void Map::LoadCorpseData() if (!result) return; - uint32 count = 0; do { Field* fields = result->Fetch(); @@ -3550,8 +3550,8 @@ void Map::LoadCorpseData() continue; } - sObjectAccessor->AddCorpse(corpse); - ++count; + AddCorpse(corpse); + } while (result->NextRow()); } @@ -3564,6 +3564,97 @@ void Map::DeleteCorpseData() CharacterDatabase.Execute(stmt); } +void Map::AddCorpse(Corpse* corpse) +{ + corpse->SetMap(this); + + CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY()); + _corpsesByCell[cellCoord.GetId()].insert(corpse); + _corpsesByPlayer[corpse->GetOwnerGUID()] = corpse; +} + +void Map::RemoveCorpse(Corpse* corpse) +{ + ASSERT(corpse && corpse->GetType() != CORPSE_BONES); + + corpse->DestroyForNearbyPlayers(); + if (corpse->IsInGrid()) + RemoveFromMap(corpse, false); + else + { + corpse->RemoveFromWorld(); + corpse->ResetMap(); + } + + CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY()); + _corpsesByCell[cellCoord.GetId()].erase(corpse); + _corpsesByPlayer.erase(corpse->GetOwnerGUID()); +} + +Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= false*/) +{ + Corpse* corpse = GetCorpseByPlayer(ownerGuid); + if (!corpse) + return nullptr; + + RemoveCorpse(corpse); + + // remove corpse from DB + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + corpse->DeleteFromDB(trans); + CharacterDatabase.CommitTransaction(trans); + + Corpse* bones = NULL; + + // create the bones only if the map and the grid is loaded at the corpse's location + // ignore bones creating option in case insignia + if ((insignia || + (IsBattlegroundOrArena() ? sWorld->getBoolConfig(CONFIG_DEATH_BONES_BG_OR_ARENA) : sWorld->getBoolConfig(CONFIG_DEATH_BONES_WORLD))) && + !IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY())) + { + // Create bones, don't change Corpse + bones = new Corpse(); + bones->Create(corpse->GetGUID().GetCounter(), this); + + for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type + bones->SetUInt32Value(i, corpse->GetUInt32Value(i)); + + bones->SetGridCoord(corpse->GetGridCoord()); + bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation()); + bones->SetPhaseMask(corpse->GetPhaseMask(), false); + + bones->SetUInt32Value(CORPSE_FIELD_FLAGS, CORPSE_FLAG_UNK2 | CORPSE_FLAG_BONES); + bones->SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid::Empty); + + for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i) + if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i)) + bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0); + + // add bones in grid store if grid loaded where corpse placed + AddToMap(bones); + } + + // all references to the corpse should be removed at this point + delete corpse; + + return bones; +} + +void Map::RemoveOldCorpses() +{ + time_t now = time(nullptr); + + std::vector corpses; + corpses.reserve(_corpsesByPlayer.size()); + + for (auto const& p : _corpsesByPlayer) + if (p.second->IsExpired(now)) + corpses.push_back(p.first); + + for (ObjectGuid const& ownerGuid : corpses) + ConvertCorpseToBones(ownerGuid); +} + void Map::SendZoneDynamicInfo(Player* player) { uint32 zoneId = GetZoneId(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 9b5e67cdfa..2ba5e10c82 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -459,6 +459,24 @@ class Map : public GridRefManager typedef std::unordered_multimap GameObjectBySpawnIdContainer; GameObjectBySpawnIdContainer& GetGameObjectBySpawnIdStore() { return _gameobjectBySpawnIdStore; } + std::unordered_set const* GetCorpsesInCell(uint32 cellId) const + { + auto itr = _corpsesByCell.find(cellId); + if (itr != _corpsesByCell.end()) + return &itr->second; + + return nullptr; + } + + Corpse* GetCorpseByPlayer(ObjectGuid const& ownerGuid) const + { + auto itr = _corpsesByPlayer.find(ownerGuid); + if (itr != _corpsesByPlayer.end()) + return itr->second; + + return nullptr; + } + MapInstanced* ToMapInstanced() { if (Instanceable()) return reinterpret_cast(this); return NULL; } MapInstanced const* ToMapInstanced() const { if (Instanceable()) return reinterpret_cast(this); return NULL; } @@ -508,6 +526,10 @@ class Map : public GridRefManager void LoadCorpseData(); void DeleteCorpseData(); + void AddCorpse(Corpse* corpse); + void RemoveCorpse(Corpse* corpse); + Corpse* ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia = false); + void RemoveOldCorpses(); static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId); @@ -709,6 +731,8 @@ class Map : public GridRefManager MapStoredObjectTypesContainer _objectsStore; CreatureBySpawnIdContainer _creatureBySpawnIdStore; GameObjectBySpawnIdContainer _gameobjectBySpawnIdStore; + std::unordered_map> _corpsesByCell; + std::unordered_map _corpsesByPlayer; std::unordered_set _updateObjects; }; diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 82be6336dc..0e7f9dbb61 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -164,10 +164,10 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) if (!player->IsAlive()) { - if (Corpse* corpse = player->GetCorpse()) + if (player->HasCorpse()) { // let enter in ghost mode in instance that connected to inner instance with corpse - uint32 corpseMap = corpse->GetMapId(); + uint32 corpseMap = player->GetCorpseLocation().GetMapId(); do { if (corpseMap == mapid) @@ -184,9 +184,8 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) TC_LOG_DEBUG("maps", "MAP: Player '%s' does not have a corpse in instance '%s' and cannot enter.", player->GetName().c_str(), mapName); return false; } + TC_LOG_DEBUG("maps", "MAP: Player '%s' has corpse in instance '%s' and can enter.", player->GetName().c_str(), mapName); - player->ResurrectPlayer(0.5f, false); - player->SpawnCorpseBones(); } else TC_LOG_DEBUG("maps", "Map::CanPlayerEnter - player '%s' is dead but does not have a corpse!", player->GetName().c_str()); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index ce1837fbc8..2e61aecfb5 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2150,7 +2150,10 @@ void World::Update(uint32 diff) if (m_timers[WUPDATE_CORPSES].Passed()) { m_timers[WUPDATE_CORPSES].Reset(); - sObjectAccessor->RemoveOldCorpses(); + sMapMgr->DoForAllMaps([](Map* map) + { + map->RemoveOldCorpses(); + }); } ///- Process Game events when necessary @@ -3264,3 +3267,9 @@ void World::ReloadRBAC() if (WorldSession* session = itr->second) session->InvalidateRBACData(); } + +void World::RemoveOldCorpses() +{ + m_timers[WUPDATE_CORPSES].SetCurrent(m_timers[WUPDATE_CORPSES].GetInterval()); +} + diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index af89adcb04..256b856cf7 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -761,6 +761,8 @@ class World void ReloadRBAC(); + void RemoveOldCorpses(); + protected: void _UpdateGameTime(); // callback for UpdateRealmCharacters diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp index 78c8f970f5..c960d3f375 100644 --- a/src/server/scripts/Commands/cs_instance.cpp +++ b/src/server/scripts/Commands/cs_instance.cpp @@ -217,7 +217,7 @@ public: { playerName = param3; if (normalizePlayerName(playerName)) - player = sObjectAccessor->FindPlayerByName(playerName); + player = ObjectAccessor::FindPlayerByName(playerName); } if (!player) @@ -283,7 +283,7 @@ public: { playerName = param2; if (normalizePlayerName(playerName)) - player = sObjectAccessor->FindPlayerByName(playerName); + player = ObjectAccessor::FindPlayerByName(playerName); } if (!player) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index dfb1d84c6c..21a55b1558 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -600,8 +600,10 @@ public: target->SaveToDB(); } else - // will resurrected at login without corpse - sObjectAccessor->ConvertCorpseForPlayer(targetGuid); + { + SQLTransaction trans(nullptr); + Player::OfflineResurrect(targetGuid, trans); + } return true; } @@ -820,7 +822,7 @@ public: // Save all players in the world static bool HandleSaveAllCommand(ChatHandler* handler, char const* /*args*/) { - sObjectAccessor->SaveAllPlayers(); + ObjectAccessor::SaveAllPlayers(); handler->SendSysMessage(LANG_PLAYERS_SAVED); return true; } diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index 6fa84d1bc7..fe5ae940f8 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -100,7 +100,7 @@ public: // Triggering corpses expire check in world static bool HandleServerCorpsesCommand(ChatHandler* /*handler*/, char const* /*args*/) { - sObjectAccessor->RemoveOldCorpses(); + sWorld->RemoveOldCorpses(); return true; } diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index 427d4bae21..c4ab8f7648 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -541,7 +541,7 @@ public: case PHASE_PLANT_FIRST_DETONATE: // first explosives detonate finish for (GuidList::iterator itr = _explosivesGuids.begin(); itr != _explosivesGuids.end(); ++itr) { - if (GameObject* explosive = sObjectAccessor->GetGameObject(*me, *itr)) + if (GameObject* explosive = ObjectAccessor::GetGameObject(*me, *itr)) me->RemoveGameObject(explosive, true); } _explosivesGuids.clear(); @@ -638,7 +638,7 @@ public: case PHASE_PLANT_SECOND_DETONATE: // second explosives detonate finish for (GuidList::iterator itr = _explosivesGuids.begin(); itr != _explosivesGuids.end(); ++itr) { - if (GameObject* explosive = sObjectAccessor->GetGameObject(*me, *itr)) + if (GameObject* explosive = ObjectAccessor::GetGameObject(*me, *itr)) me->RemoveGameObject(explosive, true); } _explosivesGuids.clear(); diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index cf33ba300f..ab13262143 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -256,7 +256,6 @@ extern int main(int argc, char** argv) sInstanceSaveMgr->Unload(); sOutdoorPvPMgr->Die(); sMapMgr->UnloadAll(); // unload all grids (including locked in memory) - sObjectAccessor->UnloadAll(); // unload 'i_player2corpse' storage and remove from world sScriptMgr->Unload(); // set server offline From 3e01ec1f22b3989c2b0c4d44ab62f30000b0ed08 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Sep 2015 20:07:02 +0200 Subject: [PATCH 091/524] DB/Creature: Fix some Npcs in The Storm Peaks Fix Brunnhildar Prisoner react state. Add missing aura to Dead Frost Giant and Frostworg Carcass, and remove random movements Fix react state for Brunnhildar Warbear, Frostworg and Niffelem Frost Giant, and add SAI scripts. Fix inhabittype for some npcs trigger. Closes #15635 Closes #15634 --- sql/updates/world/2015_09_29_02_world.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/updates/world/2015_09_29_02_world.sql diff --git a/sql/updates/world/2015_09_29_02_world.sql b/sql/updates/world/2015_09_29_02_world.sql new file mode 100644 index 0000000000..de63019221 --- /dev/null +++ b/sql/updates/world/2015_09_29_02_world.sql @@ -0,0 +1,15 @@ +-- +UPDATE `creature_template` SET `flags_extra`=2 WHERE `entry`=29639; +UPDATE `creature` SET `MovementType`=0, `spawndist`=0 WHERE `guid`=105166; +UPDATE `creature_addon` SET `auras`=29266 WHERE `guid`=105166; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=29500; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (29558, 32520); +UPDATE `creature` SET `MovementType`=0, `spawndist`=0 WHERE `guid`=105243; +UPDATE `creature_addon` SET `auras`=29266 WHERE `guid`=105243; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `Entry` IN (29351, 29358); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (29351, 29358) 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 +(29351,0,0,0,0,0,100,0,2000,5000,7000,9000,11,38621,0,0,0,0,0,2,0,0,0,0,0,0,0,'Niffelem Frost Giant - IC - Cast Debilitating Strike'), +(29358,0,0,0,0,0,100,0,2000,5000,7000,9000,11,61572,0,0,0,0,0,2,0,0,0,0,0,0,0,'Frostworg - IC - Cast Frostbite'), +(29358,0,1,0,0,0,100,0,2000,6000,6000,9000,11,50075,0,0,0,0,0,2,0,0,0,0,0,0,0,'Frostworg - IC - Cast Maim Flesh'); From ba009ea2e2d13c0aa8a76df5bfead6f757ccddc3 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Sep 2015 21:15:19 +0200 Subject: [PATCH 092/524] DB/Npc: Niffelem Frost Giant and Frostworg Remove wrong spawns and add vehicle accessories --- sql/updates/world/2015_09_29_03_world.sql | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 sql/updates/world/2015_09_29_03_world.sql diff --git a/sql/updates/world/2015_09_29_03_world.sql b/sql/updates/world/2015_09_29_03_world.sql new file mode 100644 index 0000000000..74390f75e6 --- /dev/null +++ b/sql/updates/world/2015_09_29_03_world.sql @@ -0,0 +1,18 @@ +-- + +DELETE FROM `creature` WHERE `id`=29558; +UPDATE `creature_template` SET `npcflag`=16777216 WHERE `entry` IN (29351, 29358); + +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (29358, 29351); +INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES +(29358,46598,0,0), +(29351,46598,0,0); + +DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (29358, 29351); +INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`,`summontype`) VALUES +(29351,29558,0,1, 'Niffelem Frost Giant', 8), +(29351,29558,1,1, 'Niffelem Frost Giant', 8), +(29351,29558,2,1, 'Niffelem Frost Giant', 8), +(29351,29558,3,1, 'Niffelem Frost Giant', 8), +(29358,29558,0,1, 'Frostworg', 8), +(29358,29558,1,1, 'Frostworg', 8); From e99e69d31ff7f768517a59bd0c2cd6cbb87c2cef Mon Sep 17 00:00:00 2001 From: Incorrect Date: Wed, 30 Sep 2015 07:34:13 +0300 Subject: [PATCH 093/524] Core/Misc: Fix a typo --- src/server/game/Entities/Player/Player.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e798f5d98d..2646d5e6ca 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1882,7 +1882,7 @@ class Player : public Unit, public GridObject void UpdateWeaponSkill (WeaponAttackType attType); void UpdateCombatSkills(Unit* victim, WeaponAttackType attType, bool defence); - void SetSkill(uint16 id, uint16 step, uint16 currVal, uint16 maxVal); + void SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal); uint16 GetMaxSkillValue(uint32 skill) const; // max + perm. bonus + temp bonus uint16 GetPureMaxSkillValue(uint32 skill) const; // max uint16 GetSkillValue(uint32 skill) const; // skill value + perm. bonus + temp bonus From 325336137d7855e17feb02a56ea3fcd605ddfc33 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 30 Sep 2015 00:31:21 +0200 Subject: [PATCH 094/524] Core/Transports: Fixed accessing deleted instance transports Thanks @jackpoz for valgrind log and @pete318 for reproduction steps Closes #15633 (cherry picked from commit 8745e08be020471db886e11a3a7512a751141562) --- src/server/game/Entities/Transport/Transport.cpp | 1 - src/server/game/Maps/Map.cpp | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 236675a7d2..144805b88b 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -100,7 +100,6 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa void Transport::CleanupsBeforeDelete(bool finalCleanup /*= true*/) { - HashMapHolder::Remove(this); UnloadStaticPassengers(); while (!_passengers.empty()) { diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 7acafb3c34..2af77ffdec 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -405,6 +405,13 @@ void Map::DeleteFromWorld(Player* player) delete player; } +template<> +void Map::DeleteFromWorld(Transport* transport) +{ + ObjectAccessor::RemoveObject(transport); + delete transport; +} + void Map::EnsureGridCreated(const GridCoord &p) { std::lock_guard lock(_gridLock); From 1dcf186dfd245315454ea5f907ab3efce477cbed Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 30 Sep 2015 22:31:00 +0200 Subject: [PATCH 095/524] DB/Waypoints: Fix Artificer Daelo path Updates #15630 --- sql/updates/world/2015_09_30_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_09_30_00_world.sql diff --git a/sql/updates/world/2015_09_30_00_world.sql b/sql/updates/world/2015_09_30_00_world.sql new file mode 100644 index 0000000000..fd441ec05f --- /dev/null +++ b/sql/updates/world/2015_09_30_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `waypoint_data` SET `position_z` = 45.5099 WHERE `id` = 845820 AND `point` = 5; From 3121646622060f08404cd7da084a3a4ed48174fa Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 1 Oct 2015 08:10:18 +0200 Subject: [PATCH 096/524] DB/Creature: Azuremyst Isle pathing By Malcrom --- sql/updates/world/2015_10_01_00_world.sql | 112 ++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 sql/updates/world/2015_10_01_00_world.sql diff --git a/sql/updates/world/2015_10_01_00_world.sql b/sql/updates/world/2015_10_01_00_world.sql new file mode 100644 index 0000000000..8e6ca285c9 --- /dev/null +++ b/sql/updates/world/2015_10_01_00_world.sql @@ -0,0 +1,112 @@ +-- Pathing for Azuremyst Peacekeeper Entry: 18038 'TDB FORMAT' +SET @NPC := 63772; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4171.392,`position_y`=-12464.35,`position_z`=44.40071 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,4097,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4171.392,-12464.35,44.40071,0,0,0,0,100,0), +(@PATH,2,-4172.635,-12441.57,43.73568,0,0,0,0,100,0), +(@PATH,3,-4183.271,-12464.69,44.86507,0,0,0,0,100,0), +(@PATH,4,-4191.694,-12478.19,45.88747,0,0,0,0,100,0), +(@PATH,5,-4208.529,-12485.6,44.76502,0,0,0,0,100,0), +(@PATH,6,-4206.412,-12507.59,45.07471,0,0,0,0,100,0), +(@PATH,7,-4195.887,-12522.06,45.18763,0,0,0,0,100,0), +(@PATH,8,-4175.124,-12527.87,44.7594,0,0,0,0,100,0), +(@PATH,9,-4159.117,-12516.98,44.69878,0,0,0,0,100,0), +(@PATH,10,-4153.929,-12500.22,44.07134,0,0,0,0,100,0), +(@PATH,11,-4155.868,-12489.98,44.48027,0,0,0,0,100,0); + +-- Pathing for Azuremyst Peacekeeper Entry: 18038 'TDB FORMAT' +SET @NPC := 63774; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4200.606,`position_y`=-12494.63,`position_z`=44.62513 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,4097,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4200.606,-12494.63,44.62513,0,0,0,0,100,0), +(@PATH,2,-4177.409,-12486.11,44.26247,0,0,0,0,100,0), +(@PATH,3,-4164.705,-12500.84,44.40313,0,0,0,0,100,0), +(@PATH,4,-4134.247,-12503.81,43.62505,0,0,0,0,100,0), +(@PATH,5,-4100.406,-12490.22,40.99446,0,0,0,0,100,0), +(@PATH,6,-4067.271,-12473.87,35.7093,0,0,0,0,100,0), +(@PATH,7,-4034.042,-12460.46,31.01041,0,0,0,0,100,0), +(@PATH,8,-4000.527,-12450.34,25.04846,0,0,0,0,100,0), +(@PATH,9,-3967.376,-12442.74,18.43705,0,0,0,0,100,0), +(@PATH,10,-3951.83,-12430.16,14.62435,0,0,0,0,100,0), +(@PATH,11,-3923.009,-12427.82,9.259804,0,0,0,0,100,0), +(@PATH,12,-3890.977,-12420.35,3.110225,0,0,0,0,100,0), +(@PATH,13,-3845.61,-12400.15,-0.5076148,0,0,0,0,100,0), +(@PATH,14,-3799.788,-12396.9,-1.57003,0,0,0,0,100,0), +(@PATH,15,-3767.789,-12389.86,-1.612022,0,0,0,0,100,0), +(@PATH,16,-3733.884,-12386.01,-2.563792,0,0,0,0,100,0), +(@PATH,17,-3699.675,-12379.4,-3.253355,0,0,0,0,100,0), +(@PATH,18,-3676.898,-12366.13,-3.005086,0,0,0,0,100,0), +(@PATH,19,-3634.198,-12353.74,-1.517532,0,0,0,0,100,0), +(@PATH,20,-3600.196,-12362.62,0.9561348,0,0,0,0,100,0), +(@PATH,21,-3566.171,-12360.33,3.723941,0,0,0,0,100,0), +(@PATH,22,-3533.756,-12360.66,6.88605,0,0,0,0,100,0), +(@PATH,23,-3500.217,-12359.56,9.171444,0,0,0,0,100,0), +(@PATH,24,-3533.756,-12360.66,6.88605,0,0,0,0,100,0), +(@PATH,25,-3566.171,-12360.33,3.723941,0,0,0,0,100,0), +(@PATH,26,-3600.196,-12362.62,0.9561348,0,0,0,0,100,0), +(@PATH,27,-3634.033,-12353.8,-1.465286,0,0,0,0,100,0), +(@PATH,28,-3676.898,-12366.13,-3.005086,0,0,0,0,100,0), +(@PATH,29,-3699.675,-12379.4,-3.253355,0,0,0,0,100,0), +(@PATH,30,-3733.884,-12386.01,-2.563792,0,0,0,0,100,0), +(@PATH,31,-3767.789,-12389.86,-1.612022,0,0,0,0,100,0), +(@PATH,32,-3799.788,-12396.9,-1.57003,0,0,0,0,100,0), +(@PATH,33,-3845.61,-12400.15,-0.5076148,0,0,0,0,100,0), +(@PATH,34,-3890.977,-12420.35,3.110225,0,0,0,0,100,0), +(@PATH,35,-3923.009,-12427.82,9.259804,0,0,0,0,100,0), +(@PATH,36,-3951.679,-12430.06,14.65267,0,0,0,0,100,0), +(@PATH,37,-3967.376,-12442.74,18.43705,0,0,0,0,100,0), +(@PATH,38,-4000.527,-12450.34,25.04846,0,0,0,0,100,0), +(@PATH,39,-4034.023,-12460.46,30.9877,0,0,0,0,100,0), +(@PATH,40,-4067.271,-12473.87,35.7093,0,0,0,0,100,0), +(@PATH,41,-4100.406,-12490.22,40.99446,0,0,0,0,100,0), +(@PATH,42,-4134.247,-12503.81,43.62505,0,0,0,0,100,0), +(@PATH,43,-4164.705,-12500.84,44.40313,0,0,0,0,100,0), +(@PATH,44,-4177.409,-12486.11,44.26247,0,0,0,0,100,0); + +-- Pathing for Azuremyst Peacekeeper Entry: 18038 'TDB FORMAT' +SET @NPC := 63773; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-4134.126,`position_y`=-12506.01,`position_z`=43.88897 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,4097,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-4134.126,-12506.01,43.88897,0,0,0,0,100,0), +(@PATH,2,-4167.211,-12511.93,44.3844,0,0,0,0,100,0), +(@PATH,3,-4197.208,-12508.09,44.48694,0,0,0,0,100,0), +(@PATH,4,-4233.25,-12487.22,41.86756,0,0,0,0,100,0), +(@PATH,5,-4267.729,-12476.33,29.47266,0,0,0,0,100,0), +(@PATH,6,-4289.251,-12471.83,24.20484,0,0,0,0,100,0), +(@PATH,7,-4319.148,-12478.5,18.93451,0,0,0,0,100,0), +(@PATH,8,-4333.606,-12469.67,15.57558,0,0,0,0,100,0), +(@PATH,9,-4364.828,-12471.54,10.27822,0,0,0,0,100,0), +(@PATH,10,-4399.945,-12455.7,5.627916,0,0,0,0,100,0), +(@PATH,11,-4432.767,-12443.6,2.278673,0,0,0,0,100,0), +(@PATH,12,-4467.428,-12430.61,2.763325,0,0,0,0,100,0), +(@PATH,13,-4499.994,-12415.54,4.523335,0,0,0,0,100,0), +(@PATH,14,-4533.506,-12416.08,7.310507,0,0,0,0,100,0), +(@PATH,15,-4566.756,-12417.92,9.204178,0,0,0,0,100,0), +(@PATH,16,-4533.506,-12416.08,7.310507,0,0,0,0,100,0), +(@PATH,17,-4499.994,-12415.54,4.523335,0,0,0,0,100,0), +(@PATH,18,-4467.428,-12430.61,2.763325,0,0,0,0,100,0), +(@PATH,19,-4432.767,-12443.6,2.278673,0,0,0,0,100,0), +(@PATH,20,-4399.945,-12455.7,5.627916,0,0,0,0,100,0), +(@PATH,21,-4364.828,-12471.54,10.27822,0,0,0,0,100,0), +(@PATH,22,-4333.889,-12469.66,15.56435,0,0,0,0,100,0), +(@PATH,23,-4319.148,-12478.5,18.93451,0,0,0,0,100,0), +(@PATH,24,-4289.251,-12471.83,24.20484,0,0,0,0,100,0), +(@PATH,25,-4267.729,-12476.33,29.47266,0,0,0,0,100,0), +(@PATH,26,-4233.25,-12487.22,41.86756,0,0,0,0,100,0), +(@PATH,27,-4197.208,-12508.09,44.48694,0,0,0,0,100,0), +(@PATH,28,-4167.211,-12511.93,44.3844,0,0,0,0,100,0); + +DELETE FROM `creature` WHERE `guid`=63770; +DELETE FROM `creature_addon` WHERE `guid`=63770; From 02578f34c759826002612510ac407641229f9b66 Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 1 Oct 2015 19:29:26 +0200 Subject: [PATCH 097/524] DB/Event: Argent Confessor Paletress http://wow.gamepedia.com/Argent_Confessor_Paletress --- sql/updates/world/2015_10_01_01_world.sql | 247 ++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 sql/updates/world/2015_10_01_01_world.sql diff --git a/sql/updates/world/2015_10_01_01_world.sql b/sql/updates/world/2015_10_01_01_world.sql new file mode 100644 index 0000000000..bb32607b23 --- /dev/null +++ b/sql/updates/world/2015_10_01_01_world.sql @@ -0,0 +1,247 @@ +-- +SET @ENTRY := 34102; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (@ENTRY, 33462, 33480, 33459, 33467, 33477, 33465); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY, 33462, 33480, 33459, 33467, 33477, 33465) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY*100, @ENTRY*100+1, @ENTRY*100+2, @ENTRY*100+3, @ENTRY*100+4, @ENTRY*100+5, @ENTRY*100+6, 33462*100, 33480*100, 33459*100, 33467*100, 33477*100, 33465*100, 33462*100+1, 33480*100+1, 33459*100+1, 33467*100+1, 33477*100+1, 33465*100+1) 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 +(@ENTRY,0,0,0,1,0,100,0,600000,600000,1200000,1200000,53,0,@ENTRY*10,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - OOC - Action List"), +(@ENTRY,0,1,0,40,0,100,0,1,@ENTRY*10,0,0,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - On waypoint reached - Action List"), +(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8494.070313, 1102.23584, 554.327515, 3.772250,"Argent Confessor Paletress - Action List - Set orientation"), +(@ENTRY*100,9,1,0,0,0,100,0,2000,2000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,3,0,0,0,100,0,7000,7000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,4,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,5,0,0,0,100,0,7000,7000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,6,0,0,0,100,0,5000,5000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,7,0,0,0,100,0,5000,5000,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,8,0,0,0,100,0,7000,7000,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,9,0,0,0,100,0,7000,7000,0,0,1,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,10,0,0,0,100,0,7000,7000,0,0,1,9,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,11,0,0,0,100,0,5000,5000,0,0,1,10,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,12,0,0,0,100,0,5000,5000,0,0,1,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,13,0,0,0,100,0,5000,5000,0,0,1,12,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,14,0,0,0,100,0,7000,7000,0,0,1,13,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,15,0,0,0,100,0,5000,5000,0,0,1,14,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,16,0,0,0,100,0,5000,5000,0,0,1,15,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,17,0,0,0,100,0,6000,6000,0,0,1,16,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,18,0,0,0,100,0,6000,6000,0,0,1,17,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,19,0,0,0,100,0,7000,7000,0,0,1,18,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Talk"), +(@ENTRY*100,9,20,0,0,0,100,0,7000,7000,0,0,53,0,@ENTRY*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Action List - Start wp"), +(@ENTRY,0,2,0,40,0,100,0,2,@ENTRY*10+1,0,0,87,@ENTRY*100+1,@ENTRY*100+2,@ENTRY*100+3,@ENTRY*100+4,@ENTRY*100+5,@ENTRY*100+5,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - On data set - Random Action List"), +(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33462,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+2,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+2,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33480,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+3,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+3,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33459,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+4,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+4,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33467,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+5,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+5,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33477,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+6,9,0,0,0,0,100,0,0,0,0,0,54,18000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY*100+6,9,1,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,33465,50,0,0,0,0,0,"Argent Confessor Paletress - Random Action List - Set Data"), +(@ENTRY,0,3,0,38,0,100,0,1,1,0,0,69,0,0,0,0,0,0,8,0,0,0,8490.290039, 1111.510010, 554.333984, 4.642580,"Argent Confessor Paletress - On data set - move to pos"), +(@ENTRY,0,4,0,38,0,100,0,1,2,0,0,5,23,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - On data set - play emote"), +(@ENTRY,0,5,0,38,0,100,0,1,3,0,0,5,17,0,0,0,0,0,1,0,0,0,0,0,0,0,"Argent Confessor Paletress - On data set - play emote"), +(33462,0,0,0,38,0,100,0,1,1,0,0,80,33462*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - On data set - Action List"), +(33462*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Set up"), +(33462*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33462*10,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Start waypoint"), +(33480,0,0,0,38,0,100,0,1,1,0,0,80,33480*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - On data set - Action List"), +(33480*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Set up"), +(33480*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33480*10,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Start waypoint"), +(33459,0,0,0,38,0,100,0,1,1,0,0,80,33459*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - On data set - Action List"), +(33459*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Set up"), +(33459*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33459*10,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Start waypoint"), +(33467,0,0,0,38,0,100,0,1,1,0,0,80,33467*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - On data set - Action List"), +(33467*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Set up"), +(33467*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33467*10,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Start waypoint"), +(33477,0,0,0,38,0,100,0,1,1,0,0,80,33477*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - On data set - Action List"), +(33477*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Set up"), +(33477*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33477*10,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Start waypoint"), +(33465,0,0,0,38,0,100,0,1,1,0,0,80,33465*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - On data set - Action List"), +(33465*100,9,0,0,0,0,100,0,0,0,0,0,91,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Set up"), +(33465*100,9,1,0,0,0,100,0,0,0,0,0,53,0,33465*10,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Start waypoint"), +(33462,0,1,0,40,0,100,0,5,33462*10,0,0,80,33462*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - On waypoint reached - Action List"), +(33462*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Gnomeregan Champion - Action List - Set orientation"), +(33462*100+1,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"), +(33462*100+1,9,2,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"), +(33462*100+1,9,3,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"), +(33462*100+1,9,4,0,0,0,100,0,10000,10000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"), +(33462*100+1,9,5,0,0,0,100,0,6000,6000,0,0,1,19,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"), +(33462*100+1,9,6,0,0,0,100,0,6000,6000,0,0,1,20,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Gnomeregan Champion - Action List - Talk"), +(33462*100+1,9,7,0,0,0,100,0,6000,6000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Gnomeregan Champion - Action List - Set Data"), +(33462*100+1,9,8,0,0,0,100,0,0,0,0,0,53,0,33462*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - Action List - Start waypoint"), +(33462,0,2,0,40,0,100,0,5,33462*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gnomeregan Champion - On waypoint reached - Despawn"), +(33480,0,1,0,40,0,100,0,5,33480*10,0,0,80,33480*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - On waypoint reached - Action List"), +(33480*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Ironforge Champion - Action List - Set orientation"), +(33480*100+1,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Talk"), +(33480*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Talk"), +(33480*100+1,9,3,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Talk"), +(33480*100+1,9,4,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Talk"), +(33480*100+1,9,5,0,0,0,100,0,5000,5000,0,0,1,21,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Ironforge Champion - Action List - Talk"), +(33480*100+1,9,6,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Ironforge Champion - Action List - Set Data"), +(33480*100+1,9,7,0,0,0,100,0,0,0,0,0,53,0,33480*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - Action List - Start waypoint"), +(33480,0,2,0,40,0,100,0,5,33480*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ironforge Champion - On waypoint reached - Despawn"), +(33459,0,1,0,40,0,100,0,3,33459*10,0,0,80,33459*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - On waypoint reached - Action List"), +(33459*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Orgrimmar Champion - Action List - Set orientation"), +(33459*100+1,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"), +(33459*100+1,9,2,0,0,0,100,0,6000,6000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"), +(33459*100+1,9,3,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"), +(33459*100+1,9,4,0,0,0,100,0,6000,6000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"), +(33459*100+1,9,5,0,0,0,100,0,6000,6000,0,0,1,22,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"), +(33459*100+1,9,6,0,0,0,100,0,6000,6000,0,0,1,23,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"), +(33459*100+1,9,7,0,0,0,100,0,4000,4000,0,0,45,1,2,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Set Data"), +(33459*100+1,9,8,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Emote"), +(33459*100+1,9,9,0,0,0,100,0,2000,2000,0,0,1,24,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Talk"), +(33459*100+1,9,10,0,0,0,100,0,6000,6000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Orgrimmar Champion - Action List - Set Data"), +(33459*100+1,9,11,0,0,0,100,0,0,0,0,0,53,0,33459*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - Action List - Start waypoint"), +(33459,0,2,0,40,0,100,0,3,33459*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Orgrimmar Champion - On waypoint reached - Despawn"), +(33467,0,1,0,40,0,100,0,4,33467*10,0,0,80,33467*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - On waypoint reached - Action List"), +(33467*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Silvermoon Champion - Action List - Set orientation"), +(33467*100+1,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Talk"), +(33467*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Talk"), +(33467*100+1,9,3,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Talk"), +(33467*100+1,9,4,0,0,0,100,0,5000,5000,0,0,1,25,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Silvermoon Champion - Action List - Talk"), +(33467*100+1,9,5,0,0,0,100,0,8000,8000,0,0,1,26,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Silvermoon Champion - Action List - Talk"), +(33467*100+1,9,6,0,0,0,100,0,2000,2000,0,0,45,1,3,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Silvermoon Champion - Action List - Set Data"), +(33467*100+1,9,7,0,0,0,100,0,3000,3000,0,0,5,17,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Emote"), +(33467*100+1,9,8,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Silvermoon Champion - Action List - Set Data"), +(33467*100+1,9,9,0,0,0,100,0,0,0,0,0,53,0,33467*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - Action List - Start waypoint"), +(33467,0,2,0,40,0,100,0,4,33467*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Silvermoon Champion - On waypoint reached - Despawn"), +(33477,0,1,0,40,0,100,0,6,33477*10,0,0,80,33477*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - On waypoint reached - Action List"), +(33477*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Stormwind Champion - Action List - Set orientation"), +(33477*100+1,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Talk"), +(33477*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Talk"), +(33477*100+1,9,3,0,0,0,100,0,5000,5000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Talk"), +(33477*100+1,9,4,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Talk"), +(33477*100+1,9,5,0,0,0,100,0,5000,5000,0,0,1,27,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Talk"), +(33477*100+1,9,6,0,0,0,100,0,7000,7000,0,0,1,28,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Talk"), +(33477*100+1,9,7,0,0,0,100,0,8000,8000,0,0,1,29,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Talk"), +(33477*100+1,9,8,0,0,0,100,0,7000,7000,0,0,1,30,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Talk"), +(33477*100+1,9,9,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Stormwind Champion - Action List - Set Data"), +(33477*100+1,9,10,0,0,0,100,0,0,0,0,0,53,0,33477*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - Action List - Start waypoint"), +(33477,0,2,0,40,0,100,0,6,33477*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Stormwind Champion - On waypoint reached - Despawn"), +(33465,0,1,0,40,0,100,0,3,33465*10,0,0,80,33465*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - On waypoint reached - Action List"), +(33465*100+1,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,8485.782227, 1114.010864, 554.297485, 5.774796,"Undercity Champion - Action List - Set orientation"), +(33465*100+1,9,1,0,0,0,100,0,3000,3000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Talk"), +(33465*100+1,9,2,0,0,0,100,0,5000,5000,0,0,1,31,0,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Undercity Champion - Action List - Talk"), +(33465*100+1,9,3,0,0,0,100,0,5000,5000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Talk"), +(33465*100+1,9,4,0,0,0,100,0,1000,1000,0,0,5,11,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Emote"), +(33465*100+1,9,5,0,0,0,100,0,2000,2000,0,0,45,1,1,0,0,0,0,19,@ENTRY,15,0,0,0,0,0,"Undercity Champion - Action List - Set Data"), +(33465*100+1,9,6,0,0,0,100,0,3000,3000,0,0,5,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Emote"), +(33465*100+1,9,7,0,0,0,100,0,3000,3000,0,0,53,0,33465*10+1,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - Action List - Start waypoint"), +(33465,0,2,0,40,0,100,0,3,33465*10+1,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Undercity Champion - On waypoint reached - Despawn"); + +DELETE FROM `waypoints` WHERE `entry`IN (@ENTRY*10, @ENTRY*10+1, 33462*10, 33462*10+1, 33480*10, 33480*10+1, 33459*10, 33459*10+1, 33467*10, 33467*10+1, 33477*10, 33477*10+1, 33465*10, 33465*10+1); +INSERT INTO `waypoints` (`entry`,`pointid`,`position_x`,`position_y`,`position_z`,`point_comment`) VALUES +(@ENTRY*10+1,1,8490.655273, 1111.821045, 554.363525,'Argent Confessor Paletress'), +(@ENTRY*10+1,2,8488.863281, 1112.676514, 554.298096,'Argent Confessor Paletress'), +(@ENTRY*10,1,8494.070313, 1102.23584, 554.327515,'Argent Confessor Paletress'), +(33462*10,1,8491.833008, 1100.861572, 554.361450,'Champion'), +(33462*10,2,8491.234375, 1102.656860, 554.360840,'Champion'), +(33462*10,3,8487.101563, 1107.712036, 554.363220,'Champion'), +(33462*10,4,8482.299805, 1113.207886, 554.349243,'Champion'), +(33462*10,5,8485.782227, 1114.010864, 554.297485,'Champion'), +(33462*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'), +(33462*10+1,2,8482.299805, 1113.207886, 554.349243,'Champion'), +(33462*10+1,3,8487.101563, 1107.712036, 554.363220,'Champion'), +(33462*10+1,4,8491.234375, 1102.656860, 554.360840,'Champion'), +(33462*10+1,5,8491.833008, 1100.861572, 554.361450,'Champion'), +(33480*10,1,8494.106445, 1097.863037, 554.344543,'Champion'), +(33480*10,2,8491.234375, 1102.656860, 554.360840,'Champion'), +(33480*10,3,8487.101563, 1107.712036, 554.363220,'Champion'), +(33480*10,4,8482.942383, 1113.390015, 554.340759,'Champion'), +(33480*10,5,8485.782227, 1114.010864, 554.297485,'Champion'), +(33480*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'), +(33480*10+1,2,8482.942383, 1113.390015, 554.340759,'Champion'), +(33480*10+1,3,8487.101563, 1107.712036, 554.363220,'Champion'), +(33480*10+1,4,8491.234375, 1102.656860, 554.360840,'Champion'), +(33480*10+1,5,8494.106445, 1097.863037, 554.344543,'Champion'), +(33459*10,1,8486.814453, 1107.731689, 554.365784,'Champion'), +(33459*10,2,8482.299805, 1113.207886, 554.349243,'Champion'), +(33459*10,3,8485.782227, 1114.010864, 554.297485,'Champion'), +(33459*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'), +(33459*10+1,2,8482.299805, 1113.207886, 554.349243,'Champion'), +(33459*10+1,3,8486.814453, 1107.731689, 554.365784,'Champion'), +(33467*10,1,8483.411133, 1105.254639, 554.445313,'Champion'), +(33467*10,2,8486.906250, 1107.583130, 554.366699,'Champion'), +(33467*10,3,8482.692383, 1113.328857, 554.342896,'Champion'), +(33467*10,4,8485.782227, 1114.010864, 554.297485,'Champion'), +(33467*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'), +(33467*10+1,2,8482.692383, 1113.328857, 554.342896,'Champion'), +(33467*10+1,3,8486.906250, 1107.583130, 554.366699,'Champion'), +(33467*10+1,4,8483.411133, 1105.254639, 554.445313,'Champion'), +(33477*10,1,8492.628906, 1091.799683, 554.420837,'Champion'), +(33477*10,2,8496.347656, 1094.432129, 554.335510,'Champion'), +(33477*10,3,8492.845703, 1099.233643, 554.353027,'Champion'), +(33477*10,4,8488.207031, 1106.236206, 554.367737,'Champion'), +(33477*10,5,8483.253906, 1113.153198, 554.338135,'Champion'), +(33477*10,6,8485.782227, 1114.010864, 554.297485,'Champion'), +(33477*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'), +(33477*10+1,2,8483.253906, 1113.153198, 554.338135,'Champion'), +(33477*10+1,3,8488.207031, 1106.236206, 554.367737,'Champion'), +(33477*10+1,4,8492.845703, 1099.233643, 554.353027,'Champion'), +(33477*10+1,5,8496.347656, 1094.432129, 554.335510,'Champion'), +(33477*10+1,6,8492.628906, 1091.799683, 554.420837,'Champion'), +(33465*10,1,8477.542969, 1110.444702, 554.429932,'Champion'), +(33465*10,2,8482.299805, 1113.207886, 554.349243,'Champion'), +(33465*10,3,8485.782227, 1114.010864, 554.297485,'Champion'), +(33465*10+1,1,8485.782227, 1114.010864, 554.297485,'Champion'), +(33465*10+1,2,8482.299805, 1113.207886, 554.349243,'Champion'), +(33465*10+1,3,8477.542969, 1110.444702, 554.429932,'Champion'); + +DELETE FROM `creature_text` WHERE `entry` IN (@ENTRY, 33462, 33480, 33459, 33467, 33477, 33465); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(@ENTRY,0,0,'Thank you all for attending this sermon. It''s wonderful to see so many familiar faces!',12,0,100,0,0,0, 'Argent Confessor Paletress',34192), +(@ENTRY,1,0,'Today I would like to touch on the three virtues of the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34193), +(@ENTRY,2,0,'These are dark and difficult times for us all. The armies of the Scourge amass to the south. Companions fall on the battlefield and rise to serve our enemy moments later.',12,0,100,0,0,0, 'Argent Confessor Paletress',34194), +(@ENTRY,3,0,'Many of you have experienced a betrayal of trust.',12,0,100,0,0,0, 'Argent Confessor Paletress',34196), +(@ENTRY,4,0,'Yet you persevere, as we all must. In these times, no one is a stranger to the virtue of tenacity. In the face of despair and hatred, we continue to stand true to our beliefs and fight on.',12,0,100,0,0,0, 'Argent Confessor Paletress',34197), +(@ENTRY,5,0,'There can be no doubt as to your tenacity... but there are other virtues to consider.',12,0,100,0,0,0, 'Argent Confessor Paletress',34199), +(@ENTRY,6,0,'Respect is the first virtue taught to those joining the path of the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34200), +(@ENTRY,7,0,'Look across the aisle to those you would call enemy. Despite the hatred that separates you, there are qualities to respect in your opponent. Their prowess should be acknowledged.',12,0,100,0,0,0, 'Argent Confessor Paletress',34201), +(@ENTRY,8,0,'All of us gathered here have a concept of honorable combat. Conducting yourself with honor and treating your opponent as you wish to be treated shows respect.',12,0,100,0,0,0, 'Argent Confessor Paletress',34202), +(@ENTRY,9,0,'Respect your opponent on the field, whether he be your brother or your sworn enemy. No matter where your beliefs truly lie, such respect is acknowledging a connection...',12,0,100,0,0,0, 'Argent Confessor Paletress',34203), +(@ENTRY,10,0,'...and in acknowledging those connections, you are closer to the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34205), +(@ENTRY,11,0,'There is one further step on the path of Light: compassion.',12,0,100,0,0,0, 'Argent Confessor Paletress',34206), +(@ENTRY,12,0,'Rivalries abound in this day and age. It is easy to see differences wherever you turn.',12,0,100,0,0,0, 'Argent Confessor Paletress',34207), +(@ENTRY,13,0,'The challenge is in looking beyond appearances and understanding our similarities. Through this understanding, you can feel compassion for the losses others have suffered...',12,0,100,0,0,0, 'Argent Confessor Paletress',34208), +(@ENTRY,14,0,'...even if the victim bears another banner.',12,0,100,0,0,0, 'Argent Confessor Paletress',34209), +(@ENTRY,15,0,'By feeling and understanding compassion in enemy and ally alike, you reaffirm your connection with the world.',12,0,100,0,0,0, 'Argent Confessor Paletress',34210), +(@ENTRY,16,0,'Acting on these tenets, these virtues, help make the world a place we all can appreciate. A world of honor and justice.',12,0,100,0,0,0, 'Argent Confessor Paletress',34211), +(@ENTRY,17,0,'Think on my words, friends. In the darkness that surrounds us all, the Light is needed more than ever.',12,0,100,0,0,0, 'Argent Confessor Paletress',34212), +(@ENTRY,18,0,'I''ll be behind the confessional screen if anyone wishes to speak with me. Any doubts, any worries, any uncertainties I will happily soothe.',12,0,100,0,0,0, 'Argent Confessor Paletress',34216), +(@ENTRY,19,0,'Take heart. Size isn''t what matters, but how you use the skills you have.',12,0,100,0,0,0, 'Argent Confessor Paletress',34250), +(@ENTRY,20,0,'What you lack in size you make up for in ambition and dedication, little one. Go with the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34251), +(@ENTRY,21,0,'Drink in moderation, then, my dwarven friend, but you may want to turn in your lance and reins for the time being. Go with the Light.',12,0,100,0,0,0, 'Argent Confessor Paletress',34259), +(@ENTRY,22,0,'I understand your frustration. Your people are ferocious in battle, and this isn''t what you''re used to.',12,0,100,0,0,0, 'Argent Confessor Paletress',34285), +(@ENTRY,23,0,'But this is a different sort of honorable combat. Difficult to adapt to, perhaps, but with your prowess I''m sure you''ll show everyone the strength in your people.',12,0,100,0,0,0, 'Argent Confessor Paletress',34286), +(@ENTRY,24,0,'Besides... while an axe can be a valuable tool in war, lances have their uses as well.',12,0,100,0,0,0, 'Argent Confessor Paletress',34287), +(@ENTRY,25,0,'It may seem pointless, but try to find pride in a good fight. The time will come when all this practicing and competition will be put to good use.',12,0,100,0,0,0, 'Argent Confessor Paletress',34292), +(@ENTRY,26,0,'And your hair looks wonderful.',12,0,100,0,0,0, 'Argent Confessor Paletress',34293), +(@ENTRY,27,0,'Your heart is in the right place, and I know you seek to serve the Light. But these small strikes do little to the great undead host.',12,0,100,0,0,0, 'Argent Confessor Paletress',34264), +(@ENTRY,28,0,'This tournament is helping to form a strong, concerted force, though it may not appear obvious. When we''re ready, the eyes of the Crusade and all its champions will turn towards Icecrown.',12,0,100,0,0,0, 'Argent Confessor Paletress',34265), +(@ENTRY,29,0,'We will bring the might of all races to the Lich King, and he will be defeated.',12,0,100,0,0,0, 'Argent Confessor Paletress',34266), +(@ENTRY,30,0,'I know this does not seem like the obvious path to you, but it will bring you closer to the Light. Fight well, brother.',12,0,100,0,0,0, 'Argent Confessor Paletress',34267), +(@ENTRY,31,0,'Oh, my. Do you feel remorseful, at least?',12,0,100,0,0,0, 'Argent Confessor Paletress',34254), +(33462,0,0,'I don''t know if I can compete! Everyone is so much bigger!',12,0,100,0,0,0, 'Gnomeregan Champion',34246), +(33462,1,0,'I''ve calculated the probability of my success, and it''s distressingly low!',12,0,100,0,0,0, 'Gnomeregan Champion',34247), +(33462,2,0,'I can''t accurately assess the mathematics behind the charge of my turbostrider while keeping hold of my lance at the precise angle needed and keeping my shield in the exact location for maximum protection at any given second!',12,0,100,0,0,0, 'Gnomeregan Champion',34248), +(33462,3,0,'...and some of those mounts can trample me!',12,0,100,0,0,0, 'Gnomeregan Champion',34249), +(33480,0,0,'Lass, I''ve a confession to make to ya.',12,0,100,0,0,0, 'Ironforge Champion',34255), +(33480,1,0,'I''ve been feelin''... urges.',12,0,100,0,0,0, 'Ironforge Champion',34256), +(33480,2,0,'It was a powerful feelin'' while I was listenin'' to yer sermon, and it''s drivin'' me nuts!',12,0,100,0,0,0, 'Ironforge Champion',34257), +(33480,3,0,'...I NEED A DRINK!',12,0,100,0,0,0, 'Ironforge Champion',34258), +(33459,0,0,'This isn''t honorable combat. I long to face my opponents in battle with my axe in hand!',12,0,100,0,0,0, 'Orgrimmar Champion',34269), +(33459,1,0,'These are my enemies. YOU would be my enemy in battle! Your king has declared war on my kind!',12,0,100,0,0,0, 'Orgrimmar Champion',34270), +(33459,2,0,'But instead of fighting as my people would, as my people should, I find myself with a long, unwieldy pole, attempting to coax my wolf into charging my opponent without attacking.',12,0,100,0,0,0, 'Orgrimmar Champion',34271), +(33459,3,0,'This is not how orcs fight! My duty to the Warchief wars with my personal honor. I hold no faith in your Light, but as you seem an advisor, I would hear your words.',12,0,100,0,0,0, 'Orgrimmar Champion',34272), +(33467,0,0,'This fighting is endless. I''m not certain how much more of it I can stand.',12,0,100,0,0,0, 'Silvermoon Champion',34289), +(33467,1,0,'All of this posturing, all of this dancing about in rings... it seems pointless. What''s the use?',12,0,100,0,0,0, 'Silvermoon Champion',34290), +(33467,2,0,'And I''m beginning to get HELMET HAIR. This is a travesty!',12,0,100,0,0,0, 'Silvermoon Champion',34291), +(33477,0,0,'My heart hangs heavier with each passing day, Confessor.',12,0,100,0,0,0, 'Stormwind Champion',34260), +(33477,1,0,'I have been ordered here, and here I stay and fight under the banner of Stormwind. But everything I do here is empty.',12,0,100,0,0,0, 'Stormwind Champion',34261), +(33477,2,0,'Beyond these reaches, the Scourge continue their work, destroying more and more of what we''ve built. The fight should be there. I should be there.',12,0,100,0,0,0, 'Stormwind Champion',34262), +(33477,3,0,'How can I justify jousting while people die without my protection?',12,0,100,0,0,0, 'Stormwind Champion',34263), +(33465,0,0,'I punched a penguin on my way in here.',12,0,100,0,0,0, 'Undercity Champion',34252), +(33465,1,0,'Nah, not really. I just wanted to see the look on your face.',12,0,100,0,0,0, 'Undercity Champion',34253); From 5fd42e68aeeee84bd04ad750a848460adead953d Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 1 Oct 2015 21:55:33 +0200 Subject: [PATCH 098/524] DB/Creature: Murloc Scout Closes #15612 --- sql/updates/world/2015_10_01_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_01_02_world.sql diff --git a/sql/updates/world/2015_10_01_02_world.sql b/sql/updates/world/2015_10_01_02_world.sql new file mode 100644 index 0000000000..caaa229b9c --- /dev/null +++ b/sql/updates/world/2015_10_01_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `event_param1`=2000, `event_param2`=3000, `event_param3`=13000, `event_param4`=15000, `action_param1`=7357, `action_param2`=0, COMMENT="Murloc Scout - In Combat - Cast 'Poisonous Stab'" WHERE `entryorguid`IN (578) AND `source_type`=0 AND `id`=0; From 3e2014a958c2295c175b359dbeed48f36befce98 Mon Sep 17 00:00:00 2001 From: treeston Date: Mon, 21 Sep 2015 14:59:13 +0200 Subject: [PATCH 099/524] Heigan cleanup: - NearTeleportTo hack -> proper spell with DB coordinates - Add boss emotes - Some code streamlining using event phases and IN_MILLISECONDS instead of large constants - Improvement to eruption hitbox and delimiters to match retail layout more closely - Spell timers adjusted from sniffs --- sql/updates/world/2015_09_21_15558_world.sql | 7 + .../Northrend/Naxxramas/boss_heigan.cpp | 147 +++++++++--------- .../Naxxramas/instance_naxxramas.cpp | 14 +- 3 files changed, 87 insertions(+), 81 deletions(-) create mode 100644 sql/updates/world/2015_09_21_15558_world.sql diff --git a/sql/updates/world/2015_09_21_15558_world.sql b/sql/updates/world/2015_09_21_15558_world.sql new file mode 100644 index 0000000000..4088a33b83 --- /dev/null +++ b/sql/updates/world/2015_09_21_15558_world.sql @@ -0,0 +1,7 @@ +-- +UPDATE `creature_text` SET `probability`=20 WHERE `entry`=15936 AND `groupid`=1; + +DELETE FROM `creature_text` WHERE `entry`=15936 AND `groupid` IN (4,5); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(15936,4,0,"%s teleports and begins to channel a spell!",41,100,32332,3,"Heigan EMOTE_DANCE"), +(15936,5,0,"%s rushes to attack once more!",41,100,32333,3,"Heigan EMOTE_DANCE_END"); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index 3d7c128c8d..5248c48029 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -21,36 +21,42 @@ #include "naxxramas.h" #include "Player.h" -enum Heigan +enum Spells { - SPELL_DECREPIT_FEVER = 29998, // 25-man: 55011 - SPELL_SPELL_DISRUPTION = 29310, - SPELL_PLAGUE_CLOUD = 29350, + SPELL_DECREPIT_FEVER = 29998, // 25-man: 55011 + SPELL_SPELL_DISRUPTION = 29310, + SPELL_PLAGUE_CLOUD = 29350, + SPELL_TELEPORT_SELF = 30211, +}; - SAY_AGGRO = 0, - SAY_SLAY = 1, - SAY_TAUNT = 2, - SAY_DEATH = 3 +enum Yells +{ + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_TAUNT = 2, + SAY_DEATH = 3, + + EMOTE_DANCE = 4, + EMOTE_DANCE_END = 5, }; enum Events { - EVENT_NONE, - EVENT_DISRUPT, + EVENT_DISRUPT = 1, EVENT_FEVER, EVENT_ERUPT, - EVENT_PHASE, + EVENT_DANCE, + EVENT_DANCE_END }; enum Phases { PHASE_FIGHT = 1, - PHASE_DANCE, + PHASE_DANCE }; enum Misc { - ACTION_SAFETY_DANCE_FAIL = 1, DATA_SAFETY_DANCE = 19962139 }; @@ -66,39 +72,25 @@ public: struct boss_heiganAI : public BossAI { - boss_heiganAI(Creature* creature) : BossAI(creature, BOSS_HEIGAN) - { - eruptSection = 0; - eruptDirection = false; - safetyDance = false; - phase = PHASE_FIGHT; - } + boss_heiganAI(Creature* creature) : BossAI(creature, BOSS_HEIGAN), eruptSection(0), eruptDirection(false), safetyDance(false) { } - uint32 eruptSection; - bool eruptDirection; - bool safetyDance; - Phases phase; + void Reset() override + { + me->SetReactState(REACT_AGGRESSIVE); + _Reset(); + } void KilledUnit(Unit* who) override { - if (!(rand32() % 5)) - Talk(SAY_SLAY); + Talk(SAY_SLAY); + if (who->GetTypeId() == TYPEID_PLAYER) safetyDance = false; } - void SetData(uint32 id, uint32 data) override - { - if (id == DATA_SAFETY_DANCE) - safetyDance = data ? true : false; - } - uint32 GetData(uint32 type) const override { - if (type == DATA_SAFETY_DANCE) - return safetyDance ? 1 : 0; - - return 0; + return (type == DATA_SAFETY_DANCE && safetyDance) ? 1u : 0u; } void JustDied(Unit* /*killer*/) override @@ -111,35 +103,14 @@ public: { _EnterCombat(); Talk(SAY_AGGRO); - EnterPhase(PHASE_FIGHT); - safetyDance = true; - } - - void EnterPhase(Phases newPhase) - { - phase = newPhase; - events.Reset(); + eruptSection = 3; - if (phase == PHASE_FIGHT) - { - events.ScheduleEvent(EVENT_DISRUPT, urand(10000, 25000)); - events.ScheduleEvent(EVENT_FEVER, urand(15000, 20000)); - events.ScheduleEvent(EVENT_PHASE, 90000); - events.ScheduleEvent(EVENT_ERUPT, 15000); - me->GetMotionMaster()->MoveChase(me->GetVictim()); - } - else - { - float x, y, z, o; - me->GetHomePosition(x, y, z, o); - me->NearTeleportTo(x, y, z, o - (float(M_PI) / 2)); - me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MoveIdle(); - me->SetTarget(ObjectGuid::Empty); - DoCastAOE(SPELL_PLAGUE_CLOUD); - events.ScheduleEvent(EVENT_PHASE, 45000); - events.ScheduleEvent(EVENT_ERUPT, 8000); - } + events.ScheduleEvent(EVENT_DISRUPT, urand(15 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_FIGHT); + events.ScheduleEvent(EVENT_FEVER, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_FIGHT); + events.ScheduleEvent(EVENT_DANCE, 90 * IN_MILLISECONDS, 0, PHASE_FIGHT); + events.ScheduleEvent(EVENT_ERUPT, 15 * IN_MILLISECONDS, 0, PHASE_FIGHT); + + safetyDance = true; } void UpdateAI(uint32 diff) override @@ -155,15 +126,36 @@ public: { case EVENT_DISRUPT: DoCastAOE(SPELL_SPELL_DISRUPTION); - events.ScheduleEvent(EVENT_DISRUPT, urand(5000, 10000)); + events.ScheduleEvent(EVENT_DISRUPT, 11 * IN_MILLISECONDS); break; case EVENT_FEVER: DoCastAOE(SPELL_DECREPIT_FEVER); - events.ScheduleEvent(EVENT_FEVER, urand(20000, 25000)); + events.ScheduleEvent(EVENT_FEVER, urand(20 * IN_MILLISECONDS, 25 * IN_MILLISECONDS)); break; - case EVENT_PHASE: - /// @todo Add missing texts for both phase switches - EnterPhase(phase == PHASE_FIGHT ? PHASE_DANCE : PHASE_FIGHT); + case EVENT_DANCE: + events.SetPhase(PHASE_DANCE); + Talk(SAY_TAUNT); + Talk(EMOTE_DANCE); + eruptSection = 3; + me->SetReactState(REACT_PASSIVE); + me->AttackStop(); + me->StopMoving(); + DoCast(SPELL_TELEPORT_SELF); + DoCastAOE(SPELL_PLAGUE_CLOUD); + events.ScheduleEvent(EVENT_DANCE_END, 45 * IN_MILLISECONDS, 0, PHASE_DANCE); + events.ScheduleEvent(EVENT_ERUPT, 10 * IN_MILLISECONDS); + break; + case EVENT_DANCE_END: + events.SetPhase(PHASE_FIGHT); + Talk(EMOTE_DANCE_END); + eruptSection = 3; + events.ScheduleEvent(EVENT_DISRUPT, urand(10, 25) * IN_MILLISECONDS, 0, PHASE_FIGHT); + events.ScheduleEvent(EVENT_FEVER, urand(15, 20) * IN_MILLISECONDS, 0, PHASE_FIGHT); + events.ScheduleEvent(EVENT_DANCE, 90 * IN_MILLISECONDS, 0, PHASE_FIGHT); + events.ScheduleEvent(EVENT_ERUPT, 15 * IN_MILLISECONDS, 0, PHASE_FIGHT); + me->CastStop(); + me->SetReactState(REACT_AGGRESSIVE); + DoZoneInCombat(); break; case EVENT_ERUPT: instance->SetData(DATA_HEIGAN_ERUPT, eruptSection); @@ -176,13 +168,22 @@ public: eruptDirection ? ++eruptSection : --eruptSection; - events.ScheduleEvent(EVENT_ERUPT, phase == PHASE_FIGHT ? 10000 : 3000); + if (events.IsInPhase(PHASE_DANCE)) + events.ScheduleEvent(EVENT_ERUPT, 3 * IN_MILLISECONDS, 0, PHASE_DANCE); + else + events.ScheduleEvent(EVENT_ERUPT, 10 * IN_MILLISECONDS, 0, PHASE_FIGHT); break; } } DoMeleeAttackIfReady(); } + + private: + uint32 eruptSection; + bool eruptDirection; + + bool safetyDance; // is achievement still possible? (= no player deaths yet) }; }; @@ -205,7 +206,7 @@ class spell_heigan_eruption : public SpellScriptLoader if (GetHitDamage() >= int32(GetHitPlayer()->GetHealth())) if (InstanceScript* instance = caster->GetInstanceScript()) if (Creature* Heigan = ObjectAccessor::GetCreature(*caster, instance->GetGuidData(DATA_HEIGAN))) - Heigan->AI()->SetData(DATA_SAFETY_DANCE, 0); + Heigan->AI()->KilledUnit(GetHitPlayer()); } void Register() override @@ -223,9 +224,7 @@ class spell_heigan_eruption : public SpellScriptLoader class achievement_safety_dance : public AchievementCriteriaScript { public: - achievement_safety_dance() : AchievementCriteriaScript("achievement_safety_dance") - { - } + achievement_safety_dance() : AchievementCriteriaScript("achievement_safety_dance") { } bool OnCheck(Player* /*player*/, Unit* target) override { diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 3a431ab3ac..692e6d8b58 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -78,12 +78,13 @@ ObjectData const objectData[] = { 0, 0, } }; -float const HeiganPos[2] = { 2796.0f, -3707.0f }; +// from P2 teleport spell stored target +float const HeiganPos[2] = { 2793.86f, -3707.38f }; float const HeiganEruptionSlope[3] = { - (-3685.0f - HeiganPos[1]) / (2724.0f - HeiganPos[0]), - (-3647.0f - HeiganPos[1]) / (2749.0f - HeiganPos[0]), - (-3637.0f - HeiganPos[1]) / (2771.0f - HeiganPos[0]) + (-3703.303223f - HeiganPos[1]) / (2777.494141f - HeiganPos[0]), // between right center and far right + (-3696.948242f - HeiganPos[1]) / (2785.624268f - HeiganPos[0]), // between left and right halves + (-3691.880615f - HeiganPos[1]) / (2790.280029f - HeiganPos[0]) // between far left and left center }; // 0 H x @@ -246,7 +247,6 @@ class instance_naxxramas : public InstanceMapScript if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287) { uint32 section = GetEruptionSection(go->GetPositionX(), go->GetPositionY()); - HeiganEruptionGUID[section].erase(go->GetGUID()); return; } @@ -552,7 +552,7 @@ class instance_naxxramas : public InstanceMapScript // This Function is called in CheckAchievementCriteriaMeet and CheckAchievementCriteriaMeet is called before SetBossState(bossId, DONE), // so to check if all bosses are done the checker must exclude 1 boss, the last done, if there is at most 1 encouter in progress when is // called this function then all bosses are done. The one boss that check is the boss that calls this function, so it is dead. - bool AreAllEncoutersDone() + bool AreAllEncountersDone() { uint32 numBossAlive = 0; for (uint32 i = 0; i < EncounterCount; ++i) @@ -589,7 +589,7 @@ class instance_naxxramas : public InstanceMapScript case 13239: // Loatheb case 13240: // Thaddius case 7617: // Kel'Thuzad - if (AreAllEncoutersDone() && !playerDied) + if (AreAllEncountersDone() && !playerDied) return true; return false; } From 4c46e2048b317da4ada75140794b5b40c0db1305 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 2 Oct 2015 23:26:06 +0200 Subject: [PATCH 100/524] DB/Gossip Menu: Add missing gossips for Karazhan's npcs Move npc_berthold script to the DB Add missing gossips Closes #15564 Thanks to @Riztazz and @xjose93 --- sql/updates/world/2015_10_02_00_world.sql | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 sql/updates/world/2015_10_02_00_world.sql diff --git a/sql/updates/world/2015_10_02_00_world.sql b/sql/updates/world/2015_10_02_00_world.sql new file mode 100644 index 0000000000..6f3e168dbb --- /dev/null +++ b/sql/updates/world/2015_10_02_00_world.sql @@ -0,0 +1,30 @@ +-- +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (7143, 8172); +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (7139) AND `id`=3; +INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`, `OptionBroadcastTextID`, `option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES +(7143,0,0,"Help you with what situation?",18420,1,1,8172), +(8172,0,0,"Big ones?",18421,1,1,8171), +(7139,3,0,"Please transport me to the Guardian's Library.",20519,1,1,0); + +UPDATE `gossip_menu_option` SET `action_menu_id`=8167 WHERE `menu_id`=7139 AND `id`=0; +UPDATE `gossip_menu_option` SET `action_menu_id`=8168 WHERE `menu_id`=7139 AND `id`=1; +UPDATE `gossip_menu_option` SET `action_menu_id`=8169 WHERE `menu_id`=7139 AND `id`=2; + +UPDATE `creature_template` SET `gossip_menu_id`=8173 WHERE `entry`=16426; +DELETE FROM `gossip_menu` WHERE `entry`=8173 AND `text_id`=10120; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (8173, 10120); + +UPDATE `creature_template` SET `gossip_menu_id`=8175 WHERE `entry`=16806; +DELETE FROM `gossip_menu` WHERE `entry`=8175 AND `text_id`=10123; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (8175, 10123); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=7139; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 7139, 3, 0, 0, 13, 1, 7, 3, 0, 0, 0, 0, '', 'Show options for gossip only if ARAN done'); + +UPDATE `creature_template` SET `ScriptName`='', `AIName`='SmartAI' WHERE `entry`=16153; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (16153) 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 +(16153,0,0,1,62,0,100,0,7139,3,0,0,85,39567,0,0,0,0,0,7,0,0,0,0,0,0,0,"Berthold - On gossip select - cast spell"), +(16153,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,"Berthold - On gossip select - Close gossip"); From 0e945abfcece46927028418c07c07ed9c17ad2d9 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 3 Oct 2015 00:24:25 +0200 Subject: [PATCH 101/524] DB/SAI: Razormaw By @pete318 Update #8988 --- sql/updates/world/2015_10_03_00_world.sql | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 sql/updates/world/2015_10_03_00_world.sql diff --git a/sql/updates/world/2015_10_03_00_world.sql b/sql/updates/world/2015_10_03_00_world.sql new file mode 100644 index 0000000000..090111be95 --- /dev/null +++ b/sql/updates/world/2015_10_03_00_world.sql @@ -0,0 +1,21 @@ +-- +-- Razormaw SAI +SET @ENTRY := 17592; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,0,0,100,0,1000,3000,3000,5000,11,31279,64,0,0,0,0,2,0,0,0,0,0,0,0,"Razormaw - In Combat - Cast 'Swipe'"), +(@ENTRY,0,1,0,0,0,100,0,8000,12000,6000,8000,11,8873,64,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - In Combat - Cast 'Flame Breath'"), +(@ENTRY,0,2,0,2,0,50,1,0,50,0,0,11,14100,64,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - Between 0-50% Health - Cast 'Terrifying Roar' (No Repeat)"), +(@ENTRY,0,3,11,11,0,100,0,0,0,0,0,53,1,17592,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Respawn - Start Waypoint"), +(@ENTRY,0,4,18,40,0,100,0,10,17592,0,0,19,256,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 10 Reached - Remove Flag Immune To Players"), +(@ENTRY,0,11,0,61,0,100,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Respawn - Set Active On"), +(@ENTRY,0,14,18,40,0,100,0,9,17592,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 9 Reached - Remove Flag Hover"), +(@ENTRY,0,18,0,61,0,100,0,10,17592,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 10 Reached - Set Reactstate Aggressive"), +(@ENTRY,0,19,0,40,0,100,0,11,17592,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 11 Reached - Set Home Position"), +(@ENTRY,0,20,23,40,0,100,0,1,17592,0,0,18,256,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 1 Reached - Set Flag Immune To Players"), +(@ENTRY,0,21,22,25,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Reset - Set Reactstate Aggressive"), +(@ENTRY,0,22,0,61,0,100,0,0,0,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Reset - Remove Flag Hover"), +(@ENTRY,0,23,0,61,0,100,0,1,17592,0,0,90,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Razormaw - On Waypoint 1 Reached - Set Flag Hover"); + +UPDATE `waypoints` SET `position_z` = 96.5391 WHERE `entry`=17592 AND `pointid`=11; From bde599e39ccdcfa76386ea74bd70d172d83c3022 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 3 Oct 2015 01:42:49 +0200 Subject: [PATCH 102/524] DB/Misc: Multiple DB Fixes --- sql/updates/world/2015_10_03_01_world.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 sql/updates/world/2015_10_03_01_world.sql diff --git a/sql/updates/world/2015_10_03_01_world.sql b/sql/updates/world/2015_10_03_01_world.sql new file mode 100644 index 0000000000..150d77b06e --- /dev/null +++ b/sql/updates/world/2015_10_03_01_world.sql @@ -0,0 +1,16 @@ +-- +DELETE FROM `creature` WHERE `guid`=71981 AND `id`=20251; + +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (15241, 21719, 24933, 21497, 20127); +UPDATE `creature_template` SET `InhabitType`=7 WHERE `entry` IN (20611); + +UPDATE `creature_template_addon` SET `bytes1`=33554432 WHERE `entry`=21497; +UPDATE `creature_template` SET `unit_flags`=512 WHERE `entry` IN (21497); +UPDATE `smart_scripts` SET `action_param1`=15847, `comment`="Blackscale - In Combat - Cast 'Tail Sweep'" WHERE `entryorguid`=21497 AND `source_Type`=0 AND `id`=2; +UPDATE `creature` SET `MovementType`=1, `spawndist`=10 WHERE `id` IN (21497, 20611, 20127); +UPDATE `creature` SET `MovementType`=0, `spawndist`=0 WHERE `id` IN (21639, 20251, 22320); + +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` IN (20238); +DELETE FROM `smart_scripts` WHERE `entryorguid`IN (20238) 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 +(20238,0,0,0,1,0,100,0,1000,3000,3000,7000,11,35063,0,0,0,0,0,19,20251,20,0,0,0,0,0,"Honor Hold Scout - OOC - Cast Shoot Honor Hold Scout Archery Target"); From 774ea0b4bd1e0d469cfce8013f2e557f030c7c97 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 3 Oct 2015 02:41:51 +0200 Subject: [PATCH 103/524] DB/Creature: Spirit of Olum Move the script to the DB Fix conditions for the teleportation Add the missing teleportation to the Chamber of Command Fix gossip text --- sql/updates/world/2015_10_03_02_world.sql | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 sql/updates/world/2015_10_03_02_world.sql diff --git a/sql/updates/world/2015_10_03_02_world.sql b/sql/updates/world/2015_10_03_02_world.sql new file mode 100644 index 0000000000..53825f25c6 --- /dev/null +++ b/sql/updates/world/2015_10_03_02_world.sql @@ -0,0 +1,26 @@ +-- +DELETE FROM `gossip_menu` WHERE `entry`=8750 AND `text_id`=11082; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (8750, 11082); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (8750) AND `id`=2; +INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`, `OptionBroadcastTextID`, `option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES +(8750,2,0,"I'm ready. Take me to the Chamber of Command.",21879,1,1,0); + +DELETE FROM `spell_target_position` WHERE `id`=41570; +INSERT INTO `spell_target_position` (`id`,`MapID`,`PositionX`,`PositionY`,`PositionZ`,`Orientation`) VALUES +(41570, 564, 603.42, 305.982, 271.9, 0); + +UPDATE `creature_template` SET `ScriptName`='', `AIName`='SmartAI' WHERE `entry`=23411; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (23411) 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 +(23411,0,0,1,62,0,100,0,8750,1,0,0,85,41566,0,0,0,0,0,7,0,0,0,0,0,0,0,"Spirit of Olum - On gossip select - cast spell"), +(23411,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,"Spirit of Olum - On gossip select - Close gossip"), +(23411,0,2,3,62,0,100,0,8750,2,0,0,85,41570,0,0,0,0,0,7,0,0,0,0,0,0,0,"Spirit of Olum - On gossip select - cast spell"), +(23411,0,3,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Spirit of Olum - On gossip select - Close gossip"); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup`=8750; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 8750, 1, 0, 0, 13, 1, 1, 3, 2, 0, 0, 0, '', 'Show options for gossip only if SUPREMUS done'), +(15, 8750, 2, 0, 0, 13, 1, 7, 3, 2, 0, 0, 0, '', 'Show options for gossip only if COUNCIL done'), +(14, 8750, 11082, 0, 0, 13, 1, 1, 3, 2, 1, 0, 0, '', 'Show gossip text only if SUPREMUS not done'), +(14, 8750, 11081, 0, 0, 13, 1, 1, 3, 2, 0, 0, 0, '', 'Show gossip text only if SUPREMUS done'); From 359df54b79fcfa9d95ddd9d2d891f6e26697e476 Mon Sep 17 00:00:00 2001 From: CreshandKesh Date: Sat, 3 Oct 2015 21:33:04 +0200 Subject: [PATCH 104/524] Core/Scripts: Salanar the Horseman, Into the Realm of Shadows - Show gossip_menu_option 9739 only if quest 12687 is accepted & not completed - Cast spell 52693, SPELL_REALM_OF_SHADOWS, when gossip option is selected Core script by @CreshandKesh (with some modifications) SQL part by @CreshandKesh and @tkrokli, condition adjustment by @Killyana. Closes #15603 Closes #15657 --- sql/updates/world/2015_10_03_15603_world.sql | 11 +++++ .../ScarletEnclave/chapter1.cpp | 42 ++++++++++++------- 2 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 sql/updates/world/2015_10_03_15603_world.sql diff --git a/sql/updates/world/2015_10_03_15603_world.sql b/sql/updates/world/2015_10_03_15603_world.sql new file mode 100644 index 0000000000..4a5aedb13d --- /dev/null +++ b/sql/updates/world/2015_10_03_15603_world.sql @@ -0,0 +1,11 @@ +-- +-- Salanar the Horseman (NPC 28788) say line in Realm of Shadows +SET @ENTRY := 28788; +DELETE FROM `creature_text` WHERE `entry` = @ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(@ENTRY,0,0,'Impressive, death knight. Return to me in the world of the living for your reward.',12,0,100,0,0,0,28835,0,'SALANAR_SAY'); + +-- Salanar the Horseman (NPC 28653) conditions for the gossip_menu_option to be shown for Into the Realm of Shadows +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9739 AND `ConditionValue1`=12687; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,9739,0,0,0,9,0,12687,0,0,0,0,0,'','Salanar the Horseman - Show gossip option only if player has accepted quest 12687, but not completed it.'); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index b37d505d76..9747d31952 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -729,13 +729,19 @@ class npc_dark_rider_of_acherus : public CreatureScript ## npc_salanar_the_horseman ######*/ -enum Spells_Salanar +enum SalanarTheHorseman { - SPELL_REALM_OF_SHADOWS = 52693, + GOSSIP_SALANAR_MENU = 9739, + GOSSIP_SALANAR_OPTION = 0, + SALANAR_SAY = 0, + QUEST_INTO_REALM_OF_SHADOWS = 12687, + NPC_DARK_RIDER_OF_ACHERUS = 28654, + NPC_SALANAR_IN_REALM_OF_SHADOWS = 28788, SPELL_EFFECT_STOLEN_HORSE = 52263, SPELL_DELIVER_STOLEN_HORSE = 52264, SPELL_CALL_DARK_RIDER = 52266, - SPELL_EFFECT_OVERTAKE = 52349 + SPELL_EFFECT_OVERTAKE = 52349, + SPELL_REALM_OF_SHADOWS = 52693 }; class npc_salanar_the_horseman : public CreatureScript @@ -743,15 +749,19 @@ class npc_salanar_the_horseman : public CreatureScript public: npc_salanar_the_horseman() : CreatureScript("npc_salanar_the_horseman") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_salanar_the_horsemanAI(creature); - } - struct npc_salanar_the_horsemanAI : public ScriptedAI { npc_salanar_the_horsemanAI(Creature* creature) : ScriptedAI(creature) { } + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override + { + if (menuId == GOSSIP_SALANAR_MENU && gossipListId == GOSSIP_SALANAR_OPTION) + { + player->CastSpell(player, SPELL_REALM_OF_SHADOWS, true); + player->PlayerTalkClass->SendCloseGossip(); + } + } + void SpellHit(Unit* caster, const SpellInfo* spell) override { if (spell->Id == SPELL_DELIVER_STOLEN_HORSE) @@ -766,7 +776,7 @@ public: caster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); caster->setFaction(35); DoCast(caster, SPELL_CALL_DARK_RIDER, true); - if (Creature* Dark_Rider = me->FindNearestCreature(28654, 15)) + if (Creature* Dark_Rider = me->FindNearestCreature(NPC_DARK_RIDER_OF_ACHERUS, 15)) ENSURE_AI(npc_dark_rider_of_acherus::npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(caster); } } @@ -784,10 +794,11 @@ public: { if (Player* player = charmer->ToPlayer()) { - // for quest Into the Realm of Shadows(12687) - if (me->GetEntry() == 28788 && player->GetQuestStatus(12687) == QUEST_STATUS_INCOMPLETE) + // for quest Into the Realm of Shadows(QUEST_INTO_REALM_OF_SHADOWS) + if (me->GetEntry() == NPC_SALANAR_IN_REALM_OF_SHADOWS && player->GetQuestStatus(QUEST_INTO_REALM_OF_SHADOWS) == QUEST_STATUS_INCOMPLETE) { - player->GroupEventHappens(12687, me); + player->GroupEventHappens(QUEST_INTO_REALM_OF_SHADOWS, me); + Talk(SALANAR_SAY); charmer->RemoveAurasDueToSpell(SPELL_EFFECT_OVERTAKE); if (Creature* creature = who->ToCreature()) { @@ -796,14 +807,17 @@ public: } } - if (player->HasAura(SPELL_REALM_OF_SHADOWS)) - player->RemoveAurasDueToSpell(SPELL_REALM_OF_SHADOWS); + player->RemoveAurasDueToSpell(SPELL_REALM_OF_SHADOWS); } } } } }; + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_salanar_the_horsemanAI(creature); + } }; /*###### From ad38c2712460fe9d3ecb71959294655d2b88799d Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sun, 4 Oct 2015 16:16:56 +0200 Subject: [PATCH 105/524] Core/Misc: renamed sGossipSelect parameters --- src/server/game/AI/CoreAI/UnitAI.h | 4 +- src/server/game/AI/SmartScripts/SmartAI.cpp | 6 +-- src/server/game/AI/SmartScripts/SmartAI.h | 4 +- .../BlackwingLair/boss_nefarian.cpp | 4 +- .../BlackwingLair/boss_vaelastrasz.cpp | 4 +- .../EasternKingdoms/Karazhan/karazhan.cpp | 37 ---------------- .../EasternKingdoms/ZulAman/zulaman.cpp | 4 +- .../BlackfathomDeeps/blackfathom_deeps.cpp | 2 +- src/server/scripts/Kalimdor/zone_azshara.cpp | 2 +- .../scripts/Kalimdor/zone_azuremyst_isle.cpp | 2 +- .../boss_icecrown_gunship_battle.cpp | 6 +-- .../IcecrownCitadel/boss_the_lich_king.cpp | 4 +- .../Ulduar/Ulduar/boss_yogg_saron.cpp | 4 +- .../scripts/Northrend/zone_grizzly_hills.cpp | 2 +- .../scripts/Northrend/zone_storm_peaks.cpp | 8 ++-- src/server/scripts/Northrend/zone_zuldrak.cpp | 4 +- .../Outland/BlackTemple/black_temple.cpp | 44 +------------------ .../Outland/BlackTemple/boss_illidan.cpp | 2 +- .../BlackTemple/boss_shade_of_akama.cpp | 4 +- 19 files changed, 34 insertions(+), 113 deletions(-) diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 1939c96dac..c93ed0db00 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -255,8 +255,8 @@ class UnitAI static void FillAISpellInfo(); virtual void sGossipHello(Player* /*player*/) { } - virtual void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) { } - virtual void sGossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, char const* /*code*/) { } + virtual void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) { } + virtual void sGossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, char const* /*code*/) { } virtual void sQuestAccept(Player* /*player*/, Quest const* /*quest*/) { } virtual void sQuestSelect(Player* /*player*/, Quest const* /*quest*/) { } virtual void sQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { } diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 7c507ad59b..4612269709 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -728,12 +728,12 @@ void SmartAI::sGossipHello(Player* player) GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player); } -void SmartAI::sGossipSelect(Player* player, uint32 sender, uint32 action) +void SmartAI::sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) { - GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_SELECT, player, sender, action); + GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_SELECT, player, menuId, gossipListId); } -void SmartAI::sGossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { } +void SmartAI::sGossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, const char* /*code*/) { } void SmartAI::sQuestAccept(Player* player, Quest const* quest) { diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 1e287cd5b9..ea03a82184 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -175,8 +175,8 @@ class SmartAI : public CreatureAI void SetInvincibilityHpLevel(uint32 level) { mInvincibilityHpLevel = level; } void sGossipHello(Player* player) override; - void sGossipSelect(Player* player, uint32 sender, uint32 action) override; - void sGossipSelectCode(Player* player, uint32 sender, uint32 action, const char* code) override; + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override; + void sGossipSelectCode(Player* player, uint32 menuId, uint32 gossipListId, const char* code) override; void sQuestAccept(Player* player, Quest const* quest) override; //void sQuestSelect(Player* player, Quest const* quest) override; void sQuestReward(Player* player, Quest const* quest, uint32 opt) override; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index 51e1bf67f1..a89571e819 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -367,9 +367,9 @@ public: } } - void sGossipSelect(Player* player, uint32 sender, uint32 action) override + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override { - if (sender == GOSSIP_ID && action == GOSSIP_OPTION_ID) + if (menuId == GOSSIP_ID && gossipListId == GOSSIP_OPTION_ID) { player->CLOSE_GOSSIP_MENU(); Talk(SAY_GAMESBEGIN_1); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp index 636554a0ae..76ab473627 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp @@ -221,9 +221,9 @@ public: DoMeleeAttackIfReady(); } - void sGossipSelect(Player* player, uint32 sender, uint32 action) override + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override { - if (sender == GOSSIP_ID && action == 0) + if (menuId == GOSSIP_ID && gossipListId == 0) { player->CLOSE_GOSSIP_MENU(); BeginSpeech(player); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index f3c5965429..87945ccf91 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -25,7 +25,6 @@ EndScriptData */ /* ContentData npc_barnes -npc_berthold npc_image_of_medivh EndContentData */ @@ -415,41 +414,6 @@ public: } }; -/*### -# npc_berthold -####*/ - -#define GOSSIP_ITEM_TELEPORT "Teleport me to the Guardian's Library" - -class npc_berthold : public CreatureScript -{ -public: - npc_berthold() : CreatureScript("npc_berthold") { } - - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF + 1) - player->CastSpell(player, SPELL_TELEPORT, true); - - player->CLOSE_GOSSIP_MENU(); - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (InstanceScript* instance = creature->GetInstanceScript()) - { - // Check if Shade of Aran event is done - if (instance->GetData(TYPE_ARAN) == DONE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TELEPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - } - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } -}; - /*### # npc_image_of_medivh ####*/ @@ -668,6 +632,5 @@ public: void AddSC_karazhan() { new npc_barnes(); - new npc_berthold(); new npc_image_of_medivh(); } diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 3b52e6775b..1927b0f982 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -268,9 +268,9 @@ class npc_harrison_jones : public CreatureScript void EnterCombat(Unit* /*who*/) override { } - void sGossipSelect(Player* player, uint32 sender, uint32 action) override + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override { - if (me->GetCreatureTemplate()->GossipMenuId == sender && !action) + if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId) { player->CLOSE_GOSSIP_MENU(); me->SetFacingToObject(player); diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp index 8d9406adee..ab7509c7a2 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp @@ -226,7 +226,7 @@ public: } } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { DoCast(player, SPELL_TELEPORT_DARNASSUS); } diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp index 6727aa6955..d6aa943123 100644 --- a/src/server/scripts/Kalimdor/zone_azshara.cpp +++ b/src/server/scripts/Kalimdor/zone_azshara.cpp @@ -345,7 +345,7 @@ public: } } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { player->CLOSE_GOSSIP_MENU(); me->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true); diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 388834d1ef..52e32d3d37 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -230,7 +230,7 @@ public: Talk(ATTACK_YELL, who); } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { player->CLOSE_GOSSIP_MENU(); me->setFaction(FACTION_HOSTILE); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 78730b535a..babd444288 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -961,7 +961,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript } } - void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override { me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetTransport()->EnableMovement(true); @@ -1229,7 +1229,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript } } - void sGossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override { me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetTransport()->EnableMovement(true); @@ -1394,7 +1394,7 @@ class npc_zafod_boombox : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { player->AddItem(ITEM_GOBLIN_ROCKET_PACK, 1); player->PlayerTalkClass->SendCloseGossip(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 6c512546a2..4fadc0bf8f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -1199,9 +1199,9 @@ class npc_tirion_fordring_tft : public CreatureScript SetEquipmentSlots(true); // remove glow on ashbringer } - void sGossipSelect(Player* /*player*/, uint32 sender, uint32 action) override + void sGossipSelect(Player* /*player*/, uint32 menuId, uint32 gossipListId) override { - if (me->GetCreatureTemplate()->GossipMenuId == sender && !action) + if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId) { _events.SetPhase(PHASE_INTRO); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); 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 59c28cd3a5..6f07a88536 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -1508,9 +1508,9 @@ class npc_observation_ring_keeper : public CreatureScript DoCast(SPELL_KEEPER_ACTIVE); } - void sGossipSelect(Player* player, uint32 sender, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override { - if (sender != 10333) + if (menuId != 10333) return; me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 83fd385971..54b06260e7 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -762,7 +762,7 @@ public: } } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { DoCast(player, SPELL_SUMMON_ASHWOOD_BRAND); } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 25bf482600..e86e907b55 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -85,13 +85,13 @@ public: DoMeleeAttackIfReady(); } - void sGossipSelect(Player* player, uint32 sender, uint32 action) override + void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override { - if (sender == GOSSIP_ID && action == GOSSIP_OPTION_ID) + if (menuId == GOSSIP_ID && gossipListId == GOSSIP_OPTION_ID) { player->CLOSE_GOSSIP_MENU(); me->setFaction(113); - npc_escortAI::Start(true, true, player->GetGUID()); + Start(true, true, player->GetGUID()); } } }; @@ -476,7 +476,7 @@ public: objectCounter = 0; } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { player->CLOSE_GOSSIP_MENU(); playerGUID = player->GetGUID(); diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 91c796a6e6..e36930f574 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -267,7 +267,7 @@ public: return; } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { _events.ScheduleEvent(EVENT_RECRUIT_1, 100); player->CLOSE_GOSSIP_MENU(); @@ -552,7 +552,7 @@ public: } } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { player->CLOSE_GOSSIP_MENU(); DoCast(player, SPELL_ALCHEMIST_APPRENTICE_INVISBUFF); diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp index 764cd9594e..f044fcef5c 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp @@ -15,22 +15,12 @@ * with this program. If not, see . */ -/* -Name: Black_Temple -Complete: 100% -Comment: Spirit of Olum: Player Teleporter to Seer Kanai Teleport after defeating Naj'entus and Supremus. -*/ - #include "ScriptMgr.h" #include "ScriptedCreature.h" -#include "ScriptedGossip.h" #include "black_temple.h" -#include "Player.h" enum Spells { - // Spirit of Olum - SPELL_TELEPORT = 41566, // Wrathbone Flayer SPELL_CLEAVE = 15496, SPELL_IGNORED = 39544, @@ -52,36 +42,6 @@ enum Events EVENT_IGNORED = 4, }; -// ######################################################## -// Spirit of Olum -// ######################################################## - -class npc_spirit_of_olum : public CreatureScript -{ -public: - npc_spirit_of_olum() : CreatureScript("npc_spirit_of_olum") { } - - struct npc_spirit_of_olumAI : public ScriptedAI - { - npc_spirit_of_olumAI(Creature* creature) : ScriptedAI(creature) { } - - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override - { - if (action == 1) - { - player->CLOSE_GOSSIP_MENU(); - player->InterruptNonMeleeSpells(false); - player->CastSpell(player, SPELL_TELEPORT, false); - } - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_spirit_of_olumAI(creature); - } -}; - // ######################################################## // Wrathbone Flayer // ######################################################## @@ -123,7 +83,6 @@ public: void UpdateAI(uint32 diff) override { - if (!_enteredCombat) { _events.Update(diff); @@ -215,12 +174,11 @@ public: CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI(creature); + return GetBlackTempleAI(creature); } }; void AddSC_black_temple() { - new npc_spirit_of_olum(); new npc_wrathbone_flayer(); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 7cc460d454..f8c031f69e 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -1779,7 +1779,7 @@ public: DoMeleeAttackIfReady(); } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override { player->CLOSE_GOSSIP_MENU(); EnterPhase(PHASE_CHANNEL); diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index e4369f0348..25ff1bf953 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -519,9 +519,9 @@ public: DoMeleeAttackIfReady(); } - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 action) override + void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override { - if (action == 0) + if (gossipListId == 0) { player->CLOSE_GOSSIP_MENU(); StartChannel = true; From 7225b7abf10cd637c22eae5ef1b473dfbfbe9148 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 4 Oct 2015 16:59:55 +0200 Subject: [PATCH 106/524] Scripts/ICC: moved saurfang gossips to db Closes #14904 --- ...5603_world.sql => 2015_10_04_00_world.sql} | 0 sql/updates/world/2015_10_04_01_world.sql | 21 ++++++ .../boss_deathbringer_saurfang.cpp | 65 ++++++------------- 3 files changed, 42 insertions(+), 44 deletions(-) rename sql/updates/world/{2015_10_03_15603_world.sql => 2015_10_04_00_world.sql} (100%) create mode 100644 sql/updates/world/2015_10_04_01_world.sql diff --git a/sql/updates/world/2015_10_03_15603_world.sql b/sql/updates/world/2015_10_04_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_03_15603_world.sql rename to sql/updates/world/2015_10_04_00_world.sql diff --git a/sql/updates/world/2015_10_04_01_world.sql b/sql/updates/world/2015_10_04_01_world.sql new file mode 100644 index 0000000000..9e478ea401 --- /dev/null +++ b/sql/updates/world/2015_10_04_01_world.sql @@ -0,0 +1,21 @@ +UPDATE `creature_template` SET `npcflag`=1, `gossip_menu_id`=10953 WHERE `entry`=37187; + +DELETE FROM `gossip_menu` WHERE `entry` IN (10953, 10952) AND `text_id` IN (15217, 15218); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(10953, 15217), +(10952, 15218); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (10953, 10952); +INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`, `OptionBroadcastTextID`, `option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES +(10953,0,0,"We are ready to go, High Overlord. The Lich King must fall!",37631,1,1,10952), +(10952,0,0,"Lok'tar ogar! We are ready! Onward, brother orc!",37633,1,1,0); + +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (10933, 10934); +INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`, `OptionBroadcastTextID`, `option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES +(10933,0,0,"We're ready, Muradin",37446,1,1,10934), +(10934,0,0,"We're sure. Let's go!",37448,1,1,0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup` IN (10933, 10953); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 10933, 0, 0, 0, 13, 1, 2, 4, 2, 1, 0, 0, '', 'Show gossip option only if Deathbringer Saurfang is not done'), +(15, 10953, 0, 0, 0, 13, 1, 2, 4, 2, 1, 0, 0, '', 'Show gossip option only if Deathbringer Saurfang is not done'); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 943be27943..365e0a1588 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -203,6 +203,9 @@ enum Misc { DATA_MADE_A_MESS = 45374613, // 4537, 4613 are achievement IDs FACTION_SCOURGE = 974, + + GOSSIP_MENU_MURADIN_BRONZEBEARD = 10934, + GOSSIP_MENU_HIGH_OVERLORD_SAURFANG = 10952 }; enum MovePoints @@ -634,6 +637,15 @@ class npc_high_overlord_saurfang_icc : public CreatureScript _events.Reset(); } + void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override + { + if (menuId == GOSSIP_MENU_HIGH_OVERLORD_SAURFANG) + { + player->PlayerTalkClass->SendCloseGossip(); + DoAction(ACTION_START_EVENT); + } + } + void DoAction(int32 action) override { switch (action) @@ -798,28 +810,6 @@ class npc_high_overlord_saurfang_icc : public CreatureScript std::list _guardList; }; - bool OnGossipHello(Player* player, Creature* creature) override - { - InstanceScript* instance = creature->GetInstanceScript(); - if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE) - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "We are ready to go, High Overlord. The Lich King must fall!", 631, -ACTION_START_EVENT); - player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); - } - - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - player->CLOSE_GOSSIP_MENU(); - if (action == -ACTION_START_EVENT) - creature->AI()->DoAction(ACTION_START_EVENT); - - return true; - } - CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI(creature); @@ -843,6 +833,15 @@ class npc_muradin_bronzebeard_icc : public CreatureScript _events.Reset(); } + void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override + { + if (menuId == GOSSIP_MENU_MURADIN_BRONZEBEARD) + { + player->PlayerTalkClass->SendCloseGossip(); + DoAction(ACTION_START_EVENT); + } + } + void DoAction(int32 action) override { switch (action) @@ -946,28 +945,6 @@ class npc_muradin_bronzebeard_icc : public CreatureScript std::list _guardList; }; - bool OnGossipHello(Player* player, Creature* creature) override - { - InstanceScript* instance = creature->GetInstanceScript(); - if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE) - { - player->ADD_GOSSIP_ITEM(0, "Let it begin...", 631, -ACTION_START_EVENT + 1); - player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); - } - - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - player->CLOSE_GOSSIP_MENU(); - if (action == -ACTION_START_EVENT + 1) - creature->AI()->DoAction(ACTION_START_EVENT); - - return true; - } - CreatureAI* GetAI(Creature* creature) const override { return GetIcecrownCitadelAI(creature); From 6a10dbd79c9436c9233d8e170833c0897ce145f8 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 4 Oct 2015 18:43:57 +0200 Subject: [PATCH 107/524] DB/Creature: Fix Npcflag for High Overlord Saurfang and Muradin Bronzebeard --- sql/updates/world/2015_10_04_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_04_02_world.sql diff --git a/sql/updates/world/2015_10_04_02_world.sql b/sql/updates/world/2015_10_04_02_world.sql new file mode 100644 index 0000000000..f95cb062b8 --- /dev/null +++ b/sql/updates/world/2015_10_04_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `npcflag`=0 WHERE `entry` IN (37187,37200); From 3b544a35777005e606bcfad7cbaab7dfa85f0ba1 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 4 Oct 2015 19:33:33 +0200 Subject: [PATCH 108/524] DB/gossip: Add missing gossips to Garrosh Hellscream --- sql/updates/world/2015_10_04_03_world.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2015_10_04_03_world.sql diff --git a/sql/updates/world/2015_10_04_03_world.sql b/sql/updates/world/2015_10_04_03_world.sql new file mode 100644 index 0000000000..680b21f77d --- /dev/null +++ b/sql/updates/world/2015_10_04_03_world.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (11206,11207); +INSERT IGNORE INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `OptionBroadcastTextID`) VALUE +(11206, 0, 0, 'Northrend requires your attention Overlord Hellscream. We will deal with the Lich King and his minions without your aid.', 1, 1, 11207, 0, 0, 0, '', 39416), +(11207, 0, 0, 'The word is given. The Lich King will die by our hands!', 1, 1, 11208, 0, 0, 0, '', 39415); +UPDATE `npc_text` SET `text0_0`="You turn away the might of the Warsong Offensive? Has the chaos of battle turned you mad? With my help, victory is at hand! Without my help, your fight will be difficult.", `BroadcastTextID0`=39418 WHERE `id`=15608; +UPDATE `npc_text` SET `text0_0`="Glory to the Horde!", `BroadcastTextID0`=39419 WHERE `id`=15609; From 8bd594532859f8995b807f49b88f4348bec1cd77 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 4 Oct 2015 19:41:37 +0200 Subject: [PATCH 109/524] DB/Creature: Fix Champion go to bunny movements --- sql/updates/world/2015_10_04_04_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_04_04_world.sql diff --git a/sql/updates/world/2015_10_04_04_world.sql b/sql/updates/world/2015_10_04_04_world.sql new file mode 100644 index 0000000000..dda9747be6 --- /dev/null +++ b/sql/updates/world/2015_10_04_04_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature` SET `spawndist`=0,`MovementType`=0 WHERE `id`=34319; From a87f5fdcdebf7e03c29f6f14b89e8e8398c601e0 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 4 Oct 2015 19:55:21 +0200 Subject: [PATCH 110/524] DB/Creature: Hrothgar Landing Fixups By @Malcrom --- sql/updates/world/2015_10_04_05_world.sql | 204 ++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 sql/updates/world/2015_10_04_05_world.sql diff --git a/sql/updates/world/2015_10_04_05_world.sql b/sql/updates/world/2015_10_04_05_world.sql new file mode 100644 index 0000000000..23635d9105 --- /dev/null +++ b/sql/updates/world/2015_10_04_05_world.sql @@ -0,0 +1,204 @@ +-- +-- Hrothgar Landing Fixups +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=34879; + +DELETE FROM `creature` WHERE `guid` IN (52041,52042,52043,53107,53767,12483); +DELETE FROM `creature_addon` WHERE `guid` IN (52041,52042,52043,53107,53767,12483); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(52041, 34852, 571, 1, 1, 9990.989, 1252.2, 72.15693, 0, 120, 0, 0), +(52042, 34852, 571, 1, 1, 9977.433, 1207.604, 56.32283, 0, 120, 0, 0), +(52043, 34852, 571, 1, 1, 10013.58, 1270.264, 70.93209, 0, 120, 0, 0), +(53107, 34852, 571, 1, 1, 10051.8, 1186.913, 69.17319, 0, 120, 0, 0), +(53767, 34852, 571, 1, 1, 10063.12, 1209.752, 73.48428, 0, 120, 0, 0), +(12483, 34852, 571, 1, 1, 10115.9, 1189.974, 81.12413, 0, 120, 0, 0); + +UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=10051.27,`position_y`=1216.898,`position_z`=69.68569,`orientation`=2.460914 WHERE `guid`=53109; +UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=10110.92,`position_y`=1218.408,`position_z`=78.9978,`orientation`=0.6283185 WHERE `guid`=53113; +UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=10096.75,`position_y`=1190.5,`position_z`=79.6442,`orientation`=6.195919 WHERE `guid`=53041; +UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=9951.683,`position_y`=1201.502,`position_z`=52.69936,`orientation`=5.585053 WHERE `guid`=53114; +UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=9928.953,`position_y`=1172.898,`position_z`=51.50733,`orientation`=3.054326 WHERE `guid`=53224; + +DELETE FROM `creature_addon` WHERE `guid` IN (53041,53114,53109,53113); +INSERT INTO `creature_addon` (`guid`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (53041,0,256,0, ''),(53114,1,1,0, ''),(53109,0,1,234, ''),(53113,0,256,0, ''); + +-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT' +SET @NPC := 52038; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10347.37,`position_y`=803.1042,`position_z`=77.75536 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,10347.37,803.1042,77.75536,0,0,0,0,100,0), +(@PATH,2,10367.6,818.8438,84.29758,0,0,0,0,100,0), +(@PATH,3,10383.35,834.6024,92.76371,0,0,0,0,100,0), +(@PATH,4,10395.81,846.125,99.77592,0,0,0,0,100,0), +(@PATH,5,10405.93,863.6893,107.7268,0,0,0,0,100,0), +(@PATH,6,10405.98,875.375,111.8353,0,0,0,0,100,0), +(@PATH,7,10408.97,888.6285,116.7162,0,0,0,0,100,0), +(@PATH,8,10414.13,900.0261,121.0533,0,0,0,0,100,0), +(@PATH,9,10415.96,910.5504,123.9247,0,0,0,0,100,0), +(@PATH,10,10414.13,900.0261,121.0533,0,0,0,0,100,0), +(@PATH,11,10408.97,888.6285,116.7162,0,0,0,0,100,0), +(@PATH,12,10405.98,875.375,111.8353,0,0,0,0,100,0), +(@PATH,13,10405.93,863.6893,107.7268,0,0,0,0,100,0), +(@PATH,14,10395.81,846.125,99.77592,0,0,0,0,100,0), +(@PATH,15,10383.35,834.6024,92.76371,0,0,0,0,100,0), +(@PATH,16,10367.6,818.8438,84.29758,0,0,0,0,100,0); + +-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT' +SET @NPC := 52039; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10238.24,`position_y`=782.2483,`position_z`=71.30614 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,10238.24,782.2483,71.30614,0,0,0,0,100,0), +(@PATH,2,10263.58,779.5504,72.51409,0,0,0,0,100,0), +(@PATH,3,10288.04,780.6441,74.41165,0,0,0,0,100,0), +(@PATH,4,10303.06,778.2899,74.40554,0,0,0,0,100,0), +(@PATH,5,10317.63,777.9688,74.40554,0,0,0,0,100,0), +(@PATH,6,10330.9,782.1233,74.53054,0,0,0,0,100,0), +(@PATH,7,10340.32,781.7136,74.69975,0,0,0,0,100,0), +(@PATH,8,10330.9,782.1233,74.53054,0,0,0,0,100,0), +(@PATH,9,10317.63,777.9688,74.40554,0,0,0,0,100,0), +(@PATH,10,10303.06,778.2899,74.40554,0,0,0,0,100,0), +(@PATH,11,10288.04,780.6441,74.41165,0,0,0,0,100,0), +(@PATH,12,10263.58,779.5504,72.51409,0,0,0,0,100,0); + +-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT' +SET @NPC := 52604; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10163.75,`position_y`=843.0364,`position_z`=42.24613 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,10163.75,843.0364,42.24613,0,0,0,0,100,0), +(@PATH,2,10170.49,831.2708,47.18571,0,0,0,0,100,0), +(@PATH,3,10181.2,816.316,52.61528,0,0,0,0,100,0), +(@PATH,4,10192.17,799.5977,57.89101,0,0,0,0,100,0), +(@PATH,5,10203.03,791.2552,62.39041,0,0,0,0,100,0), +(@PATH,6,10213.43,785.3785,65.56143,0,0,0,0,100,0), +(@PATH,7,10224.06,785.1649,68.88577,0,0,0,0,100,0), +(@PATH,8,10213.43,785.3785,65.56143,0,0,0,0,100,0), +(@PATH,9,10203.03,791.2552,62.39041,0,0,0,0,100,0), +(@PATH,10,10192.28,799.4097,57.93019,0,0,0,0,100,0), +(@PATH,11,10181.2,816.316,52.61528,0,0,0,0,100,0), +(@PATH,12,10170.49,831.2708,47.18571,0,0,0,0,100,0); + +-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT' +SET @NPC := 52045; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10151.62,`position_y`=744.2795,`position_z`=66.60175 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,10151.62,744.2795,66.60175,0,0,0,0,100,0), +(@PATH,2,10160.01,748.9653,66.73127,0,0,0,0,100,0), +(@PATH,3,10170,758.5295,66.86421,0,0,0,0,100,0), +(@PATH,4,10177.37,775.2413,63.86098,0,0,0,0,100,0), +(@PATH,5,10186.68,792.9365,58.51601,0,0,0,0,100,0), +(@PATH,6,10177.37,775.2413,63.86098,0,0,0,0,100,0), +(@PATH,7,10170,758.5295,66.86421,0,0,0,0,100,0), +(@PATH,8,10160.01,748.9653,66.73127,0,0,0,0,100,0); + +-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT' +SET @NPC := 53134; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10135.21,`position_y`=1210.611,`position_z`=79.11204 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,10135.21,1210.611,79.11204,0,0,0,0,100,0), +(@PATH,2,10143.43,1207.156,79.93629,0,0,0,0,100,0), +(@PATH,3,10151.32,1200.924,83.26014,0,0,0,0,100,0), +(@PATH,4,10160.9,1196.632,81.05866,0,0,0,0,100,0), +(@PATH,5,10167.02,1193.387,78.56778,0,0,0,0,100,0), +(@PATH,6,10172.88,1190.09,76.37518,0,0,0,0,100,0), +(@PATH,7,10167.02,1193.387,78.56778,0,0,0,0,100,0), +(@PATH,8,10160.9,1196.631,81.06026,0,0,0,0,100,0), +(@PATH,9,10151.32,1200.924,83.26014,0,0,0,0,100,0), +(@PATH,10,10143.43,1207.156,79.93629,0,0,0,0,100,0); + +-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT' +SET @NPC := 53108; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9980.583,`position_y`=1195.92,`position_z`=54.3329 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,9980.583,1195.92,54.3329,0,0,0,0,100,0), +(@PATH,2,9986.409,1177.829,50.95467,0,0,0,0,100,0), +(@PATH,3,9977.379,1170.333,47.40315,0,0,0,0,100,0), +(@PATH,4,9968.799,1153.069,42.6813,0,0,0,0,100,0), +(@PATH,5,9968.064,1136.25,37.7756,0,0,0,0,100,0), +(@PATH,6,9967.274,1118.092,32.56385,0,0,0,0,100,0), +(@PATH,7,9969.733,1107.026,29.42457,0,0,0,0,100,0), +(@PATH,8,9969.542,1093.946,25.73834,0,0,0,0,100,0), +(@PATH,9,9969.849,1082.082,23.47699,0,0,0,0,100,0), +(@PATH,10,9970.052,1073.906,21.76483,0,0,0,0,100,0), +(@PATH,11,9969.849,1082.082,23.47699,0,0,0,0,100,0), +(@PATH,12,9969.542,1093.946,25.73834,0,0,0,0,100,0), +(@PATH,13,9969.732,1106.946,29.36329,0,0,0,0,100,0), +(@PATH,14,9967.274,1118.092,32.56385,0,0,0,0,100,0), +(@PATH,15,9968.064,1136.25,37.7756,0,0,0,0,100,0), +(@PATH,16,9968.799,1153.069,42.6813,0,0,0,0,100,0), +(@PATH,17,9977.379,1170.333,47.40315,0,0,0,0,100,0), +(@PATH,18,9986.482,1177.609,51.15157,0,0,0,0,100,0); + +-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT' +SET @NPC := 53099; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=9975.161,`position_y`=1041.323,`position_z`=16.6497 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,9975.161,1041.323,16.6497,0,0,0,0,100,0), +(@PATH,2,9988.208,1029.54,13.30617,0,0,0,0,100,0), +(@PATH,3,10005.18,1011.085,9.467186,0,0,0,0,100,0), +(@PATH,4,10021.29,994.6493,6.951415,0,0,0,0,100,0), +(@PATH,5,10047,976.625,6.902773,0,0,0,0,100,0), +(@PATH,6,10066.32,965.4705,10.23769,0,0,0,0,100,0), +(@PATH,7,10047,976.625,6.902773,0,0,0,0,100,0), +(@PATH,8,10021.29,994.6493,6.951415,0,0,0,0,100,0), +(@PATH,9,10005.19,1011.068,9.509178,0,0,0,0,100,0), +(@PATH,10,9988.272,1029.477,13.34639,0,0,0,0,100,0); + +-- Pathing for Kvaldir Reaver Entry: 34838 'TDB FORMAT' +SET @NPC := 53112; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=10003.86,`position_y`=1191.727,`position_z`=58.1468 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,10003.86,1191.727,58.1468,0,0,0,0,100,0), +(@PATH,2,10019.43,1197.052,61.09853,0,0,0,0,100,0), +(@PATH,3,10034.4,1198.321,64.06003,0,0,0,0,100,0), +(@PATH,4,10053.43,1195.531,69.2673,0,0,0,0,100,0), +(@PATH,5,10066.09,1187.489,73.69296,0,0,0,0,100,0), +(@PATH,6,10071.19,1179.259,75.82832,0,0,0,0,100,0), +(@PATH,7,10066.11,1187.476,73.49924,0,0,0,0,100,0), +(@PATH,8,10053.45,1195.518,69.44296,0,0,0,0,100,0), +(@PATH,9,10034.4,1198.321,64.06003,0,0,0,0,100,0), +(@PATH,10,10019.43,1197.052,61.09853,0,0,0,0,100,0); + +-- Kvaldir Reaver SAI +SET @ENTRY := 34838; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,0,0,100,0,0,0,9000,11000,11,49922,0,0,0,0,0,2,0,0,0,0,0,0,0,"Kvaldir Reaver - In Combat - Cast 'Wave Crash'"); + +-- Kvaldir Mist Binder SAI +SET @ENTRY := 34839; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,0,0,100,0,6000,6000,12000,15000,11,49816,0,0,0,0,0,2,0,0,0,0,0,0,0,"Kvaldir Mist Binder - In Combat - Cast 'Mist of Strangulation'"); From 7f8d19e73e3d169777a60dd9346d64c04b21a004 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 5 Oct 2015 14:37:30 +0200 Subject: [PATCH 111/524] DB/Quest: Fix a typo on CompletionText for Dark Storms By @Espionage724 Closes #15652 --- sql/updates/world/2015_10_05_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_05_00_world.sql diff --git a/sql/updates/world/2015_10_05_00_world.sql b/sql/updates/world/2015_10_05_00_world.sql new file mode 100644 index 0000000000..5f17920a9f --- /dev/null +++ b/sql/updates/world/2015_10_05_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `quest_request_items` SET `CompletionText` = 'Did you find Fizzle, $N? He, and rest of the Burning Blade, must be scoured from our lands!' WHERE `ID` = 806; From 24b41a52114ebf90428b372b197cfeaed2332d01 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Thu, 1 Oct 2015 23:21:49 +0200 Subject: [PATCH 112/524] Core/Player: implement ResetCoolDownAfterDuel configurable feature --- sql/updates/world/2015_10_02_01_world.sql | 3 +++ src/server/game/Entities/Player/Player.cpp | 14 ++++++++++++++ src/server/game/Entities/Player/Player.h | 7 ++++++- src/server/game/Handlers/DuelHandler.cpp | 3 +++ src/server/game/Miscellaneous/Language.h | 4 +++- src/server/game/Spells/SpellHistory.cpp | 17 +++++++++++++++++ src/server/game/Spells/SpellHistory.h | 1 + src/server/game/World/World.cpp | 1 + src/server/game/World/World.h | 1 + src/server/worldserver/worldserver.conf.dist | 8 ++++++++ 10 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 sql/updates/world/2015_10_02_01_world.sql diff --git a/sql/updates/world/2015_10_02_01_world.sql b/sql/updates/world/2015_10_02_01_world.sql new file mode 100644 index 0000000000..95f91cd593 --- /dev/null +++ b/sql/updates/world/2015_10_02_01_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `trinity_string` WHERE `entry` = 11010; +INSERT INTO `trinity_string` VALUES +(11010, 'You had cooldowns before starting the duel, so your cooldowns haven\'t been reset.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e4452b84da..1be3c2454b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7610,6 +7610,20 @@ void Player::DuelComplete(DuelCompleteType type) duel->opponent->SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty); duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 0); + if (sWorld->getBoolConfig(CONFIG_RESET_COOLDOWN_AFTER_DUEL) && + type != DUEL_INTERRUPTED) + { + if (!HasCoolDownBeforeDuel()) + RemoveArenaSpellCooldowns(true); + else + ChatHandler(GetSession()).PSendSysMessage(LANG_COOLDOWN_NOT_RESET_AFTER_DUEL); + + if (!duel->opponent->HasCoolDownBeforeDuel()) + duel->opponent->RemoveArenaSpellCooldowns(true); + else + ChatHandler(duel->opponent->GetSession()).PSendSysMessage(LANG_COOLDOWN_NOT_RESET_AFTER_DUEL); + } + delete duel->opponent->duel; duel->opponent->duel = NULL; delete duel; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e798f5d98d..bc27e34ea1 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -27,6 +27,7 @@ #include "PetDefines.h" #include "QuestDef.h" #include "SpellMgr.h" +#include "SpellHistory.h" #include "Unit.h" #include @@ -284,7 +285,7 @@ struct PvPInfo struct DuelInfo { - DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false) { } + DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false), hasCoolDownBeforeDuel(false) { } Player* initiator; Player* opponent; @@ -292,6 +293,7 @@ struct DuelInfo time_t startTime; time_t outOfBound; bool isMounted; + bool hasCoolDownBeforeDuel; }; struct Areas @@ -1946,6 +1948,9 @@ class Player : public Unit, public GridObject void SetHonorPoints(uint32 value); void SetArenaPoints(uint32 value); + bool HasCoolDownBeforeDuel() const { return duel->hasCoolDownBeforeDuel; } + void UpdateHasCoolDownBeforeDuel() { duel->hasCoolDownBeforeDuel = GetSpellHistory()->GetArenaCooldownsSize() > 0; } + //End of PvP System void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0); diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp index 2f39a91afb..6e8ff5547d 100644 --- a/src/server/game/Handlers/DuelHandler.cpp +++ b/src/server/game/Handlers/DuelHandler.cpp @@ -43,6 +43,9 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "Player 1 is: %u (%s)", player->GetGUID().GetCounter(), player->GetName().c_str()); TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", plTarget->GetGUID().GetCounter(), plTarget->GetName().c_str()); + player->UpdateHasCoolDownBeforeDuel(); + plTarget->UpdateHasCoolDownBeforeDuel(); + time_t now = time(NULL); player->duel->startTimer = now; plTarget->duel->startTimer = now; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index a4ba986606..d374c8c509 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1202,6 +1202,8 @@ enum TrinityStrings LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007, LANG_NPCINFO_INHABIT_TYPE = 11008, - LANG_NPCINFO_FLAGS_EXTRA = 11009 + LANG_NPCINFO_FLAGS_EXTRA = 11009, + + LANG_COOLDOWN_NOT_RESET_AFTER_DUEL = 11010 }; #endif diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 09e3be690b..208b4cf7ed 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -637,6 +637,23 @@ void SpellHistory::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCoo } } +uint16 SpellHistory::GetArenaCooldownsSize() +{ + uint16 count = 0; + + for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end();) + { + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); + + if (spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS && + spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS) + ++count; + ++itr; + } + + return count; +} + template void SpellHistory::LoadFromDB(PreparedQueryResult cooldownsResult); template void SpellHistory::LoadFromDB(PreparedQueryResult cooldownsResult); template void SpellHistory::SaveToDB(SQLTransaction& trans); diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h index f1533d57ae..4d0642d644 100644 --- a/src/server/game/Spells/SpellHistory.h +++ b/src/server/game/Spells/SpellHistory.h @@ -117,6 +117,7 @@ public: void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) const; CooldownStorageType::size_type GetCooldownsSizeForPacket() const { return _spellCooldowns.size(); } + uint16 GetArenaCooldownsSize(); private: Player* GetPlayerOwner() const; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 2e61aecfb5..85e79168b7 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1190,6 +1190,7 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_MAX_WHO] = sConfigMgr->GetIntDefault("MaxWhoListReturns", 49); m_bool_configs[CONFIG_START_ALL_SPELLS] = sConfigMgr->GetBoolDefault("PlayerStart.AllSpells", false); m_int_configs[CONFIG_HONOR_AFTER_DUEL] = sConfigMgr->GetIntDefault("HonorPointsAfterDuel", 0); + m_bool_configs[CONFIG_RESET_COOLDOWN_AFTER_DUEL] = sConfigMgr->GetBoolDefault("ResetCoolDownAfterDuel", 0); m_bool_configs[CONFIG_START_ALL_EXPLORED] = sConfigMgr->GetBoolDefault("PlayerStart.MapsExplored", false); m_bool_configs[CONFIG_START_ALL_REP] = sConfigMgr->GetBoolDefault("PlayerStart.AllReputation", false); m_bool_configs[CONFIG_ALWAYS_MAXSKILL] = sConfigMgr->GetBoolDefault("AlwaysMaxWeaponSkill", false); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 256b856cf7..1f71975cde 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -161,6 +161,7 @@ enum WorldBoolConfigs CONFIG_ALLOW_TRACK_BOTH_RESOURCES, CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA, CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA, + CONFIG_RESET_COOLDOWN_AFTER_DUEL, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index b4a7e7a486..1689f05966 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2604,6 +2604,14 @@ PlayerStart.MapsExplored = 0 HonorPointsAfterDuel = 0 +# +# ResetCoolDownAfterDuel +# Description: Reset all cooldowns after duel, but only if player has no cooldowns before the duel. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +ResetCoolDownAfterDuel = 0 + # # AlwaysMaxWeaponSkill # Description: Players will automatically gain max weapon/defense skill when logging in, From 0cf04cc166e4bd79c1e1f5ceb636d31bf8af560a Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 26 Sep 2015 00:24:22 +0200 Subject: [PATCH 113/524] Core/Updater: Pipe mysql process output into worldserver log (cherry picked from commit 2d109b63e2f1d03a961dd58947598f73e4e43ba0) --- src/server/database/Updater/DBUpdater.cpp | 24 ++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index ebdd6604fe..c9056e1236 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include #include @@ -391,9 +393,29 @@ void DBUpdater::ApplyFile(DatabaseWorkerPool& pool, std::string const& hos uint32 ret; try { + boost::process::pipe outPipe = create_pipe(); + boost::process::pipe errPipe = create_pipe(); + child c = execute(run_exe(DBUpdater::GetMySqlCli().empty() ? "mysql" : boost::filesystem::absolute(DBUpdater::GetMySqlCli()).generic_string()), - set_args(args), bind_stdin(source), throw_on_error()); + 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))); + + file_descriptor_source mysqlOutfd(outPipe.source, close_handle); + file_descriptor_source mysqlErrfd(errPipe.source, close_handle); + + stream mysqlOutStream(mysqlOutfd); + stream mysqlErrStream(mysqlErrfd); + + std::stringstream out; + std::stringstream err; + + copy(mysqlOutStream, out); + copy(mysqlErrStream, err); + + TC_LOG_INFO("sql.updates", "%s", out.str().c_str()); + TC_LOG_ERROR("sql.updates", "%s", err.str().c_str()); ret = wait_for_exit(c); } From a561edefb90af25864aeb7ca7fc48fe0364df765 Mon Sep 17 00:00:00 2001 From: Naios Date: Thu, 1 Oct 2015 16:45:26 +0200 Subject: [PATCH 114/524] Core/Updater: Fix mysql in path check/search. --- src/server/database/Updater/DBUpdater.cpp | 98 +++++++++++++---------- src/server/database/Updater/DBUpdater.h | 14 +++- 2 files changed, 65 insertions(+), 47 deletions(-) diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index c9056e1236..354315ec78 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -35,6 +35,56 @@ using namespace boost::process; using namespace boost::process::initializers; using namespace boost::iostreams; +std::string DBUpdaterUtil::GetMySqlCli() +{ + 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(); + } +} + +bool DBUpdaterUtil::CheckExecutable() +{ + boost::filesystem::path exe(GetMySqlCli()); + if (!exists(exe)) + { + exe.clear(); + + try + { + exe = search_path("mysql"); + } + catch (std::runtime_error&) + { + } + + if (!exe.empty() && exists(exe)) + { + // Correct the path to the cli + corrected_path() = absolute(exe).generic_string(); + return true; + } + + TC_LOG_FATAL("sql.updates", "Didn't find executeable mysql binary at \'%s\' or in path, correct the path in the *.conf (\"Updates.MySqlCLIPath\").", + absolute(exe).generic_string().c_str()); + + return false; + } + return true; +} + +std::string& DBUpdaterUtil::corrected_path() +{ + static std::string path; + return path; +} + template std::string DBUpdater::GetSourceDirectory() { @@ -45,16 +95,6 @@ std::string DBUpdater::GetSourceDirectory() return GitRevision::GetSourceDirectory(); } -template -std::string DBUpdater::GetMySqlCli() -{ - std::string const entry = sConfigMgr->GetStringDefault("Updates.MySqlCLIPath", ""); - if (!entry.empty()) - return entry; - else - return GitRevision::GetMySQLExecutable(); -} - // Auth Database template<> std::string DBUpdater::GetConfigEntry() @@ -146,36 +186,6 @@ BaseLocation DBUpdater::GetBaseLocationType() return LOCATION_REPOSITORY; } -template -bool DBUpdater::CheckExecutable() -{ - DBUpdater::Path const exe(DBUpdater::GetMySqlCli()); - if (!exists(exe)) - { - // Check for mysql in path - std::vector args = {"--version"}; - uint32 ret; - try - { - child c = execute(run_exe("mysql"), set_args(args), throw_on_error(), close_stdout()); - ret = wait_for_exit(c); - } - catch (boost::system::system_error&) - { - ret = EXIT_FAILURE; - } - - if (ret == EXIT_FAILURE) - { - TC_LOG_FATAL("sql.updates", "Didn't find executeable mysql binary at \'%s\', correct the path in the *.conf (\"Updates.MySqlCLIPath\").", - absolute(exe).generic_string().c_str()); - - return false; - } - } - return true; -} - template bool DBUpdater::Create(DatabaseWorkerPool& pool) { @@ -224,7 +234,7 @@ bool DBUpdater::Create(DatabaseWorkerPool& pool) template bool DBUpdater::Update(DatabaseWorkerPool& pool) { - if (!DBUpdater::CheckExecutable()) + if (!DBUpdaterUtil::CheckExecutable()) return false; TC_LOG_INFO("sql.updates", "Updating %s database...", DBUpdater::GetTableName().c_str()); @@ -275,7 +285,7 @@ bool DBUpdater::Populate(DatabaseWorkerPool& pool) return true; } - if (!DBUpdater::CheckExecutable()) + if (!DBUpdaterUtil::CheckExecutable()) return false; TC_LOG_INFO("sql.updates", "Database %s is empty, auto populating it...", DBUpdater::GetTableName().c_str()); @@ -396,8 +406,8 @@ void DBUpdater::ApplyFile(DatabaseWorkerPool& pool, std::string const& hos boost::process::pipe outPipe = create_pipe(); boost::process::pipe errPipe = create_pipe(); - child c = execute(run_exe(DBUpdater::GetMySqlCli().empty() ? "mysql" : - boost::filesystem::absolute(DBUpdater::GetMySqlCli()).generic_string()), + child c = execute(run_exe( + boost::filesystem::absolute(DBUpdaterUtil::GetMySqlCli()).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 a2b12bed23..c8aa5d69fb 100644 --- a/src/server/database/Updater/DBUpdater.h +++ b/src/server/database/Updater/DBUpdater.h @@ -54,6 +54,17 @@ struct UpdateResult size_t archived; }; +class DBUpdaterUtil +{ +public: + static std::string GetMySqlCli(); + + static bool CheckExecutable(); + +private: + static std::string& corrected_path(); +}; + template class DBUpdater { @@ -79,9 +90,6 @@ public: static bool Populate(DatabaseWorkerPool& pool); private: - static std::string GetMySqlCli(); - static bool CheckExecutable(); - static QueryResult Retrieve(DatabaseWorkerPool& pool, std::string const& query); static void Apply(DatabaseWorkerPool& pool, std::string const& query); static void ApplyFile(DatabaseWorkerPool& pool, Path const& path); From 45a60c2d22a93f6196491a0eb0478d05795e310f Mon Sep 17 00:00:00 2001 From: Naios Date: Mon, 5 Oct 2015 16:14:31 +0200 Subject: [PATCH 115/524] CMake: Fix bad generation of "revision_data.h" not including MYSQL_EXECUTABLE. * was caused through invoking "FindMySQL" after using ${MYSQL_EXECUTABLE}. * better re-run CMake if you are affected by the mysql exe wasn't found issue. --- CMakeLists.txt | 1 + src/server/database/CMakeLists.txt | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 11444f9322..816eb4e9b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,7 @@ set(OPENSSL_EXPECTED_VERSION 1.0.0) find_package(PCHSupport) find_package(OpenSSL REQUIRED) find_package(Threads REQUIRED) +find_package(MySQL) include(ConfigureBoost) diff --git a/src/server/database/CMakeLists.txt b/src/server/database/CMakeLists.txt index 2375f18d7b..19fa0ee0ac 100644 --- a/src/server/database/CMakeLists.txt +++ b/src/server/database/CMakeLists.txt @@ -8,7 +8,9 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -find_package(MySQL REQUIRED) +if (NOT MYSQL_FOUND) + message(SEND_ERROR "MySQL wasn't found on your system but it's required to build the servers!") +endif() if( USE_COREPCH ) include_directories(${CMAKE_CURRENT_BINARY_DIR}) From 3db4c642877212c1d61881b1faf0cbc9ed170534 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sat, 26 Sep 2015 19:18:05 +0200 Subject: [PATCH 116/524] Core/Updater: fixed host parameter is being ignored (cherry picked from commit e51b6601779050837fcc87f27579b86c50446fc3) --- src/server/database/Updater/DBUpdater.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index 354315ec78..d90d71c559 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -358,7 +358,10 @@ void DBUpdater::ApplyFile(DatabaseWorkerPool& pool, std::string const& hos std::string const& password, std::string const& port_or_socket, std::string const& database, Path const& path) { std::vector args; - args.reserve(7); + args.reserve(8); + + // args[0] represents the program name + args.push_back("mysql"); // CLI Client connection info args.push_back("-h" + host); From 126b57acc665a918d3c72749cab4535878594591 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 5 Oct 2015 21:35:33 +0200 Subject: [PATCH 117/524] DB/Creature: Nerub'ar Broodkeeper Add visual Web Beam on aggro Fix creature addon for 25 mode Fix InhabitType issue after landing --- sql/updates/world/2015_10_05_01_world.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 sql/updates/world/2015_10_05_01_world.sql diff --git a/sql/updates/world/2015_10_05_01_world.sql b/sql/updates/world/2015_10_05_01_world.sql new file mode 100644 index 0000000000..b2c4f43997 --- /dev/null +++ b/sql/updates/world/2015_10_05_01_world.sql @@ -0,0 +1,9 @@ +-- +DELETE FROM `creature_template_addon` WHERE `Entry`=38058; +INSERT INTO `creature_template_addon` (`entry`, `bytes1`, `bytes2`) VALUES (38058,50331648,1); +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=38058; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=36725 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 +(36725,0,5,0,4,0,100,31,0,0,0,0,11,69887,0,0,0,0,0,1,0,0,0,0,0,0,0,"Nerub'ar Broodkeeper - On aggro - Cast Web Beam"), +(36725,0,6,0,0,0,100,31,4000,4000,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Nerub'ar Broodkeeper - In combat no repeat - Remove Flag Hover"); From 4dd6070c795fa7b34a38af0bd8d19d55bbc62959 Mon Sep 17 00:00:00 2001 From: Naios Date: Mon, 5 Oct 2015 23:19:07 +0200 Subject: [PATCH 118/524] Travis: Add check for update entries not listed in base dumps. * Will mark the travis build as failed when the database updater is broken. --- .travis.yml | 5 ++++- contrib/check_updates.sh | 44 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 contrib/check_updates.sh diff --git a/.travis.yml b/.travis.yml index be3713b928..17d703a2f8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,12 +19,15 @@ install: - mkdir bin - cd bin - cmake ../ -DWITH_WARNINGS=1 -DWITH_COREDEBUG=0 -DUSE_COREPCH=1 -DUSE_SCRIPTPCH=1 -DTOOLS=1 -DSCRIPTS=1 -DSERVERS=1 -DNOJEM=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror" + - cd .. + - sudo chmod +x contrib/check_updates.sh script: - - cd .. - mysql -uroot < sql/create/create_mysql.sql - mysql -utrinity -ptrinity auth < sql/base/auth_database.sql + - ./contrib/check_updates.sh auth auth - mysql -utrinity -ptrinity characters < sql/base/characters_database.sql + - ./contrib/check_updates.sh characters characters - mysql -utrinity -ptrinity world < sql/base/dev/world_database.sql - cat sql/updates/world/*.sql | mysql -utrinity -ptrinity world - mysql -uroot < sql/create/drop_mysql.sql diff --git a/contrib/check_updates.sh b/contrib/check_updates.sh new file mode 100644 index 0000000000..97aa3dff7a --- /dev/null +++ b/contrib/check_updates.sh @@ -0,0 +1,44 @@ +#!/bin/sh +name=$1 +database=$2 + +echo "Database Updater check script:" +echo " Checking database '${name}' for missing filenames in tables..." +echo + +# Select all entries which are in the updates table +entries=$(mysql -uroot ${database} -e "SELECT name FROM updates" | grep ".sql") + +cd sql/updates/${name} + +error=0 +updates=0 + +for file in *.sql +do + # Check if the given update is in the `updates` table. + if echo "${entries}" | grep -q "^${file}"; then + # File is ok + updates=$((updates+1)) + else + # The update isn't listed in the updates table of the given database. + echo "- \"sql/updates/${file}\" is missing in table '${name}'.'updates'" + error=1 + fi +done + +if [ ${error} -ne 0 ] + then + echo + echo "Fatal error:" + echo " The Database Updater is broken for database '${name}" + echo " due to applied update which are missing in the '${name}'.'updates' table." + echo + echo "How to fix:" + echo " Insert the missing names of sql updates which were applied already to" + echo " the 'updates' table of the '${name}' base dump ('sql/base/${name}_database.sql')." + exit 1 + else + echo " Everything is ok, checked ${updates} updates." + exit 0 +fi From 2b041266a31f5157dddcbfb13de7097b425b0cb5 Mon Sep 17 00:00:00 2001 From: Naios Date: Mon, 5 Oct 2015 23:23:15 +0200 Subject: [PATCH 119/524] DB/Auth: Add missing update 2015_08_21_00_auth.sql to the auth base. --- sql/base/auth_database.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index 9f461eccc7..d06aa3ac8a 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -486,7 +486,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2014_11_10_00_auth.sql','0E3CB119442D09DD88E967015319BBC8DAFBBFE0','ARCHIVED','2015-03-21 21:44:12',0),('2014_11_10_01_auth.sql','327E77A1DA3546D5275AB249915DD57EDD6FDD3D','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_10_00_auth.sql','821703A96D80F9080074852B5A46E2909C9562EA','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_21_00_auth.sql','CE2E5D2CD82E79C25294539ADED27A1429105B43','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_00_auth.sql','E8C5B74BB45F0F35DEC182C72BACF435C7066FB0','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_01_auth.sql','862961815354DA2746F5F71FBC8155F57CBE75AB','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_02_auth.sql','33E4F94086590768EF5D4855DD43D7DE7C06ADA4','ARCHIVED','2015-03-21 21:44:51',0); +INSERT INTO `updates` VALUES ('2014_11_10_00_auth.sql','0E3CB119442D09DD88E967015319BBC8DAFBBFE0','ARCHIVED','2015-03-21 21:44:12',0),('2014_11_10_01_auth.sql','327E77A1DA3546D5275AB249915DD57EDD6FDD3D','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_10_00_auth.sql','821703A96D80F9080074852B5A46E2909C9562EA','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_21_00_auth.sql','CE2E5D2CD82E79C25294539ADED27A1429105B43','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_00_auth.sql','E8C5B74BB45F0F35DEC182C72BACF435C7066FB0','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_01_auth.sql','862961815354DA2746F5F71FBC8155F57CBE75AB','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_02_auth.sql','33E4F94086590768EF5D4855DD43D7DE7C06ADA4','ARCHIVED','2015-03-21 21:44:51',0),('2015_08_21_00_auth.sql','C31A9E1D28E11B60BE8F8198637DD51F6D75123F','RELEASED','2015-10-05 23:16:19',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; From dcc1e50897389ddce7ca2110c6f1493315239105 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 6 Oct 2015 02:46:40 +0200 Subject: [PATCH 120/524] DB/Creature: Spire Frostwyrm Add Spire Frostwyrm spawns and scripts in Icecrown Citadel --- sql/updates/world/2015_10_06_00_world.sql | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 sql/updates/world/2015_10_06_00_world.sql diff --git a/sql/updates/world/2015_10_06_00_world.sql b/sql/updates/world/2015_10_06_00_world.sql new file mode 100644 index 0000000000..0850b15fbb --- /dev/null +++ b/sql/updates/world/2015_10_06_00_world.sql @@ -0,0 +1,31 @@ +-- +SET @ENTRY := 37230; +SET @CGUID := 45827; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+3; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, @ENTRY, 631, 3, 1, -368.000, 2316.687, 234.047, 2.792558, 7200, 0, 0), +(@CGUID+1, @ENTRY, 631, 3, 1, -511.493, 2318.217, 234.045, 0.483487, 7200, 0, 0), +(@CGUID+2, @ENTRY, 631, 3, 1, -516.336, 2108.577, 234.049, 5.733871, 7200, 0, 0), +(@CGUID+3, @ENTRY, 631, 3, 1, -353.894, 2111.659, 234.043, 3.711472, 7200, 0, 0); + +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (@ENTRY, 38444); +DELETE FROM `creature_template_addon` WHERE `entry` IN (@ENTRY, 38444); +INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(@ENTRY, 0, 0x3000000, 0x1, ''), +(38444, 0, 0x3000000, 0x1, ''); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,25,0,100,30,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spire Frostwyrm - on Reset - Set invisible"), +(@ENTRY,0,1,2,10,0,100,31,0,100,1000,1000,47,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spire Frostwyrm - OOC_LOS - SET visible"), +(@ENTRY,0,2,0,61,0,100,31,0,0,0,0,49,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Spire Frostwyrm - OOC_LOS - Start Attack"), +(@ENTRY,0,3,0,4,0,100,30,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Spire Frostwyrm - On aggro - Say text"), +(@ENTRY,0,4,0,33,0,100,31,100,30000,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Spire Frostwyrm - On target damaged - Remove Flag Hover"), +(@ENTRY,0,5,0,0,0,100,30,10000,13000,13000,16000,11,70362,0,0,0,0,0,5,0,0,0,0,0,0,0,"Spire Frostwyrm - IC - Cast Blizzard"), +(@ENTRY,0,6,0,0,0,100,30,8000,10000,3000,6000,11,70361,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spire Frostwyrm - IC - Cast Cleave"), +(@ENTRY,0,7,0,0,0,100,30,13000,15000,6000,9000,11,70116,0,0,0,0,0,2,0,0,0,0,0,0,0,"Spire Frostwyrm - IC - Cast Frost Breath"); + +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `TextRange`, `comment`) VALUES +(@ENTRY, 0, 0, 'A screeching cry pierces the air above!', 41, 0, 100, 0, 0, 0, 37161, 1, 'Spire Frostwyrm to Player'); From e66db9e20c968659388f5ef231ede1ee0a316976 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sat, 3 Oct 2015 11:11:38 +0200 Subject: [PATCH 121/524] Core/Ticket keep always trace of GM who resolves the ticket --- sql/base/characters_database.sql | 3 ++- .../characters/2015_10_03_03_characters.sql | 2 ++ .../Implementation/CharacterDatabase.cpp | 2 +- src/server/game/Tickets/TicketMgr.cpp | 18 ++++++++++++++++-- src/server/game/Tickets/TicketMgr.h | 5 ++++- src/server/scripts/Commands/cs_ticket.cpp | 5 ++++- 6 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 sql/updates/characters/2015_10_03_03_characters.sql diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index fe1a0ed8f1..d8d2fe63b7 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1542,6 +1542,7 @@ CREATE TABLE `gm_ticket` ( `escalated` tinyint(3) unsigned NOT NULL DEFAULT '0', `viewed` tinyint(3) unsigned NOT NULL DEFAULT '0', `needMoreHelp` tinyint(3) unsigned NOT NULL DEFAULT '0', + `resolvedBy` INT(10) NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System'; /*!40101 SET character_set_client = @saved_cs_client */; @@ -2509,7 +2510,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_03_03_characters.sql', '82DC1DC8C4104C8A2F523DD2D28E444E0D4E7482', 'ARCHIVED', '2015-10-03 16:06:38', 0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/2015_10_03_03_characters.sql b/sql/updates/characters/2015_10_03_03_characters.sql new file mode 100644 index 0000000000..c8d8e3211f --- /dev/null +++ b/sql/updates/characters/2015_10_03_03_characters.sql @@ -0,0 +1,2 @@ +ALTER TABLE `gm_ticket` + ADD COLUMN `resolvedBy` INT(10) NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket' AFTER `needMoreHelp`; diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index b5b79a3e11..14e7571dd4 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -337,7 +337,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() // GM Tickets PrepareStatement(CHAR_SEL_GM_TICKETS, "SELECT id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp FROM gm_ticket", CONNECTION_SYNCH); - PrepareStatement(CHAR_REP_GM_TICKET, "REPLACE INTO gm_ticket (id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_REP_GM_TICKET, "REPLACE INTO gm_ticket (id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GM_TICKET, "DELETE FROM gm_ticket WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_PLAYER_GM_TICKETS, "DELETE FROM gm_ticket WHERE playerGuid = ?", CONNECTION_ASYNC); diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index a51c9fb16d..dbf66c6bd7 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -75,8 +75,8 @@ bool GmTicket::LoadFromDB(Field* fields) void GmTicket::SaveToDB(SQLTransaction& trans) const { - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 - // ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, completed, escalated, viewed + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + // id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy uint8 index = 0; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GM_TICKET); stmt->setUInt32( index, _id); @@ -97,6 +97,7 @@ void GmTicket::SaveToDB(SQLTransaction& trans) const stmt->setUInt8 (++index, uint8(_escalatedStatus)); stmt->setBool (++index, _viewed); stmt->setBool (++index, _needMoreHelp); + stmt->setInt32 (++index, int32(_resolvedBy.GetCounter())); CharacterDatabase.ExecuteOrAppend(trans, stmt); } @@ -361,6 +362,19 @@ void TicketMgr::CloseTicket(uint32 ticketId, ObjectGuid source) } } +void TicketMgr::ResolveAndCloseTicket(uint32 ticketId, ObjectGuid source) +{ + if (GmTicket* ticket = GetTicket(ticketId)) + { + SQLTransaction trans = SQLTransaction(nullptr); + ticket->SetClosedBy(source); + ticket->SetResolvedBy(source); + if (source) + --_openTicketCount; + ticket->SaveToDB(trans); + } +} + void TicketMgr::RemoveTicket(uint32 ticketId) { if (GmTicket* ticket = GetTicket(ticketId)) diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index e9892c22ed..f7d3178978 100644 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -119,6 +119,7 @@ public: _escalatedStatus = TICKET_ASSIGNED; } void SetClosedBy(ObjectGuid value) { _closedBy = value; } + void SetResolvedBy(ObjectGuid value) { _resolvedBy = value; } void SetCompleted() { _completed = true; } void SetMessage(std::string const& message) { @@ -158,7 +159,8 @@ private: std::string _message; uint64 _createTime; uint64 _lastModifiedTime; - ObjectGuid _closedBy; // 0 = Open, -1 = Console, playerGuid = player abandoned ticket, other = GM who closed it. + ObjectGuid _closedBy; // 0 = Open, -1 = Console, playerGuid = player abandoned ticket or read the GM response message, other = GM who closed it. + ObjectGuid _resolvedBy; // 0 = Open, -1 = Resolved by Console, GM who resolved it by closing or completing the ticket. ObjectGuid _assignedTo; std::string _comment; bool _completed; @@ -216,6 +218,7 @@ public: void AddTicket(GmTicket* ticket); void CloseTicket(uint32 ticketId, ObjectGuid source); + void ResolveAndCloseTicket(uint32 ticketId, ObjectGuid source); // used when GM resolves a ticket by simply closing it void RemoveTicket(uint32 ticketId); bool GetStatus() const { return _status; } diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index b609dfe18d..f7634381fc 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -153,7 +153,7 @@ public: return true; } - sTicketMgr->CloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(-1))); + sTicketMgr->ResolveAndCloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(-1))); sTicketMgr->UpdateLastChange(); std::string msg = ticket->FormatMessageString(*handler, player ? player->GetName().c_str() : "Console", NULL, NULL, NULL, NULL); @@ -248,7 +248,10 @@ public: if (Player* player = ticket->GetPlayer()) ticket->SendResponse(player->GetSession()); + Player* gm = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr; + SQLTransaction trans = SQLTransaction(NULL); + ticket->SetResolvedBy(gm ? gm->GetGUID() : ObjectGuid(uint64(-1))); ticket->SetCompleted(); ticket->SaveToDB(trans); From 5d2cee1c2e67a492c19d440b1f997ca216f11d91 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Tue, 6 Oct 2015 14:54:43 +0100 Subject: [PATCH 122/524] Rename SQL after PR merge --- sql/base/characters_database.sql | 2 +- ...015_10_03_03_characters.sql => 2015_10_06_00_characters.sql} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename sql/updates/characters/{2015_10_03_03_characters.sql => 2015_10_06_00_characters.sql} (100%) diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index d8d2fe63b7..a11e0e55f0 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2510,7 +2510,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_03_03_characters.sql', '82DC1DC8C4104C8A2F523DD2D28E444E0D4E7482', 'ARCHIVED', '2015-10-03 16:06:38', 0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql', '16842FDD7E8547F2260D3312F53EFF8761EFAB35', 'ARCHIVED', '2015-10-06 16:06:38', 0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/2015_10_03_03_characters.sql b/sql/updates/characters/2015_10_06_00_characters.sql similarity index 100% rename from sql/updates/characters/2015_10_03_03_characters.sql rename to sql/updates/characters/2015_10_06_00_characters.sql From cdb16c5181b0ad02e5dd3a4afa44151fb119b62e Mon Sep 17 00:00:00 2001 From: pete318 Date: Fri, 28 Nov 2014 22:34:31 +0000 Subject: [PATCH 123/524] Rooted vehicle movement (#13342 for example) Corrects issue where certain combinations of actions would cause vehicles (usually cannons/artillary) that should be rooted, to be fully movable --- src/server/game/Entities/Unit/Unit.cpp | 6 +++++ src/server/game/Entities/Vehicle/Vehicle.cpp | 6 +++++ .../game/Entities/Vehicle/VehicleDefines.h | 3 ++- src/server/game/Server/WorldSession.cpp | 26 ++++++++++++++++--- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f5bcd8f23e..f085bab165 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -16975,6 +16975,12 @@ void Unit::_EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* a } } + // If vehicle flag for fixed position set (cannons), or if the following hardcoded units, then set state rooted + // 30236 | Argent Cannon + // 39759 | Tankbuster Cannon + if ((vehicle->GetVehicleInfo()->m_flags & VEHICLE_FLAG_FIXED_POSITION) || vehicle->GetBase()->GetEntry() == 30236 || vehicle->GetBase()->GetEntry() == 39759) + SetControlled(true, UNIT_STATE_ROOT); + ASSERT(!m_vehicle); (void)vehicle->AddPassenger(this, seatId); } diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index fcb74424eb..982b931fd4 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -192,6 +192,12 @@ void Vehicle::ApplyAllImmunities() _me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, true); } + // If vehicle flag for fixed position set (cannons), or if the following hardcoded units, then set state rooted + // 30236 | Argent Cannon + // 39759 | Tankbuster Cannon + if ((GetVehicleInfo()->m_flags & VEHICLE_FLAG_FIXED_POSITION) || GetBase()->GetEntry() == 30236 || GetBase()->GetEntry() == 39759) + _me->SetControlled(true, UNIT_STATE_ROOT); + // Different immunities for vehicles goes below switch (GetVehicleInfo()->m_ID) { diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h index c00bc429f3..3726e9ddf8 100644 --- a/src/server/game/Entities/Vehicle/VehicleDefines.h +++ b/src/server/game/Entities/Vehicle/VehicleDefines.h @@ -44,7 +44,8 @@ enum VehicleFlags VEHICLE_FLAG_FULLSPEEDPITCHING = 0x00000020, // Sets MOVEFLAG2_FULLSPEEDPITCHING VEHICLE_FLAG_CUSTOM_PITCH = 0x00000040, // If set use pitchMin and pitchMax from DBC, otherwise pitchMin = -pi/2, pitchMax = pi/2 VEHICLE_FLAG_ADJUST_AIM_ANGLE = 0x00000400, // Lua_IsVehicleAimAngleAdjustable - VEHICLE_FLAG_ADJUST_AIM_POWER = 0x00000800 // Lua_IsVehicleAimPowerAdjustable + VEHICLE_FLAG_ADJUST_AIM_POWER = 0x00000800, // Lua_IsVehicleAimPowerAdjustable + VEHICLE_FLAG_FIXED_POSITION = 0x00200000 // Used for cannons, when they should be rooted }; enum VehicleSpells diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 53da37bc73..45a816eda9 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -840,13 +840,33 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) mi->RemoveMovementFlag((maskToRemove)); #endif - /*! This must be a packet spoofing attempt. MOVEMENTFLAG_ROOT sent from the client is not valid in conjunction with any of the moving movement flags such as MOVEMENTFLAG_FORWARD. It will freeze clients that receive this player's movement info. */ - REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT), - MOVEMENTFLAG_ROOT); + // Only adjust movement flag removal for vehicles with the VEHICLE_FLAG_FIXED_POSITION flag, or the hard coded exceptions below: + // 30236 | Argent Cannon + // 39759 | Tankbuster Cannon + if (GetPlayer()->GetVehicleBase() && ((GetPlayer()->GetVehicle()->GetVehicleInfo()->m_flags & VEHICLE_FLAG_FIXED_POSITION) || GetPlayer()->GetVehicleBase()->GetEntry() == 30236 || GetPlayer()->GetVehicleBase()->GetEntry() == 39759)) + { + // Actually players in rooted vehicles still send commands, don't clear root for these! + // Check specifically for the following conditions: + // MOVEMENTFLAG_ROOT + no other flags (0x800) + // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_LEFT (0x810) + // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_RIGHT (0x820) + // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_PITCH_UP (0x840) + // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_PITCH_DOWN (0x880) + // If none of these are true, clear the root + if (mi->HasMovementFlag(MOVEMENTFLAG_ROOT) && mi->HasMovementFlag(MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT | MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN)) + REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT), + MOVEMENTFLAG_MASK_MOVING); + } + else + { + // Only remove here for non vehicles + REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT), + MOVEMENTFLAG_ROOT); + } //! Cannot hover without SPELL_AURA_HOVER REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_HOVER) && !GetPlayer()->HasAuraType(SPELL_AURA_HOVER), From 1b0f475e9593560224b9f8db84422ed89145a30d Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 6 Oct 2015 22:54:49 +0200 Subject: [PATCH 124/524] DB/Creature: Sheddle Glossgleam Event Shiny Shoes --- sql/updates/world/2015_10_06_01_world.sql | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 sql/updates/world/2015_10_06_01_world.sql diff --git a/sql/updates/world/2015_10_06_01_world.sql b/sql/updates/world/2015_10_06_01_world.sql new file mode 100644 index 0000000000..385c5f019b --- /dev/null +++ b/sql/updates/world/2015_10_06_01_world.sql @@ -0,0 +1,31 @@ +-- Sheddle Glossgleam +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=194115; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=29703; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (194115) AND `source_type`=1; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (29703) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2970300, 19411500) 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 +(194115, 1, 0, 0, 64, 0, 100, 0, 0, 0, 0, 0, 80, 19411500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Shoeshine Seat - On Gossip hello - Action list'), +(19411500, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Shoeshine Seat - Action list - Store target'), +(19411500, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 29703, 20, 0, 0, 0, 0, 0, 'Shoeshine Seat - Action list - Send Target'), +(19411500, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 29703, 20, 0, 0, 0, 0, 0, 'Shoeshine Seat - Action list - Set Data'), +(29703, 0, 0, 0, 38, 0, 100, 0, 1, 1, 13000, 13000, 80, 2970300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - On Data set - Action list'), +(2970300, 9, 0, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Say text'), +(2970300, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Set run off'), +(2970300, 9, 2, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 5810.110, 676.122, 658.0285, 5.002982, 'Sheddle Glossgleam- Action list - Move to pos'), +(2970300, 9, 3, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 5810.110, 676.122, 658.0285, 5.002982, 'Sheddle Glossgleam - Action list - Set Orientation'), +(2970300, 9, 4, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 68442, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Cast Kneel'), +(2970300, 9, 5, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 28, 68442, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Remove Kneel aura'), +(2970300, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 62089, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Cast Shiny Shoes'), +(2970300, 9, 7, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Sheddle Glossgleam - Action list - Say text'), +(2970300, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 5812.08, 676.872, 658.112, 3.071780, 'Sheddle Glossgleam - Action list - Move to pos'), +(2970300, 9, 9, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 5812.08, 676.872, 658.112, 3.071780, 'Sheddle Glossgleam - Action list - Set Orientation'); + +DELETE FROM `creature_text` WHERE `entry` IN (29703); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextId`) VALUES +(29703,0,0,'Need a shoeshine, $c?',12,0,100,0,0,0, 'Sheddle Glossgleam',33178), +(29703,0,1,'One shoeshine coming up!',12,0,100,0,0,0, 'Sheddle Glossgleam',33180), +(29703,0,2,'Let me shine your shoes, $c.',12,0,100,0,0,0, 'Sheddle Glossgleam',33181), +(29703,1,0,'Take care of that shine, $c.',12,0,100,0,0,0, 'Sheddle Glossgleam',33179), +(29703,1,1,'Shiny!',12,0,100,0,0,0, 'Sheddle Glossgleam',33182), +(29703,1,2,'Another shiny, happy person. Take care, $c!',12,0,100,0,0,0, 'Sheddle Glossgleam',33183); From 996cbafd20af0e0e1eff99a53d77d5d1869f4a17 Mon Sep 17 00:00:00 2001 From: pete318 Date: Thu, 8 Oct 2015 00:14:01 +0200 Subject: [PATCH 125/524] Add caster guid to pet_aura table. This prevents duplicate key and transaction completion fail on pet save, if pet has same aura from two different casters present. This closes (already closed) issue https://github.com/TrinityCore/TrinityCore/issues/10529 --- sql/updates/characters/2015_10_07_00_characters.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/characters/2015_10_07_00_characters.sql diff --git a/sql/updates/characters/2015_10_07_00_characters.sql b/sql/updates/characters/2015_10_07_00_characters.sql new file mode 100644 index 0000000000..a03fffcd77 --- /dev/null +++ b/sql/updates/characters/2015_10_07_00_characters.sql @@ -0,0 +1,3 @@ +ALTER TABLE `pet_aura` +DROP PRIMARY KEY, +ADD PRIMARY KEY (`guid`,`casterGuid`,`spell`,`effectMask`); From 258b382520378311bea07b7640d551ce26abdee6 Mon Sep 17 00:00:00 2001 From: pete318 Date: Thu, 8 Oct 2015 00:20:38 +0200 Subject: [PATCH 126/524] Also update character base create for pet_aura commit --- sql/base/characters_database.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index a11e0e55f0..962a50c1b7 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2239,7 +2239,7 @@ CREATE TABLE `pet_aura` ( `maxDuration` int(11) NOT NULL DEFAULT '0', `remainTime` int(11) NOT NULL DEFAULT '0', `remainCharges` tinyint(3) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`guid`,`spell`,`effectMask`) + PRIMARY KEY (`guid`,`casterGuid`,`spell`,`effectMask`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Pet System'; /*!40101 SET character_set_client = @saved_cs_client */; From 76eea5c81c02d104aeb8ae91fa9fe235a74acaf1 Mon Sep 17 00:00:00 2001 From: pete318 Date: Thu, 8 Oct 2015 00:33:00 +0200 Subject: [PATCH 127/524] And final change to include table hash in updates Not actually needed for this change, but it upset travis --- sql/base/characters_database.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 962a50c1b7..9599070a6a 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2510,7 +2510,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql', '16842FDD7E8547F2260D3312F53EFF8761EFAB35', 'ARCHIVED', '2015-10-06 16:06:38', 0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql', '16842FDD7E8547F2260D3312F53EFF8761EFAB35', 'ARCHIVED', '2015-10-06 16:06:38', 0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; From 30eaf23b6af412a0c876c13b11adda41e7027aa0 Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 8 Oct 2015 02:37:55 +0200 Subject: [PATCH 128/524] DB/Creature: Anub'ar Warrior pathing By @Malcrom --- sql/updates/world/2015_10_08_00_world.sql | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 sql/updates/world/2015_10_08_00_world.sql diff --git a/sql/updates/world/2015_10_08_00_world.sql b/sql/updates/world/2015_10_08_00_world.sql new file mode 100644 index 0000000000..633ade2786 --- /dev/null +++ b/sql/updates/world/2015_10_08_00_world.sql @@ -0,0 +1,21 @@ +-- Pathing for Anub'ar Warrior Entry: 28732 'TDB FORMAT' +SET @NPC := 127230; +SET @NPC1 := 127339; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=536.2838,`position_y`=747.2582,`position_z`=790.701 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=534.9068,`position_y`=742.6521,`position_z`=789.386 WHERE `guid`=@NPC1; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC1); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''),(@NPC1,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,536.2838,747.2582,790.701,0,0,0,0,100,0), +(@PATH,2,553.5668,733.7203,777.5034,0,0,0,0,100,0), +(@PATH,3,536.2838,747.2582,790.701,0,0,0,0,100,0), +(@PATH,4,507.5956,755.1626,808.8735,0,0,0,0,100,0), +(@PATH,5,488.8975,758.9921,818.0986,0,0,0,0,100,0), +(@PATH,6,507.5956,755.1626,808.8735,0,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC1,4,90,2,2,5); From 50cf74f0dbe1f2d9580ec3a7673f2c99963d17f7 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 8 Oct 2015 13:02:47 +0200 Subject: [PATCH 129/524] DB/Gameobject: Fix Gordok Courtyard Door --- sql/updates/world/2015_10_08_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_08_01_world.sql diff --git a/sql/updates/world/2015_10_08_01_world.sql b/sql/updates/world/2015_10_08_01_world.sql new file mode 100644 index 0000000000..6b162ee439 --- /dev/null +++ b/sql/updates/world/2015_10_08_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `gameobject_template` SET `faction`=0 WHERE `entry`=177219; From 3fc1bb1abf0d4ae7b37507c62a3b57175477ce2f Mon Sep 17 00:00:00 2001 From: treeston Date: Fri, 18 Sep 2015 22:19:21 +0200 Subject: [PATCH 130/524] Scripts/Naxxramas: Bugfixes to the Noth encounter. - Added missing raid boss emotes - Fixed an issue where Noth would stand idly after blinking if his current target stood still - Fixed some reset edge cases - Prevent Noth from dying during Balcony phase - Fix targeting of 25-man Curse of the Plaguebringer (now has 8 targets, down from 10) - Fix balcony/ground phase durations to be blizzlike - Fix an issue where summoned mobs would sometimes not be aggroed automatically - Get rid of ugly millisecond values in favor of seconds times constant - Moved the chance to yell on kill to the database - Prevent AoE abilities from hitting Noth during the balcony phase - General cleanup of events handling - Generally make @Nayd happy --- sql/updates/world/2015_09_18_00_world.sql | 9 + src/server/game/Spells/SpellMgr.cpp | 4 +- .../scripts/Northrend/Naxxramas/boss_noth.cpp | 298 ++++++++++++------ 3 files changed, 216 insertions(+), 95 deletions(-) create mode 100644 sql/updates/world/2015_09_18_00_world.sql diff --git a/sql/updates/world/2015_09_18_00_world.sql b/sql/updates/world/2015_09_18_00_world.sql new file mode 100644 index 0000000000..c26303006b --- /dev/null +++ b/sql/updates/world/2015_09_18_00_world.sql @@ -0,0 +1,9 @@ +-- +UPDATE `creature_text` SET `probability`=20 WHERE `entry`=15954 AND `groupid`=2; + +DELETE FROM `creature_text` WHERE `entry`=15954 AND `groupid` in (4,5,6,7); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(15954,4,0,"%s summons forth Skeletal Warriors!",41,100,32974,3,"Noth EMOTE_SUMMON"), +(15954,5,0,"%s raises more skeletons!",41,100,32977,3,"Noth EMOTE_SUMMON_WAVE"), +(15954,6,0,"%s teleports to the balcony above!",41,100,32331,3,"Noth EMOTE_TELEPORT_1"), +(15954,7,0,"%s teleports back into the battle!",41,100,32976,3,"Noth EMOTE_TELEPORT_2"); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index f27f9220aa..55d0ad0b4d 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3105,11 +3105,13 @@ void SpellMgr::LoadSpellInfoCorrections() case 28796: // Poison Bolt Volly - Faerlina spellInfo->MaxAffectedTargets = 5; break; + case 54835: // Curse of the Plaguebringer - Noth (H) + spellInfo->MaxAffectedTargets = 8; + break; case 40827: // Sinful Beam case 40859: // Sinister Beam case 40860: // Vile Beam case 40861: // Wicked Beam - case 54835: // Curse of the Plaguebringer - Noth (H) case 54098: // Poison Bolt Volly - Faerlina (H) spellInfo->MaxAffectedTargets = 10; break; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index f5e5b28757..810d446111 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -19,52 +19,59 @@ #include "ScriptedCreature.h" #include "naxxramas.h" -enum Noth +enum Phases { - SAY_AGGRO = 0, - SAY_SUMMON = 1, - SAY_SLAY = 2, - SAY_DEATH = 3, - - SOUND_DEATH = 8848, - - SPELL_CURSE_PLAGUEBRINGER = 29213, // 25-man: 54835 - SPELL_CRIPPLE = 29212, // 25-man: 54814 - SPELL_TELEPORT = 29216, - - NPC_WARRIOR = 16984, - NPC_CHAMPION = 16983, - NPC_GUARDIAN = 16981 -}; - -#define SPELL_BLINK RAND(29208, 29209, 29210, 29211) - -// Teleport position of Noth on his balcony -Position const Teleport = { 2631.370f, -3529.680f, 274.040f, 6.277f }; - -#define MAX_SUMMON_POS 5 - -Position const SummonPos[MAX_SUMMON_POS] = -{ - { 2728.12f, -3544.43f, 261.91f, 6.04f }, - { 2729.05f, -3544.47f, 261.91f, 5.58f }, - { 2728.24f, -3465.08f, 264.20f, 3.56f }, - { 2704.11f, -3456.81f, 265.53f, 4.51f }, - { 2663.56f, -3464.43f, 262.66f, 5.20f } + PHASE_NONE, + PHASE_GROUND, + PHASE_BALCONY }; enum Events { - EVENT_NONE, - EVENT_BERSERK, - EVENT_CURSE, - EVENT_BLINK, - EVENT_WARRIOR, - EVENT_BALCONY, - EVENT_WAVE, - EVENT_GROUND + EVENT_CURSE = 1, // curse of the plaguebringer + EVENT_BLINK, // blink (25m only) + EVENT_WARRIOR, // summon warriors during ground phase + EVENT_BALCONY, // become untargetable and begin balcony phase + EVENT_BALCONY_TELEPORT, // actually teleport to balcony, this is slightly delayed + EVENT_WAVE, // spawn wave during balcony phase + EVENT_GROUND, // end balcony phase and teleport to ground + EVENT_GROUND_ATTACKABLE // become attackable and aggressive again at start of ground phase, once again slightly delayed to prevent motionmaster weirdness }; +enum Talk +{ + SAY_AGGRO = 0, + SAY_SUMMON = 1, + SAY_SLAY = 2, + SAY_DEATH = 3, + + EMOTE_SUMMON = 4, // ground phase + EMOTE_SUMMON_WAVE = 5, // balcony phase + EMOTE_TELEPORT_1 = 6, // ground to balcony + EMOTE_TELEPORT_2 = 7 // balcony to ground +}; + +enum Spells +{ + SPELL_CURSE = 29213, // 25-man: 54835 + SPELL_CRIPPLE = 29212, // 25-man: 54814 + + SPELL_TELEPORT = 29216, // ground to balcony + SPELL_TELEPORT_BACK = 29231 // balcony to ground +}; + +enum Adds +{ + N_WARRIOR_SPELLS = 3, + N_CHAMPION_SPELLS = 6, + N_GUARDIAN_SPELLS = 3 +}; +const uint32 SummonWarriorSpells[N_WARRIOR_SPELLS] = { 29247, 29248, 29249 }; +const uint32 SummonChampionSpells[N_CHAMPION_SPELLS] = { 29238, 29255, 29257, 29258, 29262, 29267 }; +const uint32 SummonGuardianSpells[N_GUARDIAN_SPELLS] = { 29239, 29256, 29268 }; + +#define SPELL_BLINK RAND(29208, 29209, 29210, 29211) + class boss_noth : public CreatureScript { public: @@ -72,16 +79,38 @@ public: struct boss_nothAI : public BossAI { - boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH) + boss_nothAI(Creature* creature) : BossAI(creature, BOSS_NOTH), balconyCount(0), justBlinked(false) { - balconyCount = 0; - waveCount = 0; + std::copy(SummonWarriorSpells, SummonWarriorSpells + N_WARRIOR_SPELLS, _SummonWarriorSpells); + std::copy(SummonChampionSpells, SummonChampionSpells + N_CHAMPION_SPELLS, _SummonChampionSpells); + std::copy(SummonGuardianSpells, SummonGuardianSpells + N_GUARDIAN_SPELLS, _SummonGuardianSpells); + + events.SetPhase(PHASE_NONE); + } + + void EnterEvadeMode() override + { + Reset(); // teleport back first + _EnterEvadeMode(); } void Reset() override { - me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + if (!me->IsAlive()) + return; + + // in case we reset during balcony phase + if (events.IsInPhase(PHASE_BALCONY)) + { + DoCastAOE(SPELL_TELEPORT_BACK); + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + } + + balconyCount = 0; + events.SetPhase(PHASE_NONE); + justBlinked = false; + _Reset(); } @@ -89,31 +118,44 @@ public: { _EnterCombat(); Talk(SAY_AGGRO); - balconyCount = 0; EnterPhaseGround(); } void EnterPhaseGround() { - me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + events.SetPhase(PHASE_GROUND); + DoZoneInCombat(); if (me->getThreatManager().isThreatListEmpty()) - EnterEvadeMode(); + Reset(); else { - events.ScheduleEvent(EVENT_BALCONY, 110000); - events.ScheduleEvent(EVENT_CURSE, 10000 + rand32() % 15000); - events.ScheduleEvent(EVENT_WARRIOR, 30000); + uint8 secondsGround; + switch (balconyCount) + { + case 0: + secondsGround = 90; + break; + case 1: + secondsGround = 110; + break; + case 2: + default: + secondsGround = 180; + } + events.ScheduleEvent(EVENT_GROUND_ATTACKABLE, 2 * IN_MILLISECONDS, 0, PHASE_GROUND); + events.ScheduleEvent(EVENT_BALCONY, secondsGround * IN_MILLISECONDS, 0, PHASE_GROUND); + events.ScheduleEvent(EVENT_CURSE, urand(10,25) * IN_MILLISECONDS, 0, PHASE_GROUND); + events.ScheduleEvent(EVENT_WARRIOR, urand(20,30) * IN_MILLISECONDS, 0, PHASE_GROUND); if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL) - events.ScheduleEvent(EVENT_BLINK, urand(20000, 40000)); + events.ScheduleEvent(EVENT_BLINK, urand(20,30) * IN_MILLISECONDS, 0, PHASE_GROUND); } } - void KilledUnit(Unit* /*victim*/) override + void KilledUnit(Unit* victim) override { - if (!(rand32() % 5)) + if(victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } @@ -121,7 +163,7 @@ public: { summons.Summon(summon); summon->setActive(true); - summon->AI()->DoZoneInCombat(); + summon->AI()->DoZoneInCombat(nullptr, 250.0f); // specify range to cover entire room - default 50yd is not enough } void JustDied(Unit* /*killer*/) override @@ -130,10 +172,35 @@ public: Talk(SAY_DEATH); } - void SummonUndead(uint32 entry, uint32 num) + void DamageTaken(Unit* /*who*/, uint32& damage) // prevent noth from somehow dying in the balcony phase { - for (uint32 i = 0; i < num; ++i) - me->SummonCreature(entry, SummonPos[rand32() % MAX_SUMMON_POS], TEMPSUMMON_CORPSE_DESPAWN, 60000); + if (!events.IsInPhase(PHASE_BALCONY)) + return; + if (damage < me->GetHealth()) + return; + + me->SetHealth(1u); + damage = 0u; + } + + void HandleSummon(uint32* spellsList, const uint8 nSpells, uint8 num) + { // this ensures we do not spawn two mobs using the same spell (<=> in the same position) if we can help it + while (num) + for (uint8 it = 0; it < nSpells && num; ++it) + { + num--; + uint8 selected = urand(it, nSpells - 1); + DoCastAOE(spellsList[selected]); + if (selected != it) // shuffle the selected into the part of the array that is no longer being searched + std::swap(spellsList[selected], spellsList[it]); + } + } + + void CastSummon(uint8 nWarrior, uint8 nChampion, uint8 nGuardian) + { + HandleSummon(_SummonWarriorSpells, N_WARRIOR_SPELLS, nWarrior); + HandleSummon(_SummonChampionSpells, N_CHAMPION_SPELLS, nChampion); + HandleSummon(_SummonGuardianSpells, N_GUARDIAN_SPELLS, nGuardian); } void UpdateAI(uint32 diff) override @@ -151,72 +218,115 @@ public: switch (eventId) { case EVENT_CURSE: - DoCastAOE(SPELL_CURSE_PLAGUEBRINGER); - events.ScheduleEvent(EVENT_CURSE, urand(50000, 60000)); - return; + { + DoCastAOE(SPELL_CURSE); + events.ScheduleEvent(EVENT_CURSE, urand(50, 70) * IN_MILLISECONDS, 0, PHASE_GROUND); + break; + } case EVENT_WARRIOR: Talk(SAY_SUMMON); - SummonUndead(NPC_WARRIOR, RAID_MODE(2, 3)); - events.ScheduleEvent(EVENT_WARRIOR, 30000); - return; + Talk(EMOTE_SUMMON); + + CastSummon(RAID_MODE(2, 3), 0, 0); + + events.ScheduleEvent(EVENT_WARRIOR, 40 * IN_MILLISECONDS, 0, PHASE_GROUND); + break; case EVENT_BLINK: DoCastAOE(SPELL_CRIPPLE, true); DoCastAOE(SPELL_BLINK); DoResetThreat(); - events.ScheduleEvent(EVENT_BLINK, 40000); - return; + justBlinked = true; + + events.ScheduleEvent(EVENT_BLINK, 40000, 0, PHASE_GROUND); + break; case EVENT_BALCONY: + events.SetPhase(PHASE_BALCONY); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); me->AttackStop(); + me->StopMoving(); me->RemoveAllAuras(); - me->NearTeleportTo(Teleport.GetPositionX(), Teleport.GetPositionY(), Teleport.GetPositionZ(), Teleport.GetOrientation()); - events.Reset(); - events.ScheduleEvent(EVENT_WAVE, urand(2000, 5000)); - waveCount = 0; - return; - case EVENT_WAVE: - Talk(SAY_SUMMON); + + events.ScheduleEvent(EVENT_BALCONY_TELEPORT, 3 * IN_MILLISECONDS, 0, PHASE_BALCONY); + events.ScheduleEvent(EVENT_WAVE, urand(5 * IN_MILLISECONDS, 8 * IN_MILLISECONDS), 0, PHASE_BALCONY); + + uint8 secondsBalcony; switch (balconyCount) { case 0: - SummonUndead(NPC_CHAMPION, RAID_MODE(2, 4)); + secondsBalcony = 70; break; case 1: - SummonUndead(NPC_CHAMPION, RAID_MODE(1, 2)); - SummonUndead(NPC_GUARDIAN, RAID_MODE(1, 2)); + secondsBalcony = 97; break; case 2: - SummonUndead(NPC_GUARDIAN, RAID_MODE(2, 4)); - break; default: - SummonUndead(NPC_CHAMPION, RAID_MODE(5, 10)); - SummonUndead(NPC_GUARDIAN, RAID_MODE(5, 10)); + secondsBalcony = 120; break; } - ++waveCount; - events.ScheduleEvent(waveCount < 2 ? EVENT_WAVE : EVENT_GROUND, urand(30000, 45000)); - return; + events.ScheduleEvent(EVENT_GROUND, secondsBalcony * IN_MILLISECONDS, 0, PHASE_BALCONY); + break; + case EVENT_BALCONY_TELEPORT: + Talk(EMOTE_TELEPORT_1); + DoCastAOE(SPELL_TELEPORT); + break; + case EVENT_WAVE: + Talk(EMOTE_SUMMON_WAVE); + switch (balconyCount) + { + case 0: + CastSummon(0, RAID_MODE(2, 4), 0); + break; + case 1: + CastSummon(0, RAID_MODE(1, 2), RAID_MODE(1, 2)); + break; + case 2: + CastSummon(0, 0, RAID_MODE(2, 4)); + break; + default: + CastSummon(0, RAID_MODE(5, 10), RAID_MODE(5, 10)); + break; + } + events.ScheduleEvent(EVENT_WAVE, urand(30, 45) * IN_MILLISECONDS, 0, PHASE_BALCONY); + break; case EVENT_GROUND: - { ++balconyCount; - float x, y, z, o; - me->GetHomePosition(x, y, z, o); - me->NearTeleportTo(x, y, z, o); - events.ScheduleEvent(EVENT_BALCONY, 110000); + + DoCastAOE(SPELL_TELEPORT_BACK); + Talk(EMOTE_TELEPORT_2); + EnterPhaseGround(); - return; - } + break; + case EVENT_GROUND_ATTACKABLE: + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->SetReactState(REACT_AGGRESSIVE); + break; } } - if (me->HasReactState(REACT_AGGRESSIVE)) - DoMeleeAttackIfReady(); + if (events.IsInPhase(PHASE_GROUND)) + { + /* workaround for movechase breaking after blinking + without this noth would just stand there unless his current target moves */ + if (justBlinked && me->GetVictim() && !me->IsWithinMeleeRange(me->EnsureVictim())) + { + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveChase(me->EnsureVictim()); + justBlinked = false; + } + else + DoMeleeAttackIfReady(); + } } private: - uint32 waveCount; uint32 balconyCount; + + bool justBlinked; + + uint32 _SummonWarriorSpells[N_WARRIOR_SPELLS]; + uint32 _SummonChampionSpells[N_CHAMPION_SPELLS]; + uint32 _SummonGuardianSpells[N_GUARDIAN_SPELLS]; }; CreatureAI* GetAI(Creature* creature) const override From f877b6af0a48a216aad9078900763dadb2221d24 Mon Sep 17 00:00:00 2001 From: sirikfoll Date: Sat, 10 Oct 2015 01:25:23 -0300 Subject: [PATCH 131/524] Core/Scripts: Friend or Fowl Achievement Change AURA_EFFECT_HANDLE_REAL to AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK, the hook needs to be called on every apply/reapply to keep tracking the stack amount. --- src/server/scripts/Spells/spell_generic.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 68c115f9fa..2a3b107786 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3383,7 +3383,7 @@ class spell_gen_turkey_marker : public SpellScriptLoader void Register() override { - AfterEffectApply += AuraEffectApplyFn(spell_gen_turkey_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectApply += AuraEffectApplyFn(spell_gen_turkey_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_turkey_marker_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } From f1c48bb7160a432933dc0306820ebd9fbc9d8261 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 10 Oct 2015 11:49:49 +0200 Subject: [PATCH 132/524] Rename sql --- .../world/{2015_09_18_00_world.sql => 2015_10_10_00_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_09_18_00_world.sql => 2015_10_10_00_world.sql} (100%) diff --git a/sql/updates/world/2015_09_18_00_world.sql b/sql/updates/world/2015_10_10_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_18_00_world.sql rename to sql/updates/world/2015_10_10_00_world.sql From 3e5d5e14a0af32f30f444fbd512a5406997d30f5 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 10 Oct 2015 11:54:41 +0200 Subject: [PATCH 133/524] Rename sql --- .../world/{2015_09_21_15558_world.sql => 2015_10_10_01_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_09_21_15558_world.sql => 2015_10_10_01_world.sql} (100%) diff --git a/sql/updates/world/2015_09_21_15558_world.sql b/sql/updates/world/2015_10_10_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_15558_world.sql rename to sql/updates/world/2015_10_10_01_world.sql From ba100a0cb9e88394fd5582cc5e4bcf54f013d7d0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 10 Oct 2015 11:56:31 +0200 Subject: [PATCH 134/524] Rename sql --- .../world/{2015_09_25_15596_world.sql => 2015_10_10_02_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_09_25_15596_world.sql => 2015_10_10_02_world.sql} (100%) diff --git a/sql/updates/world/2015_09_25_15596_world.sql b/sql/updates/world/2015_10_10_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_25_15596_world.sql rename to sql/updates/world/2015_10_10_02_world.sql From 1f02e39c3ebd36f07ac85f508fe1cfd66dbc0028 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 10 Oct 2015 13:55:07 +0200 Subject: [PATCH 135/524] DB/Locales: Kobold Camp Cleanup By @DanielMo1603 Closes #15690 --- sql/updates/world/2015_10_10_03_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_10_03_world.sql diff --git a/sql/updates/world/2015_10_10_03_world.sql b/sql/updates/world/2015_10_10_03_world.sql new file mode 100644 index 0000000000..57dc5a2f29 --- /dev/null +++ b/sql/updates/world/2015_10_10_03_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `locales_quest` SET `Title_loc2` = "Le nettoyage du camp des kobolds", `Title_loc3` = "Säuberung im Koboldlager", `Title_loc7` = "La Limpieza del Campamento Kóbold", `Title_loc8` = "Нападение на лагерь кобольдов" WHERE `Id` = 7; From 88ebff08f33b1b0d0ee00b951005cb434dea56e7 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 10 Oct 2015 14:00:24 +0200 Subject: [PATCH 136/524] DB/Gossip: Innkeeper Boorand Plainswind Closes #15672 --- sql/updates/world/2015_10_10_04_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_10_04_world.sql diff --git a/sql/updates/world/2015_10_10_04_world.sql b/sql/updates/world/2015_10_10_04_world.sql new file mode 100644 index 0000000000..b1bab808d9 --- /dev/null +++ b/sql/updates/world/2015_10_10_04_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `gossip_menu_option` WHERE `menu_id`=344 AND `id`=1; From 1ffec02d760fe88deb4ccce0d13bce344a20bd15 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sat, 10 Oct 2015 13:22:55 +0200 Subject: [PATCH 137/524] Scripts/Commands: enhanced .instance get/setbossstate commands --- sql/updates/world/2015_10_10_05_world.sql | 4 ++++ src/server/game/Instances/InstanceScript.cpp | 22 ++++++++++++++++++++ src/server/game/Instances/InstanceScript.h | 1 + src/server/scripts/Commands/cs_instance.cpp | 6 ++++-- 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 sql/updates/world/2015_10_10_05_world.sql diff --git a/sql/updates/world/2015_10_10_05_world.sql b/sql/updates/world/2015_10_10_05_world.sql new file mode 100644 index 0000000000..5a552b76e6 --- /dev/null +++ b/sql/updates/world/2015_10_10_05_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `trinity_string` WHERE `entry` IN (5057, 5058); +INSERT INTO `trinity_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES +(5057, 'Boss id %i state is now set to %i (%s).', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), +(5058, 'Boss id %i state is %i (%s).', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index 5d44f3ec69..a8cf42ea49 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -652,3 +652,25 @@ void InstanceScript::UpdateEncounterState(EncounterCreditType type, uint32 credi } } } + +std::string InstanceScript::GetBossStateName(uint8 state) +{ + // See enum EncounterState in InstanceScript.h + switch (state) + { + case NOT_STARTED: + return "NOT_STARTED"; + case IN_PROGRESS: + return "IN_PROGRESS"; + case FAIL: + return "FAIL"; + case DONE: + return "DONE"; + case SPECIAL: + return "SPECIAL"; + case TO_BE_DECIDED: + return "TO_BE_DECIDED"; + default: + return "INVALID"; + } +} diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index e832d7cdff..93dafea041 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -220,6 +220,7 @@ class InstanceScript : public ZoneScript virtual bool SetBossState(uint32 id, EncounterState state); EncounterState GetBossState(uint32 id) const { return id < bosses.size() ? bosses[id].state : TO_BE_DECIDED; } + static std::string GetBossStateName(uint8 state); BossBoundaryMap const* GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : NULL; } // Achievement criteria additional requirements check diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp index c960d3f375..aa7310e3c6 100644 --- a/src/server/scripts/Commands/cs_instance.cpp +++ b/src/server/scripts/Commands/cs_instance.cpp @@ -254,7 +254,8 @@ public: } map->ToInstanceMap()->GetInstanceScript()->SetBossState(encounterId, (EncounterState)state); - handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state); + std::string stateName = InstanceScript::GetBossStateName(state); + handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state, stateName); return true; } @@ -318,7 +319,8 @@ public: } uint8 state = map->ToInstanceMap()->GetInstanceScript()->GetBossState(encounterId); - handler->PSendSysMessage(LANG_COMMAND_INST_GET_BOSS_STATE, encounterId, state); + std::string stateName = InstanceScript::GetBossStateName(state); + handler->PSendSysMessage(LANG_COMMAND_INST_GET_BOSS_STATE, encounterId, state, stateName); return true; } }; From 89107c3a8e61447fb6d34fd77fd454074ae5e064 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Fri, 9 Oct 2015 04:46:58 +0200 Subject: [PATCH 138/524] Core/Scripts: The Endless Hunger & Death's Challenge, creature text This PR solves the following say text issues: In quest ID 12733, Death's Challenge, the creature script npc_death_knight_initiate is supposed to target the player and refer to the player character's name in the following 2 lines from `creature_text`.`entry` 28406: - "You don't stand a chance, $n." (`BroadcastTextId` 29267) - "Remember this day, $n, for it is the day that you will be thoroughly owned." (`BroadcastTextId` 29270) In quest ID 12848, The Endless Hunger, the creature script npc_unworthy_initiate is supposed to target the player and refer to the player character's race in the following 2 lines from `creature_text`.`entry` 29519, 29520, 29565, 29566 and 29567: - "You are hopelessly outmatched, $r." (`BroadcastTextId` 30212) - "Sate your hunger on cold steel, $r!" (`BroadcastTextId` 30214) The untargeted variables $r and $n appear in the say lines because the existing script assigns the text to the player character instead of the creatures. This does not produce any race or name information in /say or chat. This Pull Request closes issue #14700 and replaces PR #15678. --- .../ScarletEnclave/chapter1.cpp | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 9747d31952..f2d7f23bdc 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -93,11 +93,6 @@ class npc_unworthy_initiate : public CreatureScript public: npc_unworthy_initiate() : CreatureScript("npc_unworthy_initiate") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_unworthy_initiateAI(creature); - } - struct npc_unworthy_initiateAI : public ScriptedAI { npc_unworthy_initiateAI(Creature* creature) : ScriptedAI(creature) @@ -156,7 +151,7 @@ public: me->CastSpell(me, SPELL_DK_INITIATE_VISUAL, true); if (Player* starter = ObjectAccessor::GetPlayer(*me, playerGUID)) - sCreatureTextMgr->SendChat(me, SAY_EVENT_ATTACK, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, starter); + Talk(SAY_EVENT_ATTACK, starter); phase = PHASE_TO_ATTACK; } @@ -286,6 +281,11 @@ public: } } }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_unworthy_initiateAI(creature); + } }; class npc_unworthy_initiate_anchor : public CreatureScript @@ -457,6 +457,7 @@ enum Spells_DKI //SPELL_DUEL_TRIGGERED = 52990, SPELL_DUEL_VICTORY = 52994, SPELL_DUEL_FLAG = 52991, + SPELL_GROVEL = 7267, }; enum Says_VBM @@ -494,8 +495,6 @@ public: creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); - sCreatureTextMgr->SendChat(creature, SAY_DUEL, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player); - player->CastSpell(creature, SPELL_DUEL, false); player->CastSpell(player, SPELL_DUEL_FLAG, true); } @@ -518,11 +517,6 @@ public: return true; } - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_death_knight_initiateAI(creature); - } - struct npc_death_knight_initiateAI : public CombatAI { npc_death_knight_initiateAI(Creature* creature) : CombatAI(creature) @@ -557,6 +551,7 @@ public: if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL) { m_uiDuelerGUID = pCaster->GetGUID(); + Talk(SAY_DUEL, pCaster); m_bIsDuelInProgress = true; } } @@ -577,7 +572,7 @@ public: pDoneBy->AttackStop(); me->CastSpell(pDoneBy, SPELL_DUEL_VICTORY, true); lose = true; - me->CastSpell(me, 7267, true); + me->CastSpell(me, SPELL_GROVEL, true); me->RestoreFaction(); } } @@ -607,13 +602,13 @@ public: { if (lose) { - if (!me->HasAura(7267)) + if (!me->HasAura(SPELL_GROVEL)) EnterEvadeMode(); return; } else if (me->GetVictim() && me->EnsureVictim()->GetTypeId() == TYPEID_PLAYER && me->EnsureVictim()->HealthBelowPct(10)) { - me->EnsureVictim()->CastSpell(me->GetVictim(), 7267, true); // beg + me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_GROVEL, true); // beg me->EnsureVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true); EnterEvadeMode(); return; @@ -626,6 +621,10 @@ public: } }; + CreatureAI* GetAI(Creature* creature) const override + { + return new npc_death_knight_initiateAI(creature); + } }; /*###### From 01e0475ab898632bb9fd7c3ab0b11ddc6d5cee81 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Sat, 10 Oct 2015 16:04:58 +0200 Subject: [PATCH 139/524] contrib/script: error text corrections in check_updates.sh Fix a factual error in the /contrib/check_updates.sh error message text, Best shown in an example from the latest travis build error: ``` $ ./contrib/check_updates.sh auth auth Database Updater check script: Checking database 'auth' for missing filenames in tables... - "sql/updates/2015_10_09_00_auth.sql" is missing in table 'auth'.'updates' Fatal error: The Database Updater is broken for database 'auth due to applied update which are missing in the 'auth'.'updates' table. How to fix: Insert the missing names of sql updates which were applied already to the 'updates' table of the 'auth' base dump ('sql/base/auth_database.sql'). The command "./contrib/check_updates.sh auth auth" exited with 1. ``` Main fix: `\"sql/updates/${file}\"` -> `\"sql/updates/${name}/${file}\"` Before this change, the error message claims that the updated SQL file was placed directly in the `/sql/updates/` directory and not in the subdirectory based on its DB name. All the other changes are improvements in English grammar and more precise description. --- contrib/check_updates.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contrib/check_updates.sh b/contrib/check_updates.sh index 97aa3dff7a..017542eb80 100644 --- a/contrib/check_updates.sh +++ b/contrib/check_updates.sh @@ -22,7 +22,7 @@ do updates=$((updates+1)) else # The update isn't listed in the updates table of the given database. - echo "- \"sql/updates/${file}\" is missing in table '${name}'.'updates'" + echo "- \"sql/updates/${name}/${file}\" is missing in the '${name}'.'updates' table." error=1 fi done @@ -31,14 +31,14 @@ if [ ${error} -ne 0 ] then echo echo "Fatal error:" - echo " The Database Updater is broken for database '${name}" - echo " due to applied update which are missing in the '${name}'.'updates' table." + echo " The Database Updater is broken for the '${name}' database," + echo " because the applied update is missing in the '${name}'.'updates' table." echo echo "How to fix:" - echo " Insert the missing names of sql updates which were applied already to" - echo " the 'updates' table of the '${name}' base dump ('sql/base/${name}_database.sql')." + echo " Insert the missing names of the already applied sql updates" + echo " to the 'updates' table of the '${name}' base dump ('sql/base/${name}_database.sql')." exit 1 else - echo " Everything is ok, checked ${updates} updates." + echo " Everything is OK, finished checking ${updates} updates." exit 0 fi From 17fdb1e091796933a2028778e4ea5f3b53186b4f Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 11 Oct 2015 11:24:04 +0200 Subject: [PATCH 140/524] Scripts/Naxxramas: Loatheb follow-up: - Fix Deathbloom (for real this time) --- sql/updates/world/2015_10_11_00_world.sql | 2 ++ src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2015_10_11_00_world.sql diff --git a/sql/updates/world/2015_10_11_00_world.sql b/sql/updates/world/2015_10_11_00_world.sql new file mode 100644 index 0000000000..dbad0438ed --- /dev/null +++ b/sql/updates/world/2015_10_11_00_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (29865,-29865,55053,-55053); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp index db6a7a7758..494c173f5f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp @@ -246,7 +246,7 @@ class spell_loatheb_deathbloom : public SpellScriptLoader void Register() override { - AfterEffectRemove += AuraEffectRemoveFn(spell_loatheb_deathbloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_loatheb_deathbloom_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); } }; From 4771740d424bea45a12e9d47d7919f2f44929226 Mon Sep 17 00:00:00 2001 From: treeston Date: Fri, 11 Sep 2015 20:44:53 +0200 Subject: [PATCH 141/524] Gem Perfection implemented: - Add new DB table `skill_perfect_item_template` that holds information about "perfect" crafts that replace the normal result - Implement this new DB table into core (SkillExtraItems.cpp, SkillExtraItems.h, SpellEffects.cpp) - Add data about perfect crafts to new DB table (2015_09_11_00_world.sql) - Add reload capability to this new table (latch onto skill_extra_item_template to avoid changing command IDs) Random other change because I stumbled across it and it annoyed me: - npc_professions.cpp no longer uses magic numbers for quest IDs and creature IDs. --- sql/updates/world/2015_09_11_00_world.sql | 96 ++++++++++++ src/server/game/Skills/SkillExtraItems.cpp | 111 ++++++++++++++ src/server/game/Skills/SkillExtraItems.h | 4 + src/server/game/Spells/SpellEffects.cpp | 21 ++- src/server/game/World/World.cpp | 3 + src/server/scripts/Commands/cs_reload.cpp | 13 +- src/server/scripts/World/npc_professions.cpp | 146 ++++++++++++------- 7 files changed, 340 insertions(+), 54 deletions(-) create mode 100644 sql/updates/world/2015_09_11_00_world.sql diff --git a/sql/updates/world/2015_09_11_00_world.sql b/sql/updates/world/2015_09_11_00_world.sql new file mode 100644 index 0000000000..678e03a31e --- /dev/null +++ b/sql/updates/world/2015_09_11_00_world.sql @@ -0,0 +1,96 @@ +DROP TABLE IF EXISTS `skill_perfect_item_template`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `skill_perfect_item_template` ( + `spellId` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'SpellId of the item creation spell', + `requiredSpecialization` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Specialization spell id', + `perfectCreateChance` float NOT NULL DEFAULT '0' COMMENT 'chance to create the perfect item instead', + `perfectItemType` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'perfect item type to create instead', + PRIMARY KEY (`spellId`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Crafting Perfection System'; +/*!40101 SET character_set_client = @saved_cs_client */; + +LOCK TABLES `skill_perfect_item_template` WRITE; +/*!40000 ALTER TABLE `skill_perfect_item_template` DISABLE KEYS */; +INSERT INTO `skill_perfect_item_template` (`spellId`, `requiredSpecialization`, `perfectCreateChance`, `perfectItemType`) +VALUES +/* Bloodstone */ +(53831,55534,20,41432), -- Bold +(53835,55534,20,41433), -- Bright +(53832,55534,20,41434), -- Delicate +(53844,55534,20,41435), -- Flashing +(53845,55534,20,41436), -- Fractured +(54017,55534,20,41437), -- Precise +(53834,55534,20,41438), -- Runed +(53843,55534,20,41439), -- Subtle +/* Sun Crystal */ +(53852,55534,20,41444), -- Brilliant +(53857,55534,20,41445), -- Mystic +(53856,55534,20,41446), -- Quick +(53854,55534,20,41447), -- Rigid +(53853,55534,20,41448), -- Smooth +(53855,55534,20,41449), -- Thick +/* Chalcedony */ +(53941,55534,20,41440), -- Lustrous +(53934,55534,20,41441), -- Solid +(53940,55534,20,41442), -- Sparkling +(53943,55534,20,41443), -- Stormy +/* Dark Jade */ +(53926,55534,20,41463), -- Dazzling +(53918,55534,20,41464), -- Enduring +(53930,55534,20,41465), -- Energized +(53920,55534,20,41466), -- Forceful +(53925,55534,20,41467), -- Intricate +(53916,55534,20,41468), -- Jagged +(53928,55534,20,41469), -- Lambent +(53922,55534,20,41470), -- Misty +(53929,55534,20,41471), -- Opaque +(53931,55534,20,41472), -- Radiant +(53921,55534,20,41473), -- Seer's +(53933,55534,20,41474), -- Shattered +(53923,55534,20,41475), -- Shining +(53919,55534,20,41476), -- Steady +(53927,55534,20,41477), -- Sundered +(53932,55534,20,41478), -- Tense +(53894,55534,20,41479), -- Timeless +(53924,55534,20,41480), -- Turbid +(53917,55534,20,41481), -- Vivid +/* Huge Citrine */ +(53886,55534,20,41429), -- Wicked +(53892,55534,20,41482), -- Accurate +(53874,55534,20,41483), -- Champion's +(53877,55534,20,41484), -- Deadly +(53880,55534,20,41485), -- Deft +(53884,55534,20,41486), -- Durable +(53888,55534,20,41487), -- Empowered +(53873,55534,20,41488), -- Etched +(53876,55534,20,41489), -- Fierce +(53891,55534,20,41490), -- Glimmering +(53878,55534,20,41491), -- Glinting +(53872,55534,20,41492), -- Inscribed +(53879,55534,20,41493), -- Lucent +(53881,55534,20,41494), -- Luminous +(53882,55534,20,41495), -- Potent +(53887,55534,20,41496), -- Pristine +(53885,55534,20,41497), -- Reckless +(53893,55534,20,41498), -- Resolute +(53875,55534,20,41499), -- Resplendent +(53890,55534,20,41500), -- Stalwart +(53889,55534,20,41501), -- Stark +(53883,55534,20,41502), -- Veiled +/* Shadow Crystal */ +(53866,55534,20,41450), -- Balanced +(53869,55534,20,41451), -- Defender's +(53862,55534,20,41452), -- Glowing +(53871,55534,20,41453), -- Guardian's +(53867,55534,20,41454), -- Infused +(53865,55534,20,41455), -- Mysterious +(53870,55534,20,41456), -- Puissant +(53863,55534,20,41457), -- Purified +(53868,55534,20,41458), -- Regal +(53864,55534,20,41459), -- Royal +(53860,55534,20,41460), -- Shifting +(53859,55534,20,41461), -- Sovereign +(53861,55534,20,41462); -- Tenuous +/*!40000 ALTER TABLE `skill_perfect_item_template` ENABLE KEYS */; +UNLOCK TABLES; diff --git a/src/server/game/Skills/SkillExtraItems.cpp b/src/server/game/Skills/SkillExtraItems.cpp index 8df9ce86f9..2c9a2a7bcf 100644 --- a/src/server/game/Skills/SkillExtraItems.cpp +++ b/src/server/game/Skills/SkillExtraItems.cpp @@ -20,11 +20,98 @@ #include "DatabaseEnv.h" #include "Log.h" #include "Player.h" +#include "ObjectMgr.h" #include // some type definitions // no use putting them in the header file, they're only used in this .cpp +// struct to store information about perfection procs +// one entry per spell +struct SkillPerfectItemEntry +{ + // the spell id of the spell required - it's named "specialization" to conform with SkillExtraItemEntry + uint32 requiredSpecialization; + // perfection proc chance + float perfectCreateChance; + // itemid of the resulting perfect item + uint32 perfectItemType; + + SkillPerfectItemEntry() + : requiredSpecialization(0), perfectCreateChance(0.0f), perfectItemType(0) { } + SkillPerfectItemEntry(uint32 rS, float pCC, uint32 pIT) + : requiredSpecialization(rS), perfectCreateChance(pCC), perfectItemType(pIT) { } +}; + +// map to store perfection info. key = spellId of the creation spell, value is the perfectitementry as specified above +typedef std::map SkillPerfectItemMap; + +SkillPerfectItemMap SkillPerfectItemStore; + +// loads the perfection proc info from DB +void LoadSkillPerfectItemTable() +{ + uint32 oldMSTime = getMSTime(); + + SkillPerfectItemStore.clear(); // reload capability + + // 0 1 2 3 + QueryResult result = WorldDatabase.Query("SELECT spellId, requiredSpecialization, perfectCreateChance, perfectItemType FROM skill_perfect_item_template"); + + if (!result) + { + TC_LOG_ERROR("server.loading", ">> Loaded 0 spell perfection definitions. DB table `skill_perfect_item_template` is empty."); + return; + } + + uint32 count = 0; + + do /* fetch data and run sanity checks */ + { + Field* fields = result->Fetch(); + + uint32 spellId = fields[0].GetUInt32(); + + if (!sSpellMgr->GetSpellInfo(spellId)) + { + TC_LOG_ERROR("sql.sql", "Skill perfection data for spell %u has non-existent spell id in `skill_perfect_item_template`!", spellId); + continue; + } + + uint32 requiredSpecialization = fields[1].GetUInt32(); + if (!sSpellMgr->GetSpellInfo(requiredSpecialization)) + { + TC_LOG_ERROR("sql.sql", "Skill perfection data for spell %u has non-existent required specialization spell id %u in `skill_perfect_item_template`!", spellId, requiredSpecialization); + continue; + } + + float perfectCreateChance = fields[2].GetFloat(); + if (perfectCreateChance <= 0.0f) + { + TC_LOG_ERROR("sql.sql", "Skill perfection data for spell %u has impossibly low proc chance in `skill_perfect_item_template`!", spellId); + continue; + } + + uint32 perfectItemType = fields[3].GetUInt32(); + if (!sObjectMgr->GetItemTemplate(perfectItemType)) + { + TC_LOG_ERROR("sql.sql", "Skill perfection data for spell %u references non-existent perfect item id %u in `skill_perfect_item_template`!", spellId, perfectItemType); + continue; + } + + SkillPerfectItemEntry& skillPerfectItemEntry = SkillPerfectItemStore[spellId]; + + skillPerfectItemEntry.requiredSpecialization = requiredSpecialization; + skillPerfectItemEntry.perfectCreateChance = perfectCreateChance; + skillPerfectItemEntry.perfectItemType = perfectItemType; + + ++count; + } + while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u spell perfection definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); +} + // struct to store information about extra item creation // one entry for every spell that is able to create an extra item struct SkillExtraItemEntry @@ -112,6 +199,30 @@ void LoadSkillExtraItemTable() TC_LOG_INFO("server.loading", ">> Loaded %u spell specialization definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } +bool CanCreatePerfectItem(Player* player, uint32 spellId, float &perfectCreateChance, uint32 &perfectItemType) +{ + SkillPerfectItemMap::const_iterator ret = SkillPerfectItemStore.find(spellId); + // no entry in DB means no perfection proc possible + if (ret == SkillPerfectItemStore.end()) + return false; + + SkillPerfectItemEntry const* thisEntry = &ret->second; + // lack of entry means no perfection proc possible + if (!thisEntry) + return false; + + // if you don't have the spell needed, then no procs for you + if (!player->HasSpell(thisEntry->requiredSpecialization)) + return false; + + // set values as appropriate + perfectCreateChance = thisEntry->perfectCreateChance; + perfectItemType = thisEntry->perfectItemType; + + // and tell the caller to start rolling the dice + return true; +} + bool CanCreateExtraItems(Player* player, uint32 spellId, float &additionalChance, uint8 &additionalMax) { // get the info for the specified spell diff --git a/src/server/game/Skills/SkillExtraItems.h b/src/server/game/Skills/SkillExtraItems.h index 0cdfff74ed..118c49ed00 100644 --- a/src/server/game/Skills/SkillExtraItems.h +++ b/src/server/game/Skills/SkillExtraItems.h @@ -23,6 +23,10 @@ // predef classes used in functions class Player; +// returns true and sets the appropriate info if the player can create a perfect item with the given spellId +bool CanCreatePerfectItem(Player* player, uint32 spellId, float &perfectCreateChance, uint32 &perfectItemType); +// load perfection proc info from DB +void LoadSkillPerfectItemTable(); // returns true and sets the appropriate info if the player can create extra items with the given spellId bool CanCreateExtraItems(Player* player, uint32 spellId, float &additionalChance, uint8 &additionalMax); // function to load the extra item creation info from DB diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 10dfbd511d..e587a59858 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1571,6 +1571,22 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype) if (num_to_add > pProto->GetMaxStackSize()) num_to_add = pProto->GetMaxStackSize(); + /* == gem perfection handling == */ + + // the chance of getting a perfect result + float perfectCreateChance = 0.0f; + // the resulting perfect item if successful + uint32 perfectItemType = itemtype; + // get perfection capability and chance + if (CanCreatePerfectItem(player, m_spellInfo->Id, perfectCreateChance, perfectItemType)) + if (roll_chance_f(perfectCreateChance)) // if the roll succeeds... + newitemid = perfectItemType; // the perfect item replaces the regular one + + /* == gem perfection handling over == */ + + + /* == profession specialization handling == */ + // init items_count to 1, since 1 item will be created regardless of specialization int items_count=1; // the chance to create additional items @@ -1579,15 +1595,16 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype) uint8 additionalMaxNum=0; // get the chance and maximum number for creating extra items if (CanCreateExtraItems(player, m_spellInfo->Id, additionalCreateChance, additionalMaxNum)) - { // roll with this chance till we roll not to create or we create the max num while (roll_chance_f(additionalCreateChance) && items_count <= additionalMaxNum) ++items_count; - } // really will be created more items num_to_add *= items_count; + /* == profession specialization handling over == */ + + // can the player store the new item? ItemPosCountVec dest; uint32 no_space = 0; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 85e79168b7..169ff069de 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1644,6 +1644,9 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Loading Skill Extra Item Table..."); LoadSkillExtraItemTable(); + TC_LOG_INFO("server.loading", "Loading Skill Perfection Data Table..."); + LoadSkillPerfectItemTable(); + TC_LOG_INFO("server.loading", "Loading Skill Fishing base level requirements..."); sObjectMgr->LoadFishingBaseSkillLevel(); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index f4b442de92..2863d2d4ed 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -749,12 +749,21 @@ public: return true; } - static bool HandleReloadSkillExtraItemTemplateCommand(ChatHandler* handler, const char* /*args*/) + static bool HandleReloadSkillPerfectItemTemplateCommand(ChatHandler* handler, const char* /*args*/) + { // latched onto HandleReloadSkillExtraItemTemplateCommand as it's part of that table group (and i don't want to chance all the command IDs) + TC_LOG_INFO("misc", "Re-Loading Skill Perfection Data Table..."); + LoadSkillPerfectItemTable(); + handler->SendGlobalGMSysMessage("DB table `skill_perfect_item_template` (perfect item procs when crafting) reloaded."); + return true; + } + + static bool HandleReloadSkillExtraItemTemplateCommand(ChatHandler* handler, const char* args) { TC_LOG_INFO("misc", "Re-Loading Skill Extra Item Table..."); LoadSkillExtraItemTable(); handler->SendGlobalGMSysMessage("DB table `skill_extra_item_template` (extra item creation when crafting) reloaded."); - return true; + + return HandleReloadSkillPerfectItemTemplateCommand(handler, args); } static bool HandleReloadSkillFishingBaseLevelCommand(ChatHandler* handler, const char* /*args*/) diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp index 44411b20aa..9c05e4e2c0 100644 --- a/src/server/scripts/World/npc_professions.cpp +++ b/src/server/scripts/World/npc_professions.cpp @@ -178,6 +178,52 @@ enum ProfessionSpells S_UNLEARN_POTION = 41563, }; +/*### +# specialization trainers +###*/ +enum SpecializationTrainers +{ + /* Alchemy */ + N_TRAINER_TRANSMUTE = 22427, // Zarevhi + N_TRAINER_ELIXIR = 19052, // Lorokeem + N_TRAINER_POTION = 17909, // Lauranna Thar'well + + /* Blacksmithing */ + N_TRAINER_SMITHOMNI1 = 11145, // Myolor Sunderfury + N_TRAINER_SMITHOMNI2 = 11176, // Krathok Moltenfist + N_TRAINER_WEAPON1 = 11146, // Ironus Coldsteel + N_TRAINER_WEAPON2 = 11178, // Borgosh Corebender + N_TRAINER_ARMOR1 = 5164, // Grumnus Steelshaper + N_TRAINER_ARMOR2 = 11177, // Okothos Ironrager + N_TRAINER_HAMMER = 11191, // Lilith the Lithe + N_TRAINER_AXE = 11192, // Kilram + N_TRAINER_SWORD = 11193, // Seril Scourgebane + + /* Leatherworking */ + N_TRAINER_DRAGON1 = 7866, // Peter Galen + N_TRAINER_DRAGON2 = 7867, // Thorkaf Dragoneye + N_TRAINER_ELEMENTAL1 = 7868, // Sarah Tanner + N_TRAINER_ELEMENTAL2 = 7869, // Brumn Winterhoof + N_TRAINER_TRIBAL1 = 7870, // Caryssia Moonhunter + N_TRAINER_TRIBAL2 = 7871, // Se'Jib + + /* Tailoring */ + N_TRAINER_SPELLFIRE = 22213, // Gidge Spellweaver + N_TRAINER_MOONCLOTH = 22208, // Nasmara Moonsong + N_TRAINER_SHADOWEAVE = 22212, // Andrion Darkspinner +}; + +/*### +# specialization quests +###*/ +enum SpecializationQuests +{ + /* Alchemy */ + Q_MASTER_TRANSMUTE = 10899, + Q_MASTER_ELIXIR = 10902, + Q_MASTER_POTION = 10897, +}; + /*### # formulas to calculate unlearning cost ###*/ @@ -395,23 +441,23 @@ public: if (player->HasSkill(SKILL_ALCHEMY) && player->GetBaseSkillValue(SKILL_ALCHEMY) >= 350 && player->getLevel() > 67) { - if (player->GetQuestRewardStatus(10899) || player->GetQuestRewardStatus(10902) || player->GetQuestRewardStatus(10897)) + if (player->GetQuestRewardStatus(Q_MASTER_TRANSMUTE) || player->GetQuestRewardStatus(Q_MASTER_ELIXIR) || player->GetQuestRewardStatus(Q_MASTER_POTION)) { switch (creature->GetEntry()) { - case 22427: //Zarevhi + case N_TRAINER_TRANSMUTE: //Zarevhi if (!HasAlchemySpell(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1); if (player->HasSpell(S_TRANSMUTE)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); break; - case 19052: //Lorokeem + case N_TRAINER_ELIXIR: //Lorokeem if (!HasAlchemySpell(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2); if (player->HasSpell(S_ELIXIR)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5); break; - case 17909: //Lauranna Thar'well + case N_TRAINER_POTION: //Lauranna Thar'well if (!HasAlchemySpell(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3); if (player->HasSpell(S_POTION)) @@ -464,17 +510,17 @@ public: { switch (creature->GetEntry()) { - case 22427: + case N_TRAINER_TRANSMUTE: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 19052: + case N_TRAINER_ELIXIR: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_CHECK, action); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 17909: + case N_TRAINER_POTION: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_CHECK, action); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); @@ -489,17 +535,17 @@ public: { switch (creature->GetEntry()) { - case 22427: //Zarevhi + case N_TRAINER_TRANSMUTE: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 19052: //Lorokeem + case N_TRAINER_ELIXIR: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 17909: //Lauranna Thar'well + case N_TRAINER_POTION: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); @@ -564,20 +610,20 @@ public: { switch (creatureId) { - case 11145: //Myolor Sunderfury - case 11176: //Krathok Moltenfist + case N_TRAINER_SMITHOMNI1: + case N_TRAINER_SMITHOMNI2: if (!player->HasSpell(S_ARMOR) && !player->HasSpell(S_WEAPON) && player->GetReputationRank(REP_ARMOR) >= REP_FRIENDLY) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); if (!player->HasSpell(S_WEAPON) && !player->HasSpell(S_ARMOR) && player->GetReputationRank(REP_WEAPON) >= REP_FRIENDLY) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); break; - case 11146: //Ironus Coldsteel - case 11178: //Borgosh Corebender + case N_TRAINER_WEAPON1: + case N_TRAINER_WEAPON2: if (player->HasSpell(S_WEAPON)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3); break; - case 5164: //Grumnus Steelshaper - case 11177: //Okothos Ironrager + case N_TRAINER_ARMOR1: + case N_TRAINER_ARMOR2: if (player->HasSpell(S_ARMOR)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); break; @@ -588,19 +634,19 @@ public: { switch (creatureId) { - case 11191: //Lilith the Lithe + case N_TRAINER_HAMMER: if (!HasWeaponSub(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5); if (player->HasSpell(S_HAMMER)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8); break; - case 11192: //Kilram + case N_TRAINER_AXE: if (!HasWeaponSub(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6); if (player->HasSpell(S_AXE)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9); break; - case 11193: //Seril Scourgebane + case N_TRAINER_SWORD: if (!HasWeaponSub(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7); if (player->HasSpell(S_SWORD)) @@ -685,17 +731,17 @@ public: { switch (creature->GetEntry()) { - case 11191: + case N_TRAINER_HAMMER: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, action); //unknown textID (TALK_HAMMER_LEARN) player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 11192: + case N_TRAINER_AXE: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_CHECK, action); //unknown textID (TALK_AXE_LEARN) player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 11193: + case N_TRAINER_SWORD: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_CHECK, action); //unknown textID (TALK_SWORD_LEARN) player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); @@ -710,26 +756,26 @@ public: { switch (creature->GetEntry()) { - case 11146: //Ironus Coldsteel - case 11178: //Borgosh Corebender - case 5164: //Grumnus Steelshaper - case 11177: //Okothos Ironrager + case N_TRAINER_WEAPON1: + case N_TRAINER_WEAPON2: + case N_TRAINER_ARMOR1: + case N_TRAINER_ARMOR2: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SMITH_SPEC, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(player), false); //unknown textID (TALK_UNLEARN_AXEORWEAPON) player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 11191: + case N_TRAINER_HAMMER: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false); //unknown textID (TALK_HAMMER_UNLEARN) player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 11192: + case N_TRAINER_AXE: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false); //unknown textID (TALK_AXE_UNLEARN) player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 11193: + case N_TRAINER_SWORD: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(player), false); //unknown textID (TALK_SWORD_UNLEARN) player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); @@ -901,18 +947,18 @@ public: { switch (creature->GetEntry()) { - case 7866: //Peter Galen - case 7867: //Thorkaf Dragoneye + case N_TRAINER_DRAGON1: + case N_TRAINER_DRAGON2: if (player->HasSpell(S_DRAGON)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1); break; - case 7868: //Sarah Tanner - case 7869: //Brumn Winterhoof + case N_TRAINER_ELEMENTAL1: + case N_TRAINER_ELEMENTAL2: if (player->HasSpell(S_ELEMENTAL)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2); break; - case 7870: //Caryssia Moonhunter - case 7871: //Se'Jib + case N_TRAINER_TRIBAL1: + case N_TRAINER_TRIBAL2: if (player->HasSpell(S_TRIBAL)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3); break; @@ -952,20 +998,20 @@ public: { switch (creature->GetEntry()) { - case 7866: //Peter Galen - case 7867: //Thorkaf Dragoneye + case N_TRAINER_DRAGON1: + case N_TRAINER_DRAGON2: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 7868: //Sarah Tanner - case 7869: //Brumn Winterhoof + case N_TRAINER_ELEMENTAL1: + case N_TRAINER_ELEMENTAL2: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 7870: //Caryssia Moonhunter - case 7871: //Se'Jib + case N_TRAINER_TRIBAL1: + case N_TRAINER_TRIBAL2: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); @@ -1027,19 +1073,19 @@ public: { switch (creature->GetEntry()) { - case 22213: //Gidge Spellweaver + case N_TRAINER_SPELLFIRE: if (!HasTailorSpell(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1); if (player->HasSpell(S_SPELLFIRE)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); break; - case 22208: //Nasmara Moonsong + case N_TRAINER_MOONCLOTH: if (!HasTailorSpell(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2); if (player->HasSpell(S_MOONCLOTH)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5); break; - case 22212: //Andrion Darkspinner + case N_TRAINER_SHADOWEAVE: if (!HasTailorSpell(player)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3); if (player->HasSpell(S_SHADOWEAVE)) @@ -1092,17 +1138,17 @@ public: { switch (creature->GetEntry()) { - case 22213: + case N_TRAINER_SPELLFIRE: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 22208: + case N_TRAINER_MOONCLOTH: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 22212: + case N_TRAINER_SHADOWEAVE: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); @@ -1117,17 +1163,17 @@ public: { switch (creature->GetEntry()) { - case 22213: //Gidge Spellweaver + case N_TRAINER_SPELLFIRE: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 22208: //Nasmara Moonsong + case N_TRAINER_MOONCLOTH: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; - case 22212: //Andrion Darkspinner + case N_TRAINER_SHADOWEAVE: player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, action, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(player), false); //unknown textID () player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); From 90546f8a291ef7e7e6a58b96c22760d09c9969ed Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 11 Oct 2015 11:40:31 +0200 Subject: [PATCH 142/524] Renamed sql --- .../world/{2015_09_11_00_world.sql => 2015_10_11_01_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_09_11_00_world.sql => 2015_10_11_01_world.sql} (100%) diff --git a/sql/updates/world/2015_09_11_00_world.sql b/sql/updates/world/2015_10_11_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_11_00_world.sql rename to sql/updates/world/2015_10_11_01_world.sql From bb198de1f2c08d3cde5d4ec4a34bc60f9bbafaf6 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 11 Oct 2015 19:02:14 +0200 Subject: [PATCH 143/524] DB/Gameobject: Add few missing Molten Core Gameobjects By Malcrom --- sql/updates/world/2015_10_11_02_world.sql | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 sql/updates/world/2015_10_11_02_world.sql diff --git a/sql/updates/world/2015_10_11_02_world.sql b/sql/updates/world/2015_10_11_02_world.sql new file mode 100644 index 0000000000..5528244f80 --- /dev/null +++ b/sql/updates/world/2015_10_11_02_world.sql @@ -0,0 +1,20 @@ +-- Gameobject list for Molten Core +SET @OGUID := 5514; +DELETE FROM `gameobject` WHERE `guid` IN (43162,43163,43164,43165,35665); +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID AND @OGUID+14; +INSERT INTO `gameobject` (`guid`,`id`,`map`,`zoneId`,`areaId`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES +(@OGUID+0,176951,409,2717,0,1,1,601.6724,-1174.613,-196.0725,3.141593,0,0,-1,0,120,255,1), -- Rune of Koro +(@OGUID+1,176952,409,2717,0,1,1,748.8392,-985.1598,-178.2831,3.141593,0,0,-1,0,120,255,1), -- Rune of Zeth +(@OGUID+2,176953,409,2717,0,1,1,583.7003,-806.7377,-204.9614,3.141593,0,0,-1,0,120,255,1), -- Rune of Mazj +(@OGUID+3,176954,409,2717,0,1,1,795.5356,-974.2527,-207.7883,3.141593,0,0,-1,0,120,255,1), -- Rune of Theri +(@OGUID+4,176955,409,2717,0,1,1,694.2289,-495.5984,-214.3294,3.141593,0,0,-1,0,120,255,1), -- Rune of Blaz +(@OGUID+5,176956,409,2717,0,1,1,1132.106,-1017.273,-186.4936,3.141593,0,0,-1,0,120,255,1), -- Rune of Kress +(@OGUID+6,176957,409,2717,0,1,1,897.0577,-551.5464,-203.9534,3.141593,0,0,-1,0,120,255,1), -- Rune of Mohn +(@OGUID+7,177000,409,2717,0,1,1,736.6626,-1176.569,-119.7984,3.141593,0,0,-1,0,120,255,1), -- Hot Coal +(@OGUID+8,178187,409,2717,0,1,1,601.6724,-1174.613,-196.0725,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle SULFURON +(@OGUID+9,178188,409,2717,0,1,1,748.8392,-985.1598,-178.2831,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle BARON +(@OGUID+10,178189,409,2717,0,1,1,583.7003,-806.7377,-204.9614,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle SHAZZRAH +(@OGUID+11,178190,409,2717,0,1,1,795.5356,-974.2527,-207.7883,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle GOLEMAGG +(@OGUID+12,178191,409,2717,0,1,1,694.2289,-495.5984,-214.3294,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle GARR +(@OGUID+13,178192,409,2717,0,1,1,1132.106,-1017.273,-186.4936,3.141593,0,0,-1,0,120,255,1), -- Molten Core Circle MAGMADAR +(@OGUID+14,178193,409,2717,0,1,1,897.0577,-551.5464,-203.9534,3.141593,0,0,-1,0,120,255,1); -- Molten Core Circle GEHENNAS From 976ab4d2aee22f445320c48ec336d35328f919da Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 11 Oct 2015 19:05:48 +0200 Subject: [PATCH 144/524] DB/Creature: Pathing for Molten Core By Malcrom, closes #15662 --- sql/updates/world/2015_10_11_03_world.sql | 786 ++++++++++++++++++++++ 1 file changed, 786 insertions(+) create mode 100644 sql/updates/world/2015_10_11_03_world.sql diff --git a/sql/updates/world/2015_10_11_03_world.sql b/sql/updates/world/2015_10_11_03_world.sql new file mode 100644 index 0000000000..16306b0823 --- /dev/null +++ b/sql/updates/world/2015_10_11_03_world.sql @@ -0,0 +1,786 @@ +-- Add missing Firesworn spawn +SET @CGUID := 16399; +DELETE FROM `creature` WHERE `guid`=@CGUID; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID, 12099, 409, 1, 1, 698.831, -507.815, -214.691, 1.832596, 7200, 0, 0); + +-- Garr movement/formation fixup +UPDATE `creature` SET `spawndist`=10,`MovementType`=1 WHERE `guid`=56609; +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (56609); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(56609,56609,0,0,2,0,0), +(56609,56610,10,45,2,0,0), +(56609,56616,10,90,2,0,0), +(56609,56619,10,135,2,0,0), +(56609,56620,10,180,2,0,0), +(56609,56622,10,225,2,0,0), +(56609,56626,10,270,2,0,0), +(56609,56628,10,315,2,0,0), +(56609,@CGUID,10,360,2,0,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56742; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=619.3152,`position_y`=-1131.169,`position_z`=-201.6246 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,619.3152,-1131.169,-201.6246,0,0,0,0,100,0), +(@PATH,2,635.5156,-1094.704,-196.7484,0,0,0,0,100,0), +(@PATH,3,637.1269,-1060.913,-199.2417,0,0,0,0,100,0), +(@PATH,4,635.5156,-1094.704,-196.7484,0,0,0,0,100,0), +(@PATH,5,619.3152,-1131.169,-201.6246,0,0,0,0,100,0), +(@PATH,6,610.0372,-1155.73,-198.8285,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56743; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1039.667,`position_y`=-791.0968,`position_z`=-151.0096 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1039.667,-791.0968,-151.0096,0,0,0,0,100,0), +(@PATH,2,1026.315,-767.8003,-156.6493,0,0,0,0,100,0), +(@PATH,3,1038.774,-761.6977,-152.658,0,0,0,0,100,0), +(@PATH,4,1064.627,-748.9409,-151.7516,0,0,0,0,100,0), +(@PATH,5,1038.774,-761.6977,-152.658,0,0,0,0,100,0), +(@PATH,6,1026.315,-767.8003,-156.6493,0,0,0,0,100,0), +(@PATH,7,1039.641,-791.0518,-150.9892,0,0,0,0,100,0), +(@PATH,8,1051.314,-799.6896,-151.9713,0,0,0,0,100,0), +(@PATH,9,1040.764,-815.1115,-152.1656,0,0,0,0,100,0), +(@PATH,10,1051.314,-799.6896,-151.9713,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56744; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=862.4832,`position_y`=-1025.388,`position_z`=-193.7729 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,862.4832,-1025.388,-193.7729,0,0,0,0,100,0), +(@PATH,2,837.9779,-1005.705,-203.4326,0,0,0,0,100,0), +(@PATH,3,811.0497,-995.4718,-207.7699,0,0,0,0,100,0), +(@PATH,4,837.9779,-1005.705,-203.4326,0,0,0,0,100,0), +(@PATH,5,862.4832,-1025.388,-193.7729,0,0,0,0,100,0), +(@PATH,6,867.8922,-1050.318,-187.0417,0,0,0,0,100,0), +(@PATH,7,872.7313,-1072.91,-180.5435,0,0,0,0,100,0), +(@PATH,8,866.1934,-1092.763,-172.8487,0,0,0,0,100,0), +(@PATH,9,852.0717,-1110.005,-164.8026,0,0,0,0,100,0), +(@PATH,10,839.597,-1126.927,-156.889,0,0,0,0,100,0), +(@PATH,11,809.0994,-1147.87,-152.4792,0,0,0,0,100,0), +(@PATH,12,797.6674,-1151.59,-151.2095,0,0,0,0,100,0), +(@PATH,13,786.1231,-1142.027,-149.5751,0,0,0,0,100,0), +(@PATH,14,751.8342,-1124.252,-144.3583,0,0,0,0,100,0), +(@PATH,15,726.2703,-1123.733,-140.4308,0,0,0,0,100,0), +(@PATH,16,705.0751,-1129.982,-137.4043,0,0,0,0,100,0), +(@PATH,17,688.8096,-1145.377,-132.6487,0,0,0,0,100,0), +(@PATH,18,681.356,-1157.213,-129.4221,0,0,0,0,100,0), +(@PATH,19,678.912,-1171.258,-124.9925,0,0,0,0,100,0), +(@PATH,20,687.782,-1186.916,-122.3317,0,0,0,0,100,0), +(@PATH,21,702.4774,-1195.069,-120.2255,0,0,0,0,100,0), +(@PATH,22,687.7936,-1186.922,-122.3323,0,0,0,0,100,0), +(@PATH,23,678.912,-1171.258,-124.9925,0,0,0,0,100,0), +(@PATH,24,681.356,-1157.213,-129.4221,0,0,0,0,100,0), +(@PATH,25,688.8096,-1145.377,-132.6487,0,0,0,0,100,0), +(@PATH,26,705.0751,-1129.982,-137.4043,0,0,0,0,100,0), +(@PATH,27,726.2703,-1123.733,-140.4308,0,0,0,0,100,0), +(@PATH,28,751.8342,-1124.252,-144.3583,0,0,0,0,100,0), +(@PATH,29,786.1231,-1142.027,-149.5751,0,0,0,0,100,0), +(@PATH,30,797.6674,-1151.59,-151.2095,0,0,0,0,100,0), +(@PATH,31,809.0994,-1147.87,-152.4792,0,0,0,0,100,0), +(@PATH,32,839.597,-1126.927,-156.889,0,0,0,0,100,0), +(@PATH,33,852.0717,-1110.005,-164.8026,0,0,0,0,100,0), +(@PATH,34,866.1934,-1092.763,-172.8487,0,0,0,0,100,0), +(@PATH,35,872.7313,-1072.91,-180.5435,0,0,0,0,100,0), +(@PATH,36,867.8922,-1050.318,-187.0417,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56745; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=820.8864,`position_y`=-1133.536,`position_z`=-153.9561 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,820.8864,-1133.536,-153.9561,0,0,0,0,100,0), +(@PATH,2,811.4623,-1112.419,-155.1721,0,0,0,0,100,0), +(@PATH,3,791.674,-1098.377,-157.4893,0,0,0,0,100,0), +(@PATH,4,756.4903,-1086.385,-165.0273,0,0,0,0,100,0), +(@PATH,5,713.1385,-1077.042,-178.4627,0,0,0,0,100,0), +(@PATH,6,666.2255,-1071.984,-188.5744,0,0,0,0,100,0), +(@PATH,7,713.1385,-1077.042,-178.4627,0,0,0,0,100,0), +(@PATH,8,756.4903,-1086.385,-165.0273,0,0,0,0,100,0), +(@PATH,9,791.674,-1098.377,-157.4893,0,0,0,0,100,0), +(@PATH,10,811.4623,-1112.419,-155.1721,0,0,0,0,100,0), +(@PATH,11,820.8864,-1133.536,-153.9561,0,0,0,0,100,0), +(@PATH,12,807.4134,-1143.589,-152.2109,0,0,0,0,100,0), +(@PATH,13,788.3813,-1136.843,-150.0572,0,0,0,0,100,0), +(@PATH,14,774.8284,-1122.117,-148.7992,0,0,0,0,100,0), +(@PATH,15,753.0598,-1112.579,-145.9724,0,0,0,0,100,0), +(@PATH,16,723.3937,-1111.516,-142.1575,0,0,0,0,100,0), +(@PATH,17,692.8207,-1125.591,-137.05,0,0,0,0,100,0), +(@PATH,18,670.802,-1153.978,-128.2815,0,0,0,0,100,0), +(@PATH,19,669.009,-1180.974,-123.0805,0,0,0,0,100,0), +(@PATH,20,670.802,-1153.978,-128.2815,0,0,0,0,100,0), +(@PATH,21,692.8207,-1125.591,-137.05,0,0,0,0,100,0), +(@PATH,22,723.3937,-1111.516,-142.1575,0,0,0,0,100,0), +(@PATH,23,753.0598,-1112.579,-145.9724,0,0,0,0,100,0), +(@PATH,24,774.8284,-1122.117,-148.7992,0,0,0,0,100,0), +(@PATH,25,788.3813,-1136.843,-150.0572,0,0,0,0,100,0), +(@PATH,26,807.4134,-1143.589,-152.2109,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56746; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=706.5988,`position_y`=-608.756,`position_z`=-209.7862 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,706.5988,-608.756,-209.7862,0,0,0,0,100,0), +(@PATH,2,694.3823,-643.1285,-209.7859,0,0,0,0,100,0), +(@PATH,3,691.9941,-667.7454,-209.6549,0,0,0,0,100,0), +(@PATH,4,712.6238,-699.4688,-209.7263,0,0,0,0,100,0), +(@PATH,5,696.8894,-727.3798,-209.4279,0,0,0,0,100,0), +(@PATH,6,672.7046,-770.8894,-209.0702,0,0,0,0,100,0), +(@PATH,7,696.8894,-727.3798,-209.4279,0,0,0,0,100,0), +(@PATH,8,712.6238,-699.4688,-209.7263,0,0,0,0,100,0), +(@PATH,9,691.9941,-667.7454,-209.6549,0,0,0,0,100,0), +(@PATH,10,694.3823,-643.1285,-209.7859,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56667; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=716.2954,`position_y`=-563.1713,`position_z`=-215.2122 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,716.2954,-563.1713,-215.2122,0,0,0,0,100,0), +(@PATH,2,730.72,-541.2038,-216.5207,0,0,0,0,100,0), +(@PATH,3,751.7352,-537.1676,-215.0087,0,0,0,0,100,0), +(@PATH,4,782.8221,-568.6121,-213.2396,0,0,0,0,100,0), +(@PATH,5,826.4692,-557.4173,-206.1204,0,0,0,0,100,0), +(@PATH,6,862.7628,-559.3347,-203.8248,0,0,0,0,100,0), +(@PATH,7,897.3094,-575.2031,-203.7624,0,0,0,0,100,0), +(@PATH,8,928.274,-599.9254,-203.4944,0,0,0,0,100,0), +(@PATH,9,976.9997,-588.0521,-203.566,0,0,0,0,100,0), +(@PATH,10,1013.348,-611.7108,-198.8222,0,0,0,0,100,0), +(@PATH,11,1031.784,-628.6943,-189.8679,0,0,0,0,100,0), +(@PATH,12,1054.582,-638.4258,-174.0191,0,0,0,0,100,0), +(@PATH,13,1082.93,-658.8265,-159.5947,0,0,0,0,100,0), +(@PATH,14,1102.016,-688.0265,-153.0321,0,0,0,0,100,0), +(@PATH,15,1095.611,-709.971,-151.2729,0,0,0,0,100,0), +(@PATH,16,1102.016,-688.0265,-153.0321,0,0,0,0,100,0), +(@PATH,17,1082.93,-658.8265,-159.5947,0,0,0,0,100,0), +(@PATH,18,1054.582,-638.4258,-174.0191,0,0,0,0,100,0), +(@PATH,19,1031.784,-628.6943,-189.8679,0,0,0,0,100,0), +(@PATH,20,1013.348,-611.7108,-198.8222,0,0,0,0,100,0), +(@PATH,21,976.9997,-588.0521,-203.566,0,0,0,0,100,0), +(@PATH,22,928.274,-599.9254,-203.4944,0,0,0,0,100,0), +(@PATH,23,897.3094,-575.2031,-203.7624,0,0,0,0,100,0), +(@PATH,24,862.7628,-559.3347,-203.8248,0,0,0,0,100,0), +(@PATH,25,826.4692,-557.4173,-206.1204,0,0,0,0,100,0), +(@PATH,26,782.8221,-568.6121,-213.2396,0,0,0,0,100,0), +(@PATH,27,751.7352,-537.1676,-215.0087,0,0,0,0,100,0), +(@PATH,28,730.72,-541.2038,-216.5207,0,0,0,0,100,0), +(@PATH,29,716.2954,-563.1713,-215.2122,0,0,0,0,100,0), +(@PATH,30,710.9113,-588.9549,-211.3497,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56668; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=746.1315,`position_y`=-1006.086,`position_z`=-177.4375 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,746.1315,-1006.086,-177.4375,0,0,0,0,100,0), +(@PATH,2,733.2838,-1027.083,-177.5541,0,0,0,0,100,0), +(@PATH,3,695.6022,-1035.41,-182.9091,0,0,0,0,100,0), +(@PATH,4,652.9347,-1047.064,-195.1933,0,0,0,0,100,0), +(@PATH,5,695.6022,-1035.41,-182.9091,0,0,0,0,100,0), +(@PATH,6,733.2838,-1027.083,-177.5541,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56669; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=819.1058,`position_y`=-631.4754,`position_z`=-202.4386 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,819.1058,-631.4754,-202.4386,0,0,0,0,100,0), +(@PATH,2,842.2988,-620.2899,-203.6502,0,0,0,0,100,0), +(@PATH,3,863.2007,-606.6663,-201.9657,0,0,0,0,100,0), +(@PATH,4,880.7169,-589.9871,-203.5187,0,0,0,0,100,0), +(@PATH,5,891.5865,-563.1656,-204.1768,0,0,0,0,100,0), +(@PATH,6,880.7169,-589.9871,-203.5187,0,0,0,0,100,0), +(@PATH,7,863.2007,-606.6663,-201.9657,0,0,0,0,100,0), +(@PATH,8,842.2988,-620.2899,-203.6502,0,0,0,0,100,0), +(@PATH,9,819.1058,-631.4754,-202.4386,0,0,0,0,100,0), +(@PATH,10,801.1528,-637.2293,-203.2919,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56670; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=640.3456,`position_y`=-838.7157,`position_z`=-208.4006 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,640.3456,-838.7157,-208.4006,0,0,0,0,100,0), +(@PATH,2,606.3914,-839.9142,-207.404,0,0,0,0,100,0), +(@PATH,3,580.7532,-839.1719,-206.0227,0,0,0,0,100,0), +(@PATH,4,571.1739,-823.5732,-206.9356,0,0,0,0,100,0), +(@PATH,5,568.275,-805.6725,-206.7511,0,0,0,0,100,0), +(@PATH,6,574.7719,-784.4373,-207.1243,0,0,0,0,100,0), +(@PATH,7,568.275,-805.6725,-206.7511,0,0,0,0,100,0), +(@PATH,8,571.1739,-823.5732,-206.9356,0,0,0,0,100,0), +(@PATH,9,580.7532,-839.1719,-206.0227,0,0,0,0,100,0), +(@PATH,10,606.3914,-839.9142,-207.404,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56671; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=693.7902,`position_y`=-895.4052,`position_z`=-199.3317 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,693.7902,-895.4052,-199.3317,0,0,0,0,100,0), +(@PATH,2,676.3041,-859.0721,-207.3966,0,0,0,0,100,0), +(@PATH,3,660.5331,-846.3304,-208.582,0,0,0,0,100,0), +(@PATH,4,676.3041,-859.0721,-207.3966,0,0,0,0,100,0), +(@PATH,5,693.7902,-895.4052,-199.3317,0,0,0,0,100,0), +(@PATH,6,709.7253,-933.0809,-191.2163,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56672; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=708.7521,`position_y`=-494.4869,`position_z`=-213.9441 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,708.7521,-494.4869,-213.9441,0,0,0,0,100,0), +(@PATH,2,706.8069,-515.2225,-215.4603,0,0,0,0,100,0), +(@PATH,3,695.7981,-526.2382,-214.3069,0,0,0,0,100,0), +(@PATH,4,671.7322,-532.863,-210.5322,0,0,0,0,100,0), +(@PATH,5,695.7981,-526.2382,-214.3069,0,0,0,0,100,0), +(@PATH,6,706.8069,-515.2225,-215.4603,0,0,0,0,100,0), +(@PATH,7,708.7521,-494.4869,-213.9441,0,0,0,0,100,0), +(@PATH,8,706.4074,-474.3789,-211.1673,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56673; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=723.8314,`position_y`=-518.3099,`position_z`=-217.6104 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,723.8314,-518.3099,-217.6104,0,0,0,0,100,0), +(@PATH,2,706.7125,-535.8472,-216.7189,0,0,0,0,100,0), +(@PATH,3,685.7861,-543.6451,-211.2004,0,0,0,0,100,0), +(@PATH,4,667.6307,-538.1242,-209.9916,0,0,0,0,100,0), +(@PATH,5,685.7861,-543.6451,-211.2004,0,0,0,0,100,0), +(@PATH,6,706.7125,-535.8472,-216.7189,0,0,0,0,100,0), +(@PATH,7,723.8314,-518.3099,-217.6104,0,0,0,0,100,0), +(@PATH,8,728.2719,-487.4919,-212.95,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56674; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=831.386,`position_y`=-627.8932,`position_z`=-203.1487 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,831.386,-627.8932,-203.1487,0,0,0,0,100,0), +(@PATH,2,856.4564,-617.9056,-202.1571,0,0,0,0,100,0), +(@PATH,3,899.6118,-613.5433,-202.2377,0,0,0,0,100,0), +(@PATH,4,936.2535,-612.5002,-203.6217,0,0,0,0,100,0), +(@PATH,5,975.1815,-641.0467,-201.5775,0,0,0,0,100,0), +(@PATH,6,1002.311,-661.9902,-194.1922,0,0,0,0,100,0), +(@PATH,7,1024.067,-684.3118,-173.4296,0,0,0,0,100,0), +(@PATH,8,1042.016,-695.8206,-163.7581,0,0,0,0,100,0), +(@PATH,9,1058.163,-706.0782,-156.6107,0,0,0,0,100,0), +(@PATH,10,1068.566,-742.8318,-151.7328,0,0,0,0,100,0), +(@PATH,11,1117.097,-744.479,-145.6289,0,0,0,0,100,0), +(@PATH,12,1149.458,-726.4506,-133.8044,0,0,0,0,100,0), +(@PATH,13,1175.513,-702.1757,-130.9873,0,0,0,0,100,0), +(@PATH,14,1200.504,-670.9343,-128.5453,0,0,0,0,100,0), +(@PATH,15,1202.953,-639.3985,-126.1688,0,0,0,0,100,0), +(@PATH,16,1188.303,-614.0296,-121.8816,0,0,0,0,100,0), +(@PATH,17,1164.196,-595.4036,-115.7764,0,0,0,0,100,0), +(@PATH,18,1155.213,-574.8707,-113.3766,0,0,0,0,100,0), +(@PATH,19,1164.196,-595.4036,-115.7764,0,0,0,0,100,0), +(@PATH,20,1188.303,-614.0296,-121.8816,0,0,0,0,100,0), +(@PATH,21,1202.953,-639.3985,-126.1688,0,0,0,0,100,0), +(@PATH,22,1200.504,-670.9343,-128.5453,0,0,0,0,100,0), +(@PATH,23,1175.589,-702.0806,-130.9749,0,0,0,0,100,0), +(@PATH,24,1149.458,-726.4506,-133.8044,0,0,0,0,100,0), +(@PATH,25,1117.097,-744.479,-145.6289,0,0,0,0,100,0), +(@PATH,26,1068.566,-742.8318,-151.7328,0,0,0,0,100,0), +(@PATH,27,1058.163,-706.0782,-156.6107,0,0,0,0,100,0), +(@PATH,28,1042.016,-695.8206,-163.7581,0,0,0,0,100,0), +(@PATH,29,1024.226,-684.4753,-173.2943,0,0,0,0,100,0), +(@PATH,30,1002.311,-661.9902,-194.1922,0,0,0,0,100,0), +(@PATH,31,975.1815,-641.0467,-201.5775,0,0,0,0,100,0), +(@PATH,32,936.2535,-612.5002,-203.6217,0,0,0,0,100,0), +(@PATH,33,899.6118,-613.5433,-202.2377,0,0,0,0,100,0), +(@PATH,34,856.4564,-617.9056,-202.1571,0,0,0,0,100,0), +(@PATH,35,831.386,-627.8932,-203.1487,0,0,0,0,100,0), +(@PATH,36,816.5816,-641.0675,-203.8891,0,0,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56675; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1144.05,`position_y`=-662.6844,`position_z`=-131.4626 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1144.05,-662.6844,-131.4626,0,0,0,0,100,0), +(@PATH,2,1160.286,-696.8795,-132.4863,0,0,0,0,100,0), +(@PATH,3,1129.031,-721.049,-139.5804,0,0,0,0,100,0), +(@PATH,4,1118.512,-712.1383,-144.2585,0,0,0,0,100,0), +(@PATH,5,1104.687,-722.1303,-146.9832,0,0,0,0,100,0), +(@PATH,6,1090.824,-731.3634,-149.9868,0,0,0,0,100,0), +(@PATH,7,1070.791,-717.5623,-153.4831,0,0,0,0,100,0), +(@PATH,8,1080.754,-681.5721,-159.8726,0,0,0,0,100,0), +(@PATH,9,1081.626,-681.3043,-159.6755,0,12000,0,0,100,0), +(@PATH,10,1079.369,-678.5401,-160.8983,0,10000,0,0,100,0), +(@PATH,11,1081.374,-680.3018,-159.9551,0,1000,0,0,100,0), +(@PATH,12,1080.824,-681.4283,-159.8819,0,2000,0,0,100,0), +(@PATH,13,1081.491,-679.0739,-160.1742,0,1000,0,0,100,0), +(@PATH,14,1079.343,-678.3975,-160.9352,0,5000,0,0,100,0), +(@PATH,15,1081.436,-676.3215,-160.7577,0,8000,0,0,100,0), +(@PATH,16,1080.754,-681.5721,-159.8726,0,1000,0,0,100,0), +(@PATH,17,1077.228,-678.6388,-161.4971,0,1000,0,0,100,0), +(@PATH,18,1077.687,-678.7886,-161.3334,0,1000,0,0,100,0), +(@PATH,19,1079.716,-679.3854,-160.6235,0,10000,0,0,100,0), +(@PATH,20,1081.338,-682.8629,-159.4373,0,10000,0,0,100,0), +(@PATH,21,1079.463,-680.3129,-160.5056,0,1000,0,0,100,0), +(@PATH,22,1080.754,-681.5721,-159.8726,0,1000,0,0,100,0), +(@PATH,23,1080.708,-679.2873,-160.3567,0,1000,0,0,100,0), +(@PATH,24,1082.191,-681.9566,-159.3777,0,9000,0,0,100,0), +(@PATH,25,1079.69,-678.5046,-160.8126,0,8000,0,0,100,0), +(@PATH,26,1080.177,-679.1766,-160.5332,0,1000,0,0,100,0), +(@PATH,27,1078.341,-677.3896,-161.4327,0,9000,0,0,100,0), +(@PATH,28,1079.791,-676.366,-161.2243,0,1000,0,0,100,0), +(@PATH,29,1078.341,-677.3896,-161.4327,0,1000,0,0,100,0), +(@PATH,30,1081.163,-683.5833,-159.3395,0,7000,0,0,100,0), +(@PATH,31,1080.636,-682.1011,-159.7975,0,1000,0,0,100,0), +(@PATH,32,1081.985,-678.5395,-160.1417,0,2000,0,0,100,0), +(@PATH,33,1081.526,-679.8784,-159.9983,0,1000,0,0,100,0), +(@PATH,34,1080.778,-681.3652,-159.9082,0,1000,0,0,100,0), +(@PATH,35,1079.221,-677.4147,-161.1729,0,1000,0,0,100,0), +(@PATH,36,1079.501,-678.1235,-160.946,0,2000,0,0,100,0), +(@PATH,37,1080.827,-681.6636,-159.8325,0,6000,0,0,100,0), +(@PATH,38,1085.063,-680.338,-158.8806,0,8000,0,0,100,0), +(@PATH,39,1079.092,-677.261,-161.242,0,1000,0,0,100,0), +(@PATH,40,1079.541,-677.6991,-161.0217,0,1000,0,0,100,0), +(@PATH,41,1081.284,-682.4361,-159.5412,0,2000,0,0,100,0), +(@PATH,42,1080.757,-681.0048,-159.9885,0,1000,0,0,100,0), +(@PATH,43,1083.066,-680.2807,-159.4699,0,6000,0,0,100,0), +(@PATH,44,1081.552,-677.1035,-160.5629,0,1000,0,0,100,0), +(@PATH,45,1081.611,-680.4688,-159.852,0,11000,0,0,100,0), +(@PATH,46,1080.048,-679.4224,-160.5198,0,7000,0,0,100,0), +(@PATH,47,1082.761,-681.9189,-159.2203,0,11000,0,0,100,0), +(@PATH,48,1078.952,-678.8635,-160.9521,0,8000,0,0,100,0), +(@PATH,49,1081.18,-681.5133,-159.7614,0,1000,0,0,100,0), +(@PATH,50,1080.676,-681.3997,-159.9307,0,11000,0,0,100,0), +(@PATH,51,1078.617,-679.6107,-160.8951,0,1000,0,0,100,0), +(@PATH,52,1081.279,-680.4371,-159.9548,0,1000,0,0,100,0), +(@PATH,53,1078.764,-677.3422,-161.3203,0,1000,0,0,100,0), +(@PATH,54,1080.66,-681.4279,-159.9294,0,2000,0,0,100,0), +(@PATH,55,1080.101,-708.452,-154.2289,0,1000,0,0,100,0), +(@PATH,56,1084.528,-731.8951,-151.0118,0,0,0,0,100,0), +(@PATH,57,1093.696,-748.0836,-149.2619,0,0,0,0,100,0), +(@PATH,58,1110.641,-738.1426,-146.5005,0,0,0,0,100,0), +(@PATH,59,1115.694,-716.585,-144.6347,0,0,0,0,100,0), +(@PATH,60,1148.22,-713.5815,-132.988,0,0,0,0,100,0), +(@PATH,61,1161.699,-694.4932,-132.2003,0,0,0,0,100,0), +(@PATH,62,1149.113,-669.7729,-130.3396,0,0,0,0,100,0), +(@PATH,63,1142.684,-647.411,-131.9233,0,0,0,0,100,0), +(@PATH,64,1142.684,-647.411,-131.9233,1.53589,60000,0,0,100,0); + +-- Pathing for Core Hound Entry: 11673 'TDB FORMAT' +SET @NPC := 56676; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=820.1378,`position_y`=-991.096,`position_z`=-207.1345 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,820.1378,-991.096,-207.1345,0,0,0,0,100,0), +(@PATH,2,815.0589,-979.8468,-208.6176,0,0,0,0,100,0), +(@PATH,3,820.1378,-991.096,-207.1345,0,0,0,0,100,0), +(@PATH,4,837.5117,-1001.866,-203.9284,0,0,0,0,100,0), +(@PATH,5,875.2714,-1009.17,-195.7951,0,0,0,0,100,0), +(@PATH,6,884.1406,-1024.13,-192.9333,0,0,0,0,100,0), +(@PATH,7,875.2714,-1009.17,-195.7951,0,0,0,0,100,0), +(@PATH,8,837.5117,-1001.866,-203.9284,0,0,0,0,100,0); + +-- Pathing for Baron Geddon Entry: 12056 'TDB FORMAT' +SET @NPC := 56655; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=747.5466,`position_y`=-981.676,`position_z`=-178.401 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,747.5466,-981.676,-178.401,0,0,1,0,100,0), +(@PATH,2,739.986,-953.2151,-185.7548,0,0,1,0,100,0), +(@PATH,3,716.3201,-910.8809,-193.1546,0,0,1,0,100,0), +(@PATH,4,701.403,-887.8356,-199.5063,0,0,1,0,100,0), +(@PATH,5,675.8235,-847.7932,-208.2585,0,0,1,0,100,0), +(@PATH,6,639.0753,-830.6404,-208.4202,0,0,1,0,100,0), +(@PATH,7,611.1107,-828.0424,-207.401,0,0,1,0,100,0), +(@PATH,8,591.2252,-811.5459,-205.4029,0,0,1,0,100,0), +(@PATH,9,608.8426,-787.6771,-207.4771,0,0,1,0,100,0), +(@PATH,10,643.6417,-778.0462,-208.7169,0,0,1,0,100,0), +(@PATH,11,664.3234,-786.412,-208.9517,0,0,1,0,100,0), +(@PATH,12,661.6707,-816.6882,-208.705,0,0,1,0,100,0), +(@PATH,13,678.5975,-847.099,-208.2891,0,0,1,0,100,0), +(@PATH,14,699.6382,-878.082,-201.5386,0,0,1,0,100,0), +(@PATH,15,718.3248,-907.4992,-193.3159,0,0,1,0,100,0), +(@PATH,16,740.3997,-949.3792,-186.3494,0,0,1,0,100,0), +(@PATH,17,746.6027,-966.5585,-181.5636,0,0,1,0,100,0); + +-- Pathing for Shazzrah Entry: 12264 'TDB FORMAT' +SET @NPC := 56608; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=587.3033,`position_y`=-801.9748,`position_z`=-205.1575 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,587.3033,-801.9748,-205.1575,0,0,0,0,100,0), +(@PATH,2,588.8104,-806.2665,-205.0612,0,0,0,0,100,0), +(@PATH,3,587.384,-811.3304,-205.1067,0,0,0,0,100,0), +(@PATH,4,583.1524,-811.6958,-205.1573,0,0,0,0,100,0), +(@PATH,5,579.2105,-806.6736,-205.2536,0,0,0,0,100,0), +(@PATH,6,579.0768,-804.3456,-205.2396,0,0,0,0,100,0), +(@PATH,7,580.0167,-800.6034,-205.4058,0,0,0,0,100,0), +(@PATH,8,583.49,-799.7552,-205.3562,0,0,0,0,100,0); + +-- Pathing for Lucifron Entry: 12118 'TDB FORMAT' +SET @NPC := 56605; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1037.022,`position_y`=-986.3419,`position_z`=-181.5163 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1037.022,-986.3419,-181.5163,0,0,0,0,100,0), +(@PATH,2,1053.15,-990.7546,-182.6615,0,0,0,0,100,0), +(@PATH,3,1070.411,-1006.765,-185.5444,0,0,0,0,100,0), +(@PATH,4,1053.299,-990.8936,-182.7192,0,0,0,0,100,0), +(@PATH,5,1037.022,-986.3419,-181.5163,0,0,0,0,100,0), +(@PATH,6,1014.705,-978.6508,-181.182,0,0,0,0,100,0), +(@PATH,7,1007.782,-958.0884,-180.174,0,0,0,0,100,0), +(@PATH,8,1000.203,-955.4069,-179.5825,0,0,0,0,100,0), +(@PATH,9,1007.782,-958.0884,-180.174,0,0,0,0,100,0), +(@PATH,10,1014.45,-978.5632,-181.1854,0,0,0,0,100,0); +-- Lucifron formation fixup +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (56605); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(56605,56605,0,0,2,0,0), +(56605,56606,4,90,2,3,8), +(56605,56607,4,270,2,3,8); +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1035.672,`position_y`=-989.7419,`position_z`=-181.7763 WHERE `guid`=56606; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1038.512,`position_y`=-982.9519,`position_z`=-181.2578 WHERE `guid`=56607; +DELETE FROM `waypoint_data` WHERE `id` IN (566060,566070); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56656; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1028.491,`position_y`=-908.0417,`position_z`=-161.3687 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1028.491,-908.0417,-161.3687,0,0,1,0,100,0), +(@PATH,2,1041.238,-888.9818,-158.3343,0,0,1,0,100,0), +(@PATH,3,1061.057,-900.0848,-159.2599,0,0,1,0,100,0), +(@PATH,4,1071.243,-893.1624,-156.4947,0,0,1,0,100,0), +(@PATH,5,1041.238,-888.9818,-158.3343,0,0,1,0,100,0), +(@PATH,6,1028.491,-908.0417,-161.3687,0,0,1,0,100,0), +(@PATH,7,1008.565,-890.0919,-165.3463,0,0,1,0,100,0), +(@PATH,8,980.3823,-904.361,-171.1376,0,0,1,0,100,0), +(@PATH,9,966.753,-899.8453,-175.7252,0,0,1,0,100,0), +(@PATH,10,957.4196,-885.538,-173.7588,0,0,1,0,100,0), +(@PATH,11,980.3823,-904.361,-171.1376,0,0,1,0,100,0), +(@PATH,12,1008.565,-890.0919,-165.3463,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56657; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=748.5151,`position_y`=-725.4263,`position_z`=-211.9395 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,748.5151,-725.4263,-211.9395,0,0,1,0,100,0), +(@PATH,2,739.7422,-763.3509,-218.9724,0,0,1,0,100,0), +(@PATH,3,737.3899,-809.9995,-225.6305,0,0,1,0,100,0), +(@PATH,4,745.2436,-850.8501,-223.6281,0,0,1,0,100,0), +(@PATH,5,737.3899,-809.9995,-225.6305,0,0,1,0,100,0), +(@PATH,6,739.7422,-763.3509,-218.9724,0,0,1,0,100,0), +(@PATH,7,748.5151,-725.4263,-211.9395,0,0,1,0,100,0), +(@PATH,8,764.8676,-686.4996,-212.5972,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56658; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=975.5094,`position_y`=-589.3787,`position_z`=-203.781 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,975.5094,-589.3787,-203.781,0,0,1,0,100,0), +(@PATH,2,958.4057,-595.7327,-203.9931,0,0,1,0,100,0), +(@PATH,3,950.7159,-608.6719,-202.882,0,0,1,0,100,0), +(@PATH,4,957.0149,-625.9316,-203.259,0,0,1,0,100,0), +(@PATH,5,980.0177,-632.2986,-203.5142,0,0,1,0,100,0), +(@PATH,6,990.2437,-625.777,-200.7675,0,0,1,0,100,0), +(@PATH,7,998.6928,-609.5692,-202.0619,0,0,1,0,100,0), +(@PATH,8,989.8893,-595.9269,-203.2261,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56659; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=864.6398,`position_y`=-983.1211,`position_z`=-199.6699 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,864.6398,-983.1211,-199.6699,0,0,1,0,100,0), +(@PATH,2,875.8871,-1014.841,-194.9043,0,0,1,0,100,0), +(@PATH,3,891.3988,-1050.081,-187.1399,0,0,1,0,100,0), +(@PATH,4,891.1622,-1067.062,-182.6621,0,0,1,0,100,0), +(@PATH,5,883.1496,-1090.733,-176.0342,0,0,1,0,100,0), +(@PATH,6,870.0406,-1110.407,-169.6678,0,0,1,0,100,0), +(@PATH,7,855.7172,-1121.873,-161.9807,0,0,1,0,100,0), +(@PATH,8,839.0113,-1128.492,-156.5452,0,0,1,0,100,0), +(@PATH,9,819.8719,-1143.5,-153.6145,0,0,1,0,100,0), +(@PATH,10,809.326,-1150.683,-152.5631,0,0,1,0,100,0), +(@PATH,11,791.812,-1152.45,-150.4214,0,0,1,0,100,0), +(@PATH,12,787.2233,-1123.192,-150.5524,0,0,1,0,100,0), +(@PATH,13,757.2313,-1129.672,-145.1273,0,0,1,0,100,0), +(@PATH,14,723.393,-1106.211,-143.0938,0,0,1,0,100,0), +(@PATH,15,701.5763,-1137.426,-135.6903,0,0,1,0,100,0), +(@PATH,16,666.1591,-1162.693,-126.0165,0,0,1,0,100,0), +(@PATH,17,693.4008,-1186.742,-120.9137,0,0,1,0,100,0), +(@PATH,18,717.1637,-1193.438,-118.9491,0,0,1,0,100,0), +(@PATH,19,736.2715,-1211.634,-118.8998,0,0,1,0,100,0), +(@PATH,20,759.3818,-1228.879,-119.2757,0,0,1,0,100,0), +(@PATH,21,736.2715,-1211.634,-118.8998,0,0,1,0,100,0), +(@PATH,22,717.1637,-1193.438,-118.9491,0,0,1,0,100,0), +(@PATH,23,693.4008,-1186.742,-120.9137,0,0,1,0,100,0), +(@PATH,24,666.1591,-1162.693,-126.0165,0,0,1,0,100,0), +(@PATH,25,701.5763,-1137.426,-135.6903,0,0,1,0,100,0), +(@PATH,26,723.393,-1106.211,-143.0938,0,0,1,0,100,0), +(@PATH,27,757.2313,-1129.672,-145.1273,0,0,1,0,100,0), +(@PATH,28,787.2233,-1123.192,-150.5524,0,0,1,0,100,0), +(@PATH,29,791.812,-1152.45,-150.4214,0,0,1,0,100,0), +(@PATH,30,809.326,-1150.683,-152.5631,0,0,1,0,100,0), +(@PATH,31,819.8719,-1143.5,-153.6145,0,0,1,0,100,0), +(@PATH,32,839.0113,-1128.492,-156.5452,0,0,1,0,100,0), +(@PATH,33,855.7172,-1121.873,-161.9807,0,0,1,0,100,0), +(@PATH,34,870.0406,-1110.407,-169.6678,0,0,1,0,100,0), +(@PATH,35,883.1496,-1090.733,-176.0342,0,0,1,0,100,0), +(@PATH,36,891.1622,-1067.062,-182.6621,0,0,1,0,100,0), +(@PATH,37,891.3988,-1050.081,-187.1399,0,0,1,0,100,0), +(@PATH,38,875.8871,-1014.841,-194.9043,0,0,1,0,100,0), +(@PATH,39,864.6398,-983.1211,-199.6699,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56660; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=912.38,`position_y`=-812.9961,`position_z`=-227.3731 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,912.38,-812.9961,-227.3731,0,0,1,0,100,0), +(@PATH,2,917.8469,-848.5494,-219.4701,0,0,1,0,100,0), +(@PATH,3,913.7874,-875.5369,-214.22,0,0,1,0,100,0), +(@PATH,4,890.5936,-905.0054,-222.0683,0,0,1,0,100,0), +(@PATH,5,860.6026,-921.1229,-225.7609,0,0,1,0,100,0), +(@PATH,6,816.981,-920.8954,-225.8454,0,0,1,0,100,0), +(@PATH,7,782.662,-911.1868,-222.6471,0,0,1,0,100,0), +(@PATH,8,816.9766,-920.8942,-225.8542,0,0,1,0,100,0), +(@PATH,9,860.6026,-921.1229,-225.7609,0,0,1,0,100,0), +(@PATH,10,890.5936,-905.0054,-222.0683,0,0,1,0,100,0), +(@PATH,11,913.7874,-875.5369,-214.22,0,0,1,0,100,0), +(@PATH,12,917.8469,-848.5494,-219.4701,0,0,1,0,100,0), +(@PATH,13,912.38,-812.9961,-227.3731,0,0,1,0,100,0), +(@PATH,14,909.2687,-788.947,-226.9377,0,0,1,0,100,0), +(@PATH,15,895.7159,-764.4568,-224.3548,0,0,1,0,100,0), +(@PATH,16,879.3519,-761.3517,-224.0491,0,0,1,0,100,0), +(@PATH,17,865.0396,-765.1099,-224.75,0,0,1,0,100,0), +(@PATH,18,884.0205,-803.6951,-226.6926,0,0,1,0,100,0), +(@PATH,19,889.6862,-825.1835,-227.3351,0,0,1,0,100,0), +(@PATH,20,865.6118,-779.7151,-225.9819,0,0,1,0,100,0), +(@PATH,21,865.0396,-765.1099,-224.75,0,0,1,0,100,0), +(@PATH,22,879.3519,-761.3517,-224.0491,0,0,1,0,100,0), +(@PATH,23,895.7159,-764.4568,-224.3548,0,0,1,0,100,0), +(@PATH,24,909.2687,-788.947,-226.9377,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56661; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1031.916,`position_y`=-889.574,`position_z`=-160.0134 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1031.916,-889.574,-160.0134,0,0,1,0,100,0), +(@PATH,2,1069.734,-893.855,-156.7931,0,0,1,0,100,0), +(@PATH,3,1031.916,-889.574,-160.0134,0,0,1,0,100,0), +(@PATH,4,996.8139,-897.9012,-168.1947,0,0,1,0,100,0), +(@PATH,5,962.845,-884.6795,-173.6825,0,0,1,0,100,0), +(@PATH,6,987.062,-893.2951,-169.7379,0,0,1,0,100,0), +(@PATH,7,1001.684,-886.9771,-167.0547,0,0,1,0,100,0), +(@PATH,8,1008.282,-863.9785,-164.7876,0,0,1,0,100,0), +(@PATH,9,987.062,-893.2951,-169.7379,0,0,1,0,100,0), +(@PATH,10,962.845,-884.6795,-173.6825,0,0,1,0,100,0), +(@PATH,11,996.8139,-897.9012,-168.1947,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56662; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1068.962,`position_y`=-696.559,`position_z`=-157.781 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1068.962,-696.559,-157.781,0,0,1,0,100,0), +(@PATH,2,1053.966,-737.0459,-151.7794,0,0,1,0,100,0), +(@PATH,3,1059.624,-760.5685,-151.586,0,0,1,0,100,0), +(@PATH,4,1084.683,-739.8831,-150.7728,0,0,1,0,100,0), +(@PATH,5,1099.292,-778.5201,-151.1692,0,0,1,0,100,0), +(@PATH,6,1125.305,-739.6833,-142.7612,0,0,1,0,100,0), +(@PATH,7,1159.508,-719.2535,-133.2384,0,0,1,0,100,0), +(@PATH,8,1192.168,-686.1762,-128.7967,0,0,1,0,100,0), +(@PATH,9,1211.332,-653.7628,-127.9139,0,0,1,0,100,0), +(@PATH,10,1187.516,-611.0389,-121.1588,0,0,1,0,100,0), +(@PATH,11,1148.847,-599.9906,-114.898,0,0,1,0,100,0), +(@PATH,12,1187.516,-611.0389,-121.1588,0,0,1,0,100,0), +(@PATH,13,1211.332,-653.7628,-127.9139,0,0,1,0,100,0), +(@PATH,14,1192.168,-686.1762,-128.7967,0,0,1,0,100,0), +(@PATH,15,1159.508,-719.2535,-133.2384,0,0,1,0,100,0), +(@PATH,16,1125.392,-739.6312,-142.7302,0,0,1,0,100,0), +(@PATH,17,1099.292,-778.5201,-151.1692,0,0,1,0,100,0), +(@PATH,18,1084.683,-739.8831,-150.7728,0,0,1,0,100,0), +(@PATH,19,1059.654,-760.5442,-151.592,0,0,1,0,100,0), +(@PATH,20,1053.966,-737.0459,-151.7794,0,0,1,0,100,0), +(@PATH,21,1068.962,-696.559,-157.781,0,0,1,0,100,0), +(@PATH,22,1046.413,-674.9515,-169.5157,0,0,1,0,100,0), +(@PATH,23,1023.84,-646.451,-189.8513,0,0,1,0,100,0), +(@PATH,24,1046.413,-674.9515,-169.5157,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56664; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=759.9225,`position_y`=-689.7131,`position_z`=-212.5623 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,759.9225,-689.7131,-212.5623,0,0,1,0,100,0), +(@PATH,2,779.0322,-680.1849,-213.9095,0,0,1,0,100,0), +(@PATH,3,800.4368,-665.5578,-208.9407,0,0,1,0,100,0), +(@PATH,4,807.4164,-656.269,-206.1155,0,0,1,0,100,0), +(@PATH,5,779.0322,-680.1849,-213.9095,0,0,1,0,100,0), +(@PATH,6,759.9225,-689.7131,-212.5623,0,0,1,0,100,0), +(@PATH,7,753.9745,-704.1632,-211.753,0,0,1,0,100,0), +(@PATH,8,758.8966,-684.4725,-212.381,0,0,1,0,100,0), +(@PATH,9,780.8896,-669.565,-211.4591,0,0,1,0,100,0), +(@PATH,10,791.4582,-652.981,-207.6324,0,0,1,0,100,0), +(@PATH,11,758.8966,-684.4725,-212.381,0,0,1,0,100,0), +(@PATH,12,753.9745,-704.1632,-211.753,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56665; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1035.173,`position_y`=-854.7958,`position_z`=-158.8589 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1035.173,-854.7958,-158.8589,0,0,1,0,100,0), +(@PATH,2,1057.385,-862.5274,-159.6177,0,0,1,0,100,0), +(@PATH,3,995.0676,-853.4235,-165.4317,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56740; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=667.9337,`position_y`=-1066.047,`position_z`=-188.3889 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,667.9337,-1066.047,-188.3889,0,0,1,0,100,0), +(@PATH,2,619.8726,-1066.64,-199.7958,0,0,1,0,100,0), +(@PATH,3,613.3337,-1099.887,-198.7582,0,0,1,0,100,0), +(@PATH,4,591.3667,-1135.207,-200.2088,0,0,1,0,100,0), +(@PATH,5,578.8029,-1173.733,-194.7558,0,0,1,0,100,0), +(@PATH,6,591.5503,-1192.438,-195.7943,0,0,1,0,100,0), +(@PATH,7,608.195,-1194.054,-195.7651,0,0,1,0,100,0), +(@PATH,8,623.8442,-1186.21,-195.8348,0,0,1,0,100,0), +(@PATH,9,628.4896,-1171.869,-194.5435,0,0,1,0,100,0), +(@PATH,10,628.3709,-1151.011,-197.0152,0,0,1,0,100,0), +(@PATH,11,626.806,-1131.724,-200.8709,0,0,1,0,100,0), +(@PATH,12,645.6395,-1106.676,-196.4797,0,0,1,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56741; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=1055.823,`position_y`=-833.2653,`position_z`=-154.468 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1055.823,-833.2653,-154.468,0,0,0,0,100,0), +(@PATH,2,1032.143,-826.1788,-154.2626,0,0,0,0,100,0), +(@PATH,3,1015.666,-808.7546,-148.7213,0,0,0,0,100,0), +(@PATH,4,1032.143,-826.1788,-154.2626,0,0,0,0,100,0); + +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56789; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=679.1953,`position_y`=-847.3836,`position_z`=-208.2482 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,679.1953,-847.3836,-208.2482,0,0,1,0,100,0), +(@PATH,2,676.7046,-829.8509,-208.8353,0,0,1,0,100,0), +(@PATH,3,665.002,-813.2372,-208.774,0,0,1,0,100,0), +(@PATH,4,681.6021,-776.7833,-209.1657,0,0,1,0,100,0), +(@PATH,5,686.1985,-738.5436,-209.2948,0,0,1,0,100,0), +(@PATH,6,707.9111,-711.0708,-209.5187,0,0,1,0,100,0), +(@PATH,7,708.2624,-692.8405,-209.5718,0,0,1,0,100,0), +(@PATH,8,690.2739,-662.6287,-209.6574,0,0,1,0,100,0), +(@PATH,9,708.2625,-692.8368,-209.5175,0,0,1,0,100,0), +(@PATH,10,707.9111,-711.0708,-209.5187,0,0,1,0,100,0), +(@PATH,11,686.1985,-738.5436,-209.2948,0,0,1,0,100,0), +(@PATH,12,681.6021,-776.7833,-209.1657,0,0,1,0,100,0), +(@PATH,13,665.002,-813.2372,-208.774,0,0,1,0,100,0), +(@PATH,14,676.7046,-829.8509,-208.8353,0,0,1,0,100,0), +(@PATH,15,679.1953,-847.3836,-208.2482,0,0,1,0,100,0), +(@PATH,16,696.5482,-855.4606,-206.0954,0,0,1,0,100,0), +(@PATH,17,710.7119,-882.6242,-198.953,0,0,1,0,100,0), +(@PATH,18,714.8118,-907.6405,-193.7685,0,0,1,0,100,0), +(@PATH,19,735.3042,-937.3447,-188.4066,0,0,1,0,100,0), +(@PATH,20,714.8118,-907.6405,-193.7685,0,0,1,0,100,0), +(@PATH,21,710.7119,-882.6242,-198.953,0,0,1,0,100,0), +(@PATH,22,697.0541,-866.1818,-204.0854,0,0,1,0,100,0); From 5edc557a8d7ea7418a98da5293a16dca2b789799 Mon Sep 17 00:00:00 2001 From: pete318 Date: Sun, 11 Oct 2015 19:28:27 +0100 Subject: [PATCH 145/524] Resolve coverity #1023086 Correctly destroy AH pointer and return error to user in unlikely event auctioneer is invalid --- src/server/game/Handlers/AuctionHouseHandler.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 0293901c9e..8ecf86680c 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -265,6 +265,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) if (!auctioneerData) { TC_LOG_ERROR("misc", "Data for auctioneer not found (%s)", auctioneer.ToString().c_str()); + SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR); + delete AH; return; } @@ -272,6 +274,8 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) if (!auctioneerInfo) { TC_LOG_ERROR("misc", "Non existing auctioneer (%s)", auctioneer.ToString().c_str()); + SendAuctionCommandResult(0, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR); + delete AH; return; } From d70af4758504f75f731c35939bb98cfd6e617073 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 11 Oct 2015 21:54:31 +0200 Subject: [PATCH 146/524] DB/SAI: Fix teleport to Molten core By Malcrom --- sql/updates/world/2015_10_11_04_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_11_04_world.sql diff --git a/sql/updates/world/2015_10_11_04_world.sql b/sql/updates/world/2015_10_11_04_world.sql new file mode 100644 index 0000000000..17664992c9 --- /dev/null +++ b/sql/updates/world/2015_10_11_04_world.sql @@ -0,0 +1,2 @@ +-- Lothos Riftwaker SAI Spell fix +UPDATE `smart_scripts` SET `action_param2`=2 WHERE `entryorguid`=14387; From 7efe52fab7db1791f3e96170cf242568ad779b25 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 12 Oct 2015 09:39:04 +0200 Subject: [PATCH 147/524] DB/Misc: Fix guid --- sql/updates/world/2015_10_11_02_world.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/updates/world/2015_10_11_02_world.sql b/sql/updates/world/2015_10_11_02_world.sql index 5528244f80..0a9d014d76 100644 --- a/sql/updates/world/2015_10_11_02_world.sql +++ b/sql/updates/world/2015_10_11_02_world.sql @@ -1,5 +1,5 @@ -- Gameobject list for Molten Core -SET @OGUID := 5514; +SET @OGUID := 56280; DELETE FROM `gameobject` WHERE `guid` IN (43162,43163,43164,43165,35665); DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID AND @OGUID+14; INSERT INTO `gameobject` (`guid`,`id`,`map`,`zoneId`,`areaId`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES From 67049818db11e627c726623d5fa5034a0af9f18d Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 12 Oct 2015 09:52:39 +0200 Subject: [PATCH 148/524] DB/Misc: Fix startup errors --- sql/updates/world/2015_10_12_00_world.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 sql/updates/world/2015_10_12_00_world.sql diff --git a/sql/updates/world/2015_10_12_00_world.sql b/sql/updates/world/2015_10_12_00_world.sql new file mode 100644 index 0000000000..5277e7ea6e --- /dev/null +++ b/sql/updates/world/2015_10_12_00_world.sql @@ -0,0 +1,16 @@ +-- +DELETE FROM `gameobject` WHERE `guid` IN (5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528); +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 +(5514, 191517, 571, 0, 0, 1, 1, 6255.64, -1185.84, 425.924, 2.12057, 0, 0, 0, 1, 300, 100, 1, 0); +(5515, 1732, 0, 0, 0, 1, 1, -9255, -2735, 89.702, 0.436, 0, 0, 0.216439, 0.976296, 900, 100, 1, 0); +(5516, 1732, 0, 0, 0, 1, 1, -3149, -3275, 63.632, 0.262, 0, 0, 0, 0, 900, 100, 1, 0); +(5518, 1732, 0, 0, 0, 1, 1, -9853.86, 1406.45, 38.028, 1.826, 0, 0, 0.95848, 0.285161, 900, 100, 1, 0); +(5519, 1732, 0, 0, 0, 1, 1, -9835.8, 1394.81, 38.405, 0.106, 0, 0, 0, 0, 900, 100, 1, 0); +(5520, 1732, 0, 0, 0, 1, 1, -9854.17, 1391.69, 38.7294, 3.244, 0, 0, 0, 0, 900, 100, 1, 0); +(5522, 1732, 1, 0, 0, 1, 1, -1521, 1964.46, 67.374, 1.85, 0, 0, 0.798635, 0.601815, 900, 100, 1, 0); +(5523, 1732, 0, 0, 0, 1, 1, -9847.12, 1399.89, 37.1306, 3.397, 0, 0, 0.95848, 0.285161, 900, 100, 1, 0); +(5524, 1732, 0, 0, 0, 1, 1, -1123, -1277, 66.215, 3.817, 0, 0, 0.943491, -0.331398, 900, 100, 1, 0); +(5525, 1732, 1, 0, 0, 1, 1, 2508.13, -1446, 172.044, -2, 0, 0, 0, 0, 900, 100, 1, 0); +(5526, 2054, 0, 0, 0, 1, 1, -8850, -1905, 125.96, 4.143, 0, 0, 0, 0, 900, 100, 1, 0); +(5527, 1732, 0, 0, 0, 1, 1, -9828, 1415.7, 37.242, 2.663, 0, 0, 0, 0, 900, 100, 1, 0); +(5528, 1732, 0, 0, 0, 1, 1, -9843, 1386.87, 39.012, 4.783, 0, 0, 0, 0, 900, 100, 1, 0); From 9b792ec481f378a4b44bffa9b8ad9b4e6e443cad Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 12 Oct 2015 10:17:22 +0200 Subject: [PATCH 149/524] Update 2015_10_12_00_world.sql --- sql/updates/world/2015_10_12_00_world.sql | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sql/updates/world/2015_10_12_00_world.sql b/sql/updates/world/2015_10_12_00_world.sql index 5277e7ea6e..d169863a95 100644 --- a/sql/updates/world/2015_10_12_00_world.sql +++ b/sql/updates/world/2015_10_12_00_world.sql @@ -1,16 +1,16 @@ -- DELETE FROM `gameobject` WHERE `guid` IN (5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528); 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 -(5514, 191517, 571, 0, 0, 1, 1, 6255.64, -1185.84, 425.924, 2.12057, 0, 0, 0, 1, 300, 100, 1, 0); -(5515, 1732, 0, 0, 0, 1, 1, -9255, -2735, 89.702, 0.436, 0, 0, 0.216439, 0.976296, 900, 100, 1, 0); -(5516, 1732, 0, 0, 0, 1, 1, -3149, -3275, 63.632, 0.262, 0, 0, 0, 0, 900, 100, 1, 0); -(5518, 1732, 0, 0, 0, 1, 1, -9853.86, 1406.45, 38.028, 1.826, 0, 0, 0.95848, 0.285161, 900, 100, 1, 0); -(5519, 1732, 0, 0, 0, 1, 1, -9835.8, 1394.81, 38.405, 0.106, 0, 0, 0, 0, 900, 100, 1, 0); -(5520, 1732, 0, 0, 0, 1, 1, -9854.17, 1391.69, 38.7294, 3.244, 0, 0, 0, 0, 900, 100, 1, 0); -(5522, 1732, 1, 0, 0, 1, 1, -1521, 1964.46, 67.374, 1.85, 0, 0, 0.798635, 0.601815, 900, 100, 1, 0); -(5523, 1732, 0, 0, 0, 1, 1, -9847.12, 1399.89, 37.1306, 3.397, 0, 0, 0.95848, 0.285161, 900, 100, 1, 0); -(5524, 1732, 0, 0, 0, 1, 1, -1123, -1277, 66.215, 3.817, 0, 0, 0.943491, -0.331398, 900, 100, 1, 0); -(5525, 1732, 1, 0, 0, 1, 1, 2508.13, -1446, 172.044, -2, 0, 0, 0, 0, 900, 100, 1, 0); -(5526, 2054, 0, 0, 0, 1, 1, -8850, -1905, 125.96, 4.143, 0, 0, 0, 0, 900, 100, 1, 0); -(5527, 1732, 0, 0, 0, 1, 1, -9828, 1415.7, 37.242, 2.663, 0, 0, 0, 0, 900, 100, 1, 0); +(5514, 191517, 571, 0, 0, 1, 1, 6255.64, -1185.84, 425.924, 2.12057, 0, 0, 0, 1, 300, 100, 1, 0), +(5515, 1732, 0, 0, 0, 1, 1, -9255, -2735, 89.702, 0.436, 0, 0, 0.216439, 0.976296, 900, 100, 1, 0), +(5516, 1732, 0, 0, 0, 1, 1, -3149, -3275, 63.632, 0.262, 0, 0, 0, 0, 900, 100, 1, 0), +(5518, 1732, 0, 0, 0, 1, 1, -9853.86, 1406.45, 38.028, 1.826, 0, 0, 0.95848, 0.285161, 900, 100, 1, 0), +(5519, 1732, 0, 0, 0, 1, 1, -9835.8, 1394.81, 38.405, 0.106, 0, 0, 0, 0, 900, 100, 1, 0), +(5520, 1732, 0, 0, 0, 1, 1, -9854.17, 1391.69, 38.7294, 3.244, 0, 0, 0, 0, 900, 100, 1, 0), +(5522, 1732, 1, 0, 0, 1, 1, -1521, 1964.46, 67.374, 1.85, 0, 0, 0.798635, 0.601815, 900, 100, 1, 0), +(5523, 1732, 0, 0, 0, 1, 1, -9847.12, 1399.89, 37.1306, 3.397, 0, 0, 0.95848, 0.285161, 900, 100, 1, 0), +(5524, 1732, 0, 0, 0, 1, 1, -1123, -1277, 66.215, 3.817, 0, 0, 0.943491, -0.331398, 900, 100, 1, 0), +(5525, 1732, 1, 0, 0, 1, 1, 2508.13, -1446, 172.044, -2, 0, 0, 0, 0, 900, 100, 1, 0), +(5526, 2054, 0, 0, 0, 1, 1, -8850, -1905, 125.96, 4.143, 0, 0, 0, 0, 900, 100, 1, 0), +(5527, 1732, 0, 0, 0, 1, 1, -9828, 1415.7, 37.242, 2.663, 0, 0, 0, 0, 900, 100, 1, 0), (5528, 1732, 0, 0, 0, 1, 1, -9843, 1386.87, 39.012, 4.783, 0, 0, 0, 0, 900, 100, 1, 0); From 2ebf068fc75476ec0d00caee0194d5c798d79775 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Mon, 12 Oct 2015 16:36:00 +0200 Subject: [PATCH 150/524] Core/BG fix .character changefaction pvpstats victories amount --- sql/base/characters_database.sql | 3 ++- .../characters/2015_10_12_00_characters.sql | 17 ++++++++++++ .../Implementation/CharacterDatabase.cpp | 2 +- .../game/Battlegrounds/Battleground.cpp | 27 ++++++++++--------- 4 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 sql/updates/characters/2015_10_12_00_characters.sql diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 9599070a6a..8ecf61f546 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2413,6 +2413,7 @@ DROP TABLE IF EXISTS `pvpstats_players`; CREATE TABLE `pvpstats_players` ( `battleground_id` bigint(20) unsigned NOT NULL, `character_guid` int(10) unsigned NOT NULL, + `winner` bit(1) NOT NULL, `score_killing_blows` mediumint(8) unsigned NOT NULL, `score_deaths` mediumint(8) unsigned NOT NULL, `score_honorable_kills` mediumint(8) unsigned NOT NULL, @@ -2510,7 +2511,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql', '16842FDD7E8547F2260D3312F53EFF8761EFAB35', 'ARCHIVED', '2015-10-06 16:06:38', 0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql', '16842FDD7E8547F2260D3312F53EFF8761EFAB35', 'ARCHIVED', '2015-10-06 16:06:38', 0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/2015_10_12_00_characters.sql b/sql/updates/characters/2015_10_12_00_characters.sql new file mode 100644 index 0000000000..d7d4fb90f0 --- /dev/null +++ b/sql/updates/characters/2015_10_12_00_characters.sql @@ -0,0 +1,17 @@ +-- Add new winner field, bound to player +ALTER TABLE `pvpstats_players` + ADD COLUMN `winner` BIT(1) NOT NULL AFTER `character_guid`; + +-- Resolve horde players victories +UPDATE `pvpstats_players` SET `winner` = 1 WHERE `battleground_id` IN ( + SELECT `id` FROM `pvpstats_battlegrounds` WHERE `winner_faction` = 0 +) AND `character_guid` IN ( + SELECT `guid` FROM `characters` WHERE `race` IN (2, 5, 6, 8, 9, 10) +); + +-- Resolve alliance players victories +UPDATE `pvpstats_players` SET `winner` = 1 WHERE `battleground_id` IN ( + SELECT `id` FROM `pvpstats_battlegrounds` WHERE `winner_faction` = 1 +) AND `character_guid` IN ( + SELECT `guid` FROM `characters` WHERE `race` IN (1, 3, 4, 7, 11, 22) +); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 14e7571dd4..b41ba41bcf 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -603,7 +603,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() // PvPstats PrepareStatement(CHAR_SEL_PVPSTATS_MAXID, "SELECT MAX(id) FROM pvpstats_battlegrounds", CONNECTION_SYNCH); PrepareStatement(CHAR_INS_PVPSTATS_BATTLEGROUND, "INSERT INTO pvpstats_battlegrounds (id, winner_faction, bracket_id, type, date) VALUES (?, ?, ?, ?, NOW())", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_PVPSTATS_PLAYER, "INSERT INTO pvpstats_players (battleground_id, character_guid, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_PVPSTATS_PLAYER, "INSERT INTO pvpstats_players (battleground_id, character_guid, winner, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PVPSTATS_FACTIONS_OVERALL, "SELECT winner_faction, COUNT(*) AS count FROM pvpstats_battlegrounds WHERE DATEDIFF(NOW(), date) < 7 GROUP BY winner_faction ORDER BY winner_faction ASC", CONNECTION_SYNCH); // QuestTracker diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index ad8a7b9e72..76e1a7f922 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -784,19 +784,20 @@ void Battleground::EndBattleground(uint32 winner) stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_PLAYER); BattlegroundScoreMap::const_iterator score = PlayerScores.find(player->GetGUID().GetCounter()); - stmt->setUInt32(0, battlegroundId); - stmt->setUInt32(1, player->GetGUID().GetCounter()); - stmt->setUInt32(2, score->second->GetKillingBlows()); - stmt->setUInt32(3, score->second->GetDeaths()); - stmt->setUInt32(4, score->second->GetHonorableKills()); - stmt->setUInt32(5, score->second->GetBonusHonor()); - stmt->setUInt32(6, score->second->GetDamageDone()); - stmt->setUInt32(7, score->second->GetHealingDone()); - stmt->setUInt32(8, score->second->GetAttr1()); - stmt->setUInt32(9, score->second->GetAttr2()); - stmt->setUInt32(10, score->second->GetAttr3()); - stmt->setUInt32(11, score->second->GetAttr4()); - stmt->setUInt32(12, score->second->GetAttr5()); + stmt->setUInt32(0, battlegroundId); + stmt->setUInt32(1, player->GetGUID().GetCounter()); + stmt->setBool (2, team == winner); + stmt->setUInt32(3, score->second->GetKillingBlows()); + stmt->setUInt32(4, score->second->GetDeaths()); + stmt->setUInt32(5, score->second->GetHonorableKills()); + stmt->setUInt32(6, score->second->GetBonusHonor()); + stmt->setUInt32(7, score->second->GetDamageDone()); + stmt->setUInt32(8, score->second->GetHealingDone()); + stmt->setUInt32(9, score->second->GetAttr1()); + stmt->setUInt32(10, score->second->GetAttr2()); + stmt->setUInt32(11, score->second->GetAttr3()); + stmt->setUInt32(12, score->second->GetAttr4()); + stmt->setUInt32(13, score->second->GetAttr5()); CharacterDatabase.Execute(stmt); } From d7cb84f6cddb56bc818b2bf30d3318d052039540 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Thu, 8 Oct 2015 14:13:28 +0200 Subject: [PATCH 151/524] Core/Battlegrounds: implment even BG teams configuration --- .../game/Battlegrounds/Battleground.cpp | 52 +++++++++++-------- .../game/Battlegrounds/BattlegroundQueue.cpp | 29 +++++++++-- .../game/Battlegrounds/BattlegroundQueue.h | 7 +++ src/server/worldserver/worldserver.conf.dist | 1 + 4 files changed, 64 insertions(+), 25 deletions(-) diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index ad8a7b9e72..0959744382 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1165,48 +1165,58 @@ void Battleground::RemoveFromBGFreeSlotQueue() // returns the number how many players can join battleground to MaxPlayersPerTeam uint32 Battleground::GetFreeSlotsForTeam(uint32 Team) const { - // if BG is starting ... invite anyone - if (GetStatus() == STATUS_WAIT_JOIN) + // if BG is starting and CONFIG_BATTLEGROUND_INVITATION_TYPE == BG_QUEUE_INVITATION_TYPE_NO_BALANCE, invite anyone + if (GetStatus() == STATUS_WAIT_JOIN && sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_NO_BALANCE) return (GetInvitedCount(Team) < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - GetInvitedCount(Team) : 0; - // if BG is already started .. do not allow to join too much players of one faction - uint32 otherTeam; - uint32 otherIn; + + // if BG is already started or CONFIG_BATTLEGROUND_INVITATION_TYPE != BG_QUEUE_INVITATION_TYPE_NO_BALANCE, do not allow to join too much players of one faction + uint32 otherTeamInvitedCount; + uint32 thisTeamInvitedCount; + uint32 otherTeamPlayersCount; + uint32 thisTeamPlayersCount; + if (Team == ALLIANCE) { - otherTeam = GetInvitedCount(HORDE); - otherIn = GetPlayersCountByTeam(HORDE); + thisTeamInvitedCount = GetInvitedCount(ALLIANCE); + otherTeamInvitedCount = GetInvitedCount(HORDE); + thisTeamPlayersCount = GetPlayersCountByTeam(ALLIANCE); + otherTeamPlayersCount = GetPlayersCountByTeam(HORDE); } else { - otherTeam = GetInvitedCount(ALLIANCE); - otherIn = GetPlayersCountByTeam(ALLIANCE); + thisTeamInvitedCount = GetInvitedCount(HORDE); + otherTeamInvitedCount = GetInvitedCount(ALLIANCE); + thisTeamPlayersCount = GetPlayersCountByTeam(HORDE); + otherTeamPlayersCount = GetPlayersCountByTeam(ALLIANCE); } - if (GetStatus() == STATUS_IN_PROGRESS) + if (GetStatus() == STATUS_IN_PROGRESS || GetStatus() == STATUS_WAIT_JOIN) { // difference based on ppl invited (not necessarily entered battle) // default: allow 0 uint32 diff = 0; - // allow join one person if the sides are equal (to fill up bg to minplayersperteam) - if (otherTeam == GetInvitedCount(Team)) + + // allow join one person if the sides are equal (to fill up bg to minPlayerPerTeam) + if (otherTeamInvitedCount == thisTeamInvitedCount) diff = 1; // allow join more ppl if the other side has more players - else if (otherTeam > GetInvitedCount(Team)) - diff = otherTeam - GetInvitedCount(Team); + else if (otherTeamInvitedCount > thisTeamInvitedCount) + diff = otherTeamInvitedCount - thisTeamInvitedCount; // difference based on max players per team (don't allow inviting more) - uint32 diff2 = (GetInvitedCount(Team) < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - GetInvitedCount(Team) : 0; + uint32 diff2 = (thisTeamInvitedCount < GetMaxPlayersPerTeam()) ? GetMaxPlayersPerTeam() - thisTeamInvitedCount : 0; + // difference based on players who already entered // default: allow 0 uint32 diff3 = 0; - // allow join one person if the sides are equal (to fill up bg minplayersperteam) - if (otherIn == GetPlayersCountByTeam(Team)) + // allow join one person if the sides are equal (to fill up bg minPlayerPerTeam) + if (otherTeamPlayersCount == thisTeamPlayersCount) diff3 = 1; // allow join more ppl if the other side has more players - else if (otherIn > GetPlayersCountByTeam(Team)) - diff3 = otherIn - GetPlayersCountByTeam(Team); + else if (otherTeamPlayersCount > thisTeamPlayersCount) + diff3 = otherTeamPlayersCount - thisTeamPlayersCount; // or other side has less than minPlayersPerTeam - else if (GetInvitedCount(Team) <= GetMinPlayersPerTeam()) - diff3 = GetMinPlayersPerTeam() - GetInvitedCount(Team) + 1; + else if (thisTeamInvitedCount <= GetMinPlayersPerTeam()) + diff3 = GetMinPlayersPerTeam() - thisTeamInvitedCount + 1; // return the minimum of the 3 differences diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index 73c0f1c22a..6fd2524669 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -497,24 +497,45 @@ void BattlegroundQueue::FillPlayersToBG(Battleground* bg, BattlegroundBracketId { int32 hordeFree = bg->GetFreeSlotsForTeam(HORDE); int32 aliFree = bg->GetFreeSlotsForTeam(ALLIANCE); + uint32 aliCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].size(); + uint32 hordeCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].size(); + + // try to get even teams + if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_EVEN) + { + int32 hordeExtra = hordeCount - aliCount; + int32 aliExtra = aliCount - hordeCount; + + hordeExtra = std::max(hordeExtra, 0); + aliExtra = std::max(aliExtra, 0); + + if (aliCount != hordeCount) + { + aliFree -= aliExtra; + hordeFree -= hordeExtra; + + aliFree = std::max(aliFree, 0); + hordeFree = std::max(hordeFree, 0); + } + } //iterator for iterating through bg queue GroupsQueueType::const_iterator Ali_itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].begin(); //count of groups in queue - used to stop cycles - uint32 aliCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].size(); + //index to queue which group is current uint32 aliIndex = 0; for (; aliIndex < aliCount && m_SelectionPools[TEAM_ALLIANCE].AddGroup((*Ali_itr), aliFree); aliIndex++) ++Ali_itr; //the same thing for horde GroupsQueueType::const_iterator Horde_itr = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].begin(); - uint32 hordeCount = m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].size(); + uint32 hordeIndex = 0; for (; hordeIndex < hordeCount && m_SelectionPools[TEAM_HORDE].AddGroup((*Horde_itr), hordeFree); hordeIndex++) ++Horde_itr; //if ofc like BG queue invitation is set in config, then we are happy - if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == 0) + if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_NO_BALANCE) return; /* @@ -649,7 +670,7 @@ bool BattlegroundQueue::CheckNormalMatch(Battleground* bg_template, Battleground uint32 j = TEAM_ALLIANCE; if (m_SelectionPools[TEAM_HORDE].GetPlayerCount() < m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount()) j = TEAM_HORDE; - if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) != 0 + if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) != BG_QUEUE_INVITATION_TYPE_NO_BALANCE && m_SelectionPools[TEAM_HORDE].GetPlayerCount() >= minPlayers && m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() >= minPlayers) { //we will try to invite more groups to team with less players indexed by j diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h index 7e8debfd24..1509a60e15 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.h +++ b/src/server/game/Battlegrounds/BattlegroundQueue.h @@ -64,6 +64,13 @@ enum BattlegroundQueueGroupTypes }; #define BG_QUEUE_GROUP_TYPES_COUNT 4 +enum BattlegroundQueueInvitationType +{ + BG_QUEUE_INVITATION_TYPE_NO_BALANCE = 0, // no balance: N+M vs N players + BG_QUEUE_INVITATION_TYPE_BALANCED = 1, // teams balanced: N+1 vs N players + BG_QUEUE_INVITATION_TYPE_EVEN = 2 // teams even: N vs N players +}; + class Battleground; class BattlegroundQueue { diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 1689f05966..40271bfee3 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2197,6 +2197,7 @@ Battleground.StoreStatistics.Enable = 0 # Don't bother with balance) # 1 - (Experimental, Don't allow to invite much more players # of one faction) +# 2 - (Experimental, Try to have even teams) Battleground.InvitationType = 0 From b1032ed6203a5839906fab7137484b0ef8f0e58f Mon Sep 17 00:00:00 2001 From: pete318 Date: Sun, 11 Oct 2015 00:17:46 +0100 Subject: [PATCH 152/524] Change many uint32 to ObjectGuid::LowType in line with 6.x changes. --- src/server/game/AI/SmartScripts/SmartScript.h | 4 +- .../game/AuctionHouse/AuctionHouseMgr.cpp | 6 +-- .../game/AuctionHouse/AuctionHouseMgr.h | 14 +++--- src/server/game/Battlefield/Battlefield.h | 4 +- src/server/game/Battlegrounds/ArenaTeam.cpp | 2 +- src/server/game/Calendar/CalendarMgr.cpp | 6 +-- src/server/game/Calendar/CalendarMgr.h | 10 ++-- src/server/game/Chat/Chat.cpp | 6 +-- src/server/game/Chat/Chat.h | 2 +- src/server/game/Entities/Corpse/Corpse.cpp | 8 ++-- src/server/game/Entities/Corpse/Corpse.h | 6 +-- .../game/Entities/Creature/Creature.cpp | 8 ++-- src/server/game/Entities/Creature/Creature.h | 17 +++---- .../game/Entities/Creature/CreatureGroups.cpp | 18 ++++---- .../Entities/DynamicObject/DynamicObject.cpp | 2 +- .../Entities/DynamicObject/DynamicObject.h | 2 +- .../game/Entities/GameObject/GameObject.cpp | 6 +-- .../game/Entities/GameObject/GameObject.h | 22 ++++----- .../game/Entities/Item/Container/Bag.cpp | 4 +- src/server/game/Entities/Item/Container/Bag.h | 4 +- src/server/game/Entities/Item/Item.cpp | 20 ++++---- src/server/game/Entities/Item/Item.h | 12 ++--- src/server/game/Entities/Object/Object.cpp | 4 +- src/server/game/Entities/Object/Object.h | 4 +- src/server/game/Entities/Object/ObjectGuid.h | 12 ++--- src/server/game/Entities/Pet/Pet.cpp | 12 ++--- src/server/game/Entities/Pet/Pet.h | 4 +- src/server/game/Entities/Player/Player.cpp | 46 +++++++++---------- src/server/game/Entities/Player/Player.h | 8 ++-- src/server/game/Entities/Player/SocialMgr.cpp | 20 ++++---- src/server/game/Entities/Player/SocialMgr.h | 30 ++++++------ .../game/Entities/Transport/Transport.cpp | 6 +-- .../game/Entities/Transport/Transport.h | 8 ++-- src/server/game/Events/GameEventMgr.cpp | 16 +++---- src/server/game/Events/GameEventMgr.h | 10 ++-- src/server/game/Globals/ObjectMgr.cpp | 36 +++++++-------- src/server/game/Globals/ObjectMgr.h | 40 ++++++++-------- src/server/game/Grids/ObjectGridLoader.cpp | 2 +- src/server/game/Groups/Group.cpp | 6 +-- src/server/game/Groups/Group.h | 4 +- src/server/game/Groups/GroupMgr.cpp | 4 +- src/server/game/Groups/GroupMgr.h | 8 ++-- src/server/game/Guilds/Guild.cpp | 16 +++---- src/server/game/Guilds/Guild.h | 46 +++++++++---------- src/server/game/Guilds/GuildMgr.cpp | 8 ++-- src/server/game/Guilds/GuildMgr.h | 14 +++--- src/server/game/Handlers/CharacterHandler.cpp | 6 +-- src/server/game/Handlers/PetitionsHandler.cpp | 10 ++-- src/server/game/Loot/LootMgr.cpp | 2 +- src/server/game/Loot/LootMgr.h | 2 +- src/server/game/Mails/Mail.cpp | 4 +- src/server/game/Mails/Mail.h | 30 ++++++------ src/server/game/Maps/Map.cpp | 14 +++--- src/server/game/Maps/Map.h | 22 ++++----- src/server/game/Maps/TransportMgr.cpp | 4 +- src/server/game/Maps/TransportMgr.h | 2 +- src/server/game/OutdoorPvP/OutdoorPvP.cpp | 8 ++-- src/server/game/OutdoorPvP/OutdoorPvP.h | 18 ++++---- src/server/game/Pools/PoolMgr.cpp | 10 ++-- src/server/game/Pools/PoolMgr.h | 10 ++-- src/server/game/Scripting/MapScripts.cpp | 4 +- src/server/game/Scripting/ScriptMgr.cpp | 4 +- src/server/game/Scripting/ScriptMgr.h | 8 ++-- src/server/game/Server/WorldSession.cpp | 2 +- src/server/game/Server/WorldSession.h | 4 +- src/server/game/Tools/PlayerDump.cpp | 36 +++++++-------- src/server/game/Tools/PlayerDump.h | 12 ++--- src/server/game/World/World.cpp | 4 +- src/server/scripts/Commands/cs_ban.cpp | 2 +- src/server/scripts/Commands/cs_character.cpp | 2 +- src/server/scripts/Commands/cs_debug.cpp | 6 +-- src/server/scripts/Commands/cs_gobject.cpp | 19 ++++---- src/server/scripts/Commands/cs_guild.cpp | 4 +- src/server/scripts/Commands/cs_list.cpp | 10 ++-- src/server/scripts/Commands/cs_lookup.cpp | 2 +- src/server/scripts/Commands/cs_misc.cpp | 6 +-- src/server/scripts/Commands/cs_npc.cpp | 24 +++++----- src/server/scripts/Commands/cs_wp.cpp | 4 +- .../scripts/Kalimdor/zone_bloodmyst_isle.cpp | 2 +- .../scripts/Northrend/isle_of_conquest.cpp | 4 +- src/server/scripts/World/action_ip_logger.cpp | 6 +-- 81 files changed, 428 insertions(+), 426 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index cb338cd358..96aa1f735f 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -175,7 +175,7 @@ class SmartScript return 0; } - GameObject* FindGameObjectNear(WorldObject* searchObject, uint32 guid) const + GameObject* FindGameObjectNear(WorldObject* searchObject, ObjectGuid::LowType guid) const { auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid); if (bounds.first == bounds.second) @@ -184,7 +184,7 @@ class SmartScript return bounds.first->second; } - Creature* FindCreatureNear(WorldObject* searchObject, uint32 guid) const + Creature* FindCreatureNear(WorldObject* searchObject, ObjectGuid::LowType guid) const { auto bounds = searchObject->GetMap()->GetCreatureBySpawnIdStore().equal_range(guid); if (bounds.first == bounds.second) diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 1809e306a4..768def2ff4 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -300,7 +300,7 @@ void AuctionHouseMgr::LoadAuctionItems() { Field* fields = result->Fetch(); - uint32 item_guid = fields[11].GetUInt32(); + ObjectGuid::LowType item_guid = fields[11].GetUInt32(); uint32 itemEntry = fields[12].GetUInt32(); ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemEntry); @@ -372,7 +372,7 @@ void AuctionHouseMgr::AddAItem(Item* it) mAitems[it->GetGUID().GetCounter()] = it; } -bool AuctionHouseMgr::RemoveAItem(uint32 id, bool deleteItem) +bool AuctionHouseMgr::RemoveAItem(ObjectGuid::LowType id, bool deleteItem) { ItemMap::iterator i = mAitems.find(id); if (i == mAitems.end()) @@ -738,7 +738,7 @@ std::string AuctionEntry::BuildAuctionMailSubject(MailAuctionAnswers response) c return strm.str(); } -std::string AuctionEntry::BuildAuctionMailBody(uint32 lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut) +std::string AuctionEntry::BuildAuctionMailBody(ObjectGuid::LowType lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut) { std::ostringstream strm; strm.width(16); diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index f05d858332..45cdba361f 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -72,15 +72,15 @@ struct AuctionEntry { uint32 Id; uint8 houseId; - uint32 itemGUIDLow; + ObjectGuid::LowType itemGUIDLow; uint32 itemEntry; uint32 itemCount; - uint32 owner; + ObjectGuid::LowType owner; uint32 startbid; //maybe useless uint32 bid; uint32 buyout; time_t expire_time; - uint32 bidder; + ObjectGuid::LowType bidder; uint32 deposit; //deposit can be calculated only when creating auction AuctionHouseEntry const* auctionHouseEntry; // in AuctionHouse.dbc @@ -93,7 +93,7 @@ struct AuctionEntry void SaveToDB(SQLTransaction& trans) const; bool LoadFromDB(Field* fields); std::string BuildAuctionMailSubject(MailAuctionAnswers response) const; - static std::string BuildAuctionMailBody(uint32 lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut); + static std::string BuildAuctionMailBody(ObjectGuid::LowType lowGuid, uint32 bid, uint32 buyout, uint32 deposit, uint32 cut); }; @@ -150,13 +150,13 @@ class AuctionHouseMgr return &instance; } - typedef std::unordered_map ItemMap; + typedef std::unordered_map ItemMap; AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId); AuctionHouseObject* GetAuctionsMapByHouseId(uint8 auctionHouseId); AuctionHouseObject* GetBidsMap(uint32 factionTemplateId); - Item* GetAItem(uint32 id) + Item* GetAItem(ObjectGuid::LowType id) { ItemMap::const_iterator itr = mAitems.find(id); if (itr != mAitems.end()) @@ -183,7 +183,7 @@ class AuctionHouseMgr void LoadAuctions(); void AddAItem(Item* it); - bool RemoveAItem(uint32 id, bool deleteItem = false); + bool RemoveAItem(ObjectGuid::LowType id, bool deleteItem = false); void Update(); diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index c860d36e71..bb3ecb6083 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -193,7 +193,7 @@ class Battlefield : public ZoneScript virtual ~Battlefield(); /// typedef of map witch store capturepoint and the associate gameobject entry - typedef std::map BfCapturePointMap; + typedef std::map BfCapturePointMap; /// Call this to init the Battlefield virtual bool SetupBattlefield() { return true; } @@ -400,7 +400,7 @@ class Battlefield : public ZoneScript // CapturePoint system void AddCapturePoint(BfCapturePoint* cp) { m_capturePoints[cp->GetCapturePointEntry()] = cp; } - BfCapturePoint* GetCapturePoint(uint32 lowguid) const + BfCapturePoint* GetCapturePoint(ObjectGuid::LowType lowguid) const { Battlefield::BfCapturePointMap::const_iterator itr = m_capturePoints.find(lowguid); if (itr != m_capturePoints.end()) diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index e75c07d894..7806e0b343 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -63,7 +63,7 @@ bool ArenaTeam::Create(ObjectGuid captainGuid, uint8 type, std::string const& te EmblemColor = emblemColor; BorderStyle = borderStyle; BorderColor = borderColor; - uint32 captainLowGuid = captainGuid.GetCounter(); + ObjectGuid::LowType captainLowGuid = captainGuid.GetCounter(); // Save arena team to db PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ARENA_TEAM); diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp index fd63dd04bf..368ebecba8 100644 --- a/src/server/game/Calendar/CalendarMgr.cpp +++ b/src/server/game/Calendar/CalendarMgr.cpp @@ -66,7 +66,7 @@ void CalendarMgr::LoadFromDB() uint32 eventTime = fields[6].GetUInt32(); uint32 flags = fields[7].GetUInt32(); uint32 timezoneTime = fields[8].GetUInt32(); - uint32 guildId = 0; + ObjectGuid::LowType guildId = 0; if (flags & CALENDAR_FLAG_GUILD_EVENT || flags & CALENDAR_FLAG_WITHOUT_INVITES) guildId = Player::GetGuildIdFromDB(creatorGUID); @@ -270,7 +270,7 @@ void CalendarMgr::RemoveAllPlayerEventsAndInvites(ObjectGuid guid) RemoveInvite((*itr)->GetInviteId(), (*itr)->GetEventId(), guid); } -void CalendarMgr::RemovePlayerGuildEventsAndSignups(ObjectGuid guid, uint32 guildId) +void CalendarMgr::RemovePlayerGuildEventsAndSignups(ObjectGuid guid, ObjectGuid::LowType guildId) { for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end(); ++itr) if ((*itr)->GetCreatorGUID() == guid && ((*itr)->IsGuildEvent() || (*itr)->IsGuildAnnouncement())) @@ -573,7 +573,7 @@ void CalendarMgr::SendCalendarEvent(ObjectGuid guid, CalendarEvent const& calend Player* invitee = ObjectAccessor::FindPlayer(inviteeGuid); uint8 inviteeLevel = invitee ? invitee->getLevel() : Player::GetLevelFromDB(inviteeGuid); - uint32 inviteeGuildId = invitee ? invitee->GetGuildId() : Player::GetGuildIdFromDB(inviteeGuid); + ObjectGuid::LowType inviteeGuildId = invitee ? invitee->GetGuildId() : Player::GetGuildIdFromDB(inviteeGuid); data << inviteeGuid.WriteAsPacked(); data << uint8(inviteeLevel); diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h index 1027bd817f..9969c00e3a 100644 --- a/src/server/game/Calendar/CalendarMgr.h +++ b/src/server/game/Calendar/CalendarMgr.h @@ -203,7 +203,7 @@ struct CalendarEvent _description = calendarEvent.GetDescription(); } - CalendarEvent(uint64 eventId, ObjectGuid creatorGUID, uint32 guildId, CalendarEventType type, int32 dungeonId, + CalendarEvent(uint64 eventId, ObjectGuid creatorGUID, ObjectGuid::LowType guildId, CalendarEventType type, int32 dungeonId, time_t eventTime, uint32 flags, time_t timezoneTime, std::string title, std::string description) : _eventId(eventId), _creatorGUID(creatorGUID), _guildId(guildId), _type(type), _dungeonId(dungeonId), _eventTime(eventTime), _flags(flags), _timezoneTime(timezoneTime), _title(title), @@ -220,8 +220,8 @@ struct CalendarEvent void SetCreatorGUID(ObjectGuid guid) { _creatorGUID = guid; } ObjectGuid GetCreatorGUID() const { return _creatorGUID; } - void SetGuildId(uint32 guildId) { _guildId = guildId; } - uint32 GetGuildId() const { return _guildId; } + void SetGuildId(ObjectGuid::LowType guildId) { _guildId = guildId; } + ObjectGuid::LowType GetGuildId() const { return _guildId; } void SetTitle(const std::string& title) { _title = title; } std::string GetTitle() const { return _title; } @@ -253,7 +253,7 @@ struct CalendarEvent private: uint64 _eventId; ObjectGuid _creatorGUID; - uint32 _guildId; + ObjectGuid::LowType _guildId; CalendarEventType _type; int32 _dungeonId; time_t _eventTime; @@ -316,7 +316,7 @@ class CalendarMgr void UpdateInvite(CalendarInvite* invite, SQLTransaction& trans); void RemoveAllPlayerEventsAndInvites(ObjectGuid guid); - void RemovePlayerGuildEventsAndSignups(ObjectGuid guid, uint32 guildId); + void RemovePlayerGuildEventsAndSignups(ObjectGuid guid, ObjectGuid::LowType guildId); void SendCalendarEvent(ObjectGuid guid, CalendarEvent const& calendarEvent, CalendarSendEventType sendType); void SendCalendarEventInvite(CalendarInvite const& invite); diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 2f003a58a6..da3055ebaa 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -910,7 +910,7 @@ GameObject* ChatHandler::GetNearbyGameObject() return obj; } -GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid, uint32 entry) +GameObject* ChatHandler::GetObjectGlobalyWithGuidOrNearWithDbGuid(ObjectGuid::LowType lowguid, uint32 entry) { if (!m_session) return NULL; @@ -1060,7 +1060,7 @@ ObjectGuid ChatHandler::extractGuidFromLink(char* text) } case SPELL_LINK_CREATURE: { - uint32 lowguid = atoul(idS); + ObjectGuid::LowType lowguid = atoul(idS); if (CreatureData const* data = sObjectMgr->GetCreatureData(lowguid)) return ObjectGuid(HighGuid::Unit, data->id, lowguid); @@ -1069,7 +1069,7 @@ ObjectGuid ChatHandler::extractGuidFromLink(char* text) } case SPELL_LINK_GAMEOBJECT: { - uint32 lowguid = atoul(idS); + ObjectGuid::LowType lowguid = atoul(idS); if (GameObjectData const* data = sObjectMgr->GetGOData(lowguid)) return ObjectGuid(HighGuid::GameObject, data->id, lowguid); diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 72d80aba7e..57192f948d 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -135,7 +135,7 @@ class ChatHandler std::string GetNameLink(Player* chr) const; GameObject* GetNearbyGameObject(); - GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid, uint32 entry); + GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(ObjectGuid::LowType lowguid, uint32 entry); bool HasSentErrorMessage() const { return sentErrorMessage; } void SetSentErrorMessage(bool val){ sentErrorMessage = val; } static bool LoadCommandTable() { return load_command_table; } diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 360cfdf1ae..ca808ad15a 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -59,14 +59,14 @@ void Corpse::RemoveFromWorld() WorldObject::RemoveFromWorld(); } -bool Corpse::Create(uint32 guidlow, Map* map) +bool Corpse::Create(ObjectGuid::LowType guidlow, Map* map) { SetMap(map); Object::_Create(guidlow, 0, HighGuid::Corpse); return true; } -bool Corpse::Create(uint32 guidlow, Player* owner) +bool Corpse::Create(ObjectGuid::LowType guidlow, Player* owner) { ASSERT(owner); @@ -149,13 +149,13 @@ void Corpse::DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans) CharacterDatabase.ExecuteOrAppend(trans, stmt); } -bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields) +bool Corpse::LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields) { // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, guildId, flags, dynFlags, time, corpseType, instanceId, phaseMask, guid FROM corpse WHERE mapId = ? AND instanceId = ? - uint32 ownerGuid = fields[16].GetUInt32(); + ObjectGuid::LowType ownerGuid = fields[16].GetUInt32(); float posX = fields[0].GetFloat(); float posY = fields[1].GetFloat(); float posZ = fields[2].GetFloat(); diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index eeb22a064b..be2cb435ac 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -55,11 +55,11 @@ class Corpse : public WorldObject, public GridObject void AddToWorld() override; void RemoveFromWorld() override; - bool Create(uint32 guidlow, Map* map); - bool Create(uint32 guidlow, Player* owner); + bool Create(ObjectGuid::LowType guidlow, Map* map); + bool Create(ObjectGuid::LowType guidlow, Player* owner); void SaveToDB(); - bool LoadCorpseFromDB(uint32 guid, Field* fields); + bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields); void DeleteBonesFromWorld(); void DeleteFromDB(SQLTransaction& trans); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index c8a258ad38..6a994d6185 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -226,7 +226,7 @@ void Creature::SearchFormation() if (IsSummon()) return; - uint32 lowguid = GetSpawnId(); + ObjectGuid::LowType lowguid = GetSpawnId(); if (!lowguid) return; @@ -775,7 +775,7 @@ void Creature::Motion_Initialize() GetMotionMaster()->Initialize(); } -bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/) +bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/) { ASSERT(map); SetMap(map); @@ -1198,7 +1198,7 @@ float Creature::GetSpellDamageMod(int32 Rank) const } } -bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/) +bool Creature::CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data /*= nullptr*/, uint32 vehId /*= 0*/) { SetZoneScript(); if (GetZoneScript() && data) @@ -1239,7 +1239,7 @@ bool Creature::CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* return true; } -bool Creature::LoadCreatureFromDB(uint32 spawnId, Map* map, bool addToMap) +bool Creature::LoadCreatureFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap) { CreatureData const* data = sObjectMgr->GetCreatureData(spawnId); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 79832b70f5..7744e30f12 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -317,7 +317,8 @@ struct CreatureAddon std::vector auras; }; -typedef std::unordered_map CreatureAddonContainer; +typedef std::unordered_map CreatureAddonContainer; +typedef std::unordered_map CreatureAddonTemplateContainer; // Vendors struct VendorItem @@ -430,12 +431,12 @@ class Creature : public Unit, public GridObject, public MapObject void DisappearAndDie(); - bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data = nullptr, uint32 vehId = 0); + bool Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data = nullptr, uint32 vehId = 0); bool LoadCreaturesAddon(bool reload = false); void SelectLevel(); void LoadEquipment(int8 id = 1, bool force = false); - uint32 GetSpawnId() const { return m_spawnId; } + ObjectGuid::LowType GetSpawnId() const { return m_spawnId; } void Update(uint32 time) override; // overwrited Unit::Update void GetRespawnPosition(float &x, float &y, float &z, float* ori = nullptr, float* dist =nullptr) const; @@ -529,8 +530,8 @@ class Creature : public Unit, public GridObject, public MapObject void setDeathState(DeathState s) override; // override virtual Unit::setDeathState - bool LoadFromDB(uint32 spawnId, Map* map) { return LoadCreatureFromDB(spawnId, map, false); } - bool LoadCreatureFromDB(uint32 spawnId, Map* map, bool addToMap = true); + bool LoadFromDB(ObjectGuid::LowType spawnId, Map* map) { return LoadCreatureFromDB(spawnId, map, false); } + bool LoadCreatureFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap = true); void SaveToDB(); // overriden in Pet virtual void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask); @@ -610,7 +611,7 @@ class Creature : public Unit, public GridObject, public MapObject } uint32 m_groupLootTimer; // (msecs)timer used for group loot - uint32 lootingGroupLowGUID; // used to find group which is looting corpse + ObjectGuid::LowType lootingGroupLowGUID; // used to find group which is looting corpse void SendZoneUnderAttackMessage(Player* attacker); @@ -675,7 +676,7 @@ class Creature : public Unit, public GridObject, public MapObject void ClearTextRepeatGroup(uint8 textGroup); protected: - bool CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0); + bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0); bool InitEntry(uint32 entry, CreatureData const* data = nullptr); // vendor items @@ -702,7 +703,7 @@ class Creature : public Unit, public GridObject, public MapObject void RegenerateHealth(); void Regenerate(Powers power); MovementGeneratorType m_defaultMovementType; - uint32 m_spawnId; ///< For new or temporary creatures is 0 for saved it is lowguid + ObjectGuid::LowType m_spawnId; ///< For new or temporary creatures is 0 for saved it is lowguid uint8 m_equipmentId; int8 m_originalEquipmentId; // can be -1 diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index f29e896f05..2d353fa154 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -30,27 +30,27 @@ FormationMgr::~FormationMgr() delete itr->second; } -void FormationMgr::AddCreatureToGroup(uint32 groupId, Creature* member) +void FormationMgr::AddCreatureToGroup(uint32 leaderGuid, Creature* creature) { - Map* map = member->FindMap(); + Map* map = creature->FindMap(); if (!map) return; - CreatureGroupHolderType::iterator itr = map->CreatureGroupHolder.find(groupId); + CreatureGroupHolderType::iterator itr = map->CreatureGroupHolder.find(leaderGuid); //Add member to an existing group if (itr != map->CreatureGroupHolder.end()) { - TC_LOG_DEBUG("entities.unit", "Group found: %u, inserting creature GUID: %u, Group InstanceID %u", groupId, member->GetGUID().GetCounter(), member->GetInstanceId()); - itr->second->AddMember(member); + TC_LOG_DEBUG("entities.unit", "Group found: %u, inserting creature GUID: %u, Group InstanceID %u", leaderGuid, creature->GetGUID().GetCounter(), creature->GetInstanceId()); + itr->second->AddMember(creature); } //Create new group else { - TC_LOG_DEBUG("entities.unit", "Group not found: %u. Creating new group.", groupId); - CreatureGroup* group = new CreatureGroup(groupId); - map->CreatureGroupHolder[groupId] = group; - group->AddMember(member); + TC_LOG_DEBUG("entities.unit", "Group not found: %u. Creating new group.", leaderGuid); + CreatureGroup* group = new CreatureGroup(leaderGuid); + map->CreatureGroupHolder[leaderGuid] = group; + group->AddMember(creature); } } diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index 714a0a35ca..3d92f9e18c 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -79,7 +79,7 @@ void DynamicObject::RemoveFromWorld() } } -bool DynamicObject::CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type) +bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type) { SetMap(caster->GetMap()); Relocate(pos); diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h index f850573ec5..44c771c77c 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.h +++ b/src/server/game/Entities/DynamicObject/DynamicObject.h @@ -41,7 +41,7 @@ class DynamicObject : public WorldObject, public GridObject, publ void AddToWorld() override; void RemoveFromWorld() override; - bool CreateDynamicObject(uint32 guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type); + bool CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caster, uint32 spellId, Position const& pos, float radius, DynamicObjectType type); void Update(uint32 p_time) override; void Remove(); void SetDuration(int32 newDuration); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 42ed4674a5..c1ec2294c3 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -167,7 +167,7 @@ void GameObject::RemoveFromWorld() } } -bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit) +bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit) { ASSERT(map); SetMap(map); @@ -815,7 +815,7 @@ void GameObject::SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask) WorldDatabase.CommitTransaction(trans); } -bool GameObject::LoadGameObjectFromDB(uint32 spawnId, Map* map, bool addToMap) +bool GameObject::LoadGameObjectFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap) { GameObjectData const* data = sObjectMgr->GetGOData(spawnId); @@ -1152,7 +1152,7 @@ void GameObject::SetGoArtKit(uint8 kit) data->artKit = kit; } -void GameObject::SetGoArtKit(uint8 artkit, GameObject* go, uint32 lowguid) +void GameObject::SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType lowguid) { const GameObjectData* data = NULL; if (go) diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index b91f1b6eee..a744efbe1e 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -652,7 +652,7 @@ class GameObject : public WorldObject, public GridObject, public Map void RemoveFromWorld() override; void CleanupsBeforeDelete(bool finalCleanup = true) override; - bool Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit = 0); + bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, GOState go_state, uint32 artKit = 0); void Update(uint32 p_time) override; GameObjectTemplate const* GetGOInfo() const { return m_goInfo; } GameObjectData const* GetGOData() const { return m_goData; } @@ -662,7 +662,7 @@ class GameObject : public WorldObject, public GridObject, public Map bool IsDynTransport() const; bool IsDestructibleBuilding() const; - uint32 GetSpawnId() const { return m_spawnId; } + ObjectGuid::LowType GetSpawnId() const { return m_spawnId; } void UpdateRotationFields(float rotation2 = 0.0f, float rotation3 = 0.0f); @@ -671,8 +671,8 @@ class GameObject : public WorldObject, public GridObject, public Map void SaveToDB(); void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask); - bool LoadFromDB(uint32 spawnId, Map* map) { return LoadGameObjectFromDB(spawnId, map, false); } - bool LoadGameObjectFromDB(uint32 spawnId, Map* map, bool addToMap = true); + bool LoadFromDB(ObjectGuid::LowType spawnId, Map* map) { return LoadGameObjectFromDB(spawnId, map, false); } + bool LoadGameObjectFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap = true); void DeleteFromDB(); void SetOwnerGUID(ObjectGuid owner) @@ -733,7 +733,7 @@ class GameObject : public WorldObject, public GridObject, public Map void SetGoArtKit(uint8 artkit); uint8 GetGoAnimProgress() const { return GetByteValue(GAMEOBJECT_BYTES_1, 3); } void SetGoAnimProgress(uint8 animprogress) { SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); } - static void SetGoArtKit(uint8 artkit, GameObject* go, uint32 lowguid = 0); + static void SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType lowguid = 0); void SetPhaseMask(uint32 newPhaseMask, bool update) override; void EnableCollision(bool enable); @@ -751,10 +751,10 @@ class GameObject : public WorldObject, public GridObject, public Map void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; } void ResetLootMode() { m_LootMode = LOOT_MODE_DEFAULT; } - void AddToSkillupList(uint32 PlayerGuidLow) { m_SkillupList.push_back(PlayerGuidLow); } - bool IsInSkillupList(uint32 PlayerGuidLow) const + void AddToSkillupList(ObjectGuid::LowType PlayerGuidLow) { m_SkillupList.push_back(PlayerGuidLow); } + bool IsInSkillupList(ObjectGuid::LowType PlayerGuidLow) const { - for (std::list::const_iterator i = m_SkillupList.begin(); i != m_SkillupList.end(); ++i) + for (std::list::const_iterator i = m_SkillupList.begin(); i != m_SkillupList.end(); ++i) if (*i == PlayerGuidLow) return true; @@ -778,7 +778,7 @@ class GameObject : public WorldObject, public GridObject, public Map bool IsLootAllowedFor(Player const* player) const; bool HasLootRecipient() const { return !m_lootRecipient.IsEmpty() || m_lootRecipientGroup; } uint32 m_groupLootTimer; // (msecs)timer used for group loot - uint32 lootingGroupLowGUID; // used to find group which is looting + ObjectGuid::LowType lootingGroupLowGUID; // used to find group which is looting bool hasQuest(uint32 quest_id) const override; bool hasInvolvedQuest(uint32 quest_id) const override; @@ -861,7 +861,7 @@ class GameObject : public WorldObject, public GridObject, public Map bool m_spawnedByDefault; time_t m_cooldownTime; // used as internal reaction delay time store (not state change reaction). // For traps this: spell casting cooldown, for doors/buttons: reset time. - std::list m_SkillupList; + std::list m_SkillupList; ObjectGuid m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_SUMMONING_RITUAL where GO is not summoned (no owner) GuidSet m_unique_users; @@ -870,7 +870,7 @@ class GameObject : public WorldObject, public GridObject, public Map typedef std::map ChairSlotAndUser; ChairSlotAndUser ChairListSlots; - uint32 m_spawnId; ///< For new or temporary gameobjects is 0 for saved it is lowguid + ObjectGuid::LowType m_spawnId; ///< For new or temporary gameobjects is 0 for saved it is lowguid GameObjectTemplate const* m_goInfo; GameObjectData const* m_goData; GameObjectValue m_goValue; diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp index 69a77dd921..1d2fd9b280 100644 --- a/src/server/game/Entities/Item/Container/Bag.cpp +++ b/src/server/game/Entities/Item/Container/Bag.cpp @@ -69,7 +69,7 @@ void Bag::RemoveFromWorld() Item::RemoveFromWorld(); } -bool Bag::Create(uint32 guidlow, uint32 itemid, Player const* owner) +bool Bag::Create(ObjectGuid::LowType guidlow, uint32 itemid, Player const* owner) { ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(itemid); @@ -109,7 +109,7 @@ void Bag::SaveToDB(SQLTransaction& trans) Item::SaveToDB(trans); } -bool Bag::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 entry) +bool Bag::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry) { if (!Item::LoadFromDB(guid, owner_guid, fields, entry)) return false; diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h index 11bff67855..ead059030b 100644 --- a/src/server/game/Entities/Item/Container/Bag.h +++ b/src/server/game/Entities/Item/Container/Bag.h @@ -35,7 +35,7 @@ class Bag : public Item void AddToWorld() override; void RemoveFromWorld() override; - bool Create(uint32 guidlow, uint32 itemid, Player const* owner) override; + bool Create(ObjectGuid::LowType guidlow, ObjectGuid::LowType itemid, Player const* owner) override; void Clear(); void StoreItem(uint8 slot, Item* pItem, bool update); @@ -54,7 +54,7 @@ class Bag : public Item // overwrite virtual Item::SaveToDB void SaveToDB(SQLTransaction& trans) override; // overwrite virtual Item::LoadFromDB - bool LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 entry) override; + bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry) override; // overwrite virtual Item::DeleteFromDB void DeleteFromDB(SQLTransaction& trans) override; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index f5eb9972af..9a6af376e6 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -255,7 +255,7 @@ Item::Item() m_paidExtendedCost = 0; } -bool Item::Create(uint32 guidlow, uint32 itemid, Player const* owner) +bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemid, Player const* owner) { Object::_Create(guidlow, 0, HighGuid::Item); @@ -317,7 +317,7 @@ void Item::SaveToDB(SQLTransaction& trans) if (!isInTransaction) trans = CharacterDatabase.BeginTransaction(); - uint32 guid = GetGUID().GetCounter(); + ObjectGuid::LowType guid = GetGUID().GetCounter(); switch (uState) { case ITEM_NEW: @@ -398,7 +398,7 @@ void Item::SaveToDB(SQLTransaction& trans) CharacterDatabase.CommitTransaction(trans); } -bool Item::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 entry) +bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry) { // 0 1 2 3 4 5 6 7 8 9 10 //result = CharacterDatabase.PQuery("SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text FROM item_instance WHERE guid = '%u'", guid); @@ -480,7 +480,7 @@ bool Item::LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 } /*static*/ -void Item::DeleteFromDB(SQLTransaction& trans, uint32 itemGuid) +void Item::DeleteFromDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE); stmt->setUInt32(0, itemGuid); @@ -497,7 +497,7 @@ void Item::DeleteFromDB(SQLTransaction& trans) } /*static*/ -void Item::DeleteFromInventoryDB(SQLTransaction& trans, uint32 itemGuid) +void Item::DeleteFromInventoryDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_INVENTORY_BY_ITEM); stmt->setUInt32(0, itemGuid); @@ -1254,7 +1254,7 @@ void Item::ItemContainerSaveLootToDB() if (loot.isLooted()) // no money and no loot return; - uint32 container_id = GetGUID().GetCounter(); + ObjectGuid::LowType container_id = GetGUID().GetCounter(); SQLTransaction trans = CharacterDatabase.BeginTransaction(); loot.containerID = container_id; // Save this for when a LootItem is removed @@ -1322,7 +1322,7 @@ bool Item::ItemContainerLoadLootFromDB() // Default. If there are no records for this item then it will be rolled for in Player::SendLoot() m_lootGenerated = false; - uint32 container_id = GetGUID().GetCounter(); + ObjectGuid::LowType container_id = GetGUID().GetCounter(); // Save this for later use loot.containerID = container_id; @@ -1398,7 +1398,7 @@ bool Item::ItemContainerLoadLootFromDB() void Item::ItemContainerDeleteLootItemsFromDB() { // Deletes items associated with an openable item from the DB - uint32 containerId = GetGUID().GetCounter(); + ObjectGuid::LowType containerId = GetGUID().GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_ITEMS); stmt->setUInt32(0, containerId); SQLTransaction trans = CharacterDatabase.BeginTransaction(); @@ -1409,7 +1409,7 @@ void Item::ItemContainerDeleteLootItemsFromDB() void Item::ItemContainerDeleteLootItemFromDB(uint32 itemID) { // Deletes a single item associated with an openable item from the DB - uint32 containerId = GetGUID().GetCounter(); + ObjectGuid::LowType containerId = GetGUID().GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_ITEM); stmt->setUInt32(0, containerId); stmt->setUInt32(1, itemID); @@ -1421,7 +1421,7 @@ void Item::ItemContainerDeleteLootItemFromDB(uint32 itemID) void Item::ItemContainerDeleteLootMoneyFromDB() { // Deletes the money loot associated with an openable item from the DB - uint32 containerId = GetGUID().GetCounter(); + ObjectGuid::LowType containerId = GetGUID().GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEMCONTAINER_MONEY); stmt->setUInt32(0, containerId); SQLTransaction trans = CharacterDatabase.BeginTransaction(); diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index ad74906b4c..a268334b21 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -211,7 +211,7 @@ class Item : public Object Item(); - virtual bool Create(uint32 guidlow, uint32 itemid, Player const* owner); + virtual bool Create(ObjectGuid::LowType guidlow, ObjectGuid::LowType itemid, Player const* owner); ItemTemplate const* GetTemplate() const; @@ -225,10 +225,10 @@ class Item : public Object bool IsBindedNotWith(Player const* player) const; bool IsBoundByEnchant() const; virtual void SaveToDB(SQLTransaction& trans); - virtual bool LoadFromDB(uint32 guid, ObjectGuid owner_guid, Field* fields, uint32 entry); - static void DeleteFromDB(SQLTransaction& trans, uint32 itemGuid); + virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fields, uint32 entry); + static void DeleteFromDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid); virtual void DeleteFromDB(SQLTransaction& trans); - static void DeleteFromInventoryDB(SQLTransaction& trans, uint32 itemGuid); + static void DeleteFromInventoryDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid); // Lootable items and their contents void ItemContainerSaveLootToDB(); @@ -331,7 +331,7 @@ class Item : public Object // Item Refund system void SetNotRefundable(Player* owner, bool changestate = true, SQLTransaction* trans = NULL); - void SetRefundRecipient(uint32 pGuidLow) { m_refundRecipient = pGuidLow; } + void SetRefundRecipient(ObjectGuid::LowType pGuidLow) { m_refundRecipient = pGuidLow; } void SetPaidMoney(uint32 money) { m_paidMoney = money; } void SetPaidExtendedCost(uint32 iece) { m_paidExtendedCost = iece; } @@ -362,7 +362,7 @@ class Item : public Object int16 uQueuePos; bool mb_in_trade; // true if item is currently in trade-window time_t m_lastPlayedTimeUpdate; - uint32 m_refundRecipient; + ObjectGuid::LowType m_refundRecipient; uint32 m_paidMoney; uint32 m_paidExtendedCost; AllowedLooterSet allowedGUIDs; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 21a65440a5..e4d9e61bca 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -103,7 +103,7 @@ void Object::_InitValues() m_objectUpdated = false; } -void Object::_Create(uint32 guidlow, uint32 entry, HighGuid guidhigh) +void Object::_Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh) { if (!m_uint32Values) _InitValues(); @@ -1066,7 +1066,7 @@ void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/) transport->RemovePassenger(this); } -void WorldObject::_Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask) +void WorldObject::_Create(ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask) { Object::_Create(guidlow, 0, guidhigh); m_phaseMask = phaseMask; diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 43d1ecdeab..c9e3d06921 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -204,7 +204,7 @@ class Object Object(); void _InitValues(); - void _Create(uint32 guidlow, uint32 entry, HighGuid guidhigh); + void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh); std::string _ConcatFields(uint16 startIndex, uint16 size) const; void _LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count); @@ -431,7 +431,7 @@ class WorldObject : public Object, public WorldLocation virtual void Update (uint32 /*time_diff*/) { } - void _Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask); + void _Create(ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask); virtual void RemoveFromWorld() override; void GetNearPoint2D(float &x, float &y, float distance, float absAngle) const; diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 705cc3eac3..697ee3835f 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -154,14 +154,14 @@ class ObjectGuid : LowType(_guid & UI64LIT(0x00000000FFFFFFFF)); } - static uint32 GetMaxCounter(HighGuid high) + static LowType GetMaxCounter(HighGuid high) { return HasEntry(high) - ? uint32(0x00FFFFFF) - : uint32(0xFFFFFFFF); + ? LowType(0x00FFFFFF) + : LowType(0xFFFFFFFF); } - uint32 GetMaxCounter() const { return GetMaxCounter(GetHigh()); } + ObjectGuid::LowType GetMaxCounter() const { return GetMaxCounter(GetHigh()); } bool IsEmpty() const { return _guid == 0; } bool IsCreature() const { return GetHigh() == HighGuid::Unit; } @@ -283,13 +283,13 @@ class ObjectGuidGeneratorBase public: ObjectGuidGeneratorBase(ObjectGuid::LowType start = 1) : _nextGuid(start) { } - virtual void Set(uint32 val) { _nextGuid = val; } + virtual void Set(ObjectGuid::LowType val) { _nextGuid = val; } virtual ObjectGuid::LowType Generate() = 0; ObjectGuid::LowType GetNextAfterMaxUsed() const { return _nextGuid; } protected: static void HandleCounterOverflow(HighGuid high); - uint64 _nextGuid; + ObjectGuid::LowType _nextGuid; }; template diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 57fc56af89..0121194e32 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -98,7 +98,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c { m_loading = true; - uint32 ownerid = owner->GetGUID().GetCounter(); + ObjectGuid::LowType ownerid = owner->GetGUID().GetCounter(); PreparedStatement* stmt; PreparedQueryResult result; @@ -174,7 +174,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c } Map* map = owner->GetMap(); - uint32 guid = map->GenerateLowGuid(); + ObjectGuid::LowType guid = map->GenerateLowGuid(); if (!Create(guid, map, owner->GetPhaseMask(), petEntry, petId)) return false; @@ -415,7 +415,7 @@ void Pet::SavePetToDB(PetSaveMode mode) // current/stable/not_in_slot if (mode >= PET_SAVE_AS_CURRENT) { - uint32 ownerLowGUID = GetOwnerGUID().GetCounter(); + ObjectGuid::LowType ownerLowGUID = GetOwnerGUID().GetCounter(); std::string name = m_name; CharacterDatabase.EscapeString(name); trans = CharacterDatabase.BeginTransaction(); @@ -485,7 +485,7 @@ void Pet::SavePetToDB(PetSaveMode mode) } } -void Pet::DeleteFromDB(uint32 guidlow) +void Pet::DeleteFromDB(ObjectGuid::LowType guidlow) { SQLTransaction trans = CharacterDatabase.BeginTransaction(); @@ -807,7 +807,7 @@ bool Pet::CreateBaseAtCreatureInfo(CreatureTemplate const* cinfo, Unit* owner) bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phaseMask) { TC_LOG_DEBUG("entities.pet", "Pet::CreateBaseForTamed"); - uint32 guid=map->GenerateLowGuid(); + ObjectGuid::LowType guid=map->GenerateLowGuid(); uint32 petId = sObjectMgr->GeneratePetNumber(); if (!Create(guid, map, phaseMask, cinfo->Entry, petId)) return false; @@ -1835,7 +1835,7 @@ bool Pet::IsPermanentPetFor(Player* owner) const } } -bool Pet::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 petId) +bool Pet::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 petId) { ASSERT(map); SetMap(map); diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index e47bf22019..85c1f83d4a 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -55,7 +55,7 @@ class Pet : public Guardian bool IsPermanentPetFor(Player* owner) const; // pet have tab in character windows and set UNIT_FIELD_PETNUMBER - bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 pet_number); + bool Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 pet_number); bool CreateBaseAtCreature(Creature* creature); bool CreateBaseAtCreatureInfo(CreatureTemplate const* cinfo, Unit* owner); bool CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phaseMask); @@ -63,7 +63,7 @@ class Pet : public Guardian bool IsLoading() const override { return m_loading;} void SavePetToDB(PetSaveMode mode); void Remove(PetSaveMode mode, bool returnreagent = false); - static void DeleteFromDB(uint32 guidlow); + static void DeleteFromDB(ObjectGuid::LowType guidlow); void setDeathState(DeathState s) override; // overwrite virtual Creature::setDeathState and Unit::setDeathState void Update(uint32 diff) override; // overwrite virtual Creature::Update and Unit::Update diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1be3c2454b..253ca5ad38 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -957,7 +957,7 @@ void Player::CleanupsBeforeDelete(bool finalCleanup) itr->second.save->RemovePlayer(this); } -bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo) +bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo) { //FIXME: outfitId not used in player creating /// @todo need more checks against packet modifications @@ -1961,7 +1961,7 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data) Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint8 plrRace = fields[2].GetUInt8(); uint8 plrClass = fields[3].GetUInt8(); uint8 gender = fields[4].GetUInt8(); @@ -3416,7 +3416,7 @@ void Player::RemoveMail(uint32 id) } } -void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError, uint32 item_guid, uint32 item_count) +void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError, ObjectGuid::LowType item_guid, uint32 item_count) { WorldPacket data(SMSG_SEND_MAIL_RESULT, (4+4+4+(mailError == MAIL_ERR_EQUIP_ERROR?4:(mailAction == MAIL_ITEM_TAKEN?4+4:0)))); data << (uint32) mailId; @@ -4523,7 +4523,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe updateRealmChars = false; // Convert guid to low GUID for CharacterNameData, but also other methods on success - uint32 guid = playerguid.GetCounter(); + ObjectGuid::LowType guid = playerguid.GetCounter(); uint32 charDelete_method = sWorld->getIntConfig(CONFIG_CHARDELETE_METHOD); if (deleteFinally) @@ -4539,7 +4539,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe charDelete_method = CHAR_DELETE_REMOVE; } - if (uint32 guildId = GetGuildIdFromDB(playerguid)) + if (ObjectGuid::LowType guildId = GetGuildIdFromDB(playerguid)) if (Guild* guild = sGuildMgr->GetGuildById(guildId)) guild->DeleteMember(playerguid, false, false, true); @@ -4617,7 +4617,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe do { Field* itemFields = resultItems->Fetch(); - uint32 item_guidlow = itemFields[11].GetUInt32(); + ObjectGuid::LowType item_guidlow = itemFields[11].GetUInt32(); uint32 item_template = itemFields[12].GetUInt32(); ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(item_template); @@ -4664,7 +4664,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe { do { - uint32 petguidlow = (*resultPets)[0].GetUInt32(); + ObjectGuid::LowType petguidlow = (*resultPets)[0].GetUInt32(); Pet::DeleteFromDB(petguidlow); } while (resultPets->NextRow()); } @@ -7232,7 +7232,7 @@ void Player::ModifyArenaPoints(int32 value, SQLTransaction trans) } } -uint32 Player::GetGuildIdFromDB(ObjectGuid guid) +ObjectGuid::LowType Player::GetGuildIdFromDB(ObjectGuid guid) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_MEMBER); stmt->setUInt32(0, guid.GetCounter()); @@ -7286,7 +7286,7 @@ uint32 Player::GetArenaTeamIdFromDB(ObjectGuid guid, uint8 type) uint32 Player::GetZoneIdFromDB(ObjectGuid guid) { - uint32 guidLow = guid.GetCounter(); + ObjectGuid::LowType guidLow = guid.GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_ZONE); stmt->setUInt32(0, guidLow); PreparedQueryResult result = CharacterDatabase.Query(stmt); @@ -16895,7 +16895,7 @@ bool Player::HasPvPForcingQuest() const /*** LOAD SYSTEM ***/ /*********************************************************/ -void Player::Initialize(uint32 guid) +void Player::Initialize(ObjectGuid::LowType guid) { Object::_Create(guid, 0, HighGuid::Player); } @@ -17218,7 +17218,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) InitPrimaryProfessions(); // to max set before any spell loaded // init saved position, and fix it later if problematic - uint32 transLowGUID = fields[30].GetUInt32(); + ObjectGuid::LowType transLowGUID = fields[30].GetUInt32(); Relocate(fields[12].GetFloat(), fields[13].GetFloat(), fields[14].GetFloat(), fields[16].GetFloat()); uint32 mapId = fields[15].GetUInt16(); uint32 instanceId = fields[58].GetUInt32(); @@ -17970,8 +17970,8 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) { uint32 zoneId = GetZoneId(); - std::map bagMap; // fast guid lookup for bags - std::map invalidBagMap; // fast guid lookup for bags + std::map bagMap; // fast guid lookup for bags + std::map invalidBagMap; // fast guid lookup for bags std::list problematicItems; SQLTransaction trans = CharacterDatabase.BeginTransaction(); @@ -17982,7 +17982,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) Field* fields = result->Fetch(); if (Item* item = _LoadItem(trans, zoneId, timeDiff, fields)) { - uint32 bagGuid = fields[11].GetUInt32(); + ObjectGuid::LowType bagGuid = fields[11].GetUInt32(); uint8 slot = fields[12].GetUInt8(); uint8 err = EQUIP_ERR_OK; @@ -18030,7 +18030,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) { item->SetSlot(NULL_SLOT); // Item is in the bag, find the bag - std::map::iterator itr = bagMap.find(bagGuid); + std::map::iterator itr = bagMap.find(bagGuid); if (itr != bagMap.end()) { ItemPosCountVec dest; @@ -18040,7 +18040,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) } else if (invalidBagMap.find(bagGuid) != invalidBagMap.end()) { - std::map::iterator invalidBagItr = invalidBagMap.find(bagGuid); + std::map::iterator invalidBagItr = invalidBagMap.find(bagGuid); if (std::find(problematicItems.begin(), problematicItems.end(), invalidBagItr->second) != problematicItems.end()) err = EQUIP_ERR_INT_BAG_ERROR; } @@ -18092,7 +18092,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, Field* fields) { Item* item = NULL; - uint32 itemGuid = fields[13].GetUInt32(); + ObjectGuid::LowType itemGuid = fields[13].GetUInt32(); uint32 itemEntry = fields[14].GetUInt32(); if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemEntry)) { @@ -18230,7 +18230,7 @@ void Player::_LoadMailedItems(Mail* mail) { Field* fields = result->Fetch(); - uint32 itemGuid = fields[11].GetUInt32(); + ObjectGuid::LowType itemGuid = fields[11].GetUInt32(); uint32 itemTemplate = fields[12].GetUInt32(); mail->AddItem(itemGuid, itemTemplate); @@ -19157,7 +19157,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setFloat(index++, finiteAlways(GetTransOffsetY())); stmt->setFloat(index++, finiteAlways(GetTransOffsetZ())); stmt->setFloat(index++, finiteAlways(GetTransOffsetO())); - uint32 transLowGUID = 0; + ObjectGuid::LowType transLowGUID = 0; if (GetTransport()) transLowGUID = GetTransport()->GetGUID().GetCounter(); stmt->setUInt32(index++, transLowGUID); @@ -19277,7 +19277,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setFloat(index++, finiteAlways(GetTransOffsetY())); stmt->setFloat(index++, finiteAlways(GetTransOffsetZ())); stmt->setFloat(index++, finiteAlways(GetTransOffsetO())); - uint32 transLowGUID = 0; + ObjectGuid::LowType transLowGUID = 0; if (GetTransport()) transLowGUID = GetTransport()->GetGUID().GetCounter(); stmt->setUInt32(index++, transLowGUID); @@ -19573,7 +19573,7 @@ void Player::_SaveInventory(SQLTransaction& trans) if (m_itemUpdateQueue.empty()) return; - uint32 lowGuid = GetGUID().GetCounter(); + ObjectGuid::LowType lowGuid = GetGUID().GetCounter(); for (size_t i = 0; i < m_itemUpdateQueue.size(); ++i) { Item* item = m_itemUpdateQueue[i]; @@ -19581,14 +19581,14 @@ void Player::_SaveInventory(SQLTransaction& trans) continue; Bag* container = item->GetContainer(); - uint32 bag_guid = container ? container->GetGUID().GetCounter() : 0; + ObjectGuid::LowType bag_guid = container ? container->GetGUID().GetCounter() : 0; if (item->GetState() != ITEM_REMOVED) { Item* test = GetItemByPos(item->GetBagSlot(), item->GetSlot()); if (test == NULL) { - uint32 bagTestGUID = 0; + ObjectGuid::LowType bagTestGUID = 0; if (Item* test2 = GetItemByPos(INVENTORY_SLOT_BAG_0, item->GetBagSlot())) bagTestGUID = test2->GetGUID().GetCounter(); TC_LOG_ERROR("entities.player", "Player(GUID: %u Name: %s)::_SaveInventory - the bag(%u) and slot(%u) values for the item with guid %u (state %d) are incorrect, the player doesn't have an item at that position!", lowGuid, GetName().c_str(), item->GetBagSlot(), item->GetSlot(), item->GetGUID().GetCounter(), (int32)item->GetState()); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0c1fdd8f03..2c3dbc331c 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1118,7 +1118,7 @@ class Player : public Unit, public GridObject void SetSummonPoint(uint32 mapid, float x, float y, float z); void SummonIfPossible(bool agree); - bool Create(uint32 guidlow, CharacterCreateInfo* createInfo); + bool Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo); void Update(uint32 time) override; @@ -1484,7 +1484,7 @@ class Player : public Unit, public GridObject bool LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder); bool IsLoading() const override; - void Initialize(uint32 guid); + void Initialize(ObjectGuid::LowType guid); static uint32 GetUInt32ValueFromArray(Tokenizer const& data, uint16 index); static float GetFloatValueFromArray(Tokenizer const& data, uint16 index); static uint32 GetZoneIdFromDB(ObjectGuid guid); @@ -1550,7 +1550,7 @@ class Player : public Unit, public GridObject void ClearComboPoints(); void SendComboPoints(); - void SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError = 0, uint32 item_guid = 0, uint32 item_count = 0); + void SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError = 0, ObjectGuid::LowType item_guid = 0, uint32 item_count = 0); void SendNewMail(); void UpdateNextMailTimeAndUnreads(); void AddNewMailDeliverTime(time_t deliver_time); @@ -1716,7 +1716,7 @@ class Player : public Unit, public GridObject void SetGuildIdInvited(uint32 GuildId) { m_GuildIdInvited = GuildId; } uint32 GetGuildId() const { return GetUInt32Value(PLAYER_GUILDID); } Guild* GetGuild(); - static uint32 GetGuildIdFromDB(ObjectGuid guid); + static ObjectGuid::LowType GetGuildIdFromDB(ObjectGuid guid); static uint8 GetRankFromDB(ObjectGuid guid); int GetGuildIdInvited() const { return m_GuildIdInvited; } static void RemovePetitionsAndSigns(ObjectGuid guid, uint32 type); diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp index e7989c405a..b65584a435 100644 --- a/src/server/game/Entities/Player/SocialMgr.cpp +++ b/src/server/game/Entities/Player/SocialMgr.cpp @@ -40,7 +40,7 @@ uint32 PlayerSocial::GetNumberOfSocialsWithFlag(SocialFlag flag) return counter; } -bool PlayerSocial::AddToSocialList(uint32 friendGuid, bool ignore) +bool PlayerSocial::AddToSocialList(ObjectGuid::LowType friendGuid, bool ignore) { // check client limits if (ignore) @@ -88,7 +88,7 @@ bool PlayerSocial::AddToSocialList(uint32 friendGuid, bool ignore) return true; } -void PlayerSocial::RemoveFromSocialList(uint32 friendGuid, bool ignore) +void PlayerSocial::RemoveFromSocialList(ObjectGuid::LowType friendGuid, bool ignore) { PlayerSocialMap::iterator itr = m_playerSocialMap.find(friendGuid); if (itr == m_playerSocialMap.end()) // not exist @@ -122,7 +122,7 @@ void PlayerSocial::RemoveFromSocialList(uint32 friendGuid, bool ignore) } } -void PlayerSocial::SetFriendNote(uint32 friendGuid, std::string note) +void PlayerSocial::SetFriendNote(ObjectGuid::LowType friendGuid, std::string note) { PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid); if (itr == m_playerSocialMap.end()) // not exist @@ -175,7 +175,7 @@ void PlayerSocial::SendSocialList(Player* player) TC_LOG_DEBUG("network", "WORLD: Sent SMSG_CONTACT_LIST"); } -bool PlayerSocial::HasFriend(uint32 friendGuid) +bool PlayerSocial::HasFriend(ObjectGuid::LowType friendGuid) { PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(friendGuid); if (itr != m_playerSocialMap.end()) @@ -183,7 +183,7 @@ bool PlayerSocial::HasFriend(uint32 friendGuid) return false; } -bool PlayerSocial::HasIgnore(uint32 ignore_guid) +bool PlayerSocial::HasIgnore(ObjectGuid::LowType ignore_guid) { PlayerSocialMap::const_iterator itr = m_playerSocialMap.find(ignore_guid); if (itr != m_playerSocialMap.end()) @@ -195,7 +195,7 @@ SocialMgr::SocialMgr() { } SocialMgr::~SocialMgr() { } -void SocialMgr::GetFriendInfo(Player* player, uint32 friendGUID, FriendInfo &friendInfo) +void SocialMgr::GetFriendInfo(Player* player, ObjectGuid::LowType friendGUID, FriendInfo &friendInfo) { if (!player) return; @@ -239,14 +239,14 @@ void SocialMgr::GetFriendInfo(Player* player, uint32 friendGUID, FriendInfo &fri } } -void SocialMgr::MakeFriendStatusPacket(FriendsResult result, uint32 guid, WorldPacket* data) +void SocialMgr::MakeFriendStatusPacket(FriendsResult result, ObjectGuid::LowType guid, WorldPacket* data) { data->Initialize(SMSG_FRIEND_STATUS, 9); *data << uint8(result); *data << uint64(guid); } -void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, uint32 friendGuid, bool broadcast) +void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid::LowType friendGuid, bool broadcast) { FriendInfo fi; @@ -310,7 +310,7 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet) } } -PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, uint32 guid) +PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, ObjectGuid::LowType guid) { PlayerSocial *social = &m_socialMap[guid]; social->SetPlayerGUID(guid); @@ -318,7 +318,7 @@ PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, uint32 guid) if (!result) return social; - uint32 friendGuid = 0; + ObjectGuid::LowType friendGuid = 0; uint8 flags = 0; std::string note = ""; diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h index 5bf336a9ab..c6a68ff5f4 100644 --- a/src/server/game/Entities/Player/SocialMgr.h +++ b/src/server/game/Entities/Player/SocialMgr.h @@ -60,8 +60,8 @@ struct FriendInfo { } }; -typedef std::map PlayerSocialMap; -typedef std::map SocialMap; +typedef std::map PlayerSocialMap; +typedef std::map SocialMap; /// Results of friend related commands enum FriendsResult @@ -104,20 +104,20 @@ class PlayerSocial public: PlayerSocial(); // adding/removing - bool AddToSocialList(uint32 friend_guid, bool ignore); - void RemoveFromSocialList(uint32 friend_guid, bool ignore); - void SetFriendNote(uint32 friendGuid, std::string note); + bool AddToSocialList(ObjectGuid::LowType friendGuid, bool ignore); + void RemoveFromSocialList(ObjectGuid::LowType friend_guid, bool ignore); + void SetFriendNote(ObjectGuid::LowType friendGuid, std::string note); // Packet send's void SendSocialList(Player* player); // Misc - bool HasFriend(uint32 friend_guid); - bool HasIgnore(uint32 ignore_guid); - uint32 GetPlayerGUID() const { return m_playerGUID; } - void SetPlayerGUID(uint32 guid) { m_playerGUID = guid; } + bool HasFriend(ObjectGuid::LowType friend_guid); + bool HasIgnore(ObjectGuid::LowType ignore_guid); + ObjectGuid::LowType GetPlayerGUID() const { return m_playerGUID; } + void SetPlayerGUID(ObjectGuid::LowType guid) { m_playerGUID = guid; } uint32 GetNumberOfSocialsWithFlag(SocialFlag flag); private: PlayerSocialMap m_playerSocialMap; - uint32 m_playerGUID; + ObjectGuid::LowType m_playerGUID; }; class SocialMgr @@ -134,15 +134,15 @@ class SocialMgr } // Misc - void RemovePlayerSocial(uint32 guid) { m_socialMap.erase(guid); } + void RemovePlayerSocial(ObjectGuid::LowType guid) { m_socialMap.erase(guid); } - void GetFriendInfo(Player* player, uint32 friendGUID, FriendInfo &friendInfo); + void GetFriendInfo(Player* player, ObjectGuid::LowType friendGUID, FriendInfo &friendInfo); // Packet management - void MakeFriendStatusPacket(FriendsResult result, uint32 friend_guid, WorldPacket* data); - void SendFriendStatus(Player* player, FriendsResult result, uint32 friend_guid, bool broadcast); + void MakeFriendStatusPacket(FriendsResult result, ObjectGuid::LowType friend_guid, WorldPacket* data); + void SendFriendStatus(Player* player, FriendsResult result, ObjectGuid::LowType friend_guid, bool broadcast); void BroadcastToFriendListers(Player* player, WorldPacket* packet); // Loading - PlayerSocial *LoadFromDB(PreparedQueryResult result, uint32 guid); + PlayerSocial *LoadFromDB(PreparedQueryResult result, ObjectGuid::LowType guid); private: SocialMap m_socialMap; }; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 144805b88b..99459dce81 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -43,7 +43,7 @@ Transport::~Transport() UnloadStaticPassengers(); } -bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress) +bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress) { Relocate(x, y, z, ang); @@ -281,7 +281,7 @@ void Transport::RemovePassenger(WorldObject* passenger) } } -Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data) +Creature* Transport::CreateNPCPassenger(ObjectGuid::LowType guid, CreatureData const* data) { Map* map = GetMap(); Creature* creature = new Creature(); @@ -328,7 +328,7 @@ Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data) return creature; } -GameObject* Transport::CreateGOPassenger(uint32 guid, GameObjectData const* data) +GameObject* Transport::CreateGOPassenger(ObjectGuid::LowType guid, GameObjectData const* data) { Map* map = GetMap(); GameObject* go = new GameObject(); diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index c56ceb1696..3a2d0e4a7b 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -27,7 +27,7 @@ struct CreatureData; class Transport : public GameObject, public TransportBase { - friend Transport* TransportMgr::CreateTransport(uint32, uint32, Map*); + friend Transport* TransportMgr::CreateTransport(uint32, ObjectGuid::LowType, Map*); Transport(); public: @@ -35,7 +35,7 @@ class Transport : public GameObject, public TransportBase ~Transport(); - bool Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress); + bool Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, float x, float y, float z, float ang, uint32 animprogress); void CleanupsBeforeDelete(bool finalCleanup = true) override; void Update(uint32 diff) override; @@ -47,8 +47,8 @@ class Transport : public GameObject, public TransportBase void RemovePassenger(WorldObject* passenger); PassengerSet const& GetPassengers() const { return _passengers; } - Creature* CreateNPCPassenger(uint32 guid, CreatureData const* data); - GameObject* CreateGOPassenger(uint32 guid, GameObjectData const* data); + Creature* CreateNPCPassenger(ObjectGuid::LowType guid, CreatureData const* data); + GameObject* CreateGOPassenger(ObjectGuid::LowType guid, GameObjectData const* data); /** * @fn bool Transport::SummonPassenger(uint64, Position const&, TempSummonType, SummonPropertiesEntry const*, uint32, Unit*, uint32, uint32) diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 8f2d0491a9..9e5e7ff999 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -371,7 +371,7 @@ void GameEventMgr::LoadFromDB() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); int16 event_id = fields[1].GetInt8(); int32 internal_event_id = mGameEvent.size() + event_id - 1; @@ -417,7 +417,7 @@ void GameEventMgr::LoadFromDB() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); int16 event_id = fields[1].GetInt8(); int32 internal_event_id = mGameEvent.size() + event_id - 1; @@ -463,7 +463,7 @@ void GameEventMgr::LoadFromDB() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint32 entry = fields[1].GetUInt32(); uint16 event_id = fields[2].GetUInt8(); @@ -712,7 +712,7 @@ void GameEventMgr::LoadFromDB() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint16 event_id = fields[1].GetUInt8(); uint32 npcflag = fields[2].GetUInt32(); @@ -798,7 +798,7 @@ void GameEventMgr::LoadFromDB() NPCVendorList& vendors = mGameEventVendors[event_id]; NPCVendorEntry newEntry; - uint32 guid = fields[1].GetUInt32(); + ObjectGuid::LowType guid = fields[1].GetUInt32(); newEntry.item = fields[2].GetUInt32(); newEntry.maxcount = fields[3].GetUInt32(); newEntry.incrtime = fields[4].GetUInt32(); @@ -917,7 +917,7 @@ void GameEventMgr::LoadFromDB() uint32 GameEventMgr::GetNPCFlag(Creature* cr) { uint32 mask = 0; - uint32 guid = cr->GetSpawnId(); + ObjectGuid::LowType guid = cr->GetSpawnId(); for (ActiveEvents::iterator e_itr = m_ActiveEvents.begin(); e_itr != m_ActiveEvents.end(); ++e_itr) { @@ -1400,7 +1400,7 @@ bool GameEventMgr::hasGameObjectQuestActiveEventExcept(uint32 quest_id, uint16 e } return false; } -bool GameEventMgr::hasCreatureActiveEventExcept(uint32 creature_id, uint16 event_id) +bool GameEventMgr::hasCreatureActiveEventExcept(ObjectGuid::LowType creature_id, uint16 event_id) { for (ActiveEvents::iterator e_itr = m_ActiveEvents.begin(); e_itr != m_ActiveEvents.end(); ++e_itr) { @@ -1416,7 +1416,7 @@ bool GameEventMgr::hasCreatureActiveEventExcept(uint32 creature_id, uint16 event } return false; } -bool GameEventMgr::hasGameObjectActiveEventExcept(uint32 go_id, uint16 event_id) +bool GameEventMgr::hasGameObjectActiveEventExcept(ObjectGuid::LowType go_id, uint16 event_id) { for (ActiveEvents::iterator e_itr = m_ActiveEvents.begin(); e_itr != m_ActiveEvents.end(); ++e_itr) { diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index eb29e463a4..aaeaa3613a 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -144,14 +144,14 @@ class GameEventMgr void SaveWorldEventStateToDB(uint16 event_id); bool hasCreatureQuestActiveEventExcept(uint32 quest_id, uint16 event_id); bool hasGameObjectQuestActiveEventExcept(uint32 quest_id, uint16 event_id); - bool hasCreatureActiveEventExcept(uint32 creature_guid, uint16 event_id); - bool hasGameObjectActiveEventExcept(uint32 go_guid, uint16 event_id); + bool hasCreatureActiveEventExcept(ObjectGuid::LowType creature_guid, uint16 event_id); + bool hasGameObjectActiveEventExcept(ObjectGuid::LowType go_guid, uint16 event_id); - typedef std::list GuidList; + typedef std::list GuidList; typedef std::list IdList; typedef std::vector GameEventGuidMap; typedef std::vector GameEventIdMap; - typedef std::pair ModelEquipPair; + typedef std::pair ModelEquipPair; typedef std::list ModelEquipList; typedef std::vector GameEventModelEquipMap; typedef std::pair QuestRelation; @@ -160,7 +160,7 @@ class GameEventMgr typedef std::list NPCVendorList; typedef std::vector GameEventNPCVendorMap; typedef std::map QuestIdToEventConditionMap; - typedef std::pair GuidNPCFlagPair; + typedef std::pair GuidNPCFlagPair; typedef std::list NPCFlagList; typedef std::vector GameEventNPCFlagMap; typedef std::vector GameEventBitmask; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index b5d8d08a6a..db352ec80d 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -961,7 +961,7 @@ void ObjectMgr::LoadCreatureAddons() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); CreatureData const* creData = GetCreatureData(guid); if (!creData) @@ -1084,7 +1084,7 @@ GameObjectAddon const* ObjectMgr::GetGameObjectAddon(ObjectGuid::LowType lowguid return NULL; } -CreatureAddon const* ObjectMgr::GetCreatureAddon(uint32 lowguid) +CreatureAddon const* ObjectMgr::GetCreatureAddon(ObjectGuid::LowType lowguid) { CreatureAddonContainer::const_iterator itr = _creatureAddonStore.find(lowguid); if (itr != _creatureAddonStore.end()) @@ -1338,8 +1338,8 @@ void ObjectMgr::LoadLinkedRespawn() { Field* fields = result->Fetch(); - uint32 guidLow = fields[0].GetUInt32(); - uint32 linkedGuidLow = fields[1].GetUInt32(); + ObjectGuid::LowType guidLow = fields[0].GetUInt32(); + ObjectGuid::LowType linkedGuidLow = fields[1].GetUInt32(); uint8 linkType = fields[2].GetUInt8(); ObjectGuid guid, linkedGuid; @@ -1504,7 +1504,7 @@ void ObjectMgr::LoadLinkedRespawn() TC_LOG_INFO("server.loading", ">> Loaded " UI64FMTD " linked respawns in %u ms", uint64(_linkedRespawnStore.size()), GetMSTimeDiffToNow(oldMSTime)); } -bool ObjectMgr::SetCreatureLinkedRespawn(uint32 guidLow, uint32 linkedGuidLow) +bool ObjectMgr::SetCreatureLinkedRespawn(ObjectGuid::LowType guidLow, ObjectGuid::LowType linkedGuidLow) { if (!guidLow) return false; @@ -1672,7 +1672,7 @@ void ObjectMgr::LoadCreatures() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint32 entry = fields[1].GetUInt32(); CreatureTemplate const* cInfo = GetCreatureTemplate(entry); @@ -1803,7 +1803,7 @@ void ObjectMgr::LoadCreatures() TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " creatures in %u ms", _creatureDataStore.size(), GetMSTimeDiffToNow(oldMSTime)); } -void ObjectMgr::AddCreatureToGrid(uint32 guid, CreatureData const* data) +void ObjectMgr::AddCreatureToGrid(ObjectGuid::LowType guid, CreatureData const* data) { uint8 mask = data->spawnMask; for (uint8 i = 0; mask != 0; i++, mask >>= 1) @@ -1817,7 +1817,7 @@ void ObjectMgr::AddCreatureToGrid(uint32 guid, CreatureData const* data) } } -void ObjectMgr::RemoveCreatureFromGrid(uint32 guid, CreatureData const* data) +void ObjectMgr::RemoveCreatureFromGrid(ObjectGuid::LowType guid, CreatureData const* data) { uint8 mask = data->spawnMask; for (uint8 i = 0; mask != 0; i++, mask >>= 1) @@ -1831,7 +1831,7 @@ void ObjectMgr::RemoveCreatureFromGrid(uint32 guid, CreatureData const* data) } } -uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay, float rotation0, float rotation1, float rotation2, float rotation3) +ObjectGuid::LowType ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay, float rotation0, float rotation1, float rotation2, float rotation3) { GameObjectTemplate const* goinfo = GetGameObjectTemplate(entry); if (!goinfo) @@ -1841,7 +1841,7 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float if (!map) return 0; - uint32 guid = GenerateGameObjectSpawnId(); + ObjectGuid::LowType guid = GenerateGameObjectSpawnId(); GameObjectData& data = NewGOData(guid); data.id = entry; @@ -1883,7 +1883,7 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float } -uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay /*= 0*/) +ObjectGuid::LowType ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y, float z, float o, uint32 spawntimedelay /*= 0*/) { CreatureTemplate const* cInfo = GetCreatureTemplate(entry); if (!cInfo) @@ -1895,7 +1895,7 @@ uint32 ObjectMgr::AddCreatureData(uint32 entry, uint32 mapId, float x, float y, if (!map) return 0; - uint32 guid = GenerateCreatureSpawnId(); + ObjectGuid::LowType guid = GenerateCreatureSpawnId(); CreatureData& data = NewOrExistCreatureData(guid); data.id = entry; data.mapid = mapId; @@ -1966,7 +1966,7 @@ void ObjectMgr::LoadGameobjects() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint32 entry = fields[1].GetUInt32(); GameObjectTemplate const* gInfo = GetGameObjectTemplate(entry); @@ -2094,7 +2094,7 @@ void ObjectMgr::LoadGameobjects() TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " gameobjects in %u ms", _gameObjectDataStore.size(), GetMSTimeDiffToNow(oldMSTime)); } -void ObjectMgr::AddGameobjectToGrid(uint32 guid, GameObjectData const* data) +void ObjectMgr::AddGameobjectToGrid(ObjectGuid::LowType guid, GameObjectData const* data) { uint8 mask = data->spawnMask; for (uint8 i = 0; mask != 0; i++, mask >>= 1) @@ -2108,7 +2108,7 @@ void ObjectMgr::AddGameobjectToGrid(uint32 guid, GameObjectData const* data) } } -void ObjectMgr::RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data) +void ObjectMgr::RemoveGameobjectFromGrid(ObjectGuid::LowType guid, GameObjectData const* data) { uint8 mask = data->spawnMask; for (uint8 i = 0; mask != 0; i++, mask >>= 1) @@ -2122,7 +2122,7 @@ void ObjectMgr::RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data } } -Player* ObjectMgr::GetPlayerByLowGUID(uint32 lowguid) const +Player* ObjectMgr::GetPlayerByLowGUID(ObjectGuid::LowType lowguid) const { ObjectGuid guid(HighGuid::Player, lowguid); return ObjectAccessor::FindPlayer(guid); @@ -7338,7 +7338,7 @@ void ObjectMgr::LoadNPCSpellClickSpells() TC_LOG_INFO("server.loading", ">> Loaded %u spellclick definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } -void ObjectMgr::DeleteCreatureData(uint32 guid) +void ObjectMgr::DeleteCreatureData(ObjectGuid::LowType guid) { // remove mapid*cellid -> guid_set map CreatureData const* data = GetCreatureData(guid); @@ -7348,7 +7348,7 @@ void ObjectMgr::DeleteCreatureData(uint32 guid) _creatureDataStore.erase(guid); } -void ObjectMgr::DeleteGOData(uint32 guid) +void ObjectMgr::DeleteGOData(ObjectGuid::LowType guid) { // remove mapid*cellid -> guid_set map GameObjectData const* data = GetGOData(guid); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 462370001d..cdd974fa01 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -258,7 +258,7 @@ struct ScriptInfo struct // SCRIPT_COMMAND_RESPAWN_GAMEOBJECT (9) { - uint32 GOGuid; // datalong + ObjectGuid::LowType GOGuid; // datalong uint32 DespawnDelay; // datalong2 } RespawnGameobject; @@ -277,7 +277,7 @@ struct ScriptInfo struct // SCRIPT_COMMAND_CLOSE_DOOR (12) // SCRIPT_COMMAND_OPEN_DOOR (11) { - uint32 GOGuid; // datalong + ObjectGuid::LowType GOGuid; // datalong uint32 ResetDelay; // datalong2 } ToggleDoor; @@ -463,8 +463,8 @@ struct TrinityString }; typedef std::map LinkedRespawnContainer; -typedef std::unordered_map CreatureDataContainer; -typedef std::unordered_map GameObjectDataContainer; +typedef std::unordered_map CreatureDataContainer; +typedef std::unordered_map GameObjectDataContainer; typedef std::map > TempSummonDataContainer; typedef std::unordered_map CreatureLocaleContainer; typedef std::unordered_map GameObjectLocaleContainer; @@ -706,7 +706,7 @@ class ObjectMgr typedef std::map CharacterConversionMap; - Player* GetPlayerByLowGUID(uint32 lowguid) const; + Player* GetPlayerByLowGUID(ObjectGuid::LowType lowguid) const; GameObjectTemplate const* GetGameObjectTemplate(uint32 entry); GameObjectTemplateContainer const* GetGameObjectTemplates() const { return &_gameObjectTemplateStore; } @@ -722,7 +722,7 @@ class ObjectMgr static uint32 ChooseDisplayId(CreatureTemplate const* cinfo, CreatureData const* data = NULL); static void ChooseCreatureFlags(CreatureTemplate const* cinfo, uint32& npcflag, uint32& unit_flags, uint32& dynamicflags, CreatureData const* data = NULL); EquipmentInfo const* GetEquipmentInfo(uint32 entry, int8& id); - CreatureAddon const* GetCreatureAddon(uint32 lowguid); + CreatureAddon const* GetCreatureAddon(ObjectGuid::LowType lowguid); GameObjectAddon const* GetGameObjectAddon(ObjectGuid::LowType lowguid); CreatureAddon const* GetCreatureTemplateAddon(uint32 entry); ItemTemplate const* GetItemTemplate(uint32 entry); @@ -984,7 +984,7 @@ class ObjectMgr void LoadTempSummons(); void LoadCreatures(); void LoadLinkedRespawn(); - bool SetCreatureLinkedRespawn(uint32 guid, uint32 linkedGuid); + bool SetCreatureLinkedRespawn(ObjectGuid::LowType guid, ObjectGuid::LowType linkedGuid); void LoadCreatureAddons(); void LoadGameObjectAddons(); void LoadCreatureModelInfo(); @@ -1127,14 +1127,14 @@ class ObjectMgr return NULL; } - CreatureData const* GetCreatureData(uint32 guid) const + CreatureData const* GetCreatureData(ObjectGuid::LowType guid) const { CreatureDataContainer::const_iterator itr = _creatureDataStore.find(guid); if (itr == _creatureDataStore.end()) return NULL; return &itr->second; } - CreatureData& NewOrExistCreatureData(uint32 guid) { return _creatureDataStore[guid]; } - void DeleteCreatureData(uint32 guid); + CreatureData& NewOrExistCreatureData(ObjectGuid::LowType guid) { return _creatureDataStore[guid]; } + void DeleteCreatureData(ObjectGuid::LowType guid); ObjectGuid GetLinkedRespawnGuid(ObjectGuid guid) const { LinkedRespawnContainer::const_iterator itr = _linkedRespawnStore.find(guid); @@ -1196,14 +1196,14 @@ class ObjectMgr return &itr->second; } - GameObjectData const* GetGOData(uint32 guid) const + GameObjectData const* GetGOData(ObjectGuid::LowType guid) const { GameObjectDataContainer::const_iterator itr = _gameObjectDataStore.find(guid); if (itr == _gameObjectDataStore.end()) return NULL; return &itr->second; } - GameObjectData& NewGOData(uint32 guid) { return _gameObjectDataStore[guid]; } - void DeleteGOData(uint32 guid); + GameObjectData& NewGOData(ObjectGuid::LowType guid) { return _gameObjectDataStore[guid]; } + void DeleteGOData(ObjectGuid::LowType guid); TrinityString const* GetTrinityString(uint32 entry) const { @@ -1218,12 +1218,12 @@ class ObjectMgr void SetDBCLocaleIndex(LocaleConstant locale) { DBCLocaleIndex = locale; } // grid objects - void AddCreatureToGrid(uint32 guid, CreatureData const* data); - void RemoveCreatureFromGrid(uint32 guid, CreatureData const* data); - void AddGameobjectToGrid(uint32 guid, GameObjectData const* data); - void RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data); - uint32 AddGOData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0); - uint32 AddCreatureData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0); + void AddCreatureToGrid(ObjectGuid::LowType guid, CreatureData const* data); + void RemoveCreatureFromGrid(ObjectGuid::LowType guid, CreatureData const* data); + void AddGameobjectToGrid(ObjectGuid::LowType guid, GameObjectData const* data); + void RemoveGameobjectFromGrid(ObjectGuid::LowType guid, GameObjectData const* data); + ObjectGuid::LowType AddGOData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0); + ObjectGuid::LowType AddCreatureData(uint32 entry, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0); // reserved names void LoadReservedPlayersNames(); @@ -1439,7 +1439,7 @@ class ObjectMgr CreatureTemplateContainer _creatureTemplateStore; CreatureModelContainer _creatureModelStore; CreatureAddonContainer _creatureAddonStore; - CreatureAddonContainer _creatureTemplateAddonStore; + CreatureAddonTemplateContainer _creatureTemplateAddonStore; GameObjectAddonContainer _gameObjectAddonStore; GameObjectQuestItemMap _gameObjectQuestItemStore; CreatureQuestItemMap _creatureQuestItemStore; diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index de0ab490e9..efbbf1abf7 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -118,7 +118,7 @@ void LoadHelper(CellGuidSet const& guid_set, CellCoord &cell, GridRefManager for (CellGuidSet::const_iterator i_guid = guid_set.begin(); i_guid != guid_set.end(); ++i_guid) { T* obj = new T; - uint32 guid = *i_guid; + ObjectGuid::LowType guid = *i_guid; //TC_LOG_INFO("misc", "DEBUG: LoadHelper from table: %s for (guid: %u) Loading", table, guid); if (!obj->LoadFromDB(guid, map)) { diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index cc9ef29a8e..5f500156f5 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -91,7 +91,7 @@ Group::~Group() bool Group::Create(Player* leader) { ObjectGuid leaderGuid = leader->GetGUID(); - uint32 lowguid = sGroupMgr->GenerateGroupId(); + ObjectGuid::LowType lowguid = sGroupMgr->GenerateGroupId(); m_guid = ObjectGuid(HighGuid::Group, lowguid); m_leaderGuid = leaderGuid; @@ -198,7 +198,7 @@ void Group::LoadGroupFromDB(Field* fields) sLFGMgr->_LoadFromDB(fields, GetGUID()); } -void Group::LoadMemberFromDB(uint32 guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles) +void Group::LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles) { MemberSlot member; member.guid = ObjectGuid(HighGuid::Player, guidLow); @@ -2224,7 +2224,7 @@ ObjectGuid Group::GetGUID() const return m_guid; } -uint32 Group::GetLowGUID() const +ObjectGuid::LowType Group::GetLowGUID() const { return m_guid.GetCounter(); } diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 732afce951..b814ab0802 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -186,7 +186,7 @@ class Group // group manipulation methods bool Create(Player* leader); void LoadGroupFromDB(Field* field); - void LoadMemberFromDB(uint32 guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles); + void LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles); bool AddInvite(Player* player); void RemoveInvite(Player* player); void RemoveAllInvites(); @@ -211,7 +211,7 @@ class Group bool IsCreated() const; ObjectGuid GetLeaderGUID() const; ObjectGuid GetGUID() const; - uint32 GetLowGUID() const; + ObjectGuid::LowType GetLowGUID() const; const char * GetLeaderName() const; LootMethod GetLootMethod() const; ObjectGuid GetLooterGuid() const; diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp index ab80a20876..b8c8157b6d 100644 --- a/src/server/game/Groups/GroupMgr.cpp +++ b/src/server/game/Groups/GroupMgr.cpp @@ -82,7 +82,7 @@ Group* GroupMgr::GetGroupByDbStoreId(uint32 storageId) const return NULL; } -uint32 GroupMgr::GenerateGroupId() +ObjectGuid::LowType GroupMgr::GenerateGroupId() { if (NextGroupId >= 0xFFFFFFFE) { @@ -92,7 +92,7 @@ uint32 GroupMgr::GenerateGroupId() return NextGroupId++; } -Group* GroupMgr::GetGroupByGUID(uint32 groupId) const +Group* GroupMgr::GetGroupByGUID(ObjectGuid::LowType groupId) const { GroupContainer::const_iterator itr = GroupStore.find(groupId); if (itr != GroupStore.end()) diff --git a/src/server/game/Groups/GroupMgr.h b/src/server/game/Groups/GroupMgr.h index 737c1771c1..ec02de16bc 100644 --- a/src/server/game/Groups/GroupMgr.h +++ b/src/server/game/Groups/GroupMgr.h @@ -33,10 +33,10 @@ public: return &instance; } - typedef std::map GroupContainer; + typedef std::map GroupContainer; typedef std::vector GroupDbContainer; - Group* GetGroupByGUID(uint32 guid) const; + Group* GetGroupByGUID(ObjectGuid::LowType guid) const; uint32 GenerateNewGroupDbStoreId(); void RegisterGroupDbStoreId(uint32 storageId, Group* group); @@ -46,13 +46,13 @@ public: void SetGroupDbStoreSize(uint32 newSize) { GroupDbStore.resize(newSize); } void LoadGroups(); - uint32 GenerateGroupId(); + ObjectGuid::LowType GenerateGroupId(); void AddGroup(Group* group); void RemoveGroup(Group* group); protected: - uint32 NextGroupId; + ObjectGuid::LowType NextGroupId; uint32 NextGroupDbStoreId; GroupContainer GroupStore; GroupDbContainer GroupDbStore; diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index fab22b30f4..d2fcad512b 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -395,7 +395,7 @@ void Guild::BankTab::LoadFromDB(Field* fields) bool Guild::BankTab::LoadItemFromDB(Field* fields) { uint8 slotId = fields[13].GetUInt8(); - uint32 itemGuid = fields[14].GetUInt32(); + ObjectGuid::LowType itemGuid = fields[14].GetUInt32(); uint32 itemEntry = fields[15].GetUInt32(); if (slotId >= GUILD_BANK_MAX_SLOTS) { @@ -784,7 +784,7 @@ void EmblemInfo::WritePacket(WorldPacket& data) const data << uint32(m_backgroundColor); } -void EmblemInfo::SaveToDB(uint32 guildId) const +void EmblemInfo::SaveToDB(ObjectGuid::LowType guildId) const { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GUILD_EMBLEM_INFO); stmt->setUInt32(0, m_style); @@ -1972,7 +1972,7 @@ void Guild::LoadRankFromDB(Field* fields) bool Guild::LoadMemberFromDB(Field* fields) { - uint32 lowguid = fields[1].GetUInt32(); + ObjectGuid::LowType lowguid = fields[1].GetUInt32(); Member *member = new Member(m_id, ObjectGuid(HighGuid::Player, lowguid), fields[2].GetUInt8()); if (!member->LoadFromDB(fields)) { @@ -2019,7 +2019,7 @@ bool Guild::LoadBankEventLogFromDB(Field* fields) LogHolder* pLog = m_bankEventLog[tabId]; if (pLog->CanInsert()) { - uint32 guid = fields[2].GetUInt32(); + ObjectGuid::LowType guid = fields[2].GetUInt32(); GuildBankEventLogTypes eventType = GuildBankEventLogTypes(fields[3].GetUInt8()); if (BankEventLogEntry::IsMoneyEvent(eventType)) { @@ -2222,7 +2222,7 @@ bool Guild::AddMember(ObjectGuid guid, uint8 rankId) // This will be prevent attempt to join many guilds and corrupt guild data integrity Player::RemovePetitionsAndSigns(guid, GUILD_CHARTER_TYPE); - uint32 lowguid = guid.GetCounter(); + ObjectGuid::LowType lowguid = guid.GetCounter(); // If rank was not passed, assign lowest possible rank if (rankId == GUILD_RANK_NONE) @@ -2284,7 +2284,7 @@ bool Guild::AddMember(ObjectGuid guid, uint8 rankId) void Guild::DeleteMember(ObjectGuid guid, bool isDisbanding, bool isKicked, bool canDeleteGuild) { - uint32 lowguid = guid.GetCounter(); + ObjectGuid::LowType lowguid = guid.GetCounter(); Player* player = ObjectAccessor::FindConnectedPlayer(guid); // Guild master can be deleted when loading guild and guid doesn't exist in characters table @@ -2635,7 +2635,7 @@ inline bool Guild::_MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 righ } // Add new event log record -inline void Guild::_LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank) +inline void Guild::_LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) { SQLTransaction trans = CharacterDatabase.BeginTransaction(); m_eventLog->AddEvent(trans, new EventLogEntry(m_id, m_eventLog->GetNextGUID(), eventType, playerGuid1, playerGuid2, newRank)); @@ -2645,7 +2645,7 @@ inline void Guild::_LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, u } // Add new bank event log record -void Guild::_LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, uint32 lowguid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) +void Guild::_LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType lowguid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) { if (tabId > GUILD_BANK_MAX_TABS) return; diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index b0ea9e1f4e..ca5ea95ee2 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -229,7 +229,7 @@ public: EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { } void LoadFromDB(Field* fields); - void SaveToDB(uint32 guildId) const; + void SaveToDB(ObjectGuid::LowType guildId) const; void ReadPacket(WorldPacket& recv); void WritePacket(WorldPacket& data) const; @@ -286,7 +286,7 @@ private: class Member { public: - Member(uint32 guildId, ObjectGuid guid, uint8 rankId) : + Member(ObjectGuid::LowType guildId, ObjectGuid guid, uint8 rankId) : m_guildId(guildId), m_guid(guid), m_zoneId(0), @@ -345,7 +345,7 @@ private: inline Player* FindConnectedPlayer() const { return ObjectAccessor::FindConnectedPlayer(m_guid); } private: - uint32 m_guildId; + ObjectGuid::LowType m_guildId; // Fields from characters table ObjectGuid m_guid; std::string m_name; @@ -367,8 +367,8 @@ private: class LogEntry { public: - LogEntry(uint32 guildId, uint32 guid) : m_guildId(guildId), m_guid(guid), m_timestamp(::time(NULL)) { } - LogEntry(uint32 guildId, uint32 guid, time_t timestamp) : m_guildId(guildId), m_guid(guid), m_timestamp(timestamp) { } + LogEntry(ObjectGuid::LowType guildId, uint32 guid) : m_guildId(guildId), m_guid(guid), m_timestamp(::time(NULL)) { } + LogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp) : m_guildId(guildId), m_guid(guid), m_timestamp(timestamp) { } virtual ~LogEntry() { } uint32 GetGUID() const { return m_guid; } @@ -378,7 +378,7 @@ private: virtual void WritePacket(WorldPacket& data) const = 0; protected: - uint32 m_guildId; + ObjectGuid::LowType m_guildId; uint32 m_guid; uint64 m_timestamp; }; @@ -387,10 +387,10 @@ private: class EventLogEntry : public LogEntry { public: - EventLogEntry(uint32 guildId, uint32 guid, GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank) : + EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) : LogEntry(guildId, guid), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { } - EventLogEntry(uint32 guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank) : + EventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) : LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_playerGuid1(playerGuid1), m_playerGuid2(playerGuid2), m_newRank(newRank) { } ~EventLogEntry() { } @@ -400,8 +400,8 @@ private: private: GuildEventLogTypes m_eventType; - uint32 m_playerGuid1; - uint32 m_playerGuid2; + ObjectGuid::LowType m_playerGuid1; + ObjectGuid::LowType m_playerGuid2; uint8 m_newRank; }; @@ -417,11 +417,11 @@ private: eventType == GUILD_BANK_LOG_REPAIR_MONEY; } - BankEventLogEntry(uint32 guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) : + BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) : LogEntry(guildId, guid), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid), m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { } - BankEventLogEntry(uint32 guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) : + BankEventLogEntry(ObjectGuid::LowType guildId, uint32 guid, time_t timestamp, uint8 tabId, GuildBankEventLogTypes eventType, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) : LogEntry(guildId, guid, timestamp), m_eventType(eventType), m_bankTabId(tabId), m_playerGuid(playerGuid), m_itemOrMoney(itemOrMoney), m_itemStackCount(itemStackCount), m_destTabId(destTabId) { } @@ -433,7 +433,7 @@ private: private: GuildBankEventLogTypes m_eventType; uint8 m_bankTabId; - uint32 m_playerGuid; + ObjectGuid::LowType m_playerGuid; uint32 m_itemOrMoney; uint16 m_itemStackCount; uint8 m_destTabId; @@ -470,8 +470,8 @@ private: { public: RankInfo(): m_guildId(0), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { } - RankInfo(uint32 guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { } - RankInfo(uint32 guildId, uint8 rankId, std::string const& name, uint32 rights, uint32 money) : + RankInfo(ObjectGuid::LowType guildId) : m_guildId(guildId), m_rankId(GUILD_RANK_NONE), m_rights(GR_RIGHT_EMPTY), m_bankMoneyPerDay(0) { } + RankInfo(ObjectGuid::LowType guildId, uint8 rankId, std::string const& name, uint32 rights, uint32 money) : m_guildId(guildId), m_rankId(rankId), m_name(name), m_rights(rights), m_bankMoneyPerDay(rankId != GR_GUILDMASTER ? money : GUILD_WITHDRAW_MONEY_UNLIMITED) { } @@ -505,7 +505,7 @@ private: void CreateMissingTabsIfNeeded(uint8 ranks, SQLTransaction& trans, bool logOnCreate = false); private: - uint32 m_guildId; + ObjectGuid::LowType m_guildId; uint8 m_rankId; std::string m_name; @@ -517,7 +517,7 @@ private: class BankTab { public: - BankTab(uint32 guildId, uint8 tabId) : m_guildId(guildId), m_tabId(tabId) + BankTab(ObjectGuid::LowType guildId, uint8 tabId) : m_guildId(guildId), m_tabId(tabId) { memset(m_items, 0, GUILD_BANK_MAX_SLOTS * sizeof(Item*)); } @@ -542,7 +542,7 @@ private: bool SetItem(SQLTransaction& trans, uint8 slotId, Item* pItem); private: - uint32 m_guildId; + ObjectGuid::LowType m_guildId; uint8 m_tabId; Item* m_items[GUILD_BANK_MAX_SLOTS]; @@ -653,7 +653,7 @@ public: void Disband(); // Getters - uint32 GetId() const { return m_id; } + ObjectGuid::LowType GetId() const { return m_id; } ObjectGuid GetLeaderGUID() const { return m_leaderGuid; } std::string const& GetName() const { return m_name; } std::string const& GetMOTD() const { return m_motd; } @@ -745,7 +745,7 @@ public: void ResetTimes(); protected: - uint32 m_id; + ObjectGuid::LowType m_id; std::string m_name; ObjectGuid m_leaderGuid; std::string m_motd; @@ -803,7 +803,7 @@ private: return NULL; } - inline void _DeleteMemberFromDB(uint32 lowguid) const + inline void _DeleteMemberFromDB(ObjectGuid::LowType lowguid) const { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_MEMBER); stmt->setUInt32(0, lowguid); @@ -838,8 +838,8 @@ private: void _UpdateMemberWithdrawSlots(SQLTransaction& trans, ObjectGuid guid, uint8 tabId); bool _MemberHasTabRights(ObjectGuid guid, uint8 tabId, uint32 rights) const; - void _LogEvent(GuildEventLogTypes eventType, uint32 playerGuid1, uint32 playerGuid2 = 0, uint8 newRank = 0); - void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0); + void _LogEvent(GuildEventLogTypes eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2 = 0, uint8 newRank = 0); + void _LogBankEvent(SQLTransaction& trans, GuildBankEventLogTypes eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount = 0, uint8 destTabId = 0); Item* _GetItem(uint8 tabId, uint8 slotId) const; void _RemoveItem(SQLTransaction& trans, uint8 tabId, uint8 slotId); diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index 2603a60ee0..6a75761ded 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -32,12 +32,12 @@ void GuildMgr::AddGuild(Guild* guild) GuildStore[guild->GetId()] = guild; } -void GuildMgr::RemoveGuild(uint32 guildId) +void GuildMgr::RemoveGuild(ObjectGuid::LowType guildId) { GuildStore.erase(guildId); } -uint32 GuildMgr::GenerateGuildId() +ObjectGuid::LowType GuildMgr::GenerateGuildId() { if (NextGuildId >= 0xFFFFFFFE) { @@ -48,7 +48,7 @@ uint32 GuildMgr::GenerateGuildId() } // Guild collection -Guild* GuildMgr::GetGuildById(uint32 guildId) const +Guild* GuildMgr::GetGuildById(ObjectGuid::LowType guildId) const { GuildContainer::const_iterator itr = GuildStore.find(guildId); if (itr != GuildStore.end()) @@ -71,7 +71,7 @@ Guild* GuildMgr::GetGuildByName(const std::string& guildName) const return NULL; } -std::string GuildMgr::GetGuildNameById(uint32 guildId) const +std::string GuildMgr::GetGuildNameById(ObjectGuid::LowType guildId) const { if (Guild* guild = GetGuildById(guildId)) return guild->GetName(); diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h index 2a73d53a74..1450769c57 100644 --- a/src/server/game/Guilds/GuildMgr.h +++ b/src/server/game/Guilds/GuildMgr.h @@ -34,21 +34,21 @@ public: } Guild* GetGuildByLeader(ObjectGuid guid) const; - Guild* GetGuildById(uint32 guildId) const; + Guild* GetGuildById(ObjectGuid::LowType guildId) const; Guild* GetGuildByName(std::string const& guildName) const; - std::string GetGuildNameById(uint32 guildId) const; + std::string GetGuildNameById(ObjectGuid::LowType guildId) const; void LoadGuilds(); void AddGuild(Guild* guild); - void RemoveGuild(uint32 guildId); + void RemoveGuild(ObjectGuid::LowType guildId); - uint32 GenerateGuildId(); - void SetNextGuildId(uint32 Id) { NextGuildId = Id; } + ObjectGuid::LowType GenerateGuildId(); + void SetNextGuildId(ObjectGuid::LowType Id) { NextGuildId = Id; } void ResetTimes(); protected: - typedef std::unordered_map GuildContainer; - uint32 NextGuildId; + typedef std::unordered_map GuildContainer; + ObjectGuid::LowType NextGuildId; GuildContainer GuildStore; }; diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index ba22ab6aa0..29761ead70 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -65,7 +65,7 @@ bool LoginQueryHolder::Initialize() SetSize(MAX_PLAYER_LOGIN_QUERY); bool res = true; - uint32 lowGuid = m_guid.GetCounter(); + ObjectGuid::LowType lowGuid = m_guid.GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER); stmt->setUInt32(0, lowGuid); @@ -1134,7 +1134,7 @@ void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult resu Field* fields = result->Fetch(); - uint32 guidLow = fields[0].GetUInt32(); + ObjectGuid::LowType guidLow = fields[0].GetUInt32(); std::string oldName = fields[1].GetString(); // Update name and at_login flag in the db @@ -1593,7 +1593,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) >> factionChangeInfo.Face >> factionChangeInfo.Race; - uint32 lowGuid = factionChangeInfo.Guid.GetCounter(); + ObjectGuid::LowType lowGuid = factionChangeInfo.Guid.GetCounter(); // get the players old (at this moment current) race CharacterNameData const* nameData = sWorld->GetCharacterNameData(factionChangeInfo.Guid); diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index c7a3f419d6..952659dcea 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -243,7 +243,7 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData) ObjectGuid petitionguid; recvData >> petitionguid; // petition guid - uint32 petitionGuidLow = petitionguid.GetCounter(); + ObjectGuid::LowType petitionGuidLow = petitionguid.GetCounter(); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_TYPE); @@ -284,7 +284,7 @@ void WorldSession::HandlePetitionShowSignOpcode(WorldPacket& recvData) for (uint8 i = 1; i <= signs; ++i) { Field* fields2 = result->Fetch(); - uint32 lowGuid = fields2[0].GetUInt32(); + ObjectGuid::LowType lowGuid = fields2[0].GetUInt32(); data << ObjectGuid(HighGuid::Player, 0, lowGuid); // Player GUID data << uint32(0); // there 0 ... @@ -298,7 +298,7 @@ void WorldSession::HandlePetitionQueryOpcode(WorldPacket& recvData) { TC_LOG_DEBUG("network", "Received opcode CMSG_PETITION_QUERY"); // ok - uint32 guildguid; + ObjectGuid::LowType guildguid; ObjectGuid petitionguid; recvData >> guildguid; // in Trinity always same as GUID_LOPART(petitionguid) recvData >> petitionguid; // petition guid @@ -470,7 +470,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) uint64 signs = fields[1].GetUInt64(); uint8 type = fields[2].GetUInt8(); - uint32 playerGuid = _player->GetGUID().GetCounter(); + ObjectGuid::LowType playerGuid = _player->GetGUID().GetCounter(); if (ownerGuid == _player->GetGUID()) return; @@ -735,7 +735,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "Petition %s turned in by %u", petitionGuid.ToString().c_str(), _player->GetGUID().GetCounter()); // Get petition data from db - uint32 ownerguidlo; + ObjectGuid::LowType ownerguidlo; uint32 type; std::string name; diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 22ebe6c679..be1b395b08 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -481,7 +481,7 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo void Loot::FillNotNormalLootFor(Player* player, bool presentAtLooting) { - uint32 plguid = player->GetGUID().GetCounter(); + ObjectGuid::LowType plguid = player->GetGUID().GetCounter(); QuestItemMap::const_iterator qmapitr = PlayerQuestItems.find(plguid); if (qmapitr == PlayerQuestItems.end()) diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index 7d7580fd49..35687aee66 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -146,7 +146,7 @@ struct LootStoreItem // Checks correctness of values }; -typedef std::set AllowedLooterSet; +typedef std::set AllowedLooterSet; struct LootItem { diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp index fd9392fb62..78cd4d3692 100644 --- a/src/server/game/Mails/Mail.cpp +++ b/src/server/game/Mails/Mail.cpp @@ -72,7 +72,7 @@ MailSender::MailSender(Player* sender) MailReceiver::MailReceiver(Player* receiver) : m_receiver(receiver), m_receiver_lowguid(receiver->GetGUID().GetCounter()) { } -MailReceiver::MailReceiver(Player* receiver, uint32 receiver_lowguid) : m_receiver(receiver), m_receiver_lowguid(receiver_lowguid) +MailReceiver::MailReceiver(Player* receiver, ObjectGuid::LowType receiver_lowguid) : m_receiver(receiver), m_receiver_lowguid(receiver_lowguid) { ASSERT(!receiver || receiver->GetGUID().GetCounter() == receiver_lowguid); } @@ -127,7 +127,7 @@ void MailDraft::deleteIncludedItems(SQLTransaction& trans, bool inDB /*= false*/ m_items.clear(); } -void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, SQLTransaction& trans) +void MailDraft::SendReturnToSender(uint32 sender_acc, ObjectGuid::LowType sender_guid, ObjectGuid::LowType receiver_guid, SQLTransaction& trans) { ObjectGuid receiverGuid(HighGuid::Player, receiver_guid); Player* receiver = ObjectAccessor::FindConnectedPlayer(receiverGuid); diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h index f4f155c592..7279f691d8 100644 --- a/src/server/game/Mails/Mail.h +++ b/src/server/game/Mails/Mail.h @@ -81,7 +81,7 @@ enum MailShowFlags class MailSender { public: // Constructors - MailSender(MailMessageType messageType, uint32 sender_guidlow_or_entry, MailStationery stationery = MAIL_STATIONERY_DEFAULT) + MailSender(MailMessageType messageType, ObjectGuid::LowType sender_guidlow_or_entry, MailStationery stationery = MAIL_STATIONERY_DEFAULT) : m_messageType(messageType), m_senderId(sender_guidlow_or_entry), m_stationery(stationery) { } @@ -91,31 +91,31 @@ class MailSender MailSender(Player* sender); public: // Accessors MailMessageType GetMailMessageType() const { return m_messageType; } - uint32 GetSenderId() const { return m_senderId; } + ObjectGuid::LowType GetSenderId() const { return m_senderId; } MailStationery GetStationery() const { return m_stationery; } private: MailMessageType m_messageType; - uint32 m_senderId; // player low guid or other object entry + ObjectGuid::LowType m_senderId; // player low guid or other object entry MailStationery m_stationery; }; class MailReceiver { public: // Constructors - explicit MailReceiver(uint32 receiver_lowguid) : m_receiver(NULL), m_receiver_lowguid(receiver_lowguid) { } + explicit MailReceiver(ObjectGuid::LowType receiver_lowguid) : m_receiver(NULL), m_receiver_lowguid(receiver_lowguid) { } MailReceiver(Player* receiver); - MailReceiver(Player* receiver, uint32 receiver_lowguid); + MailReceiver(Player* receiver, ObjectGuid::LowType receiver_lowguid); public: // Accessors Player* GetPlayer() const { return m_receiver; } - uint32 GetPlayerGUIDLow() const { return m_receiver_lowguid; } + ObjectGuid::LowType GetPlayerGUIDLow() const { return m_receiver_lowguid; } private: Player* m_receiver; - uint32 m_receiver_lowguid; + ObjectGuid::LowType m_receiver_lowguid; }; class MailDraft { - typedef std::map MailItemMap; + typedef std::map MailItemMap; public: // Constructors explicit MailDraft(uint16 mailTemplateId, bool need_items = true) @@ -136,7 +136,7 @@ class MailDraft MailDraft& AddCOD(uint32 COD) { m_COD = COD; return *this; } public: // finishers - void SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, SQLTransaction& trans); + void SendReturnToSender(uint32 sender_acc, ObjectGuid::LowType sender_guid, ObjectGuid::LowType receiver_guid, SQLTransaction& trans); void SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, MailSender const& sender, MailCheckMask checked = MAIL_CHECK_MASK_NONE, uint32 deliver_delay = 0); private: @@ -156,7 +156,7 @@ class MailDraft struct MailItemInfo { - uint32 item_guid; + ObjectGuid::LowType item_guid; uint32 item_template; }; typedef std::vector MailItemInfoVec; @@ -167,12 +167,12 @@ struct Mail uint8 messageType; uint8 stationery; uint16 mailTemplateId; - uint32 sender; - uint32 receiver; + ObjectGuid::LowType sender; + ObjectGuid::LowType receiver; std::string subject; std::string body; std::vector items; - std::vector removedItems; + std::vector removedItems; time_t expire_time; time_t deliver_time; uint32 money; @@ -180,7 +180,7 @@ struct Mail uint32 checked; MailState state; - void AddItem(uint32 itemGuidLow, uint32 item_template) + void AddItem(ObjectGuid::LowType itemGuidLow, uint32 item_template) { MailItemInfo mii; mii.item_guid = itemGuidLow; @@ -188,7 +188,7 @@ struct Mail items.push_back(mii); } - bool RemoveItem(uint32 item_guid) + bool RemoveItem(ObjectGuid::LowType item_guid) { for (MailItemInfoVec::iterator itr = items.begin(); itr != items.end(); ++itr) { diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 2af77ffdec..7ab83d51c7 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3396,7 +3396,7 @@ void Map::UpdateIteratorBack(Player* player) m_mapRefIter = m_mapRefIter->nocheck_prev(); } -void Map::SaveCreatureRespawnTime(uint32 dbGuid, time_t respawnTime) +void Map::SaveCreatureRespawnTime(ObjectGuid::LowType dbGuid, time_t respawnTime) { if (!respawnTime) { @@ -3415,7 +3415,7 @@ void Map::SaveCreatureRespawnTime(uint32 dbGuid, time_t respawnTime) CharacterDatabase.Execute(stmt); } -void Map::RemoveCreatureRespawnTime(uint32 dbGuid) +void Map::RemoveCreatureRespawnTime(ObjectGuid::LowType dbGuid) { _creatureRespawnTimes.erase(dbGuid); @@ -3426,7 +3426,7 @@ void Map::RemoveCreatureRespawnTime(uint32 dbGuid) CharacterDatabase.Execute(stmt); } -void Map::SaveGORespawnTime(uint32 dbGuid, time_t respawnTime) +void Map::SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t respawnTime) { if (!respawnTime) { @@ -3445,7 +3445,7 @@ void Map::SaveGORespawnTime(uint32 dbGuid, time_t respawnTime) CharacterDatabase.Execute(stmt); } -void Map::RemoveGORespawnTime(uint32 dbGuid) +void Map::RemoveGORespawnTime(ObjectGuid::LowType dbGuid) { _goRespawnTimes.erase(dbGuid); @@ -3466,7 +3466,7 @@ void Map::LoadRespawnTimes() do { Field* fields = result->Fetch(); - uint32 loguid = fields[0].GetUInt32(); + ObjectGuid::LowType loguid = fields[0].GetUInt32(); uint32 respawnTime = fields[1].GetUInt32(); _creatureRespawnTimes[loguid] = time_t(respawnTime); @@ -3481,7 +3481,7 @@ void Map::LoadRespawnTimes() do { Field* fields = result->Fetch(); - uint32 loguid = fields[0].GetUInt32(); + ObjectGuid::LowType loguid = fields[0].GetUInt32(); uint32 respawnTime = fields[1].GetUInt32(); _goRespawnTimes[loguid] = time_t(respawnTime); @@ -3542,7 +3542,7 @@ void Map::LoadCorpseData() { Field* fields = result->Fetch(); CorpseType type = CorpseType(fields[13].GetUInt8()); - uint32 guid = fields[16].GetUInt32(); + ObjectGuid::LowType guid = fields[16].GetUInt32(); if (type >= MAX_CORPSE_TYPE || type == CORPSE_BONES) { TC_LOG_ERROR("misc", "Corpse (guid: %u) have wrong corpse type (%u), not loading.", guid, type); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 2ba5e10c82..184f1f9a42 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -499,28 +499,28 @@ class Map : public GridRefManager RESPAWN TIMES */ time_t GetLinkedRespawnTime(ObjectGuid guid) const; - time_t GetCreatureRespawnTime(uint32 dbGuid) const + time_t GetCreatureRespawnTime(ObjectGuid::LowType dbGuid) const { - std::unordered_map::const_iterator itr = _creatureRespawnTimes.find(dbGuid); + std::unordered_map::const_iterator itr = _creatureRespawnTimes.find(dbGuid); if (itr != _creatureRespawnTimes.end()) return itr->second; return time_t(0); } - time_t GetGORespawnTime(uint32 dbGuid) const + time_t GetGORespawnTime(ObjectGuid::LowType dbGuid) const { - std::unordered_map::const_iterator itr = _goRespawnTimes.find(dbGuid); + std::unordered_map::const_iterator itr = _goRespawnTimes.find(dbGuid); if (itr != _goRespawnTimes.end()) return itr->second; return time_t(0); } - void SaveCreatureRespawnTime(uint32 dbGuid, time_t respawnTime); - void RemoveCreatureRespawnTime(uint32 dbGuid); - void SaveGORespawnTime(uint32 dbGuid, time_t respawnTime); - void RemoveGORespawnTime(uint32 dbGuid); + void SaveCreatureRespawnTime(ObjectGuid::LowType dbGuid, time_t respawnTime); + void RemoveCreatureRespawnTime(ObjectGuid::LowType dbGuid); + void SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t respawnTime); + void RemoveGORespawnTime(ObjectGuid::LowType dbGuid); void LoadRespawnTimes(); void DeleteRespawnTimes(); @@ -659,7 +659,7 @@ class Map : public GridRefManager Creature* _GetScriptCreature(Object* obj, bool isSource, const ScriptInfo* scriptInfo) const; WorldObject* _GetScriptWorldObject(Object* obj, bool isSource, const ScriptInfo* scriptInfo) const; void _ScriptProcessDoor(Object* source, Object* target, const ScriptInfo* scriptInfo) const; - GameObject* _FindGameObject(WorldObject* pWorldObject, uint32 guid) const; + GameObject* _FindGameObject(WorldObject* pWorldObject, ObjectGuid::LowType guid) const; time_t i_gridExpiry; @@ -711,8 +711,8 @@ class Map : public GridRefManager m_activeNonPlayers.erase(obj); } - std::unordered_map _creatureRespawnTimes; - std::unordered_map _goRespawnTimes; + std::unordered_map _creatureRespawnTimes; + std::unordered_map _goRespawnTimes; ZoneDynamicInfoMap _zoneDynamicInfo; uint32 _defaultLight; diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index cac6e3b91e..84eba74c6d 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -348,7 +348,7 @@ void TransportMgr::AddPathNodeToTransport(uint32 transportEntry, uint32 timeSeg, animNode.Path[timeSeg] = node; } -Transport* TransportMgr::CreateTransport(uint32 entry, uint32 guid /*= 0*/, Map* map /*= NULL*/) +Transport* TransportMgr::CreateTransport(uint32 entry, ObjectGuid::LowType guid /*= 0*/, Map* map /*= NULL*/) { // instance case, execute GetGameObjectEntry hook if (map) @@ -425,7 +425,7 @@ void TransportMgr::SpawnContinentTransports() do { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint32 entry = fields[1].GetUInt32(); if (TransportTemplate const* tInfo = GetTransportTemplate(entry)) diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index c273ea7fb1..20cf8dd20e 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -111,7 +111,7 @@ class TransportMgr void LoadTransportTemplates(); // Creates a transport using given GameObject template entry - Transport* CreateTransport(uint32 entry, uint32 guid = 0, Map* map = NULL); + Transport* CreateTransport(uint32 entry, ObjectGuid::LowType guid = 0, Map* map = NULL); // Spawns all continent transports, used at core startup void SpawnContinentTransports(); diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index d914ef0110..9046d9e699 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -85,7 +85,7 @@ void OPvPCapturePoint::SendChangePhase() SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate3, m_neutralValuePct); } -void OPvPCapturePoint::AddGO(uint32 type, uint32 guid, uint32 entry) +void OPvPCapturePoint::AddGO(uint32 type, ObjectGuid::LowType guid, uint32 entry) { if (!entry) { @@ -99,7 +99,7 @@ void OPvPCapturePoint::AddGO(uint32 type, uint32 guid, uint32 entry) m_ObjectTypes[m_Objects[type]] = type; } -void OPvPCapturePoint::AddCre(uint32 type, uint32 guid, uint32 entry) +void OPvPCapturePoint::AddCre(uint32 type, ObjectGuid::LowType guid, uint32 entry) { if (!entry) { @@ -115,7 +115,7 @@ void OPvPCapturePoint::AddCre(uint32 type, uint32 guid, uint32 entry) bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3) { - if (uint32 guid = sObjectMgr->AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3)) + if (ObjectGuid::LowType guid = sObjectMgr->AddGOData(entry, map, x, y, z, o, 0, rotation0, rotation1, rotation2, rotation3)) { AddGO(type, guid, entry); return true; @@ -126,7 +126,7 @@ bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, float x, bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 spawntimedelay /*= 0*/) { - if (uint32 guid = sObjectMgr->AddCreatureData(entry, map, x, y, z, o, spawntimedelay)) + if (ObjectGuid::LowType guid = sObjectMgr->AddCreatureData(entry, map, x, y, z, o, spawntimedelay)) { AddCre(type, guid, entry); return true; diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h index d075da19eb..b35147a850 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.h +++ b/src/server/game/OutdoorPvP/OutdoorPvP.h @@ -128,12 +128,12 @@ class OPvPCapturePoint virtual void DeleteSpawns(); - uint32 m_capturePointSpawnId; + ObjectGuid::LowType m_capturePointSpawnId; GameObject* m_capturePoint; - void AddGO(uint32 type, uint32 guid, uint32 entry = 0); - void AddCre(uint32 type, uint32 guid, uint32 entry = 0); + void AddGO(uint32 type, ObjectGuid::LowType guid, uint32 entry = 0); + void AddCre(uint32 type, ObjectGuid::LowType guid, uint32 entry = 0); bool SetCapturePointData(uint32 entry, uint32 map, float x, float y, float z, float o = 0, float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0); @@ -178,10 +178,10 @@ class OPvPCapturePoint // map to store the various gameobjects and creatures spawned by the objective // type, guid - std::map m_Objects; - std::map m_Creatures; - std::map m_ObjectTypes; - std::map m_CreatureTypes; + std::map m_Objects; + std::map m_Creatures; + std::map m_ObjectTypes; + std::map m_CreatureTypes; }; // base class for specific outdoor pvp handlers @@ -200,7 +200,7 @@ class OutdoorPvP : public ZoneScript // deletes all gos/creatures spawned by the pvp void DeleteSpawns(); - typedef std::map OPvPCapturePointMap; + typedef std::map OPvPCapturePointMap; typedef std::pair GoScriptPair; typedef std::pair CreatureScriptPair; @@ -292,7 +292,7 @@ class OutdoorPvP : public ZoneScript m_capturePoints[cp->m_capturePointSpawnId] = cp; } - OPvPCapturePoint * GetCapturePoint(uint32 guid) const + OPvPCapturePoint * GetCapturePoint(ObjectGuid::LowType guid) const { OutdoorPvP::OPvPCapturePointMap::const_iterator itr = m_capturePoints.find(guid); if (itr != m_capturePoints.end()) diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index 8f3d4a758f..1e7826f280 100644 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -184,7 +184,7 @@ PoolObject* PoolGroup::RollOne(ActivePoolData& spawns, uint32 triggerFrom) // If no guid is passed, the pool is just removed (event end case) // If guid is filled, cache will be used and no removal will occur, it just fill the cache template -void PoolGroup::DespawnObject(ActivePoolData& spawns, uint32 guid) +void PoolGroup::DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid) { for (size_t i=0; i < EqualChanced.size(); ++i) { @@ -215,7 +215,7 @@ void PoolGroup::DespawnObject(ActivePoolData& spawns, uint32 guid) // Method that is actualy doing the removal job on one creature template<> -void PoolGroup::Despawn1Object(uint32 guid) +void PoolGroup::Despawn1Object(ObjectGuid::LowType guid) { if (CreatureData const* data = sObjectMgr->GetCreatureData(guid)) { @@ -237,7 +237,7 @@ void PoolGroup::Despawn1Object(uint32 guid) // Same on one gameobject template<> -void PoolGroup::Despawn1Object(uint32 guid) +void PoolGroup::Despawn1Object(ObjectGuid::LowType guid) { if (GameObjectData const* data = sObjectMgr->GetGOData(guid)) { @@ -621,7 +621,7 @@ void PoolMgr::LoadFromDB() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint32 pool_id = fields[1].GetUInt32(); float chance = fields[2].GetFloat(); @@ -677,7 +677,7 @@ void PoolMgr::LoadFromDB() { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint32 pool_id = fields[1].GetUInt32(); float chance = fields[2].GetFloat(); diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h index 4ffcbe1faa..e165f9bd39 100644 --- a/src/server/game/Pools/PoolMgr.h +++ b/src/server/game/Pools/PoolMgr.h @@ -31,16 +31,16 @@ struct PoolTemplateData struct PoolObject { - uint32 guid; + ObjectGuid::LowType guid; float chance; - PoolObject(uint32 _guid, float _chance) : guid(_guid), chance(std::fabs(_chance)) { } + PoolObject(ObjectGuid::LowType _guid, float _chance) : guid(_guid), chance(std::fabs(_chance)) { } }; class Pool // for Pool of Pool case { }; -typedef std::set ActivePoolObjects; +typedef std::set ActivePoolObjects; typedef std::map ActivePoolPools; class ActivePoolData @@ -77,8 +77,8 @@ class PoolGroup void AddEntry(PoolObject& poolitem, uint32 maxentries); bool CheckPool() const; PoolObject* RollOne(ActivePoolData& spawns, uint32 triggerFrom); - void DespawnObject(ActivePoolData& spawns, uint32 guid=0); - void Despawn1Object(uint32 guid); + void DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid=0); + void Despawn1Object(ObjectGuid::LowType guid); void SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 triggerFrom); void Spawn1Object(PoolObject* obj); diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index a369750b0c..63006bc6ed 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -220,7 +220,7 @@ inline WorldObject* Map::_GetScriptWorldObject(Object* obj, bool isSource, const inline void Map::_ScriptProcessDoor(Object* source, Object* target, const ScriptInfo* scriptInfo) const { bool bOpen = false; - uint32 guid = scriptInfo->ToggleDoor.GOGuid; + ObjectGuid::LowType guid = scriptInfo->ToggleDoor.GOGuid; int32 nTimeToToggle = std::max(15, int32(scriptInfo->ToggleDoor.ResetDelay)); switch (scriptInfo->command) { @@ -266,7 +266,7 @@ inline void Map::_ScriptProcessDoor(Object* source, Object* target, const Script } } -inline GameObject* Map::_FindGameObject(WorldObject* searchObject, uint32 guid) const +inline GameObject* Map::_FindGameObject(WorldObject* searchObject, ObjectGuid::LowType guid) const { auto bounds = searchObject->GetMap()->GetGameObjectBySpawnIdStore().equal_range(guid); if (bounds.first == bounds.second) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 0ece05f1d9..db5e09c5d2 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1392,12 +1392,12 @@ void ScriptMgr::OnGuildItemMove(Guild* guild, Player* player, Item* pItem, bool FOREACH_SCRIPT(GuildScript)->OnItemMove(guild, player, pItem, isSrcBank, srcContainer, srcSlotId, isDestBank, destContainer, destSlotId); } -void ScriptMgr::OnGuildEvent(Guild* guild, uint8 eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank) +void ScriptMgr::OnGuildEvent(Guild* guild, uint8 eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) { FOREACH_SCRIPT(GuildScript)->OnEvent(guild, eventType, playerGuid1, playerGuid2, newRank); } -void ScriptMgr::OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) +void ScriptMgr::OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) { FOREACH_SCRIPT(GuildScript)->OnBankEvent(guild, eventType, tabId, playerGuid, itemOrMoney, itemStackCount, destTabId); } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index a226f1b7ed..7e1751244f 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -839,9 +839,9 @@ class GuildScript : public ScriptObject virtual void OnItemMove(Guild* /*guild*/, Player* /*player*/, Item* /*pItem*/, bool /*isSrcBank*/, uint8 /*srcContainer*/, uint8 /*srcSlotId*/, bool /*isDestBank*/, uint8 /*destContainer*/, uint8 /*destSlotId*/) { } - virtual void OnEvent(Guild* /*guild*/, uint8 /*eventType*/, uint32 /*playerGuid1*/, uint32 /*playerGuid2*/, uint8 /*newRank*/) { } + virtual void OnEvent(Guild* /*guild*/, uint8 /*eventType*/, ObjectGuid::LowType /*playerGuid1*/, ObjectGuid::LowType /*playerGuid2*/, uint8 /*newRank*/) { } - virtual void OnBankEvent(Guild* /*guild*/, uint8 /*eventType*/, uint8 /*tabId*/, uint32 /*playerGuid*/, uint32 /*itemOrMoney*/, uint16 /*itemStackCount*/, uint8 /*destTabId*/) { } + virtual void OnBankEvent(Guild* /*guild*/, uint8 /*eventType*/, uint8 /*tabId*/, ObjectGuid::LowType /*playerGuid*/, uint32 /*itemOrMoney*/, uint16 /*itemStackCount*/, uint8 /*destTabId*/) { } }; class GroupScript : public ScriptObject @@ -1111,8 +1111,8 @@ class ScriptMgr void OnGuildMemberDepositMoney(Guild* guild, Player* player, uint32 &amount); void OnGuildItemMove(Guild* guild, Player* player, Item* pItem, bool isSrcBank, uint8 srcContainer, uint8 srcSlotId, bool isDestBank, uint8 destContainer, uint8 destSlotId); - void OnGuildEvent(Guild* guild, uint8 eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank); - void OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId); + void OnGuildEvent(Guild* guild, uint8 eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank); + void OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId); public: /* GroupScript */ diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 45a816eda9..b4bb7541be 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -180,7 +180,7 @@ std::string WorldSession::GetPlayerInfo() const } /// Get player guid if available. Use for logging purposes only -uint32 WorldSession::GetGUIDLow() const +ObjectGuid::LowType WorldSession::GetGUIDLow() const { return GetPlayer() ? GetPlayer()->GetGUID().GetCounter() : 0; } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index e597cbff27..6b1279e3e0 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -287,7 +287,7 @@ class WorldSession std::string const& GetPlayerName() const; std::string GetPlayerInfo() const; - uint32 GetGUIDLow() const; + ObjectGuid::LowType GetGUIDLow() const; void SetSecurity(AccountTypes security) { _security = security; } std::string const& GetRemoteAddress() const { return m_Address; } void SetPlayer(Player* player); @@ -1026,7 +1026,7 @@ class WorldSession // characters who failed on Player::BuildEnumData shouldn't login GuidSet _legitCharacters; - uint32 m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set) + ObjectGuid::LowType m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set) Player* _player; std::shared_ptr m_Socket; std::string m_Address; // Current Remote Address diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 8710100d9b..1657b6cd02 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -158,38 +158,38 @@ bool changetoknth(std::string &str, int n, char const* with, bool insert = false return true; } -uint32 registerNewGuid(uint32 oldGuid, std::map &guidMap, uint32 hiGuid) +ObjectGuid::LowType registerNewGuid(ObjectGuid::LowType oldGuid, std::map &guidMap, ObjectGuid::LowType hiGuid) { - std::map::const_iterator itr = guidMap.find(oldGuid); + std::map::const_iterator itr = guidMap.find(oldGuid); if (itr != guidMap.end()) return itr->second; - uint32 newguid = hiGuid + guidMap.size(); + ObjectGuid::LowType newguid = hiGuid + guidMap.size(); guidMap[oldGuid] = newguid; return newguid; } -bool changeGuid(std::string &str, int n, std::map &guidMap, uint32 hiGuid, bool nonzero = false) +bool changeGuid(std::string &str, int n, std::map &guidMap, ObjectGuid::LowType hiGuid, bool nonzero = false) { char chritem[20]; - uint32 oldGuid = atoi(getnth(str, n).c_str()); + ObjectGuid::LowType oldGuid = atoi(getnth(str, n).c_str()); if (nonzero && oldGuid == 0) return true; // not an error - uint32 newGuid = registerNewGuid(oldGuid, guidMap, hiGuid); + ObjectGuid::LowType newGuid = registerNewGuid(oldGuid, guidMap, hiGuid); snprintf(chritem, 20, "%u", newGuid); return changenth(str, n, chritem, false, nonzero); } -bool changetokGuid(std::string &str, int n, std::map &guidMap, uint32 hiGuid, bool nonzero = false) +bool changetokGuid(std::string &str, int n, std::map &guidMap, ObjectGuid::LowType hiGuid, bool nonzero = false) { char chritem[20]; - uint32 oldGuid = atoi(gettoknth(str, n).c_str()); + ObjectGuid::LowType oldGuid = atoi(gettoknth(str, n).c_str()); if (nonzero && oldGuid == 0) return true; // not an error - uint32 newGuid = registerNewGuid(oldGuid, guidMap, hiGuid); + ObjectGuid::LowType newGuid = registerNewGuid(oldGuid, guidMap, hiGuid); snprintf(chritem, 20, "%u", newGuid); return changetoknth(str, n, chritem, false, nonzero); @@ -216,7 +216,7 @@ std::string CreateDumpString(char const* tableName, QueryResult result) return ss.str(); } -std::string PlayerDumpWriter::GenerateWhereStr(char const* field, uint32 guid) +std::string PlayerDumpWriter::GenerateWhereStr(char const* field, ObjectGuid::LowType guid) { std::ostringstream wherestr; wherestr << field << " = '" << guid << '\''; @@ -245,25 +245,25 @@ std::string PlayerDumpWriter::GenerateWhereStr(char const* field, GUIDs const& g return wherestr.str(); } -void StoreGUID(QueryResult result, uint32 field, std::set& guids) +void StoreGUID(QueryResult result, uint32 field, std::set& guids) { Field* fields = result->Fetch(); - uint32 guid = fields[field].GetUInt32(); + ObjectGuid::LowType guid = fields[field].GetUInt32(); if (guid) guids.insert(guid); } -void StoreGUID(QueryResult result, uint32 data, uint32 field, std::set& guids) +void StoreGUID(QueryResult result, uint32 data, uint32 field, std::set& guids) { Field* fields = result->Fetch(); std::string dataStr = fields[data].GetString(); - uint32 guid = atoi(gettoknth(dataStr, field).c_str()); + ObjectGuid::LowType guid = atoi(gettoknth(dataStr, field).c_str()); if (guid) guids.insert(guid); } // Writing - High-level functions -bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type) +bool PlayerDumpWriter::DumpTable(std::string& dump, ObjectGuid::LowType guid, char const*tableFrom, char const*tableTo, DumpTableType type) { GUIDs const* guids = NULL; char const* fieldname = NULL; @@ -340,7 +340,7 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, uint32 guid, char const*tabl return true; } -bool PlayerDumpWriter::GetDump(uint32 guid, std::string &dump) +bool PlayerDumpWriter::GetDump(ObjectGuid::LowType guid, std::string &dump) { dump = "IMPORTANT NOTE: THIS DUMPFILE IS MADE FOR USE WITH THE 'PDUMP' COMMAND ONLY - EITHER THROUGH INGAME CHAT OR ON CONSOLE!\n"; dump += "IMPORTANT NOTE: DO NOT apply it directly - it will irreversibly DAMAGE and CORRUPT your database! You have been warned!\n\n"; @@ -355,7 +355,7 @@ bool PlayerDumpWriter::GetDump(uint32 guid, std::string &dump) return true; } -DumpReturn PlayerDumpWriter::WriteDump(const std::string& file, uint32 guid) +DumpReturn PlayerDumpWriter::WriteDump(const std::string& file, ObjectGuid::LowType guid) { if (sWorld->getBoolConfig(CONFIG_PDUMP_NO_PATHS)) if (strstr(file.c_str(), "\\") || strstr(file.c_str(), "/")) @@ -394,7 +394,7 @@ void fixNULLfields(std::string &line) } } -DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, std::string name, uint32 guid) +DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, std::string name, ObjectGuid::LowType guid) { uint32 charcount = AccountMgr::GetCharactersCount(account); if (charcount >= 10) diff --git a/src/server/game/Tools/PlayerDump.h b/src/server/game/Tools/PlayerDump.h index 5a26c10b7d..8aedddd6b5 100644 --- a/src/server/game/Tools/PlayerDump.h +++ b/src/server/game/Tools/PlayerDump.h @@ -72,14 +72,14 @@ class PlayerDumpWriter : public PlayerDump public: PlayerDumpWriter() { } - bool GetDump(uint32 guid, std::string& dump); - DumpReturn WriteDump(std::string const& file, uint32 guid); + bool GetDump(ObjectGuid::LowType guid, std::string& dump); + DumpReturn WriteDump(std::string const& file, ObjectGuid::LowType guid); private: - typedef std::set GUIDs; + typedef std::set GUIDs; - bool DumpTable(std::string& dump, uint32 guid, char const*tableFrom, char const*tableTo, DumpTableType type); + bool DumpTable(std::string& dump, ObjectGuid::LowType guid, char const*tableFrom, char const*tableTo, DumpTableType type); std::string GenerateWhereStr(char const* field, GUIDs const& guids, GUIDs::const_iterator& itr); - std::string GenerateWhereStr(char const* field, uint32 guid); + std::string GenerateWhereStr(char const* field, ObjectGuid::LowType guid); GUIDs pets; GUIDs mails; @@ -91,7 +91,7 @@ class PlayerDumpReader : public PlayerDump public: PlayerDumpReader() { } - DumpReturn LoadDump(std::string const& file, uint32 account, std::string name, uint32 guid); + DumpReturn LoadDump(std::string const& file, uint32 account, std::string name, ObjectGuid::LowType guid); }; #endif diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 169ff069de..6fa9f17653 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2508,7 +2508,7 @@ bool World::RemoveBanAccount(BanMode mode, std::string const& nameOrIP) BanReturn World::BanCharacter(std::string const& name, std::string const& duration, std::string const& reason, std::string const& author) { Player* pBanned = ObjectAccessor::FindConnectedPlayerByName(name); - uint32 guid = 0; + ObjectGuid::LowType guid = 0; uint32 duration_secs = TimeStringToSecs(duration); @@ -2549,7 +2549,7 @@ BanReturn World::BanCharacter(std::string const& name, std::string const& durati bool World::RemoveBanCharacter(std::string const& name) { Player* pBanned = ObjectAccessor::FindConnectedPlayerByName(name); - uint32 guid = 0; + ObjectGuid::LowType guid = 0; /// Pick a player to ban if not online if (!pBanned) diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index fc24689818..ed7b31198d 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -300,7 +300,7 @@ public: return false; Player* target = ObjectAccessor::FindPlayerByName(args); - uint32 targetGuid = 0; + ObjectGuid::LowType targetGuid = 0; std::string name(args); if (!target) diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 405f6fde62..8714838879 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -909,7 +909,7 @@ public: guidStr = strtok(NULL, " "); } - uint32 guid = 0; + ObjectGuid::LowType guid = 0; if (guidStr) { diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 422104fedd..901043980c 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -971,7 +971,7 @@ public: if (!e || !f) return false; - uint32 guid = (uint32)atoi(e); + ObjectGuid::LowType guid = (uint32)atoi(e); uint32 index = (uint32)atoi(f); Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, 0, guid)); @@ -1001,7 +1001,7 @@ public: if (!e || !f || !g) return false; - uint32 guid = (uint32)atoi(e); + ObjectGuid::LowType guid = (uint32)atoi(e); uint32 index = (uint32)atoi(f); uint32 value = (uint32)atoi(g); @@ -1027,7 +1027,7 @@ public: if (!e) return false; - uint32 guid = (uint32)atoi(e); + ObjectGuid::LowType guid = (uint32)atoi(e); Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, guid)); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 0a45506c73..9710a7e634 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -81,7 +81,7 @@ public: if (!id) return false; - uint32 guidLow = atoi(id); + ObjectGuid::LowType guidLow = atoi(id); if (!guidLow) return false; @@ -150,7 +150,7 @@ public: Map* map = player->GetMap(); GameObject* object = new GameObject; - uint32 guidLow = map->GenerateLowGuid(); + ObjectGuid::LowType guidLow = map->GenerateLowGuid(); if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMaskForSpawn(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) { @@ -292,7 +292,8 @@ public: bool found = false; float x, y, z, o; - uint32 guidLow, id, phase; + ObjectGuid::LowType guidLow; + uint32 id, phase; uint16 mapId; uint32 poolId; @@ -352,7 +353,7 @@ public: if (!id) return false; - uint32 guidLow = atoi(id); + ObjectGuid::LowType guidLow = atoi(id); if (!guidLow) return false; @@ -400,7 +401,7 @@ public: if (!id) return false; - uint32 guidLow = atoi(id); + ObjectGuid::LowType guidLow = atoi(id); if (!guidLow) return false; @@ -459,7 +460,7 @@ public: if (!id) return false; - uint32 guidLow = atoi(id); + ObjectGuid::LowType guidLow = atoi(id); if (!guidLow) return false; @@ -533,7 +534,7 @@ public: if (!id) return false; - uint32 guidLow = atoi(id); + ObjectGuid::LowType guidLow = atoi(id); if (!guidLow) return false; @@ -587,7 +588,7 @@ public: do { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint32 entry = fields[1].GetUInt32(); float x = fields[2].GetFloat(); float y = fields[3].GetFloat(); @@ -656,7 +657,7 @@ public: if (!id) return false; - uint32 guidLow = atoi(id); + ObjectGuid::LowType guidLow = atoi(id); if (!guidLow) return false; diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index a735e296f5..c2b9076017 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -158,7 +158,7 @@ public: if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid)) return false; - uint32 guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid); + ObjectGuid::LowType guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid); if (!guildId) return false; @@ -184,7 +184,7 @@ public: if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &target_name)) return false; - uint32 guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid); + ObjectGuid::LowType guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid); if (!guildId) return false; diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index fb051832d7..0de62f805d 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -109,7 +109,7 @@ public: do { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); float x = fields[1].GetFloat(); float y = fields[2].GetFloat(); float z = fields[3].GetFloat(); @@ -235,8 +235,8 @@ public: do { Field* fields = result->Fetch(); - uint32 itemGuid = fields[0].GetUInt32(); - uint32 itemSender = fields[1].GetUInt32(); + ObjectGuid::LowType itemGuid = fields[0].GetUInt32(); + ObjectGuid::LowType itemSender = fields[1].GetUInt32(); uint32 itemReceiver = fields[2].GetUInt32(); uint32 itemSenderAccountId = fields[3].GetUInt32(); std::string itemSenderName = fields[4].GetString(); @@ -398,7 +398,7 @@ public: do { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); float x = fields[1].GetFloat(); float y = fields[2].GetFloat(); float z = fields[3].GetFloat(); @@ -534,7 +534,7 @@ public: { do { - uint32 item_guid = (*result2)[0].GetUInt32(); + ObjectGuid::LowType item_guid = (*result2)[0].GetUInt32(); stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_LIST_ITEMS); stmt->setUInt32(0, item_guid); PreparedQueryResult result3 = CharacterDatabase.Query(stmt); diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index 56aa6d0bf9..cb2d467f8d 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -1410,7 +1410,7 @@ public: do { Field* characterFields = result2->Fetch(); - uint32 guid = characterFields[0].GetUInt32(); + ObjectGuid::LowType guid = characterFields[0].GetUInt32(); std::string name = characterFields[1].GetString(); handler->PSendSysMessage(LANG_LOOKUP_PLAYER_CHARACTER, name.c_str(), guid); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 21a55b1558..725fdd4c27 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1470,7 +1470,7 @@ public: // Account data print variables std::string userName = handler->GetTrinityString(LANG_ERROR); uint32 accId = 0; - uint32 lowguid = targetGuid.GetCounter(); + ObjectGuid::LowType lowguid = targetGuid.GetCounter(); std::string eMail = handler->GetTrinityString(LANG_ERROR); std::string regMail = handler->GetTrinityString(LANG_ERROR); uint32 security = 0; @@ -1659,7 +1659,7 @@ public: { Field* fields = result4->Fetch(); xp = fields[0].GetUInt32(); // Used for "current xp" output and "%u XP Left" calculation - uint32 gguid = fields[1].GetUInt32(); // We check if have a guild for the person, so we might not require to query it at all + ObjectGuid::LowType gguid = fields[1].GetUInt32(); // We check if have a guild for the person, so we might not require to query it at all xptotal = sObjectMgr->GetXPForLevel(level); if (gguid != 0) @@ -2487,7 +2487,7 @@ public: // If player found: delete his freeze aura Field* fields = result->Fetch(); - uint32 lowGuid = fields[0].GetUInt32(); + ObjectGuid::LowType lowGuid = fields[0].GetUInt32(); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_AURA_FROZEN); stmt->setUInt32(0, lowGuid); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index dcf75d0c5d..8e7a1387a3 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -260,7 +260,7 @@ public: if (Transport* trans = chr->GetTransport()) { - uint32 guid = map->GenerateLowGuid(); + ObjectGuid::LowType guid = map->GenerateLowGuid(); CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid); data.id = id; data.phaseMask = chr->GetPhaseMaskForSpawn(); @@ -286,7 +286,7 @@ public: creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn()); - uint32 db_guid = creature->GetSpawnId(); + ObjectGuid::LowType db_guid = creature->GetSpawnId(); // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells() // current "creature" variable is deleted and created fresh new, otherwise old values might trigger asserts or cause undefined behavior @@ -368,7 +368,7 @@ public: char* guidStr = strtok((char*)args, " "); char* waitStr = strtok((char*)NULL, " "); - uint32 lowGuid = atoi((char*)guidStr); + ObjectGuid::LowType lowGuid = atoi((char*)guidStr); // attempt check creature existence by DB data CreatureData const* data = sObjectMgr->GetCreatureData(lowGuid); @@ -489,7 +489,7 @@ public: if (!cId) return false; - uint32 lowguid = atoi(cId); + ObjectGuid::LowType lowguid = atoi(cId); if (!lowguid) return false; @@ -764,7 +764,7 @@ public: do { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); uint32 entry = fields[1].GetUInt32(); float x = fields[2].GetFloat(); float y = fields[3].GetFloat(); @@ -790,7 +790,7 @@ public: //move selected creature static bool HandleNpcMoveCommand(ChatHandler* handler, char const* args) { - uint32 lowguid = 0; + ObjectGuid::LowType lowguid = 0; Creature* creature = handler->getSelectedCreature(); @@ -939,7 +939,7 @@ public: if (!guid_str) return false; - uint32 lowguid = 0; + ObjectGuid::LowType lowguid = 0; Creature* creature = NULL; if (dontdel_str) @@ -1101,7 +1101,7 @@ public: mtype = RANDOM_MOTION_TYPE; Creature* creature = handler->getSelectedCreature(); - uint32 guidLow = 0; + ObjectGuid::LowType guidLow = 0; if (creature) guidLow = creature->GetSpawnId(); @@ -1150,7 +1150,7 @@ public: } Creature* creature = handler->getSelectedCreature(); - uint32 guidLow = 0; + ObjectGuid::LowType guidLow = 0; if (creature) guidLow = creature->GetSpawnId(); @@ -1414,7 +1414,7 @@ public: if (!*args) return false; - uint32 leaderGUID = (uint32) atoi((char*)args); + ObjectGuid::LowType leaderGUID = (uint32) atoi((char*)args); Creature* creature = handler->getSelectedCreature(); if (!creature || !creature->GetSpawnId()) @@ -1424,7 +1424,7 @@ public: return false; } - uint32 lowguid = creature->GetSpawnId(); + ObjectGuid::LowType lowguid = creature->GetSpawnId(); if (creature->GetFormation()) { handler->PSendSysMessage("Selected creature is already member of group %u", creature->GetFormation()->GetId()); @@ -1466,7 +1466,7 @@ public: if (!*args) return false; - uint32 linkguid = (uint32) atoi((char*)args); + ObjectGuid::LowType linkguid = (uint32) atoi((char*)args); Creature* creature = handler->getSelectedCreature(); diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 00b8bec51c..9db1e5d68d 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -150,7 +150,7 @@ public: path_number = strtok((char*)args, " "); uint32 pathid = 0; - uint32 guidLow = 0; + ObjectGuid::LowType guidLow = 0; Creature* target = handler->getSelectedCreature(); // Did player provide a path_id? @@ -1037,7 +1037,7 @@ public: do { Field* fields = result->Fetch(); - uint32 guid = fields[0].GetUInt32(); + ObjectGuid::LowType guid = fields[0].GetUInt32(); Creature* creature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, guid)); if (!creature) { diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index c4ab8f7648..0ae870b27e 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -808,7 +808,7 @@ public: private: int8 _phase; uint32 _moveTimer; - uint32 _eventStarterGuidLow; + ObjectGuid::LowType _eventStarterGuidLow; GuidList _explosivesGuids; EventMap _events; }; diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp index 79a20da970..fccdc8098b 100644 --- a/src/server/scripts/Northrend/isle_of_conquest.cpp +++ b/src/server/scripts/Northrend/isle_of_conquest.cpp @@ -206,7 +206,7 @@ class spell_ioc_parachute_ic : public SpellScriptLoader class StartLaunchEvent : public BasicEvent { public: - StartLaunchEvent(float x, float y, float z, uint32 lowGuid) : _x(x), _y(y), _z(z), _lowGuid(lowGuid) + StartLaunchEvent(float x, float y, float z, ObjectGuid::LowType lowGuid) : _x(x), _y(y), _z(z), _lowGuid(lowGuid) { } @@ -227,7 +227,7 @@ class StartLaunchEvent : public BasicEvent private: float _x, _y, _z; - uint32 _lowGuid; + ObjectGuid::LowType _lowGuid; }; class spell_ioc_launch : public SpellScriptLoader diff --git a/src/server/scripts/World/action_ip_logger.cpp b/src/server/scripts/World/action_ip_logger.cpp index 4a60a80ee5..f0ffbe1c7f 100644 --- a/src/server/scripts/World/action_ip_logger.cpp +++ b/src/server/scripts/World/action_ip_logger.cpp @@ -96,7 +96,7 @@ class AccountActionIpLogger : public AccountScript // We declare all the required variables uint32 playerGuid = accountId; - uint32 characterGuid = 0; + ObjectGuid::LowType characterGuid = 0; std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it later. // With this switch, we change systemNote so that we have a more accurate phrasing of what type it is. @@ -201,7 +201,7 @@ class CharacterActionIpLogger : public PlayerScript // We declare all the required variables uint32 playerGuid = player->GetSession()->GetAccountId(); - uint32 characterGuid = player->GetGUID().GetCounter(); + ObjectGuid::LowType characterGuid = player->GetGUID().GetCounter(); const std::string currentIp = player->GetSession()->GetRemoteAddress(); std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it... @@ -269,7 +269,7 @@ public: // Else, this script isn't loaded in the first place: We require no config check. // We declare all the required variables - uint32 characterGuid = guid.GetCounter(); // We have no access to any member function of Player* or WorldSession*. So use old-fashioned way. + ObjectGuid::LowType characterGuid = guid.GetCounter(); // We have no access to any member function of Player* or WorldSession*. So use old-fashioned way. // Query playerGuid/accountId, as we only have characterGuid std::string systemNote = "ERROR"; // "ERROR" is a placeholder here. We change it later. From 3f29ce9e8f7c9c57eacf38493737b5a7bce39925 Mon Sep 17 00:00:00 2001 From: pete318 Date: Tue, 13 Oct 2015 09:28:44 +0200 Subject: [PATCH 153/524] Core/Pch - Fix non PCH build. Issue introduced in https://github.com/TrinityCore/TrinityCore/commit/b1032ed6203a5839906fab7137484b0ef8f0e58f --- src/server/game/Entities/Player/SocialMgr.h | 1 + src/server/game/Events/GameEventMgr.h | 1 + src/server/game/Mails/Mail.h | 1 + src/server/game/Maps/TransportMgr.h | 1 + src/server/game/Tools/PlayerDump.h | 1 + 5 files changed, 5 insertions(+) diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h index c6a68ff5f4..887b5de58d 100644 --- a/src/server/game/Entities/Player/SocialMgr.h +++ b/src/server/game/Entities/Player/SocialMgr.h @@ -21,6 +21,7 @@ #include "DatabaseEnv.h" #include "Common.h" +#include "ObjectGuid.h" class SocialMgr; class PlayerSocial; diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index aaeaa3613a..57f30eb401 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -20,6 +20,7 @@ #define TRINITY_GAMEEVENT_MGR_H #include "Common.h" +#include "ObjectGuid.h" #include "SharedDefines.h" #include "Define.h" diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h index 7279f691d8..f044996bd0 100644 --- a/src/server/game/Mails/Mail.h +++ b/src/server/game/Mails/Mail.h @@ -20,6 +20,7 @@ #define TRINITY_MAIL_H #include "Common.h" +#include "ObjectGuid.h" #include struct AuctionEntry; diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index 20cf8dd20e..d100f60c60 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -21,6 +21,7 @@ #include #include "Spline.h" #include "DBCStores.h" +#include "ObjectGuid.h" struct KeyFrame; struct GameObjectTemplate; diff --git a/src/server/game/Tools/PlayerDump.h b/src/server/game/Tools/PlayerDump.h index 8aedddd6b5..d0c5b90fec 100644 --- a/src/server/game/Tools/PlayerDump.h +++ b/src/server/game/Tools/PlayerDump.h @@ -22,6 +22,7 @@ #include #include #include +#include "ObjectGuid.h" enum DumpTableType { From b76ea116851bae7084d36091fa1fa430de9b5dda Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Tue, 13 Oct 2015 17:39:12 +0200 Subject: [PATCH 154/524] Core/BG: Improved https://github.com/TrinityCore/TrinityCore/commit/d7cb84f6cddb56bc818b2bf30d3318d052039540 - Handle case when some players leave or InvitationType changes while running - Add some comments --- .../game/Battlegrounds/BattlegroundQueue.cpp | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index 6fd2524669..162122ab4d 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -503,19 +503,25 @@ void BattlegroundQueue::FillPlayersToBG(Battleground* bg, BattlegroundBracketId // try to get even teams if (sWorld->getIntConfig(CONFIG_BATTLEGROUND_INVITATION_TYPE) == BG_QUEUE_INVITATION_TYPE_EVEN) { - int32 hordeExtra = hordeCount - aliCount; - int32 aliExtra = aliCount - hordeCount; - - hordeExtra = std::max(hordeExtra, 0); - aliExtra = std::max(aliExtra, 0); - - if (aliCount != hordeCount) + // check if the teams are even + if (hordeFree == 1 && aliFree == 1) { - aliFree -= aliExtra; - hordeFree -= hordeExtra; + // if we are here, the teams have the same amount of players + // then we have to allow to join the same amount of players + int32 hordeExtra = hordeCount - aliCount; + int32 aliExtra = aliCount - hordeCount; - aliFree = std::max(aliFree, 0); - hordeFree = std::max(hordeFree, 0); + hordeExtra = std::max(hordeExtra, 0); + aliExtra = std::max(aliExtra, 0); + + if (aliCount != hordeCount) + { + aliFree -= aliExtra; + hordeFree -= hordeExtra; + + aliFree = std::max(aliFree, 0); + hordeFree = std::max(hordeFree, 0); + } } } From 7605a1497c50f3d0f67abf762e32d0fde9d40591 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 13 Oct 2015 23:43:19 +0200 Subject: [PATCH 155/524] DB/Creature: Reguid for future commit By Malcrom. --- sql/updates/world/2015_10_13_00_world_335.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 sql/updates/world/2015_10_13_00_world_335.sql diff --git a/sql/updates/world/2015_10_13_00_world_335.sql b/sql/updates/world/2015_10_13_00_world_335.sql new file mode 100644 index 0000000000..c861f4d177 --- /dev/null +++ b/sql/updates/world/2015_10_13_00_world_335.sql @@ -0,0 +1,12 @@ +-- +DELETE FROM `game_event_creature` WHERE `guid` IN (87734,87736,87877); +DELETE FROM `game_event_creature` WHERE `guid` IN (28797,28798,28799); +INSERT INTO `game_event_creature` (`eventEntry`,`guid`) VALUES +(24,28797),(24,28798),(24,28799); + +DELETE FROM `creature` WHERE `guid` IN (87734,87736,87877); +DELETE FROM `creature` WHERE `guid` IN (28797,28798,28799); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(28797,24497,1,1,1,1279.69,-4411.26,26.4771,1.97222,43200,0,0), +(28798,24484,1,1,1,1329.54,-4360.52,27.8138,0.940035,450,0,0), +(28799,24484,1,1,1,1332.88,-4360.04,28.1824,1.73972,450,0,0); From 258a49a3fc4af901abfdd20b67ddc674411b3c1e Mon Sep 17 00:00:00 2001 From: Carbenium Date: Wed, 14 Oct 2015 02:32:47 +0200 Subject: [PATCH 156/524] DB/Creature: Fix spawns/pathing in AQ40 By malcrom --- sql/updates/world/2015_10_14_00_world.sql | 990 ++++++++++++++++++++++ 1 file changed, 990 insertions(+) create mode 100644 sql/updates/world/2015_10_14_00_world.sql diff --git a/sql/updates/world/2015_10_14_00_world.sql b/sql/updates/world/2015_10_14_00_world.sql new file mode 100644 index 0000000000..f872ef654f --- /dev/null +++ b/sql/updates/world/2015_10_14_00_world.sql @@ -0,0 +1,990 @@ +-- Remove spawned Vexniss Borer +DELETE FROM `creature` WHERE `guid` BETWEEN 87654 AND 87670; +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 87654 AND 87670; +-- Remove spawned Vauj Brood +DELETE FROM `creature` WHERE `guid` BETWEEN 88068 AND 88071; +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 88068 AND 88071; +-- Remove overspawned Vexniss Warrior +DELETE FROM `creature` WHERE `guid` BETWEEN 87614 AND 87616; +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 87614 AND 87616; +DELETE FROM `creature` WHERE `guid` BETWEEN 87645 AND 87647; +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 87645 AND 87647; +-- Remove overspawned Vexniss Guardian +DELETE FROM `creature` WHERE `guid` BETWEEN 87639 AND 87644; +DELETE FROM `creature_addon` WHERE `guid` BETWEEN 87639 AND 87644; +DELETE FROM `creature` WHERE `guid`=87671; +DELETE FROM `creature_addon` WHERE `guid`=87671; + +SET @CGUID := 87564; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+7; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15264, 531, 1, 1, 169, -8321.975, 2142.675, 118.266, 0.6283185, 7200, 0, 0), +(@CGUID+1, 15264, 531, 1, 1, 169, -8156.46, 2119.579, 129.2029, 3.577925, 7200, 0, 0), +(@CGUID+2, 15264, 531, 1, 1, 169, -8288.92, 2054.495, 118.3005, 0.5235988, 7200, 0, 0), +(@CGUID+3, 15264, 531, 1, 1, 169, -8159.368, 2144.159, 129.5639, 4.08407, 7200, 0, 0), +(@CGUID+4, 15264, 531, 1, 1, 169, -8297.351, 2075.668, 118.2692, 0.6108652, 7200, 0, 0), +(@CGUID+5, 15264, 531, 1, 1, 169, -8182.612, 2166.212, 129.6401, 4.642576, 7200, 0, 0), +(@CGUID+6, 15264, 531, 1, 1, 169, -8314.339, 2119.221, 118.2629, 0.541052, 7200, 0, 0), +(@CGUID+7, 15264, 531, 1, 1, 169, -8206.177, 2164.815, 129.4669, 5.026548, 7200, 0, 0); + +DELETE FROM `creature` WHERE `guid` IN (88075,87527,87528,87529,87652,87653,87595,87596,87597,87598,87599,87600,87601,87602); +DELETE FROM `creature` WHERE `guid` BETWEEN 87604 AND 87638; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(88075, 15263, 531, 1, 1, 169, -8346.052, 2080.981, 125.7325, 0.4014257, 7200, 0, 0), +(87527, 15502, 531, 1, 1, 169, -8496.147, 1932.62, 135.7384, 1.308997, 7200, 0, 0), +(87529, 15503, 531, 1, 1, 169, -8500.15, 1937.377, 135.7554, 0.4712389, 7200, 0, 0), +(87528, 15504, 531, 1, 1, 169, -8499.575, 1933.64, 135.7087, 0.9773844, 7200, 0, 0), +(87652, 15262, 531, 1, 1, 169, -8281.484, 2087.381, 118.3001, 4.957793, 7200, 0, 0), +(87653, 15262, 531, 1, 1, 169, -8327.386, 2080.153, 125.6371, 5.012831, 7200, 0, 0), +(87595, 15233, 531, 1, 1, 169, -8404.733, 2070.303, 116.2127, 3.647738, 7200, 0, 0), +(87596, 15233, 531, 1, 1, 169, -8396.88, 2051.316, 116.2118, 3.385939, 7200, 0, 0), +(87597, 15247, 531, 1, 1, 169, -8391.906, 2063.48, 116.2034, 3.508112, 7200, 0, 0), +(87598, 15247, 531, 1, 1, 169, -8592.574, 1976.949, -1.209995, 6.091199, 7200, 0, 0), +(87599, 15233, 531, 1, 1, 169, -8586.837, 1985.7, -1.542133, 1.894589, 7200, 5, 1), +(87600, 15233, 531, 1, 1, 169, -8581.488, 1970.878, -1.458955, 4.427207, 7200, 5, 1), +(87608, 15233, 531, 1, 1, 169, -8593.99, 1964.035, -1.260533, 1.852829, 7200, 5, 1), +(87601, 15543, 531, 1, 1, 169, -8587.962, 2174.209, -4.147823, 4.939282, 7200, 0, 0), +(87602, 15511, 531, 1, 1, 169, -8566.884, 2177.171, -3.978982, 4.223697, 7200, 0, 0), +(87604, 15247, 531, 1, 1, 169, -8548.23, 2130.356, -2.730221, 4.485496, 7200, 0, 0), +(87605, 15247, 531, 1, 1, 169, -8551.39, 2118.207, -1.737938, 1.22173, 7200, 0, 0), +(87606, 15247, 531, 1, 1, 169, -8623.282, 2108.951, -2.676475, 3.787364, 7200, 0, 0), +(87607, 15247, 531, 1, 1, 169, -8631.831, 2101.618, -1.330519, 0.5061455, 7200, 0, 0), +(87609, 15233, 531, 1, 1, 169, -8541.605, 2134.76, -2.544568, 1.736609, 7200, 0, 0), +(87610, 15233, 531, 1, 1, 169, -8550.414, 2110.023, -0.8794384, 5.872046, 7200, 0, 0), +(87611, 15233, 531, 1, 1, 169, -8544.825, 2124.616, -1.830906, 5.065909, 7200, 0, 0), +(87612, 15233, 531, 1, 1, 169, -8620.168, 2093.819, -1.801619, 5.462881, 7200, 0, 0), +(87613, 15233, 531, 1, 1, 169, -8633.741, 2112.304, -1.909737, 1.784077, 7200, 0, 0), +(87614, 15233, 531, 1, 1, 169, -8636.268, 2090.388, -1.370589, 1.34908, 7200, 0, 0), +(87615, 15233, 531, 1, 1, 169, -8369.455, 2060.384, 9.630878, 5.041036, 7200, 0, 0), +(87616, 15233, 531, 1, 1, 169, -8368.543, 2035.741, 9.288624, 2.589778, 7200, 0, 0), +(87617, 15233, 531, 1, 1, 169, -8397.211, 2058.122, 9.618873, 1.057295, 7200, 0, 0), +(87618, 15233, 531, 1, 1, 169, -8385.495, 2044.833, 9.216681, 0.1224109, 7200, 0, 0), +(87619, 15233, 531, 1, 1, 169, -8393.083, 2075.153, 9.179768, 5.667883, 7200, 0, 0), +(87620, 15233, 531, 1, 1, 169, -8378.618, 2070.816, 8.844448, 1.763804, 7200, 0, 0), +(87621, 15233, 531, 1, 1, 169, -8326.908, 1891.109, -1.837783, 5.856318, 7200, 0, 0), +(87622, 15233, 531, 1, 1, 169, -8339.306, 1800.288, -1.517404, 3.040907, 7200, 0, 0), +(87623, 15233, 531, 1, 1, 169, -8351.284, 1805.48, -1.233535, 0.5619113, 7200, 0, 0), +(87624, 15233, 531, 1, 1, 169, -8344.919, 1919.037, -2.500755, 3.838682, 7200, 0, 0), +(87625, 15233, 531, 1, 1, 169, -8402.613, 1914.386, 3.142937, 2.031992, 7200, 0, 0), +(87626, 15233, 531, 1, 1, 169, -8351.182, 1921.119, -2.540841, 3.627775, 7200, 0, 0), +(87627, 15233, 531, 1, 1, 169, -8328.894, 1876.641, -2.246095, 4.796616, 7200, 0, 0), +(87628, 15233, 531, 1, 1, 169, -8401.165, 1932.269, 2.618013, 5.465084, 7200, 0, 0), +(87629, 15233, 531, 1, 1, 169, -8350.329, 1814.966, 0.02815836, 0.622449, 7200, 0, 0), +(87630, 15233, 531, 1, 1, 169, -8339.517, 1890.658, -2.486081, 2.180425, 7200, 0, 0), +(87631, 15233, 531, 1, 1, 169, -8393.705, 1924.228, 3.221893, 2.51069, 7200, 0, 0), +(87632, 15233, 531, 1, 1, 169, -8357.022, 1822.796, 0.3194859, 6.032223, 7200, 0, 0), +(87633, 15233, 531, 1, 1, 169, -8395.523, 1942.848, 4.020818, 5.754907, 7200, 0, 0), +(87634, 15233, 531, 1, 1, 169, -8341.861, 1906.819, -2.410278, 5.228793, 7200, 0, 0), +(87635, 15233, 531, 1, 1, 169, -8390.899, 1914.458, 3.005651, 2.863161, 7200, 0, 0), +(87636, 15233, 531, 1, 1, 169, -8408.117, 1938.302, 3.825733, 2.332423, 7200, 0, 0), +(87637, 15233, 531, 1, 1, 169, -8348.093, 1790.437, -2.233759, 2.154297, 7200, 0, 0), +(87638, 15233, 531, 1, 1, 169, -8363.572, 1811.677, 1.227631, 5.535646, 7200, 0, 0); + +DELETE FROM `creature` WHERE `id` IN (15962,15630); + +SET @CGUID := 87678; +DELETE FROM `creature` WHERE `guid` BETWEEN 87678 AND 87900; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15300, 531, 1, 1, 169, -7892.548, 1435.668, -65.22711, 0.03490658, 7200, 5, 1), +(@CGUID+1, 15300, 531, 1, 1, 169, -7892.569, 1422.789, -64.86232, 0.03490658, 7200, 5, 1), +(@CGUID+2, 15300, 531, 1, 1, 169, -7893.518, 1410.414, -63.56542, 0.06981317, 7200, 5, 1), +(@CGUID+3, 15300, 531, 1, 1, 169, -7898.467, 1467.742, -63.57774, 0.9599311, 7200, 5, 1), +(@CGUID+4, 15300, 531, 1, 1, 169, -7902.507, 1379.252, -64.91041, 5.602507, 7200, 5, 1), +(@CGUID+5, 15300, 531, 1, 1, 169, -7903.237, 1475.595, -62.51829, 0.1745329, 7200, 5, 1), +(@CGUID+6, 15300, 531, 1, 1, 169, -7904.257, 1483.905, -61.91321, 0.1919862, 7200, 5, 1), +(@CGUID+7, 15300, 531, 1, 1, 169, -7905.727, 1397.53, -65.67427, 1.689209, 7200, 5, 1), +(@CGUID+8, 15300, 531, 1, 1, 169, -7908.201, 1441.5, -67.67268, 1.965443, 7200, 5, 1), +(@CGUID+9, 15300, 531, 1, 1, 169, -7909.212, 1453.823, -66.71354, 5.388192, 7200, 5, 1), +(@CGUID+10, 15300, 531, 1, 1, 169, -7909.227, 1432.98, -68.22237, 2.530727, 7200, 5, 1), +(@CGUID+11, 15300, 531, 1, 1, 169, -7909.395, 1408.309, -66.57648, 2.094395, 7200, 5, 1), +(@CGUID+12, 15300, 531, 1, 1, 169, -7911.222, 1360.079, -75.37612, 5.811946, 7200, 5, 1), +(@CGUID+13, 15300, 531, 1, 1, 169, -7911.51, 1433.753, -68.01991, 2.973195, 7200, 5, 1), +(@CGUID+14, 15300, 531, 1, 1, 169, -7912.08, 1399.684, -68.01915, 4.38238, 7200, 5, 1), +(@CGUID+15, 15300, 531, 1, 1, 169, -7912.685, 1392.55, -68.86684, 4.433136, 7200, 5, 1), +(@CGUID+16, 15300, 531, 1, 1, 169, -7915.495, 1391.565, -68.96242, 0.1829643, 7200, 5, 1), +(@CGUID+17, 15300, 531, 1, 1, 169, -7916.698, 1452.717, -66.98033, 3.176499, 7200, 5, 1), +(@CGUID+18, 15300, 531, 1, 1, 169, -7919.031, 1399.421, -65.47141, 0.8203048, 7200, 5, 1), +(@CGUID+19, 15300, 531, 1, 1, 169, -7919.174, 1450.881, -66.86721, 3.781995, 7200, 5, 1), +(@CGUID+20, 15300, 531, 1, 1, 169, -7919.538, 1503.975, -60.7916, 0.6806784, 7200, 5, 1), +(@CGUID+21, 15300, 531, 1, 1, 169, -7919.866, 1441.265, -66.96127, 0.03490658, 7200, 5, 1), +(@CGUID+22, 15300, 531, 1, 1, 169, -7921.188, 1485.365, -64.48227, 3.437477, 7200, 5, 1), +(@CGUID+23, 15300, 531, 1, 1, 169, -7923.026, 1477.876, -65.64141, 3.438299, 7200, 5, 1), +(@CGUID+24, 15300, 531, 1, 1, 169, -7925.117, 1421.922, -65.61559, 3.193953, 7200, 5, 1), +(@CGUID+25, 15300, 531, 1, 1, 169, -7926.443, 1354.812, -83.58868, 3.46605, 7200, 5, 1), +(@CGUID+26, 15300, 531, 1, 1, 169, -7926.561, 1411.766, -65.3652, 2.740167, 7200, 5, 1), +(@CGUID+27, 15300, 531, 1, 1, 169, -7926.702, 1518.368, -59.68728, 0.5585054, 7200, 5, 1), +(@CGUID+28, 15300, 531, 1, 1, 169, -7927.257, 1493.96, -64.12371, 2.336106, 7200, 5, 1), +(@CGUID+29, 15300, 531, 1, 1, 169, -7927.331, 1328.951, -89.86474, 5.759586, 7200, 5, 1), +(@CGUID+30, 15300, 531, 1, 1, 169, -7927.374, 1365.604, -79.83042, 6.056293, 7200, 5, 1), +(@CGUID+31, 15300, 531, 1, 1, 169, -7927.462, 1472.604, -65.65568, 1.799682, 7200, 5, 1), +(@CGUID+32, 15300, 531, 1, 1, 169, -7927.478, 1389.667, -69.12563, 2.949606, 7200, 5, 1), +(@CGUID+33, 15300, 531, 1, 1, 169, -7929.896, 1484.513, -65.13245, 2.539029, 7200, 5, 1), +(@CGUID+34, 15300, 531, 1, 1, 169, -7930.548, 1320.507, -90.37265, 5.707227, 7200, 5, 1), +(@CGUID+35, 15300, 531, 1, 1, 169, -7931.007, 1349.313, -86.4936, 4.62881, 7200, 5, 1), +(@CGUID+36, 15300, 531, 1, 1, 169, -7932.876, 1453.155, -65.91177, 3.333579, 7200, 5, 1), +(@CGUID+37, 15300, 531, 1, 1, 169, -7933.675, 1528.835, -59.21246, 0.6283185, 7200, 5, 1), +(@CGUID+38, 15300, 531, 1, 1, 169, -7933.889, 1378.917, -75.02083, 3.036873, 7200, 5, 1), +(@CGUID+39, 15300, 531, 1, 1, 169, -7935.543, 1492.749, -64.42677, 5.602507, 7200, 5, 1), +(@CGUID+40, 15300, 531, 1, 1, 169, -7936.098, 1496.016, -64.40736, 3.071736, 7200, 5, 1), +(@CGUID+41, 15300, 531, 1, 1, 169, -7937.946, 1461.595, -65.50119, 3.804818, 7200, 5, 1), +(@CGUID+42, 15300, 531, 1, 1, 169, -7938.33, 1348.699, -87.84061, 3.572022, 7200, 5, 1), +(@CGUID+43, 15300, 531, 1, 1, 169, -7938.882, 1372.345, -78.70309, 2.199115, 7200, 5, 1), +(@CGUID+44, 15300, 531, 1, 1, 169, -7939.133, 1356.648, -86.10828, 1.623156, 7200, 5, 1), +(@CGUID+45, 15300, 531, 1, 1, 169, -7940.602, 1337.277, -91.03973, 2.722714, 7200, 5, 1), +(@CGUID+46, 15300, 531, 1, 1, 169, -7949.532, 1525.042, -62.28769, 2.129302, 7200, 5, 1), +(@CGUID+47, 15300, 531, 1, 1, 169, -7949.806, 1486.382, -63.61917, 3.525565, 7200, 5, 1), +(@CGUID+48, 15300, 531, 1, 1, 169, -7950.41, 1317.311, -89.45904, 1.911877, 7200, 5, 1), +(@CGUID+49, 15300, 531, 1, 1, 169, -7950.723, 1521.167, -62.74979, 2.950145, 7200, 5, 1), +(@CGUID+50, 15300, 531, 1, 1, 169, -7954.241, 1559.81, -59.11872, 0.715585, 7200, 5, 1), +(@CGUID+51, 15300, 531, 1, 1, 169, -7954.718, 1540.167, -60.00118, 4.363323, 7200, 5, 1), +(@CGUID+52, 15300, 531, 1, 1, 169, -7954.768, 1345.852, -91.36903, 3.124139, 7200, 5, 1), +(@CGUID+53, 15300, 531, 1, 1, 169, -7955.768, 1568.089, -60.09465, 0.2268928, 7200, 5, 1), +(@CGUID+54, 15300, 531, 1, 1, 169, -7955.857, 1498.233, -62.65005, 3.665191, 7200, 5, 1), +(@CGUID+55, 15300, 531, 1, 1, 169, -7955.873, 1284.801, -75.54648, 5.8294, 7200, 5, 1), +(@CGUID+56, 15300, 531, 1, 1, 169, -7957.664, 1340.282, -92.26547, 2.286381, 7200, 5, 1), +(@CGUID+57, 15300, 531, 1, 1, 169, -7958.491, 1528.291, -61.77398, 3.857317, 7200, 5, 1), +(@CGUID+58, 15300, 531, 1, 1, 169, -7959.439, 1320.096, -89.41815, 0.8552113, 7200, 5, 1), +(@CGUID+59, 15300, 531, 1, 1, 169, -7960.226, 1307.606, -83.07062, 5.003528, 7200, 5, 1), +(@CGUID+60, 15300, 531, 1, 1, 169, -7961.386, 1279.918, -73.73505, 5.375614, 7200, 5, 1), +(@CGUID+61, 15300, 531, 1, 1, 169, -7961.915, 1338.292, -92.40445, 2.234021, 7200, 5, 1), +(@CGUID+62, 15300, 531, 1, 1, 169, -7967.022, 1274.792, -72.16002, 5.044002, 7200, 5, 1), +(@CGUID+63, 15300, 531, 1, 1, 169, -7967.221, 1524.411, -60.57605, 5.270895, 7200, 5, 1), +(@CGUID+64, 15300, 531, 1, 1, 169, -7967.628, 1313.647, -85.22298, 5.323254, 7200, 5, 1), +(@CGUID+65, 15300, 531, 1, 1, 169, -7967.866, 1536.324, -62.04499, 5.916666, 7200, 5, 1), +(@CGUID+66, 15300, 531, 1, 1, 169, -7970.926, 1297.65, -76.17361, 3.368485, 7200, 5, 1), +(@CGUID+67, 15300, 531, 1, 1, 169, -7971.198, 1302.062, -78.52887, 2.688358, 7200, 5, 1), +(@CGUID+68, 15300, 531, 1, 1, 169, -7978.03, 1568.925, -61.93628, 2.338741, 7200, 5, 1), +(@CGUID+69, 15300, 531, 1, 1, 169, -7979.314, 1537.99, -61.21902, 3.211406, 7200, 5, 1), +(@CGUID+70, 15300, 531, 1, 1, 169, -7982.532, 1274.688, -72.87275, 4.817109, 7200, 5, 1), +(@CGUID+71, 15300, 531, 1, 1, 169, -7984.055, 1544.057, -61.72084, 3.560472, 7200, 5, 1), +(@CGUID+72, 15300, 531, 1, 1, 169, -7984.721, 1306.54, -76.8012, 2.356194, 7200, 5, 1), +(@CGUID+73, 15300, 531, 1, 1, 169, -7988.979, 1555.543, -62.07476, 3.560472, 7200, 5, 1), +(@CGUID+74, 15300, 531, 1, 1, 169, -7989.688, 1580.115, -62.092, 6.125817, 7200, 5, 1), +(@CGUID+75, 15300, 531, 1, 1, 169, -7990.045, 1297.59, -74.12374, 3.123379, 7200, 5, 1), +(@CGUID+76, 15300, 531, 1, 1, 169, -7990.39, 1272.209, -73.56954, 2.932153, 7200, 5, 1), +(@CGUID+77, 15300, 531, 1, 1, 169, -7990.807, 1284.74, -73.15822, 2.827433, 7200, 5, 1), +(@CGUID+78, 15300, 531, 1, 1, 169, -7991.841, 1299.617, -73.96005, 2.129302, 7200, 5, 1), +(@CGUID+79, 15300, 531, 1, 1, 169, -7992.515, 1592.58, -60.09307, 0.526886, 7200, 5, 1), +(@CGUID+80, 15300, 531, 1, 1, 169, -7999.318, 1278.983, -73.69726, 4.537856, 7200, 5, 1), +(@CGUID+81, 15300, 531, 1, 1, 169, -8000.123, 1602.627, -58.32988, 0.2268928, 7200, 5, 1), +(@CGUID+82, 15300, 531, 1, 1, 169, -8002.065, 1595.297, -60.0018, 1.451103, 7200, 5, 1), +(@CGUID+83, 15300, 531, 1, 1, 169, -8003.662, 1273.239, -75.26857, 0.2094395, 7200, 5, 1), +(@CGUID+84, 15300, 531, 1, 1, 169, -8004.083, 1619.394, -55.74008, 0.2443461, 7200, 5, 1), +(@CGUID+85, 15300, 531, 1, 1, 169, -8005.251, 1585.535, -61.27219, 0.2546086, 7200, 5, 1), +(@CGUID+86, 15300, 531, 1, 1, 169, -8006.769, 1543.797, -67.10904, 5.218534, 7200, 5, 1), +(@CGUID+87, 15300, 531, 1, 1, 169, -8010.409, 1557.02, -66.04092, 6.091199, 7200, 5, 1), +(@CGUID+88, 15300, 531, 1, 1, 169, -8010.659, 1253.649, -79.13587, 1.675516, 7200, 5, 1), +(@CGUID+89, 15300, 531, 1, 1, 169, -8011.024, 1629.752, -55.88325, 0.6283185, 7200, 5, 1), +(@CGUID+90, 15300, 531, 1, 1, 169, -8015.45, 1614.308, -58.71272, 1.978479, 7200, 5, 1), +(@CGUID+91, 15300, 531, 1, 1, 169, -8017.145, 1536.662, -68.31948, 5.113815, 7200, 5, 1), +(@CGUID+92, 15300, 531, 1, 1, 169, -8017.821, 1614.39, -59.06019, 0.715585, 7200, 5, 1), +(@CGUID+93, 15300, 531, 1, 1, 169, -8021.231, 1552.841, -67.07516, 5.462881, 7200, 5, 1), +(@CGUID+94, 15300, 531, 1, 1, 169, -8026.983, 1601.135, -59.09586, 3.839724, 7200, 5, 1), +(@CGUID+95, 15300, 531, 1, 1, 169, -8028.739, 1230.844, -85.93344, 5.5676, 7200, 5, 1), +(@CGUID+96, 15300, 531, 1, 1, 169, -8030.674, 1534.738, -67.83488, 3.595378, 7200, 5, 1), +(@CGUID+97, 15300, 531, 1, 1, 169, -8030.963, 1190.392, -88.7235, 1.48353, 7200, 5, 1), +(@CGUID+98, 15300, 531, 1, 1, 169, -8033.078, 1644.174, -58.82825, 4.17972, 7200, 5, 1), +(@CGUID+99, 15300, 531, 1, 1, 169, -8033.252, 1610.343, -58.87102, 3.560472, 7200, 5, 1), +(@CGUID+100, 15300, 531, 1, 1, 169, -8037.915, 1551.607, -65.29885, 4.206244, 7200, 5, 1), +(@CGUID+101, 15300, 531, 1, 1, 169, -8038.434, 1617.541, -58.87218, 4.153883, 7200, 5, 1), +(@CGUID+102, 15300, 531, 1, 1, 169, -8043.782, 1637.505, -59.37272, 3.199285, 7200, 5, 1), +(@CGUID+103, 15300, 531, 1, 1, 169, -8045.612, 1583.694, -62.98385, 0.9790034, 7200, 5, 1), +(@CGUID+104, 15300, 531, 1, 1, 169, -8050.1, 1645.168, -58.91573, 4.224158, 7200, 5, 1), +(@CGUID+105, 15300, 531, 1, 1, 169, -8052.96, 1648.648, -58.46545, 0.3665192, 7200, 5, 1), +(@CGUID+106, 15300, 531, 1, 1, 169, -8057.072, 1658.566, -56.45635, 0.8377581, 7200, 5, 1), +(@CGUID+107, 15300, 531, 1, 1, 169, -8057.798, 1593.25, -61.41485, 3.272068, 7200, 5, 1), +(@CGUID+108, 15300, 531, 1, 1, 169, -8058.555, 1573.006, -61.56964, 3.92076, 7200, 5, 1), +(@CGUID+109, 15300, 531, 1, 1, 169, -8059.333, 1586.706, -61.1738, 5.235988, 7200, 5, 1), +(@CGUID+110, 15300, 531, 1, 1, 169, -8060.234, 1604.707, -60.46527, 4.956735, 7200, 5, 1), +(@CGUID+111, 15300, 531, 1, 1, 169, -8065.966, 1589.98, -60.27099, 0.8203048, 7200, 5, 1), +(@CGUID+112, 15300, 531, 1, 1, 169, -8066.036, 1645.905, -56.94833, 3.00077, 7200, 5, 1), +(@CGUID+113, 15300, 531, 1, 1, 169, -8073.205, 1670.581, -51.66552, 1.500983, 7200, 5, 1), +(@CGUID+114, 15300, 531, 1, 1, 169, -8078.903, 1239.604, -91.37767, 1.066351, 7200, 5, 1), +(@CGUID+115, 15300, 531, 1, 1, 169, -8082.463, 1673.083, -49.71113, 1.029744, 7200, 5, 1), +(@CGUID+116, 15300, 531, 1, 1, 169, -8082.638, 1645.959, -53.69846, 4.45059, 7200, 5, 1), +(@CGUID+117, 15300, 531, 1, 1, 169, -8082.839, 1626.916, -55.887, 0.8028514, 7200, 5, 1), +(@CGUID+118, 15300, 531, 1, 1, 169, -8084.041, 1154.17, -92.02991, 1.797689, 7200, 5, 1), +(@CGUID+119, 15300, 531, 1, 1, 169, -8087.102, 1594.794, -56.22529, 3.612832, 7200, 5, 1), +(@CGUID+120, 15300, 531, 1, 1, 169, -8091.706, 1660.421, -51.86389, 1.884956, 7200, 5, 1), +(@CGUID+121, 15300, 531, 1, 1, 169, -8092.724, 1633.168, -54.13385, 0.3490658, 7200, 5, 1), +(@CGUID+122, 15300, 531, 1, 1, 169, -8093.48, 1646.51, -51.53661, 4.939282, 7200, 5, 1), +(@CGUID+123, 15300, 531, 1, 1, 169, -8098.15, 1677.546, -46.38687, 1.43117, 7200, 5, 1), +(@CGUID+124, 15300, 531, 1, 1, 169, -8102.48, 1600.465, -52.38706, 4.310963, 7200, 5, 1), +(@CGUID+125, 15300, 531, 1, 1, 169, -8103.642, 1634.176, -51.76759, 1.58825, 7200, 5, 1), +(@CGUID+126, 15300, 531, 1, 1, 169, -8105.175, 1616.933, -52.51282, 3.246312, 7200, 5, 1), +(@CGUID+127, 15300, 531, 1, 1, 169, -8110, 1654.932, -47.85446, 6.178465, 7200, 5, 1), +(@CGUID+128, 15300, 531, 1, 1, 169, -8110.333, 1194.992, -91.69107, 1.570796, 7200, 5, 1), +(@CGUID+129, 15300, 531, 1, 1, 169, -8183.295, 1625.464, -38.23788, 3.455752, 7200, 5, 1), +(@CGUID+130, 15300, 531, 1, 1, 169, -8110.5, 1665.461, -47.72958, 0.418879, 7200, 5, 1), +(@CGUID+131, 15300, 531, 1, 1, 169, -8117.023, 1671.853, -45.05032, 6.038839, 7200, 5, 1), +(@CGUID+132, 15300, 531, 1, 1, 169, -8121.577, 1659.169, -44.89305, 5.5676, 7200, 5, 1), +(@CGUID+133, 15300, 531, 1, 1, 169, -8122.221, 1622.481, -49.14006, 0.8982115, 7200, 5, 1), +(@CGUID+134, 15300, 531, 1, 1, 169, -8123.377, 1655.844, -44.69468, 3.455752, 7200, 5, 1), +(@CGUID+135, 15300, 531, 1, 1, 169, -8124.208, 1665.759, -44.58142, 1.099557, 7200, 5, 1), +(@CGUID+136, 15300, 531, 1, 1, 169, -8135.342, 1631.169, -46.52505, 5.67232, 7200, 5, 1), +(@CGUID+137, 15300, 531, 1, 1, 169, -8135.99, 1614.041, -45.35197, 4.270462, 7200, 5, 1), +(@CGUID+138, 15300, 531, 1, 1, 169, -8140.333, 1653.827, -40.98864, 3.769911, 7200, 5, 1), +(@CGUID+139, 15300, 531, 1, 1, 169, -8141.307, 1619.113, -44.39598, 1.029744, 7200, 5, 1), +(@CGUID+140, 15300, 531, 1, 1, 169, -8144.391, 1680.055, -36.83066, 1.361357, 7200, 5, 1), +(@CGUID+141, 15300, 531, 1, 1, 169, -8146.426, 1631.036, -44.10762, 4.729842, 7200, 5, 1), +(@CGUID+142, 15300, 531, 1, 1, 169, -8147.207, 1655.39, -38.81593, 5.51524, 7200, 5, 1), +(@CGUID+143, 15300, 531, 1, 1, 169, -8151.949, 1683.398, -35.01212, 0.8028514, 7200, 5, 1), +(@CGUID+144, 15300, 531, 1, 1, 169, -8154.279, 1613.235, -40.65197, 4.607669, 7200, 5, 1), +(@CGUID+145, 15300, 531, 1, 1, 169, -8155.774, 1674.52, -36.2891, 2.181224, 7200, 5, 1), +(@CGUID+146, 15300, 531, 1, 1, 169, -8156.148, 1656.466, -36.48287, 4.694936, 7200, 5, 1), +(@CGUID+147, 15300, 531, 1, 1, 169, -8156.426, 1625.304, -41.49326, 2.059489, 7200, 5, 1), +(@CGUID+148, 15300, 531, 1, 1, 169, -8160.91, 1643.194, -38.99018, 1.867502, 7200, 5, 1), +(@CGUID+149, 15300, 531, 1, 1, 169, -8167.602, 1671.222, -34.59419, 4.433136, 7200, 5, 1), +(@CGUID+150, 15300, 531, 1, 1, 169, -8170.387, 1639.527, -37.48939, 1.884956, 7200, 5, 1), +(@CGUID+151, 15300, 531, 1, 1, 169, -8170.757, 1613.131, -37.4205, 3.926991, 7200, 5, 1); + +-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT' +SET @NPC := 87901; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8015.134,`position_y`=1258.724,`position_z`=-79.72564 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8015.134,1258.724,-79.72564,0,0,1,0,100,0), +(@PATH,2,-7971.334,1280.292,-73.27785,0,0,1,0,100,0), +(@PATH,3,-7954.62,1323.919,-90.7532,0,0,1,0,100,0), +(@PATH,4,-7970.993,1280.664,-73.33447,0,0,1,0,100,0); + +-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT' +SET @NPC := 87902; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8043.788,`position_y`=1645.192,`position_z`=-59.28296 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8043.788,1645.192,-59.28296,0,0,1,0,100,0), +(@PATH,2,-8020.601,1616.473,-59.27552,0,0,1,0,100,0), +(@PATH,3,-8043.788,1645.192,-59.28296,0,0,1,0,100,0), +(@PATH,4,-8073.597,1660.363,-54.66129,0,0,1,0,100,0), +(@PATH,5,-8111.89,1663.297,-47.55686,0,0,1,0,100,0), +(@PATH,6,-8157.463,1669.077,-36.71965,0,0,1,0,100,0), +(@PATH,7,-8111.89,1663.297,-47.55686,0,0,1,0,100,0), +(@PATH,8,-8073.597,1660.363,-54.66129,0,0,1,0,100,0); + +-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT' +SET @NPC := 87903; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7902.709,`position_y`=1410.921,`position_z`=-66.08652 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-7902.709,1410.921,-66.08652,0,0,1,0,100,0), +(@PATH,2,-7927.595,1369.56,-78.29517,0,0,1,0,100,0), +(@PATH,3,-7938.981,1323.41,-92.47753,0,0,1,0,100,0), +(@PATH,4,-7927.595,1369.56,-78.29517,0,0,1,0,100,0); + +-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT' +SET @NPC := 87904; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7938.296,`position_y`=1489.504,`position_z`=-64.33451 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-7938.296,1489.504,-64.33451,0,0,1,0,100,0), +(@PATH,2,-7902.537,1456.171,-65.55414,0,0,1,0,100,0), +(@PATH,3,-7915.813,1414.564,-66.10455,0,0,1,0,100,0), +(@PATH,4,-7902.476,1455.991,-65.56479,0,0,1,0,100,0); + +-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT' +SET @NPC := 87905; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8164.897,`position_y`=1624.758,`position_z`=-40.04349 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8164.897,1624.758,-40.04349,0,0,1,0,100,0), +(@PATH,2,-8130.617,1623.805,-47.28335,0,0,1,0,100,0), +(@PATH,3,-8087.561,1611.887,-56.31141,0,0,1,0,100,0), +(@PATH,4,-8054.685,1585.599,-61.79655,0,0,1,0,100,0), +(@PATH,5,-8028.956,1551.455,-66.53555,0,0,1,0,100,0), +(@PATH,6,-8054.685,1585.599,-61.79655,0,0,1,0,100,0), +(@PATH,7,-8087.561,1611.887,-56.31141,0,0,1,0,100,0), +(@PATH,8,-8130.617,1623.805,-47.28335,0,0,1,0,100,0); + +-- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT' +SET @NPC := 87906; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7925.455,`position_y`=1500.005,`position_z`=-63.07186 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-7925.455,1500.005,-63.07186,0,0,1,0,100,0), +(@PATH,2,-7966.281,1527.871,-61.1781,0,0,1,0,100,0), +(@PATH,3,-7976.614,1572.205,-61.79373,0,0,1,0,100,0), +(@PATH,4,-7966.281,1527.871,-61.1781,0,0,1,0,100,0); + +DELETE FROM `creature` WHERE `guid`=87907; + +DELETE FROM `creature_template_addon` WHERE `entry` IN (15233,15247); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (15233,0,1,0, '18950'),(15247,0,1,0, '18950'); + +-- Pathing for Obsidian Eradicator Entry: 15262 'TDB FORMAT' +SET @NPC := 88074; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8181.452,`position_y`=2105.019,`position_z`=129.1963 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8181.452,2105.019,129.1963,0,0,0,0,100,0), +(@PATH,2,-8191.375,2086.593,129.1963,0,0,0,0,100,0), +(@PATH,3,-8181.452,2105.019,129.1963,0,0,0,0,100,0), +(@PATH,4,-8185.167,2123.686,129.1963,0,0,0,0,100,0), +(@PATH,5,-8202.72,2136.731,129.3353,0,0,0,0,100,0), +(@PATH,6,-8233.334,2128.125,131.1751,0,0,0,0,100,0), +(@PATH,7,-8242.226,2125.75,127.5347,0,0,0,0,100,0), +(@PATH,8,-8256.743,2124.262,120.2957,0,0,0,0,100,0), +(@PATH,9,-8242.226,2125.75,127.5347,0,0,0,0,100,0), +(@PATH,10,-8234.375,2128.125,130.8001,0,0,0,0,100,0), +(@PATH,11,-8202.72,2136.731,129.3353,0,0,0,0,100,0), +(@PATH,12,-8185.167,2123.686,129.1963,0,0,0,0,100,0); + +-- Pathing for Obsidian Eradicator Entry: 15262 'TDB FORMAT' +SET @NPC := 87652; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8282.951,`position_y`=2093.236,`position_z`=118.3001 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8282.951,2093.236,118.3001,0,0,0,0,100,0), +(@PATH,2,-8273.953,2106.067,118.3001,0,0,0,0,100,0), +(@PATH,3,-8277.969,2116.79,118.3001,0,0,0,0,100,0), +(@PATH,4,-8292.524,2119.098,118.3001,0,0,0,0,100,0), +(@PATH,5,-8307.771,2141.695,118.3659,0,0,0,0,100,0), +(@PATH,6,-8292.524,2119.098,118.3001,0,0,0,0,100,0), +(@PATH,7,-8277.969,2116.79,118.3001,0,0,0,0,100,0), +(@PATH,8,-8273.953,2106.067,118.3001,0,0,0,0,100,0), +(@PATH,9,-8282.951,2093.236,118.3001,0,0,0,0,100,0), +(@PATH,10,-8277.297,2070.659,118.3001,0,0,0,0,100,0); + +-- Pathing for Obsidian Eradicator Entry: 15262 'TDB FORMAT' +SET @NPC := 87653; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8325.952,`position_y`=2055.939,`position_z`=133.0548 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8325.952,2055.939,133.0548,0,0,0,0,100,0), +(@PATH,2,-8332.794,2047.068,133.1227,0,0,0,0,100,0), +(@PATH,3,-8338.969,2041.953,136.5257,0,0,0,0,100,0), +(@PATH,4,-8347.218,2036.589,142.4718,0,0,0,0,100,0), +(@PATH,5,-8357.45,2041.958,144.8221,0,0,0,0,100,0), +(@PATH,6,-8368.557,2053.296,144.8487,0,0,0,0,100,0), +(@PATH,7,-8378.51,2073.499,144.8015,0,0,0,0,100,0), +(@PATH,8,-8383.191,2096.747,144.8261,0,0,0,0,100,0), +(@PATH,9,-8379.467,2113.167,143.6545,0,0,0,0,100,0), +(@PATH,10,-8368.374,2117.771,136.2442,0,0,0,0,100,0), +(@PATH,11,-8356.403,2116.523,133.1008,0,0,0,0,100,0), +(@PATH,12,-8342.338,2116.063,133.0911,0,0,0,0,100,0), +(@PATH,13,-8338.457,2108.827,132.6952,0,0,0,0,100,0), +(@PATH,14,-8331.443,2092.253,125.627,0,0,0,0,100,0), +(@PATH,15,-8323.716,2093.625,125.6041,0,0,0,0,100,0), +(@PATH,16,-8316.983,2095.258,122.4067,0,0,0,0,100,0), +(@PATH,17,-8311.382,2097.501,118.8619,0,0,0,0,100,0), +(@PATH,18,-8302.849,2107.911,118.3001,0,0,0,0,100,0), +(@PATH,19,-8292.684,2108.071,118.3001,0,0,0,0,100,0), +(@PATH,20,-8289.837,2100.808,118.3001,0,0,0,0,100,0), +(@PATH,21,-8297.129,2093.869,118.3001,0,0,0,0,100,0), +(@PATH,22,-8310.037,2094.395,118.7956,0,0,0,0,100,0), +(@PATH,23,-8315.771,2092.706,122.2935,0,0,0,0,100,0), +(@PATH,24,-8322.37,2089.841,125.615,0,0,0,0,100,0), +(@PATH,25,-8328.958,2085.229,125.6326,0,0,0,0,100,0), +(@PATH,26,-8326.164,2076.209,126.8105,0,0,0,0,100,0), +(@PATH,27,-8321.34,2065.851,133.0319,0,0,0,0,100,0); + +-- Pathing for Vekniss Warrior Entry: 15230 'TDB FORMAT' +SET @NPC := 87672; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8578.048,`position_y`=1940.539,`position_z`=-0.06545047 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8581.048,`position_y`=1940.539,`position_z`=-0.06545047 WHERE `guid`=@NPC+1; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8586.048,`position_y`=1940.539,`position_z`=-0.06545047 WHERE `guid`=@NPC+2; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8578.048,1940.539,-0.06545047,0,0,1,0,100,0), +(@PATH,2,-8549.408,1941.299,5.823864,0,0,1,0,100,0), +(@PATH,3,-8531.94,1962.451,11.77114,0,0,1,0,100,0), +(@PATH,4,-8536.534,1991.978,20.64153,0,0,1,0,100,0), +(@PATH,5,-8511.746,1997.704,21.69398,0,0,1,0,100,0), +(@PATH,6,-8469.14,2013.381,16.1259,0,0,1,0,100,0), +(@PATH,7,-8433.611,2039.519,8.550707,0,0,1,0,100,0), +(@PATH,8,-8401.688,2057.265,9.581982,0,0,1,0,100,0), +(@PATH,9,-8407.505,2014.451,8.3922,0,0,1,0,100,0), +(@PATH,10,-8405.526,1984.281,2.559676,0,0,1,0,100,0), +(@PATH,11,-8389.834,1963.352,2.570214,0,0,1,0,100,0), +(@PATH,12,-8405.526,1984.281,2.559676,0,0,1,0,100,0), +(@PATH,13,-8407.505,2014.451,8.3922,0,0,1,0,100,0), +(@PATH,14,-8401.688,2057.265,9.581982,0,0,1,0,100,0), +(@PATH,15,-8433.611,2039.519,8.550707,0,0,1,0,100,0), +(@PATH,16,-8469.14,2013.381,16.1259,0,0,1,0,100,0), +(@PATH,17,-8511.746,1997.704,21.69398,0,0,1,0,100,0), +(@PATH,18,-8536.534,1991.978,20.64153,0,0,1,0,100,0), +(@PATH,19,-8531.94,1962.451,11.77114,0,0,1,0,100,0), +(@PATH,20,-8549.408,1941.299,5.823864,0,0,1,0,100,0), +(@PATH,21,-8578.048,1940.539,-0.06545047,0,0,1,0,100,0), +(@PATH,22,-8581.254,1985.698,-1.939677,0,0,1,0,100,0), +(@PATH,23,-8580,2032.773,-2.74892,0,0,1,0,100,0), +(@PATH,24,-8594.974,2078.681,-1.559797,0,0,1,0,100,0), +(@PATH,25,-8592.876,2114.829,-7.230148,0,0,1,0,100,0), +(@PATH,26,-8594.974,2078.681,-1.559797,0,0,1,0,100,0), +(@PATH,27,-8580,2032.773,-2.74892,0,0,1,0,100,0), +(@PATH,28,-8581.254,1985.698,-1.939677,0,0,1,0,100,0); + +-- Vekniss Warrior formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,4,360,2,0,0), +(@NPC,@NPC+2,8,360,2,0,0); + +-- Pathing for Vekniss Warrior Entry: 15230 'TDB FORMAT' +SET @NPC := 87675; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8406.916,`position_y`=1940.698,`position_z`=3.540012 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8406.916,`position_y`=1940.698,`position_z`=3.540012 WHERE `guid`=@NPC+1; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8406.916,`position_y`=1940.698,`position_z`=3.540012 WHERE `guid`=@NPC+2; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8406.916,1940.698,3.540012,0,0,1,0,100,0), +(@PATH,2,-8394.013,1898.244,2.764256,0,0,1,0,100,0), +(@PATH,3,-8379.354,1860.681,2.642385,0,0,1,0,100,0), +(@PATH,4,-8355.81,1840.051,0.444995,0,0,1,0,100,0), +(@PATH,5,-8327.183,1855.611,-3.365049,0,0,1,0,100,0), +(@PATH,6,-8336.607,1904.446,-2.144968,0,0,1,0,100,0), +(@PATH,7,-8351.146,1947.595,-1.962911,0,0,1,0,100,0), +(@PATH,8,-8356.023,1966.897,-2.996279,0,0,1,0,100,0), +(@PATH,9,-8336.607,1904.446,-2.144968,0,0,1,0,100,0), +(@PATH,10,-8327.183,1855.611,-3.365049,0,0,1,0,100,0), +(@PATH,11,-8355.81,1840.051,0.444995,0,0,1,0,100,0), +(@PATH,12,-8379.354,1860.681,2.642385,0,0,1,0,100,0), +(@PATH,13,-8394.013,1898.244,2.764256,0,0,1,0,100,0), +(@PATH,14,-8406.916,1940.698,3.540012,0,0,1,0,100,0), +(@PATH,15,-8391.783,1963.953,2.740874,0,0,1,0,100,0), +(@PATH,16,-8363.329,1968.659,-2.484006,0,0,1,0,100,0), +(@PATH,17,-8358.553,1942.278,-2.137602,0,0,1,0,100,0), +(@PATH,18,-8338.893,1911.847,-2.365611,0,0,1,0,100,0), +(@PATH,19,-8321.089,1875.853,-1.947007,0,0,1,0,100,0), +(@PATH,20,-8327.794,1850.802,-3.493851,0,0,1,0,100,0), +(@PATH,21,-8307.335,1833.033,-4.333048,0,0,1,0,100,0), +(@PATH,22,-8320.271,1866.489,-2.442684,0,0,1,0,100,0), +(@PATH,23,-8334.945,1892.853,-2.193387,0,0,1,0,100,0), +(@PATH,24,-8350.508,1929.607,-2.263634,0,0,1,0,100,0), +(@PATH,25,-8356.683,1963.76,-2.672498,0,0,1,0,100,0), +(@PATH,26,-8382.319,1966.879,1.677073,0,0,1,0,100,0), +(@PATH,27,-8404.743,1959.304,3.478677,0,0,1,0,100,0), +(@PATH,28,-8397.587,1920.886,2.367266,0,0,1,0,100,0), +(@PATH,29,-8381.415,1878.202,2.439208,0,0,1,0,100,0), +(@PATH,30,-8357.64,1836.641,0.5241066,0,0,1,0,100,0), +(@PATH,31,-8344.722,1792.031,-2.582653,0,0,1,0,100,0), +(@PATH,32,-8363.003,1837.87,0.9091408,0,0,1,0,100,0), +(@PATH,33,-8376.87,1866.093,2.108701,0,0,1,0,100,0), +(@PATH,34,-8392.19,1902.458,2.388478,0,0,1,0,100,0), +(@PATH,35,-8402.383,1950.098,3.546199,0,0,1,0,100,0), +(@PATH,36,-8406.804,1977.574,3.235986,0,0,1,0,100,0), +(@PATH,37,-8408.774,2021.132,9.192656,0,0,1,0,100,0), +(@PATH,38,-8407.785,1997.445,5.142398,0,0,1,0,100,0), +(@PATH,39,-8398.694,1969.258,3.159751,0,0,1,0,100,0), +(@PATH,40,-8378.146,1965.434,0.9081311,0,0,1,0,100,0), +(@PATH,41,-8357.106,1958.744,-2.32515,0,0,1,0,100,0), +(@PATH,42,-8343.271,1916.817,-2.434541,0,0,1,0,100,0), +(@PATH,43,-8332.095,1888.039,-2.186295,0,0,1,0,100,0), +(@PATH,44,-8323.842,1855.49,-3.38597,0,0,1,0,100,0), +(@PATH,45,-8346.259,1845.706,-0.4906869,0,0,1,0,100,0), +(@PATH,46,-8357.015,1829.12,0.3158551,0,0,1,0,100,0), +(@PATH,47,-8347.274,1799.175,-1.778138,0,0,1,0,100,0), +(@PATH,48,-8339.567,1780.459,-4.878539,0,0,1,0,100,0), +(@PATH,49,-8335.18,1767.381,-6.044283,0,0,1,0,100,0), +(@PATH,50,-8347.274,1799.175,-1.778138,0,0,1,0,100,0), +(@PATH,51,-8357.015,1829.12,0.3158551,0,0,1,0,100,0), +(@PATH,52,-8346.259,1845.706,-0.4906869,0,0,1,0,100,0), +(@PATH,53,-8323.842,1855.49,-3.38597,0,0,1,0,100,0), +(@PATH,54,-8332.095,1888.039,-2.186295,0,0,1,0,100,0), +(@PATH,55,-8343.271,1916.817,-2.434541,0,0,1,0,100,0), +(@PATH,56,-8357.106,1958.744,-2.32515,0,0,1,0,100,0), +(@PATH,57,-8378.146,1965.434,0.9081311,0,0,1,0,100,0), +(@PATH,58,-8398.694,1969.258,3.159751,0,0,1,0,100,0), +(@PATH,59,-8407.783,1997.389,5.136318,0,0,1,0,100,0), +(@PATH,60,-8408.774,2021.132,9.192656,0,0,1,0,100,0), +(@PATH,61,-8406.804,1977.574,3.235986,0,0,1,0,100,0), +(@PATH,62,-8402.383,1950.098,3.546199,0,0,1,0,100,0), +(@PATH,63,-8392.19,1902.458,2.388478,0,0,1,0,100,0), +(@PATH,64,-8376.87,1866.093,2.108701,0,0,1,0,100,0), +(@PATH,65,-8363.003,1837.87,0.9091408,0,0,1,0,100,0), +(@PATH,66,-8344.722,1792.031,-2.582653,0,0,1,0,100,0), +(@PATH,67,-8357.583,1836.447,0.5609013,0,0,1,0,100,0), +(@PATH,68,-8381.415,1878.202,2.439208,0,0,1,0,100,0), +(@PATH,69,-8397.587,1920.886,2.367266,0,0,1,0,100,0), +(@PATH,70,-8404.743,1959.304,3.478677,0,0,1,0,100,0), +(@PATH,71,-8382.319,1966.879,1.677073,0,0,1,0,100,0), +(@PATH,72,-8356.683,1963.76,-2.672498,0,0,1,0,100,0), +(@PATH,73,-8350.508,1929.607,-2.263634,0,0,1,0,100,0), +(@PATH,74,-8334.945,1892.853,-2.193387,0,0,1,0,100,0), +(@PATH,75,-8320.302,1866.569,-2.461329,0,0,1,0,100,0), +(@PATH,76,-8307.335,1833.033,-4.333048,0,0,1,0,100,0), +(@PATH,77,-8327.794,1850.802,-3.493851,0,0,1,0,100,0), +(@PATH,78,-8321.089,1875.853,-1.947007,0,0,1,0,100,0), +(@PATH,79,-8338.786,1911.682,-2.312635,0,0,1,0,100,0), +(@PATH,80,-8358.553,1942.278,-2.137602,0,0,1,0,100,0), +(@PATH,81,-8363.329,1968.659,-2.484006,0,0,1,0,100,0), +(@PATH,82,-8391.783,1963.953,2.740874,0,0,1,0,100,0); + +-- Vekniss Warrior formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,4,360,2,0,0), +(@NPC,@NPC+2,8,360,2,0,0); + +-- Pathing for Vem Entry: 15544 'TDB FORMAT' +SET @NPC := 87603; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8598.536,`position_y`=2165.304,`position_z`=-4.016909 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8598.536,2165.304,-4.016909,0,0,1,0,100,0), +(@PATH,2,-8570.547,2154.366,-7.216968,0,0,1,0,100,0), +(@PATH,3,-8556.566,2155.94,-5.39525,0,0,1,0,100,0), +(@PATH,4,-8548.769,2163.426,-3.609193,0,0,1,0,100,0), +(@PATH,5,-8558.276,2162.482,-4.689288,0,0,1,0,100,0), +(@PATH,6,-8573.464,2159.948,-6.644062,0,0,1,0,100,0), +(@PATH,7,-8591.517,2159.22,-6.108228,0,0,1,0,100,0), +(@PATH,8,-8597.023,2159.045,-5.198315,0,0,1,0,100,0), +(@PATH,9,-8584.803,2161.023,-6.455252,0,0,1,0,100,0), +(@PATH,10,-8577.727,2169.429,-4.657184,0,0,1,0,100,0), +(@PATH,11,-8555.971,2160.376,-4.63052,0,0,1,0,100,0), +(@PATH,12,-8541.419,2166.771,-3.432642,0,0,1,0,100,0), +(@PATH,13,-8571.241,2162.583,-5.917914,0,0,1,0,100,0), +(@PATH,14,-8577.813,2157.56,-7.250329,0,0,1,0,100,0), +(@PATH,15,-8597.023,2159.045,-5.198315,0,0,1,0,100,0), +(@PATH,16,-8591.517,2159.22,-6.108228,0,0,1,0,100,0), +(@PATH,17,-8582.77,2155.171,-7.513537,0,0,1,0,100,0), +(@PATH,18,-8565.398,2161.521,-5.813965,0,0,1,0,100,0), +(@PATH,19,-8548.237,2167.902,-3.599379,0,0,1,0,100,0), +(@PATH,20,-8556.566,2155.94,-5.39525,0,0,1,0,100,0), +(@PATH,21,-8577.118,2156.268,-7.330427,0,0,1,0,100,0), +(@PATH,22,-8590.432,2156.978,-6.771957,0,0,1,0,100,0); + +-- Pathing for Battleguard Sartura Entry: 15516 'TDB FORMAT' +SET @NPC := 87648; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8302.484,`position_y`=1657.664,`position_z`=-29.81326 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8302.484,`position_y`=1657.664,`position_z`=-29.81326 WHERE `guid`=@NPC+1; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8302.484,`position_y`=1657.664,`position_z`=-29.81326 WHERE `guid`=@NPC+2; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8302.484,`position_y`=1657.664,`position_z`=-29.81326 WHERE `guid`=@NPC+3; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@NPC+1,@NPC+2,@NPC+3); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@NPC+1,@PATH,0,0,1,0, ''),(@NPC+2,@PATH,0,0,1,0, ''),(@NPC+3,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8302.484,1657.664,-29.81326,0,0,1,0,100,0), +(@PATH,2,-8322.1,1681.196,-23.77903,0,0,1,0,100,0), +(@PATH,3,-8337.48,1695.275,-20.64655,0,0,1,0,100,0), +(@PATH,4,-8308.396,1705.129,-20.57656,0,0,1,0,100,0), +(@PATH,5,-8276.452,1706.471,-21.82398,0,0,1,0,100,0), +(@PATH,6,-8251.389,1708.836,-25.76576,0,0,1,0,100,0), +(@PATH,7,-8224.531,1711.219,-27.28119,0,0,1,0,100,0), +(@PATH,8,-8261.439,1684.329,-28.35187,0,0,1,0,100,0), +(@PATH,9,-8286.062,1662.657,-29.58469,0,0,1,0,100,0), +(@PATH,10,-8321.049,1634.691,-32.09647,0,0,1,0,100,0), +(@PATH,11,-8299.077,1670.921,-27.83419,0,0,1,0,100,0), +(@PATH,12,-8281.883,1688.65,-25.09606,0,0,1,0,100,0), +(@PATH,13,-8277.175,1719.16,-18.75556,0,0,1,0,100,0), +(@PATH,14,-8264.544,1744.857,-15.06134,0,0,1,0,100,0), +(@PATH,15,-8256.176,1706.132,-25.62639,0,0,1,0,100,0), +(@PATH,16,-8260.745,1661.01,-30.71562,0,0,1,0,100,0), +(@PATH,17,-8261.763,1630.783,-35.8319,0,0,1,0,100,0), +(@PATH,18,-8281.746,1643.871,-32.61421,0,0,1,0,100,0); + +-- Battleguard Sartura formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,3,180,2,0,0), +(@NPC,@NPC+2,3,60,2,0,0), +(@NPC,@NPC+3,3,300,2,0,0); + +-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT' +SET @NPC := 88015; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8824.772,`position_y`=1504.369,`position_z`=-94.81835 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8824.772,1504.369,-94.81835,0,0,0,0,100,0), +(@PATH,2,-8827.692,1516.268,-95.1673,0,0,0,0,100,0), +(@PATH,3,-8847.614,1538.224,-95.33534,0,0,0,0,100,0), +(@PATH,4,-8879.378,1544.877,-94.70975,0,0,0,0,100,0), +(@PATH,5,-8908.75,1537.785,-95.42508,0,0,0,0,100,0), +(@PATH,6,-8928.812,1526.368,-94.99846,0,0,0,0,100,0), +(@PATH,7,-8940.877,1502.948,-92.83627,0,0,0,0,100,0), +(@PATH,8,-8949.911,1469.664,-92.77494,0,0,0,0,100,0), +(@PATH,9,-8948.604,1447.861,-92.23408,0,0,0,0,100,0), +(@PATH,10,-8929.873,1441.007,-92.37372,0,0,0,0,100,0), +(@PATH,11,-8912.088,1436.755,-93.20541,0,0,0,0,100,0), +(@PATH,12,-8885.823,1430.602,-90.09874,0,0,0,0,100,0), +(@PATH,13,-8870.321,1430.479,-91.59385,0,0,0,0,100,0), +(@PATH,14,-8864.462,1438.929,-91.28598,0,0,0,0,100,0), +(@PATH,15,-8852.853,1467.848,-91.95611,0,0,0,0,100,0), +(@PATH,16,-8836.742,1489.87,-93.61978,0,0,0,0,100,0); + +-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT' +SET @NPC := 88016; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8775.906,`position_y`=1617.338,`position_z`=-87.98548 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8775.906,1617.338,-87.98548,0,0,0,0,100,0), +(@PATH,2,-8756.48,1631.175,-83.78447,0,0,0,0,100,0), +(@PATH,3,-8722.348,1652.832,-84.65975,0,0,0,0,100,0), +(@PATH,4,-8756.48,1631.175,-83.78447,0,0,0,0,100,0), +(@PATH,5,-8775.906,1617.338,-87.98548,0,0,0,0,100,0), +(@PATH,6,-8805.615,1592.723,-93.64745,0,0,0,0,100,0), +(@PATH,7,-8830.067,1567.62,-95.89575,0,0,0,0,100,0), +(@PATH,8,-8834.922,1551.61,-95.44115,0,0,0,0,100,0), +(@PATH,9,-8827.188,1534.668,-96.41103,0,0,0,0,100,0), +(@PATH,10,-8810.128,1530.688,-95.44586,0,0,0,0,100,0), +(@PATH,11,-8792.012,1541.508,-95.1269,0,0,0,0,100,0), +(@PATH,12,-8775.249,1557.799,-92.72282,0,0,0,0,100,0), +(@PATH,13,-8761.716,1573.43,-89.71658,0,0,0,0,100,0), +(@PATH,14,-8775.249,1557.799,-92.72282,0,0,0,0,100,0), +(@PATH,15,-8791.755,1541.662,-95.08477,0,0,0,0,100,0), +(@PATH,16,-8810.128,1530.688,-95.44586,0,0,0,0,100,0), +(@PATH,17,-8827.188,1534.668,-96.41103,0,0,0,0,100,0), +(@PATH,18,-8834.922,1551.61,-95.44115,0,0,0,0,100,0), +(@PATH,19,-8830.067,1567.62,-95.89575,0,0,0,0,100,0), +(@PATH,20,-8805.615,1592.723,-93.64745,0,0,0,0,100,0); + +-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT' +SET @NPC := 88017; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8850.698,`position_y`=1524.024,`position_z`=-95.07934 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8850.698,1524.024,-95.07934,0,0,0,0,100,0), +(@PATH,2,-8839.276,1512.111,-94.61455,0,0,0,0,100,0), +(@PATH,3,-8841.783,1499.33,-93.90066,0,0,0,0,100,0), +(@PATH,4,-8849.356,1486.96,-93.27434,0,0,0,0,100,0), +(@PATH,5,-8858.664,1470.628,-92.28557,0,0,0,0,100,0), +(@PATH,6,-8868.028,1456.196,-91.08892,0,0,0,0,100,0), +(@PATH,7,-8878.98,1438.545,-90.00536,0,0,0,0,100,0), +(@PATH,8,-8901.879,1442.889,-92.06799,0,0,0,0,100,0), +(@PATH,9,-8912.693,1447.352,-92.27155,0,0,0,0,100,0), +(@PATH,10,-8939.51,1457.284,-91.9281,0,0,0,0,100,0), +(@PATH,11,-8944.809,1468.24,-92.68608,0,0,0,0,100,0), +(@PATH,12,-8942.858,1479.536,-93.14706,0,0,0,0,100,0), +(@PATH,13,-8934.113,1498.147,-93.81955,0,0,0,0,100,0), +(@PATH,14,-8921.667,1516.135,-94.55971,0,0,0,0,100,0), +(@PATH,15,-8905.804,1530.124,-94.62666,0,0,0,0,100,0), +(@PATH,16,-8889.152,1531.822,-94.14017,0,0,0,0,100,0), +(@PATH,17,-8870.22,1529.641,-95.36583,0,0,0,0,100,0); + +-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT' +SET @NPC := 88018; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8887.567,`position_y`=1503.212,`position_z`=-94.07798 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8887.567,1503.212,-94.07798,0,0,0,0,100,0), +(@PATH,2,-8873.922,1517.935,-94.89435,0,0,0,0,100,0), +(@PATH,3,-8887.567,1503.212,-94.07798,0,0,0,0,100,0), +(@PATH,4,-8894.092,1484.492,-92.96038,0,0,0,0,100,0), +(@PATH,5,-8904.106,1462.815,-92.10182,0,0,0,0,100,0), +(@PATH,6,-8894.092,1484.492,-92.96038,0,0,0,0,100,0); + +-- Pathing for Anubisath Defender Entry: 15277 'TDB FORMAT' +SET @NPC := 88019; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8909.747,`position_y`=1378.045,`position_z`=-101.7986 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8909.747,1378.045,-101.7986,0,0,0,0,100,0), +(@PATH,2,-8918.701,1364.768,-104.2538,0,0,0,0,100,0), +(@PATH,3,-8909.747,1378.045,-101.7986,0,0,0,0,100,0), +(@PATH,4,-8901.399,1392.455,-99.42863,0,0,0,0,100,0), +(@PATH,5,-8901.083,1400.452,-98.34517,0,0,0,0,100,0), +(@PATH,6,-8906.459,1429.929,-93.87345,0,0,0,0,100,0), +(@PATH,7,-8901.083,1400.452,-98.34517,0,0,0,0,100,0), +(@PATH,8,-8901.399,1392.455,-99.42863,0,0,0,0,100,0); + +DELETE FROM `creature` WHERE `guid`=88063; + +-- Pathing for Vekniss Drone Entry: 15300 'TDB FORMAT' +SET @NPC := 87782; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8047.272,`position_y`=1647.506,`position_z`=-58.86852 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8047.272,1647.506,-58.86852,0,0,1,0,100,0), +(@PATH,2,-8078.599,1666.187,-52.86737,0,0,1,0,100,0), +(@PATH,3,-8104.689,1660.787,-49.11528,0,0,1,0,100,0), +(@PATH,4,-8078.599,1666.187,-52.86737,0,0,1,0,100,0), +(@PATH,5,-8047.272,1647.506,-58.86852,0,0,1,0,100,0), +(@PATH,6,-8019.708,1624.168,-58.74899,0,0,1,0,100,0), +(@PATH,7,-8004.919,1589.924,-60.78511,0,0,1,0,100,0), +(@PATH,8,-8015.494,1565.506,-64.88443,0,0,1,0,100,0), +(@PATH,9,-8022.754,1552.338,-67.08372,0,0,1,0,100,0), +(@PATH,10,-8036.019,1571.532,-64.49551,0,0,1,0,100,0), +(@PATH,11,-8068.761,1599.027,-59.67414,0,0,1,0,100,0), +(@PATH,12,-8091.299,1622.772,-55.47946,0,0,1,0,100,0), +(@PATH,13,-8129.723,1618.528,-47.06943,0,0,1,0,100,0), +(@PATH,14,-8157.688,1629.017,-41.62284,0,0,1,0,100,0), +(@PATH,15,-8180.13,1626.174,-38.51837,0,0,1,0,100,0), +(@PATH,16,-8157.688,1629.017,-41.62284,0,0,1,0,100,0), +(@PATH,17,-8129.723,1618.528,-47.06943,0,0,1,0,100,0), +(@PATH,18,-8091.299,1622.772,-55.47946,0,0,1,0,100,0), +(@PATH,19,-8068.761,1599.027,-59.67414,0,0,1,0,100,0), +(@PATH,20,-8036.019,1571.532,-64.49551,0,0,1,0,100,0), +(@PATH,21,-8022.85,1552.261,-67.08212,0,0,1,0,100,0), +(@PATH,22,-8015.494,1565.506,-64.88443,0,0,1,0,100,0), +(@PATH,23,-8004.919,1589.924,-60.78511,0,0,1,0,100,0), +(@PATH,24,-8019.708,1624.168,-58.74899,0,0,1,0,100,0); + +-- Pathing for Vekniss Drone Entry: 15300 'TDB FORMAT' +SET @NPC := 87717; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7959.943,`position_y`=1511.205,`position_z`=-61.94479 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-7959.943,1511.205,-61.94479,0,0,1,0,100,0), +(@PATH,2,-7969.066,1530.94,-61.9753,0,0,1,0,100,0), +(@PATH,3,-7959.073,1548.518,-60.69316,0,0,1,0,100,0), +(@PATH,4,-7973.308,1580.152,-61.10556,0,0,1,0,100,0), +(@PATH,5,-7959.008,1548.632,-60.67959,0,0,1,0,100,0), +(@PATH,6,-7969.134,1531.086,-61.98817,0,0,1,0,100,0), +(@PATH,7,-7960.104,1511.377,-61.92974,0,0,1,0,100,0), +(@PATH,8,-7946.518,1496.745,-63.51249,0,0,1,0,100,0), +(@PATH,9,-7928.649,1495.495,-64.09904,0,0,1,0,100,0), +(@PATH,10,-7930.104,1470.892,-65.47607,0,0,1,0,100,0), +(@PATH,11,-7916.759,1457.218,-66.95297,0,0,1,0,100,0), +(@PATH,12,-7900.108,1454.012,-65.35246,0,0,1,0,100,0), +(@PATH,13,-7916.759,1457.218,-66.95297,0,0,1,0,100,0), +(@PATH,14,-7930.104,1470.892,-65.47607,0,0,1,0,100,0), +(@PATH,15,-7928.649,1495.495,-64.09904,0,0,1,0,100,0), +(@PATH,16,-7946.518,1496.745,-63.51249,0,0,1,0,100,0); + +-- Pathing for Vekniss Drone Entry: 15300 'TDB FORMAT' +SET @NPC := 87688; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-7917.924,`position_y`=1443.211,`position_z`=-67.16397 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-7917.924,1443.211,-67.16397,0,0,1,0,100,0), +(@PATH,2,-7909.153,1417.411,-67.2205,0,0,1,0,100,0), +(@PATH,3,-7923.03,1402.219,-65.58526,0,0,1,0,100,0), +(@PATH,4,-7930.945,1379.339,-74.47357,0,0,1,0,100,0), +(@PATH,5,-7923.883,1369.651,-77.58849,0,0,1,0,100,0), +(@PATH,6,-7915.488,1351.216,-81.1413,0,0,1,0,100,0), +(@PATH,7,-7923.883,1369.651,-77.58849,0,0,1,0,100,0), +(@PATH,8,-7930.945,1379.339,-74.47357,0,0,1,0,100,0), +(@PATH,9,-7923.03,1402.219,-65.58526,0,0,1,0,100,0), +(@PATH,10,-7909.153,1417.411,-67.2205,0,0,1,0,100,0), +(@PATH,11,-7917.924,1443.211,-67.16397,0,0,1,0,100,0), +(@PATH,12,-7927.112,1444.966,-66.48512,0,0,1,0,100,0), +(@PATH,13,-7901.919,1463.738,-64.63509,0,0,1,0,100,0), +(@PATH,14,-7909.403,1491.503,-61.68564,0,0,1,0,100,0), +(@PATH,15,-7929.077,1499.48,-63.57971,0,0,1,0,100,0), +(@PATH,16,-7927.155,1514.873,-60.485,0,0,1,0,100,0), +(@PATH,17,-7929.077,1499.48,-63.57971,0,0,1,0,100,0), +(@PATH,18,-7909.403,1491.503,-61.68564,0,0,1,0,100,0), +(@PATH,19,-7901.919,1463.738,-64.63509,0,0,1,0,100,0), +(@PATH,20,-7927.112,1444.966,-66.48512,0,0,1,0,100,0); + +-- Pathing for Vekniss Drone Entry: 15300 'TDB FORMAT' +SET @NPC := 87810; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8182.791,`position_y`=1672.963,`position_z`=-31.65287 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8182.791,1672.963,-31.65287,0,0,1,0,100,0), +(@PATH,2,-8161.917,1683.302,-33.64119,0,0,1,0,100,0), +(@PATH,3,-8144.854,1658.909,-39.02008,0,0,1,0,100,0), +(@PATH,4,-8112.538,1648.41,-48.56252,0,0,1,0,100,0), +(@PATH,5,-8099.015,1661.896,-50.44419,0,0,1,0,100,0), +(@PATH,6,-8073.55,1670.37,-51.79721,0,0,1,0,100,0), +(@PATH,7,-8047.324,1647.833,-58.80652,0,0,1,0,100,0), +(@PATH,8,-8023.915,1630.05,-58.94074,0,0,1,0,100,0), +(@PATH,9,-8007.258,1617.836,-56.80342,0,0,1,0,100,0), +(@PATH,10,-8007.498,1581.44,-61.93605,0,0,1,0,100,0), +(@PATH,11,-8024.588,1566.902,-65.47791,0,0,1,0,100,0), +(@PATH,12,-8026.689,1536.815,-68.19724,0,0,1,0,100,0), +(@PATH,13,-8024.588,1566.902,-65.47791,0,0,1,0,100,0), +(@PATH,14,-8007.498,1581.44,-61.93605,0,0,1,0,100,0), +(@PATH,15,-8007.258,1617.836,-56.80342,0,0,1,0,100,0), +(@PATH,16,-8023.915,1630.05,-58.94074,0,0,1,0,100,0), +(@PATH,17,-8047.324,1647.833,-58.80652,0,0,1,0,100,0), +(@PATH,18,-8073.55,1670.37,-51.79721,0,0,1,0,100,0), +(@PATH,19,-8099.015,1661.896,-50.44419,0,0,1,0,100,0), +(@PATH,20,-8112.538,1648.41,-48.56252,0,0,1,0,100,0), +(@PATH,21,-8144.854,1658.909,-39.02008,0,0,1,0,100,0), +(@PATH,22,-8161.917,1683.302,-33.64119,0,0,1,0,100,0); + +UPDATE `creature` SET `spawndist`=10,`MovementType`=1 WHERE `guid`=87911; + +-- Remove Vekniss Hive Crawler overspawn +DELETE FROM `creature` WHERE `guid` BETWEEN 87945 AND 87961; + +-- Pathing for Vekniss Hive Crawler Entry: 15240 'TDB FORMAT' +SET @NPC := 87939; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8290.739,`position_y`=1337.271,`position_z`=-79.84545 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8294.739,`position_y`=1332.271,`position_z`=-79.84545 WHERE `guid`=@NPC+1; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8290.739,1337.271,-79.84545,0,0,0,0,100,0), +(@PATH,2,-8248.099,1339.004,-85.39378,0,0,0,0,100,0), +(@PATH,3,-8238.928,1292.994,-87.8344,0,0,0,0,100,0), +(@PATH,4,-8202.383,1264.173,-92.27186,0,0,0,0,100,0), +(@PATH,5,-8192.835,1226.339,-92.15359,0,0,0,0,100,0), +(@PATH,6,-8169.127,1230.136,-92.5405,0,0,0,0,100,0), +(@PATH,7,-8192.835,1226.339,-92.15359,0,0,0,0,100,0), +(@PATH,8,-8202.383,1264.173,-92.27186,0,0,0,0,100,0), +(@PATH,9,-8238.928,1292.994,-87.8344,0,0,0,0,100,0), +(@PATH,10,-8248.099,1339.004,-85.39378,0,0,0,0,100,0); + +-- Vekniss Hive Crawler formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,7,90,2,1,6); + +-- Pathing for Vekniss Hive Crawler Entry: 15240 'TDB FORMAT' +SET @NPC := 87941; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8255.963,`position_y`=1349.651,`position_z`=-84.4174 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8255.963,`position_y`=1349.651,`position_z`=-84.4174 WHERE `guid`=@NPC+1; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8255.963,1349.651,-84.4174,0,0,0,0,100,0), +(@PATH,2,-8293.042,1364.945,-77.56605,0,0,0,0,100,0), +(@PATH,3,-8320.49,1334.739,-72.65111,0,0,0,0,100,0), +(@PATH,4,-8355.71,1359.734,-65.14333,0,0,0,0,100,0), +(@PATH,5,-8320.678,1334.872,-72.67966,0,0,0,0,100,0), +(@PATH,6,-8293.042,1364.945,-77.56605,0,0,0,0,100,0), +(@PATH,7,-8255.963,1349.651,-84.4174,0,0,0,0,100,0), +(@PATH,8,-8233.676,1320.495,-86.60672,0,0,0,0,100,0), +(@PATH,9,-8230.803,1281.079,-89.86937,0,0,0,0,100,0), +(@PATH,10,-8203.98,1271.184,-91.95763,0,0,0,0,100,0), +(@PATH,11,-8197.017,1230.331,-92.32941,0,0,0,0,100,0), +(@PATH,12,-8203.98,1271.184,-91.95763,0,0,0,0,100,0), +(@PATH,13,-8230.538,1280.981,-89.9477,0,0,0,0,100,0), +(@PATH,14,-8233.676,1320.495,-86.60672,0,0,0,0,100,0); + +-- Vekniss Hive Crawler formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,7,90,2,4,11); + +-- Pathing for Vekniss Hive Crawler Entry: 15240 'TDB FORMAT' +SET @NPC := 87943; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8526.7,`position_y`=1385.158,`position_z`=-58.87769 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8526.7,`position_y`=1385.158,`position_z`=-58.87769 WHERE `guid`=@NPC+1; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8526.7,1385.158,-58.87769,0,0,0,0,100,0), +(@PATH,2,-8514.655,1377.609,-59.3903,0,0,0,0,100,0), +(@PATH,3,-8489.994,1376.669,-59.29538,0,0,0,0,100,0), +(@PATH,4,-8465.505,1376.563,-58.49561,0,0,0,0,100,0), +(@PATH,5,-8458.902,1363.877,-60.13142,0,0,0,0,100,0), +(@PATH,6,-8473.567,1356.557,-59.07343,0,0,0,0,100,0), +(@PATH,7,-8498.528,1361.103,-60.34806,0,0,0,0,100,0), +(@PATH,8,-8519.738,1370.179,-61.29987,0,0,0,0,100,0), +(@PATH,9,-8546.015,1380.145,-60.98241,0,0,0,0,100,0), +(@PATH,10,-8573.124,1395.751,-64.01164,0,0,0,0,100,0), +(@PATH,11,-8568.937,1404.801,-61.96235,0,0,0,0,100,0), +(@PATH,12,-8557.207,1408.638,-58.67739,0,0,0,0,100,0), +(@PATH,13,-8541.95,1393.287,-59.30177,0,0,0,0,100,0); + +-- Vekniss Hive Crawler formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@NPC+1,7,90,2,0,0); + +-- Pathing for Princess Huhuran Entry: 15509 'TDB FORMAT' +SET @NPC := 88014; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8515.803,`position_y`=1693.652,`position_z`=-90.48472 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8515.803,1693.652,-90.48472,0,0,0,0,100,0), +(@PATH,2,-8512.993,1728.714,-91.76323,0,0,0,0,100,0), +(@PATH,3,-8514.034,1751.632,-91.8007,0,0,0,0,100,0), +(@PATH,4,-8535.463,1765.799,-90.55943,0,0,0,0,100,0), +(@PATH,5,-8555.29,1770.428,-90.79091,0,0,0,0,100,0), +(@PATH,6,-8575.839,1788.965,-91.80469,0,0,0,0,100,0), +(@PATH,7,-8605.888,1785.042,-89.97934,0,0,0,0,100,0), +(@PATH,8,-8631.052,1766.135,-91.00841,0,0,0,0,100,0), +(@PATH,9,-8656.294,1757.134,-91.79616,0,0,0,0,100,0), +(@PATH,10,-8631.057,1766.133,-91.00929,0,0,0,0,100,0), +(@PATH,11,-8605.888,1785.042,-89.97934,0,0,0,0,100,0), +(@PATH,12,-8575.839,1788.965,-91.80469,0,0,0,0,100,0), +(@PATH,13,-8555.29,1770.428,-90.79091,0,0,0,0,100,0), +(@PATH,14,-8535.463,1765.799,-90.55943,0,0,0,0,100,0), +(@PATH,15,-8514.142,1751.703,-91.84047,0,0,0,0,100,0), +(@PATH,16,-8512.993,1728.714,-91.76323,0,0,0,0,100,0); + +-- The Prophet Skeram respawn linking +DELETE FROM `linked_respawn` WHERE `linkedGuid`=88075; +INSERT INTO `linked_respawn` (`guid`,`linkedGuid`,`linkType`) VALUES +(87564,88075,0),(87565,88075,0),(87566,88075,0),(87567,88075,0),(87568,88075,0),(87569,88075,0), +(87570,88075,0),(87571,88075,0),(87652,88075,0),(87653,88075,0),(88074,88075,0); + +-- Battleguard Sartura respawn linking +DELETE FROM `linked_respawn` WHERE `linkedGuid`=87648; +INSERT INTO `linked_respawn` (`guid`,`linkedGuid`,`linkType`) VALUES +(87597,87648,0),(87598,87648,0),(87604,87648,0),(87605,87648,0),(87606,87648,0),(87607,87648,0), +(87672,87648,0),(87673,87648,0),(87674,87648,0),(87675,87648,0),(87676,87648,0),(87677,87648,0), +(87595,87648,0),(87596,87648,0),(87599,87648,0),(87600,87648,0),(87608,87648,0),(87609,87648,0), +(87610,87648,0),(87611,87648,0),(87612,87648,0),(87613,87648,0),(87614,87648,0),(87615,87648,0), +(87616,87648,0),(87617,87648,0),(87618,87648,0),(87619,87648,0),(87620,87648,0),(87621,87648,0), +(87622,87648,0),(87623,87648,0),(87624,87648,0),(87625,87648,0),(87626,87648,0),(87627,87648,0), +(87628,87648,0),(87629,87648,0),(87630,87648,0),(87631,87648,0),(87632,87648,0),(87633,87648,0), +(87634,87648,0),(87635,87648,0),(87636,87648,0),(87637,87648,0),(87638,87648,0),(87649,87648,0), +(87650,87648,0),(87651,87648,0); From e3698ea1095f4a064d978ac7872c7912f419a284 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 14 Oct 2015 09:34:12 +0200 Subject: [PATCH 157/524] Update 2015_10_14_00_world.sql --- sql/updates/world/2015_10_14_00_world.sql | 424 +++++++++++----------- 1 file changed, 212 insertions(+), 212 deletions(-) diff --git a/sql/updates/world/2015_10_14_00_world.sql b/sql/updates/world/2015_10_14_00_world.sql index f872ef654f..0679dbd96a 100644 --- a/sql/updates/world/2015_10_14_00_world.sql +++ b/sql/updates/world/2015_10_14_00_world.sql @@ -17,226 +17,226 @@ DELETE FROM `creature_addon` WHERE `guid`=87671; SET @CGUID := 87564; DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+7; -INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES -(@CGUID+0, 15264, 531, 1, 1, 169, -8321.975, 2142.675, 118.266, 0.6283185, 7200, 0, 0), -(@CGUID+1, 15264, 531, 1, 1, 169, -8156.46, 2119.579, 129.2029, 3.577925, 7200, 0, 0), -(@CGUID+2, 15264, 531, 1, 1, 169, -8288.92, 2054.495, 118.3005, 0.5235988, 7200, 0, 0), -(@CGUID+3, 15264, 531, 1, 1, 169, -8159.368, 2144.159, 129.5639, 4.08407, 7200, 0, 0), -(@CGUID+4, 15264, 531, 1, 1, 169, -8297.351, 2075.668, 118.2692, 0.6108652, 7200, 0, 0), -(@CGUID+5, 15264, 531, 1, 1, 169, -8182.612, 2166.212, 129.6401, 4.642576, 7200, 0, 0), -(@CGUID+6, 15264, 531, 1, 1, 169, -8314.339, 2119.221, 118.2629, 0.541052, 7200, 0, 0), -(@CGUID+7, 15264, 531, 1, 1, 169, -8206.177, 2164.815, 129.4669, 5.026548, 7200, 0, 0); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15264, 531, 1, 1, -8321.975, 2142.675, 118.266, 0.6283185, 7200, 0, 0), +(@CGUID+1, 15264, 531, 1, 1, -8156.46, 2119.579, 129.2029, 3.577925, 7200, 0, 0), +(@CGUID+2, 15264, 531, 1, 1, -8288.92, 2054.495, 118.3005, 0.5235988, 7200, 0, 0), +(@CGUID+3, 15264, 531, 1, 1, -8159.368, 2144.159, 129.5639, 4.08407, 7200, 0, 0), +(@CGUID+4, 15264, 531, 1, 1, -8297.351, 2075.668, 118.2692, 0.6108652, 7200, 0, 0), +(@CGUID+5, 15264, 531, 1, 1, -8182.612, 2166.212, 129.6401, 4.642576, 7200, 0, 0), +(@CGUID+6, 15264, 531, 1, 1, -8314.339, 2119.221, 118.2629, 0.541052, 7200, 0, 0), +(@CGUID+7, 15264, 531, 1, 1, -8206.177, 2164.815, 129.4669, 5.026548, 7200, 0, 0); DELETE FROM `creature` WHERE `guid` IN (88075,87527,87528,87529,87652,87653,87595,87596,87597,87598,87599,87600,87601,87602); DELETE FROM `creature` WHERE `guid` BETWEEN 87604 AND 87638; -INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES -(88075, 15263, 531, 1, 1, 169, -8346.052, 2080.981, 125.7325, 0.4014257, 7200, 0, 0), -(87527, 15502, 531, 1, 1, 169, -8496.147, 1932.62, 135.7384, 1.308997, 7200, 0, 0), -(87529, 15503, 531, 1, 1, 169, -8500.15, 1937.377, 135.7554, 0.4712389, 7200, 0, 0), -(87528, 15504, 531, 1, 1, 169, -8499.575, 1933.64, 135.7087, 0.9773844, 7200, 0, 0), -(87652, 15262, 531, 1, 1, 169, -8281.484, 2087.381, 118.3001, 4.957793, 7200, 0, 0), -(87653, 15262, 531, 1, 1, 169, -8327.386, 2080.153, 125.6371, 5.012831, 7200, 0, 0), -(87595, 15233, 531, 1, 1, 169, -8404.733, 2070.303, 116.2127, 3.647738, 7200, 0, 0), -(87596, 15233, 531, 1, 1, 169, -8396.88, 2051.316, 116.2118, 3.385939, 7200, 0, 0), -(87597, 15247, 531, 1, 1, 169, -8391.906, 2063.48, 116.2034, 3.508112, 7200, 0, 0), -(87598, 15247, 531, 1, 1, 169, -8592.574, 1976.949, -1.209995, 6.091199, 7200, 0, 0), -(87599, 15233, 531, 1, 1, 169, -8586.837, 1985.7, -1.542133, 1.894589, 7200, 5, 1), -(87600, 15233, 531, 1, 1, 169, -8581.488, 1970.878, -1.458955, 4.427207, 7200, 5, 1), -(87608, 15233, 531, 1, 1, 169, -8593.99, 1964.035, -1.260533, 1.852829, 7200, 5, 1), -(87601, 15543, 531, 1, 1, 169, -8587.962, 2174.209, -4.147823, 4.939282, 7200, 0, 0), -(87602, 15511, 531, 1, 1, 169, -8566.884, 2177.171, -3.978982, 4.223697, 7200, 0, 0), -(87604, 15247, 531, 1, 1, 169, -8548.23, 2130.356, -2.730221, 4.485496, 7200, 0, 0), -(87605, 15247, 531, 1, 1, 169, -8551.39, 2118.207, -1.737938, 1.22173, 7200, 0, 0), -(87606, 15247, 531, 1, 1, 169, -8623.282, 2108.951, -2.676475, 3.787364, 7200, 0, 0), -(87607, 15247, 531, 1, 1, 169, -8631.831, 2101.618, -1.330519, 0.5061455, 7200, 0, 0), -(87609, 15233, 531, 1, 1, 169, -8541.605, 2134.76, -2.544568, 1.736609, 7200, 0, 0), -(87610, 15233, 531, 1, 1, 169, -8550.414, 2110.023, -0.8794384, 5.872046, 7200, 0, 0), -(87611, 15233, 531, 1, 1, 169, -8544.825, 2124.616, -1.830906, 5.065909, 7200, 0, 0), -(87612, 15233, 531, 1, 1, 169, -8620.168, 2093.819, -1.801619, 5.462881, 7200, 0, 0), -(87613, 15233, 531, 1, 1, 169, -8633.741, 2112.304, -1.909737, 1.784077, 7200, 0, 0), -(87614, 15233, 531, 1, 1, 169, -8636.268, 2090.388, -1.370589, 1.34908, 7200, 0, 0), -(87615, 15233, 531, 1, 1, 169, -8369.455, 2060.384, 9.630878, 5.041036, 7200, 0, 0), -(87616, 15233, 531, 1, 1, 169, -8368.543, 2035.741, 9.288624, 2.589778, 7200, 0, 0), -(87617, 15233, 531, 1, 1, 169, -8397.211, 2058.122, 9.618873, 1.057295, 7200, 0, 0), -(87618, 15233, 531, 1, 1, 169, -8385.495, 2044.833, 9.216681, 0.1224109, 7200, 0, 0), -(87619, 15233, 531, 1, 1, 169, -8393.083, 2075.153, 9.179768, 5.667883, 7200, 0, 0), -(87620, 15233, 531, 1, 1, 169, -8378.618, 2070.816, 8.844448, 1.763804, 7200, 0, 0), -(87621, 15233, 531, 1, 1, 169, -8326.908, 1891.109, -1.837783, 5.856318, 7200, 0, 0), -(87622, 15233, 531, 1, 1, 169, -8339.306, 1800.288, -1.517404, 3.040907, 7200, 0, 0), -(87623, 15233, 531, 1, 1, 169, -8351.284, 1805.48, -1.233535, 0.5619113, 7200, 0, 0), -(87624, 15233, 531, 1, 1, 169, -8344.919, 1919.037, -2.500755, 3.838682, 7200, 0, 0), -(87625, 15233, 531, 1, 1, 169, -8402.613, 1914.386, 3.142937, 2.031992, 7200, 0, 0), -(87626, 15233, 531, 1, 1, 169, -8351.182, 1921.119, -2.540841, 3.627775, 7200, 0, 0), -(87627, 15233, 531, 1, 1, 169, -8328.894, 1876.641, -2.246095, 4.796616, 7200, 0, 0), -(87628, 15233, 531, 1, 1, 169, -8401.165, 1932.269, 2.618013, 5.465084, 7200, 0, 0), -(87629, 15233, 531, 1, 1, 169, -8350.329, 1814.966, 0.02815836, 0.622449, 7200, 0, 0), -(87630, 15233, 531, 1, 1, 169, -8339.517, 1890.658, -2.486081, 2.180425, 7200, 0, 0), -(87631, 15233, 531, 1, 1, 169, -8393.705, 1924.228, 3.221893, 2.51069, 7200, 0, 0), -(87632, 15233, 531, 1, 1, 169, -8357.022, 1822.796, 0.3194859, 6.032223, 7200, 0, 0), -(87633, 15233, 531, 1, 1, 169, -8395.523, 1942.848, 4.020818, 5.754907, 7200, 0, 0), -(87634, 15233, 531, 1, 1, 169, -8341.861, 1906.819, -2.410278, 5.228793, 7200, 0, 0), -(87635, 15233, 531, 1, 1, 169, -8390.899, 1914.458, 3.005651, 2.863161, 7200, 0, 0), -(87636, 15233, 531, 1, 1, 169, -8408.117, 1938.302, 3.825733, 2.332423, 7200, 0, 0), -(87637, 15233, 531, 1, 1, 169, -8348.093, 1790.437, -2.233759, 2.154297, 7200, 0, 0), -(87638, 15233, 531, 1, 1, 169, -8363.572, 1811.677, 1.227631, 5.535646, 7200, 0, 0); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(88075, 15263, 531, 1, 1, -8346.052, 2080.981, 125.7325, 0.4014257, 7200, 0, 0), +(87527, 15502, 531, 1, 1, -8496.147, 1932.62, 135.7384, 1.308997, 7200, 0, 0), +(87529, 15503, 531, 1, 1, -8500.15, 1937.377, 135.7554, 0.4712389, 7200, 0, 0), +(87528, 15504, 531, 1, 1, -8499.575, 1933.64, 135.7087, 0.9773844, 7200, 0, 0), +(87652, 15262, 531, 1, 1, -8281.484, 2087.381, 118.3001, 4.957793, 7200, 0, 0), +(87653, 15262, 531, 1, 1, -8327.386, 2080.153, 125.6371, 5.012831, 7200, 0, 0), +(87595, 15233, 531, 1, 1, -8404.733, 2070.303, 116.2127, 3.647738, 7200, 0, 0), +(87596, 15233, 531, 1, 1, -8396.88, 2051.316, 116.2118, 3.385939, 7200, 0, 0), +(87597, 15247, 531, 1, 1, -8391.906, 2063.48, 116.2034, 3.508112, 7200, 0, 0), +(87598, 15247, 531, 1, 1, -8592.574, 1976.949, -1.209995, 6.091199, 7200, 0, 0), +(87599, 15233, 531, 1, 1, -8586.837, 1985.7, -1.542133, 1.894589, 7200, 5, 1), +(87600, 15233, 531, 1, 1, -8581.488, 1970.878, -1.458955, 4.427207, 7200, 5, 1), +(87608, 15233, 531, 1, 1, -8593.99, 1964.035, -1.260533, 1.852829, 7200, 5, 1), +(87601, 15543, 531, 1, 1, -8587.962, 2174.209, -4.147823, 4.939282, 7200, 0, 0), +(87602, 15511, 531, 1, 1, -8566.884, 2177.171, -3.978982, 4.223697, 7200, 0, 0), +(87604, 15247, 531, 1, 1, -8548.23, 2130.356, -2.730221, 4.485496, 7200, 0, 0), +(87605, 15247, 531, 1, 1, -8551.39, 2118.207, -1.737938, 1.22173, 7200, 0, 0), +(87606, 15247, 531, 1, 1, -8623.282, 2108.951, -2.676475, 3.787364, 7200, 0, 0), +(87607, 15247, 531, 1, 1, -8631.831, 2101.618, -1.330519, 0.5061455, 7200, 0, 0), +(87609, 15233, 531, 1, 1, -8541.605, 2134.76, -2.544568, 1.736609, 7200, 0, 0), +(87610, 15233, 531, 1, 1, -8550.414, 2110.023, -0.8794384, 5.872046, 7200, 0, 0), +(87611, 15233, 531, 1, 1, -8544.825, 2124.616, -1.830906, 5.065909, 7200, 0, 0), +(87612, 15233, 531, 1, 1, -8620.168, 2093.819, -1.801619, 5.462881, 7200, 0, 0), +(87613, 15233, 531, 1, 1, -8633.741, 2112.304, -1.909737, 1.784077, 7200, 0, 0), +(87614, 15233, 531, 1, 1, -8636.268, 2090.388, -1.370589, 1.34908, 7200, 0, 0), +(87615, 15233, 531, 1, 1, -8369.455, 2060.384, 9.630878, 5.041036, 7200, 0, 0), +(87616, 15233, 531, 1, 1, -8368.543, 2035.741, 9.288624, 2.589778, 7200, 0, 0), +(87617, 15233, 531, 1, 1, -8397.211, 2058.122, 9.618873, 1.057295, 7200, 0, 0), +(87618, 15233, 531, 1, 1, -8385.495, 2044.833, 9.216681, 0.1224109, 7200, 0, 0), +(87619, 15233, 531, 1, 1, -8393.083, 2075.153, 9.179768, 5.667883, 7200, 0, 0), +(87620, 15233, 531, 1, 1, -8378.618, 2070.816, 8.844448, 1.763804, 7200, 0, 0), +(87621, 15233, 531, 1, 1, -8326.908, 1891.109, -1.837783, 5.856318, 7200, 0, 0), +(87622, 15233, 531, 1, 1, -8339.306, 1800.288, -1.517404, 3.040907, 7200, 0, 0), +(87623, 15233, 531, 1, 1, -8351.284, 1805.48, -1.233535, 0.5619113, 7200, 0, 0), +(87624, 15233, 531, 1, 1, -8344.919, 1919.037, -2.500755, 3.838682, 7200, 0, 0), +(87625, 15233, 531, 1, 1, -8402.613, 1914.386, 3.142937, 2.031992, 7200, 0, 0), +(87626, 15233, 531, 1, 1, -8351.182, 1921.119, -2.540841, 3.627775, 7200, 0, 0), +(87627, 15233, 531, 1, 1, -8328.894, 1876.641, -2.246095, 4.796616, 7200, 0, 0), +(87628, 15233, 531, 1, 1, -8401.165, 1932.269, 2.618013, 5.465084, 7200, 0, 0), +(87629, 15233, 531, 1, 1, -8350.329, 1814.966, 0.02815836, 0.622449, 7200, 0, 0), +(87630, 15233, 531, 1, 1, -8339.517, 1890.658, -2.486081, 2.180425, 7200, 0, 0), +(87631, 15233, 531, 1, 1, -8393.705, 1924.228, 3.221893, 2.51069, 7200, 0, 0), +(87632, 15233, 531, 1, 1, -8357.022, 1822.796, 0.3194859, 6.032223, 7200, 0, 0), +(87633, 15233, 531, 1, 1, -8395.523, 1942.848, 4.020818, 5.754907, 7200, 0, 0), +(87634, 15233, 531, 1, 1, -8341.861, 1906.819, -2.410278, 5.228793, 7200, 0, 0), +(87635, 15233, 531, 1, 1, -8390.899, 1914.458, 3.005651, 2.863161, 7200, 0, 0), +(87636, 15233, 531, 1, 1, -8408.117, 1938.302, 3.825733, 2.332423, 7200, 0, 0), +(87637, 15233, 531, 1, 1, -8348.093, 1790.437, -2.233759, 2.154297, 7200, 0, 0), +(87638, 15233, 531, 1, 1, -8363.572, 1811.677, 1.227631, 5.535646, 7200, 0, 0); DELETE FROM `creature` WHERE `id` IN (15962,15630); SET @CGUID := 87678; DELETE FROM `creature` WHERE `guid` BETWEEN 87678 AND 87900; -INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES -(@CGUID+0, 15300, 531, 1, 1, 169, -7892.548, 1435.668, -65.22711, 0.03490658, 7200, 5, 1), -(@CGUID+1, 15300, 531, 1, 1, 169, -7892.569, 1422.789, -64.86232, 0.03490658, 7200, 5, 1), -(@CGUID+2, 15300, 531, 1, 1, 169, -7893.518, 1410.414, -63.56542, 0.06981317, 7200, 5, 1), -(@CGUID+3, 15300, 531, 1, 1, 169, -7898.467, 1467.742, -63.57774, 0.9599311, 7200, 5, 1), -(@CGUID+4, 15300, 531, 1, 1, 169, -7902.507, 1379.252, -64.91041, 5.602507, 7200, 5, 1), -(@CGUID+5, 15300, 531, 1, 1, 169, -7903.237, 1475.595, -62.51829, 0.1745329, 7200, 5, 1), -(@CGUID+6, 15300, 531, 1, 1, 169, -7904.257, 1483.905, -61.91321, 0.1919862, 7200, 5, 1), -(@CGUID+7, 15300, 531, 1, 1, 169, -7905.727, 1397.53, -65.67427, 1.689209, 7200, 5, 1), -(@CGUID+8, 15300, 531, 1, 1, 169, -7908.201, 1441.5, -67.67268, 1.965443, 7200, 5, 1), -(@CGUID+9, 15300, 531, 1, 1, 169, -7909.212, 1453.823, -66.71354, 5.388192, 7200, 5, 1), -(@CGUID+10, 15300, 531, 1, 1, 169, -7909.227, 1432.98, -68.22237, 2.530727, 7200, 5, 1), -(@CGUID+11, 15300, 531, 1, 1, 169, -7909.395, 1408.309, -66.57648, 2.094395, 7200, 5, 1), -(@CGUID+12, 15300, 531, 1, 1, 169, -7911.222, 1360.079, -75.37612, 5.811946, 7200, 5, 1), -(@CGUID+13, 15300, 531, 1, 1, 169, -7911.51, 1433.753, -68.01991, 2.973195, 7200, 5, 1), -(@CGUID+14, 15300, 531, 1, 1, 169, -7912.08, 1399.684, -68.01915, 4.38238, 7200, 5, 1), -(@CGUID+15, 15300, 531, 1, 1, 169, -7912.685, 1392.55, -68.86684, 4.433136, 7200, 5, 1), -(@CGUID+16, 15300, 531, 1, 1, 169, -7915.495, 1391.565, -68.96242, 0.1829643, 7200, 5, 1), -(@CGUID+17, 15300, 531, 1, 1, 169, -7916.698, 1452.717, -66.98033, 3.176499, 7200, 5, 1), -(@CGUID+18, 15300, 531, 1, 1, 169, -7919.031, 1399.421, -65.47141, 0.8203048, 7200, 5, 1), -(@CGUID+19, 15300, 531, 1, 1, 169, -7919.174, 1450.881, -66.86721, 3.781995, 7200, 5, 1), -(@CGUID+20, 15300, 531, 1, 1, 169, -7919.538, 1503.975, -60.7916, 0.6806784, 7200, 5, 1), -(@CGUID+21, 15300, 531, 1, 1, 169, -7919.866, 1441.265, -66.96127, 0.03490658, 7200, 5, 1), -(@CGUID+22, 15300, 531, 1, 1, 169, -7921.188, 1485.365, -64.48227, 3.437477, 7200, 5, 1), -(@CGUID+23, 15300, 531, 1, 1, 169, -7923.026, 1477.876, -65.64141, 3.438299, 7200, 5, 1), -(@CGUID+24, 15300, 531, 1, 1, 169, -7925.117, 1421.922, -65.61559, 3.193953, 7200, 5, 1), -(@CGUID+25, 15300, 531, 1, 1, 169, -7926.443, 1354.812, -83.58868, 3.46605, 7200, 5, 1), -(@CGUID+26, 15300, 531, 1, 1, 169, -7926.561, 1411.766, -65.3652, 2.740167, 7200, 5, 1), -(@CGUID+27, 15300, 531, 1, 1, 169, -7926.702, 1518.368, -59.68728, 0.5585054, 7200, 5, 1), -(@CGUID+28, 15300, 531, 1, 1, 169, -7927.257, 1493.96, -64.12371, 2.336106, 7200, 5, 1), -(@CGUID+29, 15300, 531, 1, 1, 169, -7927.331, 1328.951, -89.86474, 5.759586, 7200, 5, 1), -(@CGUID+30, 15300, 531, 1, 1, 169, -7927.374, 1365.604, -79.83042, 6.056293, 7200, 5, 1), -(@CGUID+31, 15300, 531, 1, 1, 169, -7927.462, 1472.604, -65.65568, 1.799682, 7200, 5, 1), -(@CGUID+32, 15300, 531, 1, 1, 169, -7927.478, 1389.667, -69.12563, 2.949606, 7200, 5, 1), -(@CGUID+33, 15300, 531, 1, 1, 169, -7929.896, 1484.513, -65.13245, 2.539029, 7200, 5, 1), -(@CGUID+34, 15300, 531, 1, 1, 169, -7930.548, 1320.507, -90.37265, 5.707227, 7200, 5, 1), -(@CGUID+35, 15300, 531, 1, 1, 169, -7931.007, 1349.313, -86.4936, 4.62881, 7200, 5, 1), -(@CGUID+36, 15300, 531, 1, 1, 169, -7932.876, 1453.155, -65.91177, 3.333579, 7200, 5, 1), -(@CGUID+37, 15300, 531, 1, 1, 169, -7933.675, 1528.835, -59.21246, 0.6283185, 7200, 5, 1), -(@CGUID+38, 15300, 531, 1, 1, 169, -7933.889, 1378.917, -75.02083, 3.036873, 7200, 5, 1), -(@CGUID+39, 15300, 531, 1, 1, 169, -7935.543, 1492.749, -64.42677, 5.602507, 7200, 5, 1), -(@CGUID+40, 15300, 531, 1, 1, 169, -7936.098, 1496.016, -64.40736, 3.071736, 7200, 5, 1), -(@CGUID+41, 15300, 531, 1, 1, 169, -7937.946, 1461.595, -65.50119, 3.804818, 7200, 5, 1), -(@CGUID+42, 15300, 531, 1, 1, 169, -7938.33, 1348.699, -87.84061, 3.572022, 7200, 5, 1), -(@CGUID+43, 15300, 531, 1, 1, 169, -7938.882, 1372.345, -78.70309, 2.199115, 7200, 5, 1), -(@CGUID+44, 15300, 531, 1, 1, 169, -7939.133, 1356.648, -86.10828, 1.623156, 7200, 5, 1), -(@CGUID+45, 15300, 531, 1, 1, 169, -7940.602, 1337.277, -91.03973, 2.722714, 7200, 5, 1), -(@CGUID+46, 15300, 531, 1, 1, 169, -7949.532, 1525.042, -62.28769, 2.129302, 7200, 5, 1), -(@CGUID+47, 15300, 531, 1, 1, 169, -7949.806, 1486.382, -63.61917, 3.525565, 7200, 5, 1), -(@CGUID+48, 15300, 531, 1, 1, 169, -7950.41, 1317.311, -89.45904, 1.911877, 7200, 5, 1), -(@CGUID+49, 15300, 531, 1, 1, 169, -7950.723, 1521.167, -62.74979, 2.950145, 7200, 5, 1), -(@CGUID+50, 15300, 531, 1, 1, 169, -7954.241, 1559.81, -59.11872, 0.715585, 7200, 5, 1), -(@CGUID+51, 15300, 531, 1, 1, 169, -7954.718, 1540.167, -60.00118, 4.363323, 7200, 5, 1), -(@CGUID+52, 15300, 531, 1, 1, 169, -7954.768, 1345.852, -91.36903, 3.124139, 7200, 5, 1), -(@CGUID+53, 15300, 531, 1, 1, 169, -7955.768, 1568.089, -60.09465, 0.2268928, 7200, 5, 1), -(@CGUID+54, 15300, 531, 1, 1, 169, -7955.857, 1498.233, -62.65005, 3.665191, 7200, 5, 1), -(@CGUID+55, 15300, 531, 1, 1, 169, -7955.873, 1284.801, -75.54648, 5.8294, 7200, 5, 1), -(@CGUID+56, 15300, 531, 1, 1, 169, -7957.664, 1340.282, -92.26547, 2.286381, 7200, 5, 1), -(@CGUID+57, 15300, 531, 1, 1, 169, -7958.491, 1528.291, -61.77398, 3.857317, 7200, 5, 1), -(@CGUID+58, 15300, 531, 1, 1, 169, -7959.439, 1320.096, -89.41815, 0.8552113, 7200, 5, 1), -(@CGUID+59, 15300, 531, 1, 1, 169, -7960.226, 1307.606, -83.07062, 5.003528, 7200, 5, 1), -(@CGUID+60, 15300, 531, 1, 1, 169, -7961.386, 1279.918, -73.73505, 5.375614, 7200, 5, 1), -(@CGUID+61, 15300, 531, 1, 1, 169, -7961.915, 1338.292, -92.40445, 2.234021, 7200, 5, 1), -(@CGUID+62, 15300, 531, 1, 1, 169, -7967.022, 1274.792, -72.16002, 5.044002, 7200, 5, 1), -(@CGUID+63, 15300, 531, 1, 1, 169, -7967.221, 1524.411, -60.57605, 5.270895, 7200, 5, 1), -(@CGUID+64, 15300, 531, 1, 1, 169, -7967.628, 1313.647, -85.22298, 5.323254, 7200, 5, 1), -(@CGUID+65, 15300, 531, 1, 1, 169, -7967.866, 1536.324, -62.04499, 5.916666, 7200, 5, 1), -(@CGUID+66, 15300, 531, 1, 1, 169, -7970.926, 1297.65, -76.17361, 3.368485, 7200, 5, 1), -(@CGUID+67, 15300, 531, 1, 1, 169, -7971.198, 1302.062, -78.52887, 2.688358, 7200, 5, 1), -(@CGUID+68, 15300, 531, 1, 1, 169, -7978.03, 1568.925, -61.93628, 2.338741, 7200, 5, 1), -(@CGUID+69, 15300, 531, 1, 1, 169, -7979.314, 1537.99, -61.21902, 3.211406, 7200, 5, 1), -(@CGUID+70, 15300, 531, 1, 1, 169, -7982.532, 1274.688, -72.87275, 4.817109, 7200, 5, 1), -(@CGUID+71, 15300, 531, 1, 1, 169, -7984.055, 1544.057, -61.72084, 3.560472, 7200, 5, 1), -(@CGUID+72, 15300, 531, 1, 1, 169, -7984.721, 1306.54, -76.8012, 2.356194, 7200, 5, 1), -(@CGUID+73, 15300, 531, 1, 1, 169, -7988.979, 1555.543, -62.07476, 3.560472, 7200, 5, 1), -(@CGUID+74, 15300, 531, 1, 1, 169, -7989.688, 1580.115, -62.092, 6.125817, 7200, 5, 1), -(@CGUID+75, 15300, 531, 1, 1, 169, -7990.045, 1297.59, -74.12374, 3.123379, 7200, 5, 1), -(@CGUID+76, 15300, 531, 1, 1, 169, -7990.39, 1272.209, -73.56954, 2.932153, 7200, 5, 1), -(@CGUID+77, 15300, 531, 1, 1, 169, -7990.807, 1284.74, -73.15822, 2.827433, 7200, 5, 1), -(@CGUID+78, 15300, 531, 1, 1, 169, -7991.841, 1299.617, -73.96005, 2.129302, 7200, 5, 1), -(@CGUID+79, 15300, 531, 1, 1, 169, -7992.515, 1592.58, -60.09307, 0.526886, 7200, 5, 1), -(@CGUID+80, 15300, 531, 1, 1, 169, -7999.318, 1278.983, -73.69726, 4.537856, 7200, 5, 1), -(@CGUID+81, 15300, 531, 1, 1, 169, -8000.123, 1602.627, -58.32988, 0.2268928, 7200, 5, 1), -(@CGUID+82, 15300, 531, 1, 1, 169, -8002.065, 1595.297, -60.0018, 1.451103, 7200, 5, 1), -(@CGUID+83, 15300, 531, 1, 1, 169, -8003.662, 1273.239, -75.26857, 0.2094395, 7200, 5, 1), -(@CGUID+84, 15300, 531, 1, 1, 169, -8004.083, 1619.394, -55.74008, 0.2443461, 7200, 5, 1), -(@CGUID+85, 15300, 531, 1, 1, 169, -8005.251, 1585.535, -61.27219, 0.2546086, 7200, 5, 1), -(@CGUID+86, 15300, 531, 1, 1, 169, -8006.769, 1543.797, -67.10904, 5.218534, 7200, 5, 1), -(@CGUID+87, 15300, 531, 1, 1, 169, -8010.409, 1557.02, -66.04092, 6.091199, 7200, 5, 1), -(@CGUID+88, 15300, 531, 1, 1, 169, -8010.659, 1253.649, -79.13587, 1.675516, 7200, 5, 1), -(@CGUID+89, 15300, 531, 1, 1, 169, -8011.024, 1629.752, -55.88325, 0.6283185, 7200, 5, 1), -(@CGUID+90, 15300, 531, 1, 1, 169, -8015.45, 1614.308, -58.71272, 1.978479, 7200, 5, 1), -(@CGUID+91, 15300, 531, 1, 1, 169, -8017.145, 1536.662, -68.31948, 5.113815, 7200, 5, 1), -(@CGUID+92, 15300, 531, 1, 1, 169, -8017.821, 1614.39, -59.06019, 0.715585, 7200, 5, 1), -(@CGUID+93, 15300, 531, 1, 1, 169, -8021.231, 1552.841, -67.07516, 5.462881, 7200, 5, 1), -(@CGUID+94, 15300, 531, 1, 1, 169, -8026.983, 1601.135, -59.09586, 3.839724, 7200, 5, 1), -(@CGUID+95, 15300, 531, 1, 1, 169, -8028.739, 1230.844, -85.93344, 5.5676, 7200, 5, 1), -(@CGUID+96, 15300, 531, 1, 1, 169, -8030.674, 1534.738, -67.83488, 3.595378, 7200, 5, 1), -(@CGUID+97, 15300, 531, 1, 1, 169, -8030.963, 1190.392, -88.7235, 1.48353, 7200, 5, 1), -(@CGUID+98, 15300, 531, 1, 1, 169, -8033.078, 1644.174, -58.82825, 4.17972, 7200, 5, 1), -(@CGUID+99, 15300, 531, 1, 1, 169, -8033.252, 1610.343, -58.87102, 3.560472, 7200, 5, 1), -(@CGUID+100, 15300, 531, 1, 1, 169, -8037.915, 1551.607, -65.29885, 4.206244, 7200, 5, 1), -(@CGUID+101, 15300, 531, 1, 1, 169, -8038.434, 1617.541, -58.87218, 4.153883, 7200, 5, 1), -(@CGUID+102, 15300, 531, 1, 1, 169, -8043.782, 1637.505, -59.37272, 3.199285, 7200, 5, 1), -(@CGUID+103, 15300, 531, 1, 1, 169, -8045.612, 1583.694, -62.98385, 0.9790034, 7200, 5, 1), -(@CGUID+104, 15300, 531, 1, 1, 169, -8050.1, 1645.168, -58.91573, 4.224158, 7200, 5, 1), -(@CGUID+105, 15300, 531, 1, 1, 169, -8052.96, 1648.648, -58.46545, 0.3665192, 7200, 5, 1), -(@CGUID+106, 15300, 531, 1, 1, 169, -8057.072, 1658.566, -56.45635, 0.8377581, 7200, 5, 1), -(@CGUID+107, 15300, 531, 1, 1, 169, -8057.798, 1593.25, -61.41485, 3.272068, 7200, 5, 1), -(@CGUID+108, 15300, 531, 1, 1, 169, -8058.555, 1573.006, -61.56964, 3.92076, 7200, 5, 1), -(@CGUID+109, 15300, 531, 1, 1, 169, -8059.333, 1586.706, -61.1738, 5.235988, 7200, 5, 1), -(@CGUID+110, 15300, 531, 1, 1, 169, -8060.234, 1604.707, -60.46527, 4.956735, 7200, 5, 1), -(@CGUID+111, 15300, 531, 1, 1, 169, -8065.966, 1589.98, -60.27099, 0.8203048, 7200, 5, 1), -(@CGUID+112, 15300, 531, 1, 1, 169, -8066.036, 1645.905, -56.94833, 3.00077, 7200, 5, 1), -(@CGUID+113, 15300, 531, 1, 1, 169, -8073.205, 1670.581, -51.66552, 1.500983, 7200, 5, 1), -(@CGUID+114, 15300, 531, 1, 1, 169, -8078.903, 1239.604, -91.37767, 1.066351, 7200, 5, 1), -(@CGUID+115, 15300, 531, 1, 1, 169, -8082.463, 1673.083, -49.71113, 1.029744, 7200, 5, 1), -(@CGUID+116, 15300, 531, 1, 1, 169, -8082.638, 1645.959, -53.69846, 4.45059, 7200, 5, 1), -(@CGUID+117, 15300, 531, 1, 1, 169, -8082.839, 1626.916, -55.887, 0.8028514, 7200, 5, 1), -(@CGUID+118, 15300, 531, 1, 1, 169, -8084.041, 1154.17, -92.02991, 1.797689, 7200, 5, 1), -(@CGUID+119, 15300, 531, 1, 1, 169, -8087.102, 1594.794, -56.22529, 3.612832, 7200, 5, 1), -(@CGUID+120, 15300, 531, 1, 1, 169, -8091.706, 1660.421, -51.86389, 1.884956, 7200, 5, 1), -(@CGUID+121, 15300, 531, 1, 1, 169, -8092.724, 1633.168, -54.13385, 0.3490658, 7200, 5, 1), -(@CGUID+122, 15300, 531, 1, 1, 169, -8093.48, 1646.51, -51.53661, 4.939282, 7200, 5, 1), -(@CGUID+123, 15300, 531, 1, 1, 169, -8098.15, 1677.546, -46.38687, 1.43117, 7200, 5, 1), -(@CGUID+124, 15300, 531, 1, 1, 169, -8102.48, 1600.465, -52.38706, 4.310963, 7200, 5, 1), -(@CGUID+125, 15300, 531, 1, 1, 169, -8103.642, 1634.176, -51.76759, 1.58825, 7200, 5, 1), -(@CGUID+126, 15300, 531, 1, 1, 169, -8105.175, 1616.933, -52.51282, 3.246312, 7200, 5, 1), -(@CGUID+127, 15300, 531, 1, 1, 169, -8110, 1654.932, -47.85446, 6.178465, 7200, 5, 1), -(@CGUID+128, 15300, 531, 1, 1, 169, -8110.333, 1194.992, -91.69107, 1.570796, 7200, 5, 1), -(@CGUID+129, 15300, 531, 1, 1, 169, -8183.295, 1625.464, -38.23788, 3.455752, 7200, 5, 1), -(@CGUID+130, 15300, 531, 1, 1, 169, -8110.5, 1665.461, -47.72958, 0.418879, 7200, 5, 1), -(@CGUID+131, 15300, 531, 1, 1, 169, -8117.023, 1671.853, -45.05032, 6.038839, 7200, 5, 1), -(@CGUID+132, 15300, 531, 1, 1, 169, -8121.577, 1659.169, -44.89305, 5.5676, 7200, 5, 1), -(@CGUID+133, 15300, 531, 1, 1, 169, -8122.221, 1622.481, -49.14006, 0.8982115, 7200, 5, 1), -(@CGUID+134, 15300, 531, 1, 1, 169, -8123.377, 1655.844, -44.69468, 3.455752, 7200, 5, 1), -(@CGUID+135, 15300, 531, 1, 1, 169, -8124.208, 1665.759, -44.58142, 1.099557, 7200, 5, 1), -(@CGUID+136, 15300, 531, 1, 1, 169, -8135.342, 1631.169, -46.52505, 5.67232, 7200, 5, 1), -(@CGUID+137, 15300, 531, 1, 1, 169, -8135.99, 1614.041, -45.35197, 4.270462, 7200, 5, 1), -(@CGUID+138, 15300, 531, 1, 1, 169, -8140.333, 1653.827, -40.98864, 3.769911, 7200, 5, 1), -(@CGUID+139, 15300, 531, 1, 1, 169, -8141.307, 1619.113, -44.39598, 1.029744, 7200, 5, 1), -(@CGUID+140, 15300, 531, 1, 1, 169, -8144.391, 1680.055, -36.83066, 1.361357, 7200, 5, 1), -(@CGUID+141, 15300, 531, 1, 1, 169, -8146.426, 1631.036, -44.10762, 4.729842, 7200, 5, 1), -(@CGUID+142, 15300, 531, 1, 1, 169, -8147.207, 1655.39, -38.81593, 5.51524, 7200, 5, 1), -(@CGUID+143, 15300, 531, 1, 1, 169, -8151.949, 1683.398, -35.01212, 0.8028514, 7200, 5, 1), -(@CGUID+144, 15300, 531, 1, 1, 169, -8154.279, 1613.235, -40.65197, 4.607669, 7200, 5, 1), -(@CGUID+145, 15300, 531, 1, 1, 169, -8155.774, 1674.52, -36.2891, 2.181224, 7200, 5, 1), -(@CGUID+146, 15300, 531, 1, 1, 169, -8156.148, 1656.466, -36.48287, 4.694936, 7200, 5, 1), -(@CGUID+147, 15300, 531, 1, 1, 169, -8156.426, 1625.304, -41.49326, 2.059489, 7200, 5, 1), -(@CGUID+148, 15300, 531, 1, 1, 169, -8160.91, 1643.194, -38.99018, 1.867502, 7200, 5, 1), -(@CGUID+149, 15300, 531, 1, 1, 169, -8167.602, 1671.222, -34.59419, 4.433136, 7200, 5, 1), -(@CGUID+150, 15300, 531, 1, 1, 169, -8170.387, 1639.527, -37.48939, 1.884956, 7200, 5, 1), -(@CGUID+151, 15300, 531, 1, 1, 169, -8170.757, 1613.131, -37.4205, 3.926991, 7200, 5, 1); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15300, 531, 1, 1, -7892.548, 1435.668, -65.22711, 0.03490658, 7200, 5, 1), +(@CGUID+1, 15300, 531, 1, 1, -7892.569, 1422.789, -64.86232, 0.03490658, 7200, 5, 1), +(@CGUID+2, 15300, 531, 1, 1, -7893.518, 1410.414, -63.56542, 0.06981317, 7200, 5, 1), +(@CGUID+3, 15300, 531, 1, 1, -7898.467, 1467.742, -63.57774, 0.9599311, 7200, 5, 1), +(@CGUID+4, 15300, 531, 1, 1, -7902.507, 1379.252, -64.91041, 5.602507, 7200, 5, 1), +(@CGUID+5, 15300, 531, 1, 1, -7903.237, 1475.595, -62.51829, 0.1745329, 7200, 5, 1), +(@CGUID+6, 15300, 531, 1, 1, -7904.257, 1483.905, -61.91321, 0.1919862, 7200, 5, 1), +(@CGUID+7, 15300, 531, 1, 1, -7905.727, 1397.53, -65.67427, 1.689209, 7200, 5, 1), +(@CGUID+8, 15300, 531, 1, 1, -7908.201, 1441.5, -67.67268, 1.965443, 7200, 5, 1), +(@CGUID+9, 15300, 531, 1, 1, -7909.212, 1453.823, -66.71354, 5.388192, 7200, 5, 1), +(@CGUID+10, 15300, 531, 1, 1, -7909.227, 1432.98, -68.22237, 2.530727, 7200, 5, 1), +(@CGUID+11, 15300, 531, 1, 1, -7909.395, 1408.309, -66.57648, 2.094395, 7200, 5, 1), +(@CGUID+12, 15300, 531, 1, 1, -7911.222, 1360.079, -75.37612, 5.811946, 7200, 5, 1), +(@CGUID+13, 15300, 531, 1, 1, -7911.51, 1433.753, -68.01991, 2.973195, 7200, 5, 1), +(@CGUID+14, 15300, 531, 1, 1, -7912.08, 1399.684, -68.01915, 4.38238, 7200, 5, 1), +(@CGUID+15, 15300, 531, 1, 1, -7912.685, 1392.55, -68.86684, 4.433136, 7200, 5, 1), +(@CGUID+16, 15300, 531, 1, 1, -7915.495, 1391.565, -68.96242, 0.1829643, 7200, 5, 1), +(@CGUID+17, 15300, 531, 1, 1, -7916.698, 1452.717, -66.98033, 3.176499, 7200, 5, 1), +(@CGUID+18, 15300, 531, 1, 1, -7919.031, 1399.421, -65.47141, 0.8203048, 7200, 5, 1), +(@CGUID+19, 15300, 531, 1, 1, -7919.174, 1450.881, -66.86721, 3.781995, 7200, 5, 1), +(@CGUID+20, 15300, 531, 1, 1, -7919.538, 1503.975, -60.7916, 0.6806784, 7200, 5, 1), +(@CGUID+21, 15300, 531, 1, 1, -7919.866, 1441.265, -66.96127, 0.03490658, 7200, 5, 1), +(@CGUID+22, 15300, 531, 1, 1, -7921.188, 1485.365, -64.48227, 3.437477, 7200, 5, 1), +(@CGUID+23, 15300, 531, 1, 1, -7923.026, 1477.876, -65.64141, 3.438299, 7200, 5, 1), +(@CGUID+24, 15300, 531, 1, 1, -7925.117, 1421.922, -65.61559, 3.193953, 7200, 5, 1), +(@CGUID+25, 15300, 531, 1, 1, -7926.443, 1354.812, -83.58868, 3.46605, 7200, 5, 1), +(@CGUID+26, 15300, 531, 1, 1, -7926.561, 1411.766, -65.3652, 2.740167, 7200, 5, 1), +(@CGUID+27, 15300, 531, 1, 1, -7926.702, 1518.368, -59.68728, 0.5585054, 7200, 5, 1), +(@CGUID+28, 15300, 531, 1, 1, -7927.257, 1493.96, -64.12371, 2.336106, 7200, 5, 1), +(@CGUID+29, 15300, 531, 1, 1, -7927.331, 1328.951, -89.86474, 5.759586, 7200, 5, 1), +(@CGUID+30, 15300, 531, 1, 1, -7927.374, 1365.604, -79.83042, 6.056293, 7200, 5, 1), +(@CGUID+31, 15300, 531, 1, 1, -7927.462, 1472.604, -65.65568, 1.799682, 7200, 5, 1), +(@CGUID+32, 15300, 531, 1, 1, -7927.478, 1389.667, -69.12563, 2.949606, 7200, 5, 1), +(@CGUID+33, 15300, 531, 1, 1, -7929.896, 1484.513, -65.13245, 2.539029, 7200, 5, 1), +(@CGUID+34, 15300, 531, 1, 1, -7930.548, 1320.507, -90.37265, 5.707227, 7200, 5, 1), +(@CGUID+35, 15300, 531, 1, 1, -7931.007, 1349.313, -86.4936, 4.62881, 7200, 5, 1), +(@CGUID+36, 15300, 531, 1, 1, -7932.876, 1453.155, -65.91177, 3.333579, 7200, 5, 1), +(@CGUID+37, 15300, 531, 1, 1, -7933.675, 1528.835, -59.21246, 0.6283185, 7200, 5, 1), +(@CGUID+38, 15300, 531, 1, 1, -7933.889, 1378.917, -75.02083, 3.036873, 7200, 5, 1), +(@CGUID+39, 15300, 531, 1, 1, -7935.543, 1492.749, -64.42677, 5.602507, 7200, 5, 1), +(@CGUID+40, 15300, 531, 1, 1, -7936.098, 1496.016, -64.40736, 3.071736, 7200, 5, 1), +(@CGUID+41, 15300, 531, 1, 1, -7937.946, 1461.595, -65.50119, 3.804818, 7200, 5, 1), +(@CGUID+42, 15300, 531, 1, 1, -7938.33, 1348.699, -87.84061, 3.572022, 7200, 5, 1), +(@CGUID+43, 15300, 531, 1, 1, -7938.882, 1372.345, -78.70309, 2.199115, 7200, 5, 1), +(@CGUID+44, 15300, 531, 1, 1, -7939.133, 1356.648, -86.10828, 1.623156, 7200, 5, 1), +(@CGUID+45, 15300, 531, 1, 1, -7940.602, 1337.277, -91.03973, 2.722714, 7200, 5, 1), +(@CGUID+46, 15300, 531, 1, 1, -7949.532, 1525.042, -62.28769, 2.129302, 7200, 5, 1), +(@CGUID+47, 15300, 531, 1, 1, -7949.806, 1486.382, -63.61917, 3.525565, 7200, 5, 1), +(@CGUID+48, 15300, 531, 1, 1, -7950.41, 1317.311, -89.45904, 1.911877, 7200, 5, 1), +(@CGUID+49, 15300, 531, 1, 1, -7950.723, 1521.167, -62.74979, 2.950145, 7200, 5, 1), +(@CGUID+50, 15300, 531, 1, 1, -7954.241, 1559.81, -59.11872, 0.715585, 7200, 5, 1), +(@CGUID+51, 15300, 531, 1, 1, -7954.718, 1540.167, -60.00118, 4.363323, 7200, 5, 1), +(@CGUID+52, 15300, 531, 1, 1, -7954.768, 1345.852, -91.36903, 3.124139, 7200, 5, 1), +(@CGUID+53, 15300, 531, 1, 1, -7955.768, 1568.089, -60.09465, 0.2268928, 7200, 5, 1), +(@CGUID+54, 15300, 531, 1, 1, -7955.857, 1498.233, -62.65005, 3.665191, 7200, 5, 1), +(@CGUID+55, 15300, 531, 1, 1, -7955.873, 1284.801, -75.54648, 5.8294, 7200, 5, 1), +(@CGUID+56, 15300, 531, 1, 1, -7957.664, 1340.282, -92.26547, 2.286381, 7200, 5, 1), +(@CGUID+57, 15300, 531, 1, 1, -7958.491, 1528.291, -61.77398, 3.857317, 7200, 5, 1), +(@CGUID+58, 15300, 531, 1, 1, -7959.439, 1320.096, -89.41815, 0.8552113, 7200, 5, 1), +(@CGUID+59, 15300, 531, 1, 1, -7960.226, 1307.606, -83.07062, 5.003528, 7200, 5, 1), +(@CGUID+60, 15300, 531, 1, 1, -7961.386, 1279.918, -73.73505, 5.375614, 7200, 5, 1), +(@CGUID+61, 15300, 531, 1, 1, -7961.915, 1338.292, -92.40445, 2.234021, 7200, 5, 1), +(@CGUID+62, 15300, 531, 1, 1, -7967.022, 1274.792, -72.16002, 5.044002, 7200, 5, 1), +(@CGUID+63, 15300, 531, 1, 1, -7967.221, 1524.411, -60.57605, 5.270895, 7200, 5, 1), +(@CGUID+64, 15300, 531, 1, 1, -7967.628, 1313.647, -85.22298, 5.323254, 7200, 5, 1), +(@CGUID+65, 15300, 531, 1, 1, -7967.866, 1536.324, -62.04499, 5.916666, 7200, 5, 1), +(@CGUID+66, 15300, 531, 1, 1, -7970.926, 1297.65, -76.17361, 3.368485, 7200, 5, 1), +(@CGUID+67, 15300, 531, 1, 1, -7971.198, 1302.062, -78.52887, 2.688358, 7200, 5, 1), +(@CGUID+68, 15300, 531, 1, 1, -7978.03, 1568.925, -61.93628, 2.338741, 7200, 5, 1), +(@CGUID+69, 15300, 531, 1, 1, -7979.314, 1537.99, -61.21902, 3.211406, 7200, 5, 1), +(@CGUID+70, 15300, 531, 1, 1, -7982.532, 1274.688, -72.87275, 4.817109, 7200, 5, 1), +(@CGUID+71, 15300, 531, 1, 1, -7984.055, 1544.057, -61.72084, 3.560472, 7200, 5, 1), +(@CGUID+72, 15300, 531, 1, 1, -7984.721, 1306.54, -76.8012, 2.356194, 7200, 5, 1), +(@CGUID+73, 15300, 531, 1, 1, -7988.979, 1555.543, -62.07476, 3.560472, 7200, 5, 1), +(@CGUID+74, 15300, 531, 1, 1, -7989.688, 1580.115, -62.092, 6.125817, 7200, 5, 1), +(@CGUID+75, 15300, 531, 1, 1, -7990.045, 1297.59, -74.12374, 3.123379, 7200, 5, 1), +(@CGUID+76, 15300, 531, 1, 1, -7990.39, 1272.209, -73.56954, 2.932153, 7200, 5, 1), +(@CGUID+77, 15300, 531, 1, 1, -7990.807, 1284.74, -73.15822, 2.827433, 7200, 5, 1), +(@CGUID+78, 15300, 531, 1, 1, -7991.841, 1299.617, -73.96005, 2.129302, 7200, 5, 1), +(@CGUID+79, 15300, 531, 1, 1, -7992.515, 1592.58, -60.09307, 0.526886, 7200, 5, 1), +(@CGUID+80, 15300, 531, 1, 1, -7999.318, 1278.983, -73.69726, 4.537856, 7200, 5, 1), +(@CGUID+81, 15300, 531, 1, 1, -8000.123, 1602.627, -58.32988, 0.2268928, 7200, 5, 1), +(@CGUID+82, 15300, 531, 1, 1, -8002.065, 1595.297, -60.0018, 1.451103, 7200, 5, 1), +(@CGUID+83, 15300, 531, 1, 1, -8003.662, 1273.239, -75.26857, 0.2094395, 7200, 5, 1), +(@CGUID+84, 15300, 531, 1, 1, -8004.083, 1619.394, -55.74008, 0.2443461, 7200, 5, 1), +(@CGUID+85, 15300, 531, 1, 1, -8005.251, 1585.535, -61.27219, 0.2546086, 7200, 5, 1), +(@CGUID+86, 15300, 531, 1, 1, -8006.769, 1543.797, -67.10904, 5.218534, 7200, 5, 1), +(@CGUID+87, 15300, 531, 1, 1, -8010.409, 1557.02, -66.04092, 6.091199, 7200, 5, 1), +(@CGUID+88, 15300, 531, 1, 1, -8010.659, 1253.649, -79.13587, 1.675516, 7200, 5, 1), +(@CGUID+89, 15300, 531, 1, 1, -8011.024, 1629.752, -55.88325, 0.6283185, 7200, 5, 1), +(@CGUID+90, 15300, 531, 1, 1, -8015.45, 1614.308, -58.71272, 1.978479, 7200, 5, 1), +(@CGUID+91, 15300, 531, 1, 1, -8017.145, 1536.662, -68.31948, 5.113815, 7200, 5, 1), +(@CGUID+92, 15300, 531, 1, 1, -8017.821, 1614.39, -59.06019, 0.715585, 7200, 5, 1), +(@CGUID+93, 15300, 531, 1, 1, -8021.231, 1552.841, -67.07516, 5.462881, 7200, 5, 1), +(@CGUID+94, 15300, 531, 1, 1, -8026.983, 1601.135, -59.09586, 3.839724, 7200, 5, 1), +(@CGUID+95, 15300, 531, 1, 1, -8028.739, 1230.844, -85.93344, 5.5676, 7200, 5, 1), +(@CGUID+96, 15300, 531, 1, 1, -8030.674, 1534.738, -67.83488, 3.595378, 7200, 5, 1), +(@CGUID+97, 15300, 531, 1, 1, -8030.963, 1190.392, -88.7235, 1.48353, 7200, 5, 1), +(@CGUID+98, 15300, 531, 1, 1, -8033.078, 1644.174, -58.82825, 4.17972, 7200, 5, 1), +(@CGUID+99, 15300, 531, 1, 1, -8033.252, 1610.343, -58.87102, 3.560472, 7200, 5, 1), +(@CGUID+100, 15300, 531, 1, 1, -8037.915, 1551.607, -65.29885, 4.206244, 7200, 5, 1), +(@CGUID+101, 15300, 531, 1, 1, -8038.434, 1617.541, -58.87218, 4.153883, 7200, 5, 1), +(@CGUID+102, 15300, 531, 1, 1, -8043.782, 1637.505, -59.37272, 3.199285, 7200, 5, 1), +(@CGUID+103, 15300, 531, 1, 1, -8045.612, 1583.694, -62.98385, 0.9790034, 7200, 5, 1), +(@CGUID+104, 15300, 531, 1, 1, -8050.1, 1645.168, -58.91573, 4.224158, 7200, 5, 1), +(@CGUID+105, 15300, 531, 1, 1, -8052.96, 1648.648, -58.46545, 0.3665192, 7200, 5, 1), +(@CGUID+106, 15300, 531, 1, 1, -8057.072, 1658.566, -56.45635, 0.8377581, 7200, 5, 1), +(@CGUID+107, 15300, 531, 1, 1, -8057.798, 1593.25, -61.41485, 3.272068, 7200, 5, 1), +(@CGUID+108, 15300, 531, 1, 1, -8058.555, 1573.006, -61.56964, 3.92076, 7200, 5, 1), +(@CGUID+109, 15300, 531, 1, 1, -8059.333, 1586.706, -61.1738, 5.235988, 7200, 5, 1), +(@CGUID+110, 15300, 531, 1, 1, -8060.234, 1604.707, -60.46527, 4.956735, 7200, 5, 1), +(@CGUID+111, 15300, 531, 1, 1, -8065.966, 1589.98, -60.27099, 0.8203048, 7200, 5, 1), +(@CGUID+112, 15300, 531, 1, 1, -8066.036, 1645.905, -56.94833, 3.00077, 7200, 5, 1), +(@CGUID+113, 15300, 531, 1, 1, -8073.205, 1670.581, -51.66552, 1.500983, 7200, 5, 1), +(@CGUID+114, 15300, 531, 1, 1, -8078.903, 1239.604, -91.37767, 1.066351, 7200, 5, 1), +(@CGUID+115, 15300, 531, 1, 1, -8082.463, 1673.083, -49.71113, 1.029744, 7200, 5, 1), +(@CGUID+116, 15300, 531, 1, 1, -8082.638, 1645.959, -53.69846, 4.45059, 7200, 5, 1), +(@CGUID+117, 15300, 531, 1, 1, -8082.839, 1626.916, -55.887, 0.8028514, 7200, 5, 1), +(@CGUID+118, 15300, 531, 1, 1, -8084.041, 1154.17, -92.02991, 1.797689, 7200, 5, 1), +(@CGUID+119, 15300, 531, 1, 1, -8087.102, 1594.794, -56.22529, 3.612832, 7200, 5, 1), +(@CGUID+120, 15300, 531, 1, 1, -8091.706, 1660.421, -51.86389, 1.884956, 7200, 5, 1), +(@CGUID+121, 15300, 531, 1, 1, -8092.724, 1633.168, -54.13385, 0.3490658, 7200, 5, 1), +(@CGUID+122, 15300, 531, 1, 1, -8093.48, 1646.51, -51.53661, 4.939282, 7200, 5, 1), +(@CGUID+123, 15300, 531, 1, 1, -8098.15, 1677.546, -46.38687, 1.43117, 7200, 5, 1), +(@CGUID+124, 15300, 531, 1, 1, -8102.48, 1600.465, -52.38706, 4.310963, 7200, 5, 1), +(@CGUID+125, 15300, 531, 1, 1, -8103.642, 1634.176, -51.76759, 1.58825, 7200, 5, 1), +(@CGUID+126, 15300, 531, 1, 1, -8105.175, 1616.933, -52.51282, 3.246312, 7200, 5, 1), +(@CGUID+127, 15300, 531, 1, 1, -8110, 1654.932, -47.85446, 6.178465, 7200, 5, 1), +(@CGUID+128, 15300, 531, 1, 1, -8110.333, 1194.992, -91.69107, 1.570796, 7200, 5, 1), +(@CGUID+129, 15300, 531, 1, 1, -8183.295, 1625.464, -38.23788, 3.455752, 7200, 5, 1), +(@CGUID+130, 15300, 531, 1, 1, -8110.5, 1665.461, -47.72958, 0.418879, 7200, 5, 1), +(@CGUID+131, 15300, 531, 1, 1, -8117.023, 1671.853, -45.05032, 6.038839, 7200, 5, 1), +(@CGUID+132, 15300, 531, 1, 1, -8121.577, 1659.169, -44.89305, 5.5676, 7200, 5, 1), +(@CGUID+133, 15300, 531, 1, 1, -8122.221, 1622.481, -49.14006, 0.8982115, 7200, 5, 1), +(@CGUID+134, 15300, 531, 1, 1, -8123.377, 1655.844, -44.69468, 3.455752, 7200, 5, 1), +(@CGUID+135, 15300, 531, 1, 1, -8124.208, 1665.759, -44.58142, 1.099557, 7200, 5, 1), +(@CGUID+136, 15300, 531, 1, 1, -8135.342, 1631.169, -46.52505, 5.67232, 7200, 5, 1), +(@CGUID+137, 15300, 531, 1, 1, -8135.99, 1614.041, -45.35197, 4.270462, 7200, 5, 1), +(@CGUID+138, 15300, 531, 1, 1, -8140.333, 1653.827, -40.98864, 3.769911, 7200, 5, 1), +(@CGUID+139, 15300, 531, 1, 1, -8141.307, 1619.113, -44.39598, 1.029744, 7200, 5, 1), +(@CGUID+140, 15300, 531, 1, 1, -8144.391, 1680.055, -36.83066, 1.361357, 7200, 5, 1), +(@CGUID+141, 15300, 531, 1, 1, -8146.426, 1631.036, -44.10762, 4.729842, 7200, 5, 1), +(@CGUID+142, 15300, 531, 1, 1, -8147.207, 1655.39, -38.81593, 5.51524, 7200, 5, 1), +(@CGUID+143, 15300, 531, 1, 1, -8151.949, 1683.398, -35.01212, 0.8028514, 7200, 5, 1), +(@CGUID+144, 15300, 531, 1, 1, -8154.279, 1613.235, -40.65197, 4.607669, 7200, 5, 1), +(@CGUID+145, 15300, 531, 1, 1, -8155.774, 1674.52, -36.2891, 2.181224, 7200, 5, 1), +(@CGUID+146, 15300, 531, 1, 1, -8156.148, 1656.466, -36.48287, 4.694936, 7200, 5, 1), +(@CGUID+147, 15300, 531, 1, 1, -8156.426, 1625.304, -41.49326, 2.059489, 7200, 5, 1), +(@CGUID+148, 15300, 531, 1, 1, -8160.91, 1643.194, -38.99018, 1.867502, 7200, 5, 1), +(@CGUID+149, 15300, 531, 1, 1, -8167.602, 1671.222, -34.59419, 4.433136, 7200, 5, 1), +(@CGUID+150, 15300, 531, 1, 1, -8170.387, 1639.527, -37.48939, 1.884956, 7200, 5, 1), +(@CGUID+151, 15300, 531, 1, 1, -8170.757, 1613.131, -37.4205, 3.926991, 7200, 5, 1); -- Pathing for Vekniss Soldier Entry: 15229 'TDB FORMAT' SET @NPC := 87901; From 3b2b67998182af7360d032cd1967e4aaca4e6434 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 14 Oct 2015 09:38:11 +0200 Subject: [PATCH 158/524] DB/Creature: Pathing for Lava Surger By Malcrom --- sql/updates/world/2015_10_14_01_world.sql | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 sql/updates/world/2015_10_14_01_world.sql diff --git a/sql/updates/world/2015_10_14_01_world.sql b/sql/updates/world/2015_10_14_01_world.sql new file mode 100644 index 0000000000..5b72a9af23 --- /dev/null +++ b/sql/updates/world/2015_10_14_01_world.sql @@ -0,0 +1,34 @@ +-- Pathing for Lava Surger Entry: 12101 'TDB FORMAT' +SET @NPC := 56666; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=679.1953,`position_y`=-847.3836,`position_z`=-208.2482 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,679.1953,-847.3836,-208.2482,0,0,1,0,100,0), +(@PATH,2,676.7046,-829.8509,-208.8353,0,0,1,0,100,0), +(@PATH,3,665.002,-813.2372,-208.774,0,0,1,0,100,0), +(@PATH,4,681.6021,-776.7833,-209.1657,0,0,1,0,100,0), +(@PATH,5,686.1985,-738.5436,-209.2948,0,0,1,0,100,0), +(@PATH,6,707.9111,-711.0708,-209.5187,0,0,1,0,100,0), +(@PATH,7,708.2624,-692.8405,-209.5718,0,0,1,0,100,0), +(@PATH,8,690.2739,-662.6287,-209.6574,0,0,1,0,100,0), +(@PATH,9,708.2625,-692.8368,-209.5175,0,0,1,0,100,0), +(@PATH,10,707.9111,-711.0708,-209.5187,0,0,1,0,100,0), +(@PATH,11,686.1985,-738.5436,-209.2948,0,0,1,0,100,0), +(@PATH,12,681.6021,-776.7833,-209.1657,0,0,1,0,100,0), +(@PATH,13,665.002,-813.2372,-208.774,0,0,1,0,100,0), +(@PATH,14,676.7046,-829.8509,-208.8353,0,0,1,0,100,0), +(@PATH,15,679.1953,-847.3836,-208.2482,0,0,1,0,100,0), +(@PATH,16,696.5482,-855.4606,-206.0954,0,0,1,0,100,0), +(@PATH,17,710.7119,-882.6242,-198.953,0,0,1,0,100,0), +(@PATH,18,714.8118,-907.6405,-193.7685,0,0,1,0,100,0), +(@PATH,19,735.3042,-937.3447,-188.4066,0,0,1,0,100,0), +(@PATH,20,714.8118,-907.6405,-193.7685,0,0,1,0,100,0), +(@PATH,21,710.7119,-882.6242,-198.953,0,0,1,0,100,0), +(@PATH,22,697.0541,-866.1818,-204.0854,0,0,1,0,100,0); + +UPDATE `creature` SET `spawndist`=0,`MovementType`=0,`position_x`=696.6885,`position_y`=-852.352,`position_z`=-206.5962,`orientation`=3.674797 WHERE `guid`=56789; +DELETE FROM `creature_addon` WHERE `guid`=56789; +DELETE FROM `waypoint_data` WHERE `id`=567890; From 2478438117a2d01435f3d0b182d1a5fd5144792c Mon Sep 17 00:00:00 2001 From: Aokromes Date: Wed, 14 Oct 2015 12:07:53 +0200 Subject: [PATCH 159/524] DB/Misc: Fix 2 runtime errors By Malcrom --- sql/updates/world/2015_10_14_02_world.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2015_10_14_02_world.sql diff --git a/sql/updates/world/2015_10_14_02_world.sql b/sql/updates/world/2015_10_14_02_world.sql new file mode 100644 index 0000000000..44b00fceb0 --- /dev/null +++ b/sql/updates/world/2015_10_14_02_world.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `creature_addon` WHERE `guid` IN (56606,56607); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(56606,566050,0,0,1,0, ''), +(56607,566050,0,0,1,0, ''); From bfa521491b305f0856c1843dd0e9a7957526b7d6 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 14 Oct 2015 16:52:50 +0200 Subject: [PATCH 160/524] DB: Fix up some errors in Vekniss Hive Crawler By Malcrom --- sql/updates/world/2015_10_14_03_world.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2015_10_14_03_world.sql diff --git a/sql/updates/world/2015_10_14_03_world.sql b/sql/updates/world/2015_10_14_03_world.sql new file mode 100644 index 0000000000..e91d340d04 --- /dev/null +++ b/sql/updates/world/2015_10_14_03_world.sql @@ -0,0 +1,7 @@ +-- +-- Fix up some errors in Vekniss Hive Crawler Entry: 15240 pathing +UPDATE `creature` SET `position_x`=-8259.721,`position_y`=1343.373,`position_z`=-84.4428 WHERE `guid`=87942; +UPDATE `creature` SET `position_x`=-8524.316,`position_y`=1389.612,`position_z`=-57.2656 WHERE `guid`=87944; +DELETE FROM `creature_addon` WHERE `guid` IN (87940,87942,87944); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(87940,879390,0,0,1,0, ''),(87942,879410,0,0,1,0, ''),(87944,879430,0,0,1,0, ''); From c9258d436bf2a041ad71c3d7ed068848310365c8 Mon Sep 17 00:00:00 2001 From: pete318 Date: Wed, 14 Oct 2015 18:34:44 +0200 Subject: [PATCH 161/524] Core/Auras: Fixed auras limited to a single target not being removed in all cases as expected * Fixes possible assertion failure in Aura::UnregisterSingleTarget Closes #15696 Ref #15668 Cherry picked (manually) from b808910a89822f741d35d4b90e6c4bcf101cd9ef --- src/server/game/Entities/Unit/Unit.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f085bab165..9ced65b56c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3908,20 +3908,27 @@ void Unit::RemoveAurasWithAttribute(uint32 flags) void Unit::RemoveNotOwnSingleTargetAuras(uint32 newPhase) { // single target auras from other casters - for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();) + // Iterate m_ownedAuras - aura is marked as single target in Unit::AddAura (and pushed to m_ownedAuras). + // m_appliedAuras will NOT contain the aura before first Unit::Update after adding it to m_ownedAuras. + // Quickly removing such an aura will lead to it not being unregistered from caster's single cast auras container + // leading to assertion failures if the aura was cast on a player that can + // (and is changing map at the point where this function is called). + // Such situation occurs when player is logging in inside an instance and fails the entry check for any reason. + // The aura that was loaded from db (indirectly, via linked casts) gets removed before it has a chance + // to register in m_appliedAuras + for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();) { - AuraApplication const* aurApp = iter->second; - Aura const* aura = aurApp->GetBase(); + Aura const* aura = iter->second; - if (aura->GetCasterGUID() != GetGUID() && aura->GetSpellInfo()->IsSingleTarget()) + if (aura->GetCasterGUID() != GetGUID() && aura->IsSingleTarget()) { if (!newPhase) - RemoveAura(iter); + RemoveOwnedAura(iter); else { Unit* caster = aura->GetCaster(); if (!caster || !caster->InSamePhase(newPhase)) - RemoveAura(iter); + RemoveOwnedAura(iter); else ++iter; } From 141ba6bfda55884a52a75b6f439a697745f5e24b Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 15 Oct 2015 01:39:28 +0200 Subject: [PATCH 162/524] DB/Creature: Fix spawns/pathing in AQ40 By malcrom --- sql/updates/world/2015_10_14_04_world.sql | 778 ++++++++++++++++++++++ 1 file changed, 778 insertions(+) create mode 100644 sql/updates/world/2015_10_14_04_world.sql diff --git a/sql/updates/world/2015_10_14_04_world.sql b/sql/updates/world/2015_10_14_04_world.sql new file mode 100644 index 0000000000..ec17ef1061 --- /dev/null +++ b/sql/updates/world/2015_10_14_04_world.sql @@ -0,0 +1,778 @@ +-- +-- Add missing critters to AQ40 +SET @CGUID := 87830; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+62; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 4076, 531, 1, 1, -7993.61, 1277.031, -73.53455, 1.856409, 7200, 5, 1), +(@CGUID+1, 4076, 531, 1, 1, -8071.965, 1231.468, -91.46188, 1.903564, 7200, 5, 1), +(@CGUID+2, 4076, 531, 1, 1, -8308.057, 1858.822, -1.610428, 5.606663, 7200, 5, 1), +(@CGUID+3, 4076, 531, 1, 1, -8414.608, 2051.612, 9.279689, 3.343741, 7200, 5, 1), +(@CGUID+4, 4076, 531, 1, 1, -8416.188, 2076.555, 116.1282, 2.943876, 7200, 5, 1), +(@CGUID+5, 4076, 531, 1, 1, -8430.81, 2030.658, 116.1034, 4.016187, 7200, 5, 1), +(@CGUID+6, 4076, 531, 1, 1, -8693.907, 1563.222, -80.14254, 3.734258, 7200, 5, 1), +(@CGUID+7, 4076, 531, 1, 1, -8710.091, 1659.989, -84.65031, 5.40056, 7200, 5, 1), +(@CGUID+8, 4076, 531, 1, 1, -8855.175, 1535.051, -95.46984, 1.537807, 7200, 5, 1), +(@CGUID+9, 4076, 531, 1, 1, -8869.176, 1416.73, -93.07328, 5.271091, 7200, 5, 1), +(@CGUID+10, 4076, 531, 1, 1, -8904.052, 1863.421, -21.88551, 1.61788, 7200, 5, 1), +(@CGUID+11, 4076, 531, 1, 1, -9068.005, 1884.902, -43.82254, 2.850689, 7200, 5, 1), +(@CGUID+12, 4076, 531, 1, 1, -9117.436, 1379.472, -106.4541, 5.968285, 7200, 5, 1), +(@CGUID+13, 4076, 531, 1, 1, -9174.12, 2027.797, -60.80634, 0.08407046, 7200, 5, 1), +(@CGUID+14, 4076, 531, 1, 1, -9184.257, 1699.096, -50.83805, 3.615798, 7200, 5, 1), +(@CGUID+15, 15475, 531, 1, 1, -7914.396, 1445.457, -67.39938, 3.58752, 7200, 5, 1), +(@CGUID+16, 15475, 531, 1, 1, -7953.215, 1524.226, -62.41693, 3.258193, 7200, 5, 1), +(@CGUID+17, 15475, 531, 1, 1, -8012.04, 1604.964, -59.16104, 1.007754, 7200, 5, 1), +(@CGUID+18, 15475, 531, 1, 1, -8034.017, 1565.151, -65.11945, 1.29113, 7200, 5, 1), +(@CGUID+19, 15475, 531, 1, 1, -8039.968, 1175.328, -90.4319, 1.981047, 7200, 5, 1), +(@CGUID+20, 15475, 531, 1, 1, -8101.441, 1152.044, -90.54535, 1.581657, 7200, 5, 1), +(@CGUID+21, 15475, 531, 1, 1, -8108.146, 1662.778, -48.41492, 3.097694, 7200, 5, 1), +(@CGUID+22, 15475, 531, 1, 1, -8298.537, 1722.821, -16.17212, 4.068121, 7200, 5, 1), +(@CGUID+23, 15475, 531, 1, 1, -8371.146, 2061.964, 9.355958, 0.2580761, 7200, 5, 1), +(@CGUID+24, 15475, 531, 1, 1, -8386.911, 1898.422, 2.752187, 6.2749, 7200, 5, 1), +(@CGUID+25, 15475, 531, 1, 1, -8432.691, 2079.264, 116.1293, 0.4680386, 7200, 5, 1), +(@CGUID+26, 15475, 531, 1, 1, -8492.966, 1962.474, 62.38858, 4.436271, 7200, 5, 1), +(@CGUID+27, 15475, 531, 1, 1, -8557.565, 2140.73, -6.423177, 1.536374, 7200, 5, 1), +(@CGUID+28, 15475, 531, 1, 1, -8558.164, 1398.536, -61.02413, 1.319915, 7200, 5, 1), +(@CGUID+29, 15475, 531, 1, 1, -8586.941, 1998.362, -1.80591, 3.095486, 7200, 5, 1), +(@CGUID+30, 15475, 531, 1, 1, -8606.187, 1636.149, -89.51112, 2.737563, 7200, 5, 1), +(@CGUID+31, 15475, 531, 1, 1, -8627.807, 1908.553, 108.5656, 3.843493, 7200, 5, 1), +(@CGUID+32, 15475, 531, 1, 1, -8943.605, 1438.669, -92.41223, 3.784467, 7200, 5, 1), +(@CGUID+33, 15475, 531, 1, 1, -9096.328, 2109.297, -60.5332, 5.777769, 7200, 5, 1), +(@CGUID+34, 15475, 531, 1, 1, -9116.301, 1796.602, -42.21427, 1.827075, 7200, 5, 1), +(@CGUID+35, 15475, 531, 1, 1, -9118.708, 2143.711, -62.06357, 2.151066, 7200, 5, 1), +(@CGUID+36, 15475, 531, 1, 1, -9142.719, 2103.468, -65.14211, 1.267552, 7200, 5, 1), +(@CGUID+37, 15475, 531, 1, 1, -9180.303, 1493.747, -94.91629, 0.3170593, 7200, 5, 1), +(@CGUID+38, 15475, 531, 1, 1, -9196.674, 2084.258, -63.99967, 2.517623, 7200, 5, 1), +(@CGUID+39, 15475, 531, 1, 1, -9234.575, 2114.615, -66.58328, 3.193953, 7200, 5, 1), +(@CGUID+40, 15476, 531, 1, 1, -7921.302, 1372.589, -75.91825, 4.972216, 7200, 5, 1), +(@CGUID+41, 15476, 531, 1, 1, -8125.222, 1185.706, -90.46516, 3.404643, 7200, 5, 1), +(@CGUID+42, 15476, 531, 1, 1, -8136.203, 1621.301, -45.78866, 0.4527432, 7200, 5, 1), +(@CGUID+43, 15476, 531, 1, 1, -8219.493, 1287.494, -90.73062, 5.135323, 7200, 5, 1), +(@CGUID+44, 15476, 531, 1, 1, -8231.996, 1730.547, -23.7835, 1.56798, 7200, 5, 1), +(@CGUID+45, 15476, 531, 1, 1, -8282.225, 1654.54, -30.92528, 3.785695, 7200, 5, 1), +(@CGUID+46, 15476, 531, 1, 1, -8343.887, 1800.739, -1.62698, 0.4436055, 7200, 5, 1), +(@CGUID+47, 15476, 531, 1, 1, -8354.889, 1950.469, -1.990107, 2.945138, 7200, 5, 1), +(@CGUID+48, 15476, 531, 1, 1, -8402.777, 2032.242, 116.1043, 1.83938, 7200, 5, 1), +(@CGUID+49, 15476, 531, 1, 1, -8530.837, 1987.527, 19.45868, 1.684378, 7200, 5, 1), +(@CGUID+50, 15476, 531, 1, 1, -8571.373, 1981.646, -2.622002, 1.976356, 7200, 5, 1), +(@CGUID+51, 15476, 531, 1, 1, -8584.706, 2161.053, -6.459295, 1.208772, 7200, 5, 1), +(@CGUID+52, 15476, 531, 1, 1, -8604.21, 2111.618, -5.873696, 1.306837, 7200, 5, 1), +(@CGUID+53, 15476, 531, 1, 1, -8786.167, 1550.577, -94.0428, 4.411382, 7200, 5, 1), +(@CGUID+54, 15476, 531, 1, 1, -8795.048, 1985.752, -20.00344, 4.738873, 7200, 5, 1), +(@CGUID+55, 15476, 531, 1, 1, -8902.53, 1530.709, -94.36566, 4.301609, 7200, 5, 1), +(@CGUID+56, 15476, 531, 1, 1, -9003.465, 1871.428, -42.74734, 5.304233, 7200, 5, 1), +(@CGUID+57, 15476, 531, 1, 1, -9087.258, 1473.547, -105.3523, 0.5530397, 7200, 5, 1), +(@CGUID+58, 15476, 531, 1, 1, -9107.258, 2057.86, -61.6295, 2.819984, 7200, 5, 1), +(@CGUID+59, 15476, 531, 1, 1, -9163.185, 2056.463, -63.7112, 3.981431, 7200, 5, 1), +(@CGUID+60, 15476, 531, 1, 1, -9207.206, 2138.979, -67.99921, 3.086965, 7200, 5, 1), +(@CGUID+61, 15476, 531, 1, 1, -9223.008, 2041.489, -62.08887, 0.8683821, 7200, 5, 1), +(@CGUID+62, 15476, 531, 1, 1, -9243.944, 2079.562, -64.68581, 1.411943, 7200, 5, 1); + +-- Ahn'Qiraj Trigger +SET @CGUID := 87639; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+6; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15426, 531, 1, 1, -8336.388, 2176.261, 127.9972, 2.129302, 7200, 0, 0), +(@CGUID+1, 15426, 531, 1, 1, -8163.713, 2179.064, 130.4213, 5.51524, 7200, 0, 0), +(@CGUID+2, 15426, 531, 1, 1, -8313.152, 2045.799, 137.8285, 4.18879, 7200, 0, 0), +(@CGUID+3, 15426, 531, 1, 1, -8651.198, 2071.601, 20.505, 2.495821, 7200, 0, 0), +(@CGUID+4, 15426, 531, 1, 1, -8337.532, 1731.16, 31.24248, 5.951573, 7200, 0, 0), +(@CGUID+5, 15426, 531, 1, 1, -7994.346, 1000.059, 2.599343, 2.600541, 7200, 0, 0), +(@CGUID+6, 15426, 531, 1, 1, -8983.974, 1392.379, -82.83119, 3.630285, 7200, 0, 0); + +-- OLDWorld Trigger (DO NOT DELETE) +SET @CGUID := 87646; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+1; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15384, 531, 1, 1, -8546.249, 1987.516, -96.43676, 0.3316126, 7200, 0, 0), +(@CGUID+1, 15384, 531, 1, 1, -8576.694, 1987.583, 100.3037, 0.4712389, 7200, 0, 0); + +-- Anubisath Warder +SET @CGUID := 87654; +DELETE FROM `creature` WHERE `guid` IN (88020,88021,88064); +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+3; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15311, 531, 1, 1, -8909.497, 1860.686, -22.37387, 3.176499, 7200, 0, 0), +(@CGUID+1, 15311, 531, 1, 1, -8997.906, 1920.162, -43.96503, 4.29351, 7200, 0, 0), +(@CGUID+2, 15311, 531, 1, 1, -9083.562, 1767.909, -42.79126, 3.228859, 7200, 0, 0), +(@CGUID+3, 15311, 531, 1, 1, -9133.911, 1813.15, -42.73888, 5.131268, 7200, 0, 0); + +-- Obsidian Nullifier +SET @CGUID := 88022; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+7; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15312, 531, 1, 1, -8913.266, 1875.202, -22.02199, 3.176499, 7200, 0, 0), +(@CGUID+1, 15312, 531, 1, 1, -8918.995, 1846.376, -23.08899, 2.617994, 7200, 0, 0), +(@CGUID+2, 15312, 531, 1, 1, -8995.444, 1903.269, -41.87885, 3.752458, 7200, 0, 0), +(@CGUID+3, 15312, 531, 1, 1, -9016.395, 1920.327, -44.30135, 4.572762, 7200, 0, 0), +(@CGUID+4, 15312, 531, 1, 1, -9087.13, 1781.5, -42.47464, 3.577925, 7200, 0, 0), +(@CGUID+5, 15312, 531, 1, 1, -9090.95, 1755.96, -41.99282, 2.86234, 7200, 0, 0), +(@CGUID+6, 15312, 531, 1, 1, -9122.171, 1809.711, -42.50865, 4.433136, 7200, 0, 0), +(@CGUID+7, 15312, 531, 1, 1, -9140.379, 1802.046, -42.01139, 5.480334, 7200, 0, 0); + +-- Pathing for OLDWorld Trigger (DO NOT DELETE) Entry: 15384 'TDB FORMAT' +SET @NPC := 87647; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8577.317,`position_y`=1988.112,`position_z`=101.2204 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8577.317,1988.112,101.2204,0,0,0,0,100,0), +(@PATH,2,-8578.001,1987.128,101.2204,0,0,0,0,100,0); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (15312); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (15312,0,1,0, '19818'); + +UPDATE `creature` SET `spawntimesecs`=0 WHERE `id`=15300; + +-- Remove over spawned Vekniss Stinger +DELETE FROM `creature` WHERE `guid` IN (88006,88007,88011,88012,88013); +-- Remove over spawned Vekniss Wasp +DELETE FROM `creature` WHERE `guid` BETWEEN 87977 AND 87989; +DELETE FROM `creature` WHERE `guid` IN (88000,88001,88004,88005,88009,88010); +-- Remove over spawned Anubisath Swarmguard +DELETE FROM `creature` WHERE `guid` IN (87999,88002,88003,88008); + +UPDATE `creature_template` SET `InhabitType`=7 WHERE `entry` IN (15235,15236,15249); +-- Anubisath Swarmguard spawns should be Qiraji Lasher +UPDATE `creature` SET `id`=15249 WHERE `guid` IN (87994,87995,87996); + +-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT' +SET @NPC := 87990; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8563.52,`position_y`=1739.6,`position_z`=-90.46359 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8563.52,`position_y`=1739.6,`position_z`=-90.46359 WHERE `guid`=87962; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8563.52,`position_y`=1739.6,`position_z`=-90.46359 WHERE `guid`=87963; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8563.52,`position_y`=1739.6,`position_z`=-90.46359 WHERE `guid`=87994; -- Qiraji Lasher +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87962,87963,87994); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(87962,@PATH,0,0,1,0, ''),(87963,@PATH,0,0,1,0, ''),(87994,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8563.52,1739.6,-90.46359,0,0,1,0,100,0), +(@PATH,2,-8548.448,1731.575,-91.82451,0,0,1,0,100,0), +(@PATH,3,-8542.137,1699.376,-90.39761,0,0,1,0,100,0), +(@PATH,4,-8558.685,1666.235,-90.69133,0,0,1,0,100,0), +(@PATH,5,-8585.775,1654.991,-89.79728,0,0,1,0,100,0), +(@PATH,6,-8613.518,1668.712,-90.51443,0,0,1,0,100,0), +(@PATH,7,-8622.457,1691.902,-91.26654,0,0,1,0,100,0), +(@PATH,8,-8645.388,1710.061,-90.06686,0,0,1,0,100,0), +(@PATH,9,-8635.841,1744.949,-91.82065,0,0,1,0,100,0), +(@PATH,10,-8617.822,1770.243,-90.46841,0,0,1,0,100,0), +(@PATH,11,-8635.841,1744.949,-91.82065,0,0,1,0,100,0), +(@PATH,12,-8645.388,1710.061,-90.06686,0,0,1,0,100,0), +(@PATH,13,-8622.457,1691.902,-91.26654,0,0,1,0,100,0), +(@PATH,14,-8613.518,1668.712,-90.51443,0,0,1,0,100,0), +(@PATH,15,-8585.775,1654.991,-89.79728,0,0,1,0,100,0), +(@PATH,16,-8558.685,1666.235,-90.69133,0,0,1,0,100,0), +(@PATH,17,-8542.137,1699.376,-90.39761,0,0,1,0,100,0), +(@PATH,18,-8548.448,1731.575,-91.82451,0,0,1,0,100,0), +(@PATH,19,-8563.52,1739.6,-90.46359,0,0,1,0,100,0), +(@PATH,20,-8580.759,1732.139,-91.39182,0,0,1,0,100,0), +(@PATH,21,-8595.639,1703.542,-91.69364,0,0,1,0,100,0), +(@PATH,22,-8598.313,1670.841,-90.63684,0,0,1,0,100,0), +(@PATH,23,-8596.669,1642.029,-89.56214,0,0,1,0,100,0), +(@PATH,24,-8602.972,1615.217,-88.6513,0,0,1,0,100,0), +(@PATH,25,-8605.679,1582.754,-82.176,0,0,1,0,100,0), +(@PATH,26,-8617.505,1563.513,-79.12038,0,0,1,0,100,0), +(@PATH,27,-8621.844,1547.022,-76.55392,0,0,1,0,100,0), +(@PATH,28,-8617.5,1516.144,-70.19933,0,0,1,0,100,0), +(@PATH,29,-8625.505,1479.613,-68.04492,0,0,1,0,100,0), +(@PATH,30,-8614.832,1443.637,-66.69106,0,0,1,0,100,0), +(@PATH,31,-8600.255,1422.463,-65.39139,0,0,1,0,100,0), +(@PATH,32,-8611.4,1385.665,-69.80731,0,0,1,0,100,0), +(@PATH,33,-8623.595,1364.614,-69.91782,0,0,1,0,100,0), +(@PATH,34,-8604.512,1328.141,-69.94511,0,0,1,0,100,0), +(@PATH,35,-8589.592,1311.021,-69.10871,0,0,1,0,100,0), +(@PATH,36,-8604.512,1328.141,-69.94511,0,0,1,0,100,0), +(@PATH,37,-8623.595,1364.614,-69.91782,0,0,1,0,100,0), +(@PATH,38,-8611.4,1385.665,-69.80731,0,0,1,0,100,0), +(@PATH,39,-8600.255,1422.463,-65.39139,0,0,1,0,100,0), +(@PATH,40,-8614.832,1443.637,-66.69106,0,0,1,0,100,0), +(@PATH,41,-8625.505,1479.613,-68.04492,0,0,1,0,100,0), +(@PATH,42,-8617.5,1516.144,-70.19933,0,0,1,0,100,0), +(@PATH,43,-8621.844,1547.022,-76.55392,0,0,1,0,100,0), +(@PATH,44,-8617.505,1563.513,-79.12038,0,0,1,0,100,0), +(@PATH,45,-8605.679,1582.754,-82.176,0,0,1,0,100,0), +(@PATH,46,-8602.972,1615.217,-88.6513,0,0,1,0,100,0), +(@PATH,47,-8596.669,1642.029,-89.56214,0,0,1,0,100,0), +(@PATH,48,-8598.313,1670.841,-90.63684,0,0,1,0,100,0), +(@PATH,49,-8595.639,1703.542,-91.69364,0,0,1,0,100,0), +(@PATH,50,-8580.759,1732.139,-91.39182,0,0,1,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,87962,6,90,2,10,35), +(@NPC,87963,6,270,2,10,35), +(@NPC,87994,6,360,2,0,0); + +-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT' +SET @NPC := 87991; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8635.931,`position_y`=1406.936,`position_z`=-69.83319 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8635.931,`position_y`=1406.936,`position_z`=-69.83319 WHERE `guid`=87964; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8635.931,`position_y`=1406.936,`position_z`=-69.83319 WHERE `guid`=87965; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8635.931,`position_y`=1406.936,`position_z`=-69.83319 WHERE `guid`=87966; -- Vekniss Wasp +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87964,87965,87966); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(87964,@PATH,0,0,1,0, ''),(87965,@PATH,0,0,1,0, ''),(87966,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8635.931,1406.936,-69.83319,0,0,1,0,100,0), +(@PATH,2,-8663.641,1389.05,-69.89677,0,0,1,0,100,0), +(@PATH,3,-8685.819,1364.188,-69.32112,0,0,1,0,100,0), +(@PATH,4,-8654.888,1363.939,-69.89539,0,0,1,0,100,0), +(@PATH,5,-8628.978,1372.13,-69.89567,0,0,1,0,100,0), +(@PATH,6,-8610.717,1381.386,-69.89604,0,0,1,0,100,0), +(@PATH,7,-8594.859,1388.721,-68.43361,0,0,1,0,100,0), +(@PATH,8,-8570.96,1400.338,-62.98791,0,0,1,0,100,0), +(@PATH,9,-8592.089,1370.82,-68.49156,0,0,1,0,100,0), +(@PATH,10,-8597.555,1344.224,-69.9974,0,0,1,0,100,0), +(@PATH,11,-8601.242,1313.158,-69.77949,0,0,1,0,100,0), +(@PATH,12,-8600.213,1300.66,-68.76534,0,0,1,0,100,0), +(@PATH,13,-8601.242,1313.158,-69.77949,0,0,1,0,100,0), +(@PATH,14,-8597.555,1344.224,-69.9974,0,0,1,0,100,0), +(@PATH,15,-8592.089,1370.82,-68.49156,0,0,1,0,100,0), +(@PATH,16,-8570.96,1400.338,-62.98791,0,0,1,0,100,0), +(@PATH,17,-8594.859,1388.721,-68.43361,0,0,1,0,100,0), +(@PATH,18,-8610.717,1381.386,-69.89604,0,0,1,0,100,0), +(@PATH,19,-8628.978,1372.13,-69.89567,0,0,1,0,100,0), +(@PATH,20,-8654.888,1363.939,-69.89539,0,0,1,0,100,0), +(@PATH,21,-8685.696,1364.187,-69.33382,0,0,1,0,100,0), +(@PATH,22,-8663.641,1389.05,-69.89677,0,0,1,0,100,0), +(@PATH,23,-8635.931,1406.936,-69.83319,0,0,1,0,100,0), +(@PATH,24,-8618.646,1426.418,-67.81181,0,0,1,0,100,0), +(@PATH,25,-8609.056,1445.661,-65.29099,0,0,1,0,100,0), +(@PATH,26,-8629.429,1440.835,-68.46561,0,0,1,0,100,0), +(@PATH,27,-8650.575,1437.557,-69.80312,0,0,1,0,100,0), +(@PATH,28,-8680.427,1427.707,-69.89879,0,0,1,0,100,0), +(@PATH,29,-8711.025,1419.595,-69.8176,0,0,1,0,100,0), +(@PATH,30,-8712.949,1440.549,-69.93085,0,0,1,0,100,0), +(@PATH,31,-8684.471,1454.425,-69.90324,0,0,1,0,100,0), +(@PATH,32,-8667.691,1471.393,-69.88974,0,0,1,0,100,0), +(@PATH,33,-8638.46,1491.58,-69.76362,0,0,1,0,100,0), +(@PATH,34,-8621.95,1510.354,-69.86166,0,0,1,0,100,0), +(@PATH,35,-8649.152,1507.348,-68.94562,0,0,1,0,100,0), +(@PATH,36,-8685.408,1502.433,-69.90717,0,0,1,0,100,0), +(@PATH,37,-8724.848,1499.006,-68.85789,0,0,1,0,100,0), +(@PATH,38,-8685.408,1502.433,-69.90717,0,0,1,0,100,0), +(@PATH,39,-8649.152,1507.348,-68.94562,0,0,1,0,100,0), +(@PATH,40,-8621.95,1510.354,-69.86166,0,0,1,0,100,0), +(@PATH,41,-8638.389,1491.629,-69.73217,0,0,1,0,100,0), +(@PATH,42,-8667.691,1471.393,-69.88974,0,0,1,0,100,0), +(@PATH,43,-8684.471,1454.425,-69.90324,0,0,1,0,100,0), +(@PATH,44,-8712.949,1440.549,-69.93085,0,0,1,0,100,0), +(@PATH,45,-8711.025,1419.595,-69.8176,0,0,1,0,100,0), +(@PATH,46,-8680.427,1427.707,-69.89879,0,0,1,0,100,0), +(@PATH,47,-8650.575,1437.557,-69.80312,0,0,1,0,100,0), +(@PATH,48,-8629.429,1440.835,-68.46561,0,0,1,0,100,0), +(@PATH,49,-8609.056,1445.661,-65.29099,0,0,1,0,100,0), +(@PATH,50,-8618.646,1426.418,-67.81181,0,0,1,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,87964,6,90,2,12,37), +(@NPC,87965,6,270,2,12,37), +(@NPC,87966,6,360,2,0,0); + +-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT' +SET @NPC := 87992; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8623.98,`position_y`=1334.81,`position_z`=-69.86489 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8623.98,`position_y`=1334.81,`position_z`=-69.86489 WHERE `guid`=87967; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8623.98,`position_y`=1334.81,`position_z`=-69.86489 WHERE `guid`=87968; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8623.98,`position_y`=1334.81,`position_z`=-69.86489 WHERE `guid`=87969; -- Vekniss Wasp +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87967,87968,87969); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(87967,@PATH,0,0,1,0, ''),(87968,@PATH,0,0,1,0, ''),(87969,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8623.98,1334.81,-69.86489,0,0,1,0,100,0), +(@PATH,2,-8634.258,1313.449,-68.89619,0,0,1,0,100,0), +(@PATH,3,-8623.98,1334.81,-69.86489,0,0,1,0,100,0), +(@PATH,4,-8609.494,1363.034,-69.90972,0,0,1,0,100,0), +(@PATH,5,-8586.571,1399.059,-66.1879,0,0,1,0,100,0), +(@PATH,6,-8578.356,1419.405,-61.01471,0,0,1,0,100,0), +(@PATH,7,-8597.195,1413.111,-66.22318,0,0,1,0,100,0), +(@PATH,8,-8624.466,1398.803,-69.8503,0,0,1,0,100,0), +(@PATH,9,-8649.411,1383.114,-69.89638,0,0,1,0,100,0), +(@PATH,10,-8670.308,1369.943,-69.89581,0,0,1,0,100,0), +(@PATH,11,-8689.218,1363.772,-68.88567,0,0,1,0,100,0), +(@PATH,12,-8680.373,1391.337,-69.88323,0,0,1,0,100,0), +(@PATH,13,-8667.099,1414.957,-69.89799,0,0,1,0,100,0), +(@PATH,14,-8650.532,1430.125,-69.78033,0,0,1,0,100,0), +(@PATH,15,-8628.963,1440.418,-68.43501,0,0,1,0,100,0), +(@PATH,16,-8603.716,1459.491,-63.19542,0,0,1,0,100,0), +(@PATH,17,-8634.405,1457.036,-68.30659,0,0,1,0,100,0), +(@PATH,18,-8659.28,1457.645,-69.87594,0,0,1,0,100,0), +(@PATH,19,-8685.762,1457.884,-69.90578,0,0,1,0,100,0), +(@PATH,20,-8710.759,1451.817,-70.05974,0,0,1,0,100,0), +(@PATH,21,-8733.675,1458.389,-69.94682,0,0,1,0,100,0), +(@PATH,22,-8711.259,1475.931,-69.84384,0,0,1,0,100,0), +(@PATH,23,-8684.056,1485.012,-69.90536,0,0,1,0,100,0), +(@PATH,24,-8658.634,1491.176,-70.00501,0,0,1,0,100,0), +(@PATH,25,-8643.371,1495.58,-69.92625,0,0,1,0,100,0), +(@PATH,26,-8628.882,1499.146,-68.3502,0,0,1,0,100,0), +(@PATH,27,-8652.819,1508.739,-68.82653,0,0,1,0,100,0), +(@PATH,28,-8680.034,1515.398,-69.43343,0,0,1,0,100,0), +(@PATH,29,-8713.806,1523.833,-70.50439,0,0,1,0,100,0), +(@PATH,30,-8680.034,1515.398,-69.43343,0,0,1,0,100,0), +(@PATH,31,-8652.98,1508.779,-68.82138,0,0,1,0,100,0), +(@PATH,32,-8628.882,1499.146,-68.3502,0,0,1,0,100,0), +(@PATH,33,-8643.371,1495.58,-69.92625,0,0,1,0,100,0), +(@PATH,34,-8658.634,1491.176,-70.00501,0,0,1,0,100,0), +(@PATH,35,-8684.056,1485.012,-69.90536,0,0,1,0,100,0), +(@PATH,36,-8711.231,1475.952,-69.84595,0,0,1,0,100,0), +(@PATH,37,-8733.675,1458.389,-69.94682,0,0,1,0,100,0), +(@PATH,38,-8710.759,1451.817,-70.05974,0,0,1,0,100,0), +(@PATH,39,-8685.762,1457.884,-69.90578,0,0,1,0,100,0), +(@PATH,40,-8659.28,1457.645,-69.87594,0,0,1,0,100,0), +(@PATH,41,-8634.405,1457.036,-68.30659,0,0,1,0,100,0), +(@PATH,42,-8603.716,1459.491,-63.19542,0,0,1,0,100,0), +(@PATH,43,-8628.963,1440.418,-68.43501,0,0,1,0,100,0), +(@PATH,44,-8650.532,1430.125,-69.78033,0,0,1,0,100,0), +(@PATH,45,-8667.099,1414.957,-69.89799,0,0,1,0,100,0), +(@PATH,46,-8680.373,1391.337,-69.88323,0,0,1,0,100,0), +(@PATH,47,-8689.218,1363.772,-68.88567,0,0,1,0,100,0), +(@PATH,48,-8670.308,1369.943,-69.89581,0,0,1,0,100,0), +(@PATH,49,-8649.411,1383.114,-69.89638,0,0,1,0,100,0), +(@PATH,50,-8624.466,1398.803,-69.8503,0,0,1,0,100,0), +(@PATH,51,-8597.195,1413.111,-66.22318,0,0,1,0,100,0), +(@PATH,52,-8578.356,1419.405,-61.01471,0,0,1,0,100,0), +(@PATH,53,-8586.571,1399.059,-66.1879,0,0,1,0,100,0), +(@PATH,54,-8609.494,1363.034,-69.90972,0,0,1,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,87967,6,90,2,2,29), +(@NPC,87968,6,270,2,2,29), +(@NPC,87969,6,360,2,0,0); + +-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT' +SET @NPC := 87993; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8627.878,`position_y`=1556.896,`position_z`=-77.69943 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8627.878,`position_y`=1556.896,`position_z`=-77.69943 WHERE `guid`=87970; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8627.878,`position_y`=1556.896,`position_z`=-77.69943 WHERE `guid`=87971; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8627.878,`position_y`=1556.896,`position_z`=-77.69943 WHERE `guid`=87995; -- Qiraji Lasher +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87970,87971,87995); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(87970,@PATH,0,0,1,0, ''),(87971,@PATH,0,0,1,0, ''),(87995,@PATH,0,0,1,0, ''); +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8627.878,1556.896,-77.69943,0,0,1,0,100,0), +(@PATH,2,-8605.357,1575.12,-80.19345,0,0,1,0,100,0), +(@PATH,3,-8612.334,1613.268,-88.55583,0,0,1,0,100,0), +(@PATH,4,-8586.318,1634.416,-89.21418,0,0,1,0,100,0), +(@PATH,5,-8576.596,1669.095,-90.36967,0,0,1,0,100,0), +(@PATH,6,-8584.211,1701.455,-91.66071,0,0,1,0,100,0), +(@PATH,7,-8570.804,1737.575,-90.75662,0,0,1,0,100,0), +(@PATH,8,-8581.879,1760.92,-91.87544,0,0,1,0,100,0), +(@PATH,9,-8589.551,1734.61,-90.93699,0,0,1,0,100,0), +(@PATH,10,-8588.171,1710.714,-91.73016,0,0,1,0,100,0), +(@PATH,11,-8596.261,1697.514,-91.66012,0,0,1,0,100,0), +(@PATH,12,-8605.489,1655.251,-89.98928,0,0,1,0,100,0), +(@PATH,13,-8632.322,1660.238,-89.734,0,0,1,0,100,0), +(@PATH,14,-8677.901,1675.274,-88.18523,0,0,1,0,100,0), +(@PATH,15,-8718.77,1662.168,-84.18893,0,0,1,0,100,0), +(@PATH,16,-8690.873,1675.741,-85.92585,0,0,1,0,100,0), +(@PATH,17,-8653.208,1690.787,-90.23106,0,0,1,0,100,0), +(@PATH,18,-8620.695,1704.375,-90.88026,0,0,1,0,100,0), +(@PATH,19,-8593.161,1708.36,-91.68605,0,0,1,0,100,0), +(@PATH,20,-8571.983,1710.358,-91.63534,0,0,1,0,100,0), +(@PATH,21,-8537.26,1707.522,-90.49876,0,0,1,0,100,0), +(@PATH,22,-8571.903,1710.365,-91.61901,0,0,1,0,100,0), +(@PATH,23,-8593.161,1708.36,-91.68605,0,0,1,0,100,0), +(@PATH,24,-8620.695,1704.375,-90.88026,0,0,1,0,100,0), +(@PATH,25,-8653.208,1690.787,-90.23106,0,0,1,0,100,0), +(@PATH,26,-8690.873,1675.741,-85.92585,0,0,1,0,100,0), +(@PATH,27,-8718.77,1662.168,-84.18893,0,0,1,0,100,0), +(@PATH,28,-8677.901,1675.274,-88.18523,0,0,1,0,100,0), +(@PATH,29,-8632.322,1660.238,-89.734,0,0,1,0,100,0), +(@PATH,30,-8605.489,1655.251,-89.98928,0,0,1,0,100,0), +(@PATH,31,-8596.261,1697.514,-91.66012,0,0,1,0,100,0), +(@PATH,32,-8588.171,1710.714,-91.73016,0,0,1,0,100,0), +(@PATH,33,-8589.551,1734.61,-90.93699,0,0,1,0,100,0), +(@PATH,34,-8581.879,1760.92,-91.87544,0,0,1,0,100,0), +(@PATH,35,-8570.804,1737.575,-90.75662,0,0,1,0,100,0), +(@PATH,36,-8584.211,1701.455,-91.66071,0,0,1,0,100,0), +(@PATH,37,-8576.596,1669.095,-90.36967,0,0,1,0,100,0), +(@PATH,38,-8586.318,1634.416,-89.21418,0,0,1,0,100,0), +(@PATH,39,-8612.334,1613.268,-88.55583,0,0,1,0,100,0), +(@PATH,40,-8605.357,1575.12,-80.19345,0,0,1,0,100,0), +(@PATH,41,-8627.878,1556.896,-77.69943,0,0,1,0,100,0), +(@PATH,42,-8615.41,1527.631,-72.21809,0,0,1,0,100,0), +(@PATH,43,-8621.278,1502.706,-68.84049,0,0,1,0,100,0), +(@PATH,44,-8613.856,1468.638,-65.51812,0,0,1,0,100,0), +(@PATH,45,-8611.396,1441.914,-66.07516,0,0,1,0,100,0), +(@PATH,46,-8648.351,1425.724,-69.76824,0,0,1,0,100,0), +(@PATH,47,-8690.109,1425.443,-69.89849,0,0,1,0,100,0), +(@PATH,48,-8688.043,1466.35,-69.90285,0,0,1,0,100,0), +(@PATH,49,-8686.704,1491.772,-69.90602,0,0,1,0,100,0), +(@PATH,50,-8703.396,1513.316,-68.86869,0,0,1,0,100,0), +(@PATH,51,-8699.363,1545.228,-73.52942,0,0,1,0,100,0), +(@PATH,52,-8696.403,1571.755,-83.60843,0,0,1,0,100,0), +(@PATH,53,-8705.782,1534.327,-70.82861,0,0,1,0,100,0), +(@PATH,54,-8684.076,1503.377,-69.9073,0,0,1,0,100,0), +(@PATH,55,-8677.442,1474.101,-69.88051,0,0,1,0,100,0), +(@PATH,56,-8685.396,1458.496,-69.90556,0,0,1,0,100,0), +(@PATH,57,-8672.833,1442.362,-69.90025,0,0,1,0,100,0), +(@PATH,58,-8671.919,1416.88,-69.89809,0,0,1,0,100,0), +(@PATH,59,-8658.405,1396.628,-69.89714,0,0,1,0,100,0), +(@PATH,60,-8652.979,1366.002,-69.89549,0,0,1,0,100,0), +(@PATH,61,-8631.563,1350.226,-69.90196,0,0,1,0,100,0), +(@PATH,62,-8621.747,1329.126,-69.84866,0,0,1,0,100,0), +(@PATH,63,-8600.984,1321.89,-69.9459,0,0,1,0,100,0), +(@PATH,64,-8581.273,1314.304,-68.56961,0,0,1,0,100,0), +(@PATH,65,-8600.984,1321.89,-69.9459,0,0,1,0,100,0), +(@PATH,66,-8621.747,1329.126,-69.84866,0,0,1,0,100,0), +(@PATH,67,-8631.563,1350.226,-69.90196,0,0,1,0,100,0), +(@PATH,68,-8652.979,1366.002,-69.89549,0,0,1,0,100,0), +(@PATH,69,-8658.405,1396.628,-69.89714,0,0,1,0,100,0), +(@PATH,70,-8671.919,1416.88,-69.89809,0,0,1,0,100,0), +(@PATH,71,-8672.833,1442.362,-69.90025,0,0,1,0,100,0), +(@PATH,72,-8685.396,1458.496,-69.90556,0,0,1,0,100,0), +(@PATH,73,-8677.442,1474.101,-69.88051,0,0,1,0,100,0), +(@PATH,74,-8684.076,1503.377,-69.9073,0,0,1,0,100,0), +(@PATH,75,-8705.782,1534.327,-70.82861,0,0,1,0,100,0), +(@PATH,76,-8696.403,1571.755,-83.60843,0,0,1,0,100,0), +(@PATH,77,-8699.363,1545.228,-73.52942,0,0,1,0,100,0), +(@PATH,78,-8703.396,1513.316,-68.86869,0,0,1,0,100,0), +(@PATH,79,-8686.704,1491.772,-69.90602,0,0,1,0,100,0), +(@PATH,80,-8688.043,1466.35,-69.90285,0,0,1,0,100,0), +(@PATH,81,-8690.109,1425.443,-69.89849,0,0,1,0,100,0), +(@PATH,82,-8648.351,1425.724,-69.76824,0,0,1,0,100,0), +(@PATH,83,-8611.396,1441.914,-66.07516,0,0,1,0,100,0), +(@PATH,84,-8613.856,1468.638,-65.51812,0,0,1,0,100,0), +(@PATH,85,-8621.252,1502.585,-68.85918,0,0,1,0,100,0), +(@PATH,86,-8615.41,1527.631,-72.21809,0,0,1,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,87970,6,90,2,21,64), +(@NPC,87971,6,270,2,21,64), +(@NPC,87995,6,360,2,0,0); + +-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT' +SET @NPC := 87997; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8632.927,`position_y`=1329.29,`position_z`=-69.79494 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8632.927,`position_y`=1329.29,`position_z`=-69.79494 WHERE `guid`=87972; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8632.927,`position_y`=1329.29,`position_z`=-69.79494 WHERE `guid`=87973; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8632.927,`position_y`=1329.29,`position_z`=-69.79494 WHERE `guid`=87996; -- Qiraji Lasher +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87972,87973,87996); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(87972,@PATH,0,0,1,0, ''),(87973,@PATH,0,0,1,0, ''),(87996,@PATH,0,0,1,0, ''); +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8632.927,1329.29,-69.79494,0,0,1,0,100,0), +(@PATH,2,-8652.701,1333.004,-68.40736,0,0,1,0,100,0), +(@PATH,3,-8680.63,1356.865,-69.12091,0,0,1,0,100,0), +(@PATH,4,-8665.341,1388.947,-69.89678,0,0,1,0,100,0), +(@PATH,5,-8671.486,1426.792,-69.89878,0,0,1,0,100,0), +(@PATH,6,-8697.307,1425.366,-69.90847,0,0,1,0,100,0), +(@PATH,7,-8717.54,1450.804,-70.15675,0,0,1,0,100,0), +(@PATH,8,-8685.707,1480.185,-69.88573,0,0,1,0,100,0), +(@PATH,9,-8687.312,1502.292,-69.90711,0,0,1,0,100,0), +(@PATH,10,-8710.659,1518.567,-69.73161,0,0,1,0,100,0), +(@PATH,11,-8706.653,1553.953,-76.87526,0,0,1,0,100,0), +(@PATH,12,-8693.664,1593.24,-87.52875,0,0,1,0,100,0), +(@PATH,13,-8682.797,1563.556,-79.95404,0,0,1,0,100,0), +(@PATH,14,-8670.129,1531.131,-69.25419,0,0,1,0,100,0), +(@PATH,15,-8650.239,1513.957,-68.97311,0,0,1,0,100,0), +(@PATH,16,-8628.124,1493.124,-68.32035,0,0,1,0,100,0), +(@PATH,17,-8614.616,1451.34,-66.25972,0,0,1,0,100,0), +(@PATH,18,-8606.941,1423.058,-66.755,0,0,1,0,100,0), +(@PATH,19,-8578.108,1397.931,-64.62989,0,0,1,0,100,0), +(@PATH,20,-8581,1380.874,-67.55366,0,0,1,0,100,0), +(@PATH,21,-8606.554,1354.503,-69.90284,0,0,1,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,87972,6,90,2,0,0), +(@NPC,87973,6,270,2,0,0), +(@NPC,87996,6,360,2,0,0); + +-- Pathing for Vekniss Stinger Entry: 15235 'TDB FORMAT' +SET @NPC := 87998; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8602.222,`position_y`=1420.14,`position_z`=-66.16376 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8602.222,`position_y`=1420.14,`position_z`=-66.16376 WHERE `guid`=87974; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8602.222,`position_y`=1420.14,`position_z`=-66.16376 WHERE `guid`=87975; -- Vekniss Wasp +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8602.222,`position_y`=1420.14,`position_z`=-66.16376 WHERE `guid`=87976; -- Vekniss Wasp +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,87974,87975,87976); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(87974,@PATH,0,0,1,0, ''),(87975,@PATH,0,0,1,0, ''),(87976,@PATH,0,0,1,0, ''); +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8602.222,1420.14,-66.16376,0,0,1,0,100,0), +(@PATH,2,-8600.822,1382.153,-68.87067,0,0,1,0,100,0), +(@PATH,3,-8579.124,1346.505,-68.48977,0,0,1,0,100,0), +(@PATH,4,-8572.202,1326.875,-67.66993,0,0,1,0,100,0), +(@PATH,5,-8585.142,1302.318,-68.76385,0,0,1,0,100,0), +(@PATH,6,-8619.394,1300.438,-68.81915,0,0,1,0,100,0), +(@PATH,7,-8646.751,1323.468,-68.54993,0,0,1,0,100,0), +(@PATH,8,-8662.735,1341.994,-68.51302,0,0,1,0,100,0), +(@PATH,9,-8690.161,1374.271,-69.59505,0,0,1,0,100,0), +(@PATH,10,-8711.819,1409.641,-69.78663,0,0,1,0,100,0), +(@PATH,11,-8720.594,1446.922,-70.16204,0,0,1,0,100,0), +(@PATH,12,-8720.908,1475.034,-69.86876,0,0,1,0,100,0), +(@PATH,13,-8716.834,1490.991,-69.79664,0,0,1,0,100,0), +(@PATH,14,-8692.722,1513.566,-69.40113,0,0,1,0,100,0), +(@PATH,15,-8657.146,1508.662,-69.40543,0,0,1,0,100,0), +(@PATH,16,-8636.427,1495.452,-69.00857,0,0,1,0,100,0), +(@PATH,17,-8608.235,1466.913,-64.1589,0,0,1,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,87974,6,90,2,0,0), +(@NPC,87975,6,270,2,0,0), +(@NPC,87976,6,360,2,0,0); + +-- Fankriss the Unyielding respawn linking +DELETE FROM `linked_respawn` WHERE `linkedGuid`=87911; +INSERT INTO `linked_respawn` (`guid`,`linkedGuid`,`linkType`) VALUES +(87901,87911,0),(87902,87911,0),(87903,87911,0),(87904,87911,0),(87905,87911,0),(87906,87911,0), +(87678,87911,0),(87679,87911,0),(87680,87911,0),(87681,87911,0),(87682,87911,0),(87683,87911,0), +(87685,87911,0),(87686,87911,0),(87687,87911,0),(87688,87911,0),(87689,87911,0),(87690,87911,0), +(87692,87911,0),(87694,87911,0),(87695,87911,0),(87696,87911,0),(87697,87911,0),(87698,87911,0), +(87699,87911,0),(87700,87911,0),(87702,87911,0),(87703,87911,0),(87704,87911,0),(87705,87911,0), +(87706,87911,0),(87707,87911,0),(87708,87911,0),(87710,87911,0),(87711,87911,0),(87712,87911,0), +(87713,87911,0),(87714,87911,0),(87715,87911,0),(87716,87911,0),(87717,87911,0),(87718,87911,0), +(87719,87911,0),(87720,87911,0),(87721,87911,0),(87725,87911,0),(87726,87911,0),(87727,87911,0), +(87728,87911,0),(87729,87911,0),(87730,87911,0),(87731,87911,0),(87732,87911,0),(87733,87911,0), +(87734,87911,0),(87735,87911,0),(87736,87911,0),(87737,87911,0),(87738,87911,0),(87739,87911,0), +(87740,87911,0),(87741,87911,0),(87742,87911,0),(87743,87911,0),(87745,87911,0),(87747,87911,0), +(87748,87911,0),(87749,87911,0),(87750,87911,0),(87751,87911,0),(87752,87911,0),(87753,87911,0), +(87754,87911,0),(87755,87911,0),(87756,87911,0),(87757,87911,0),(87758,87911,0),(87759,87911,0), +(87760,87911,0),(87761,87911,0),(87762,87911,0),(87763,87911,0),(87764,87911,0),(87765,87911,0), +(87767,87911,0),(87770,87911,0),(87772,87911,0),(87774,87911,0),(87776,87911,0),(87777,87911,0), +(87778,87911,0),(87779,87911,0),(87780,87911,0),(87781,87911,0),(87782,87911,0),(87784,87911,0), +(87786,87911,0),(87788,87911,0),(87789,87911,0),(87790,87911,0),(87791,87911,0),(87793,87911,0), +(87794,87911,0),(87795,87911,0),(87797,87911,0),(87799,87911,0),(87800,87911,0),(87801,87911,0), +(87802,87911,0),(87803,87911,0),(87805,87911,0),(87807,87911,0),(87808,87911,0),(87809,87911,0), +(87811,87911,0),(87812,87911,0),(87813,87911,0),(87814,87911,0),(87815,87911,0),(87816,87911,0), +(87817,87911,0),(87818,87911,0),(87819,87911,0),(87820,87911,0),(87821,87911,0),(87822,87911,0), +(87823,87911,0),(87824,87911,0),(87826,87911,0),(87828,87911,0),(87829,87911,0); + +-- Princess Huhuran respawn linking +DELETE FROM `linked_respawn` WHERE `linkedGuid`=88014; +INSERT INTO `linked_respawn` (`guid`,`linkedGuid`,`linkType`) VALUES +(87939,88014,0),(87940,88014,0),(87941,88014,0),(87942,88014,0),(87943,88014,0),(87944,88014,0), +(87990,88014,0),(87991,88014,0),(87992,88014,0),(87993,88014,0),(87997,88014,0),(87998,88014,0), +(87962,88014,0),(87963,88014,0),(87964,88014,0),(87965,88014,0),(87966,88014,0),(87967,88014,0), +(87968,88014,0),(87969,88014,0),(87970,88014,0),(87971,88014,0),(87972,88014,0),(87973,88014,0), +(87974,88014,0),(87975,88014,0),(87976,88014,0),(87994,88014,0),(87995,88014,0),(87996,88014,0); + +-- Remove underspawning of Qiraji Scarab +DELETE FROM `creature` WHERE `guid` BETWEEN 87572 AND 87594; + +-- Qiraji Scarab +SET @CGUID := 144235; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+96; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15316, 531, 1, 1, -8718.273, 1668.985, -83.24529, 6.276577, 7200, 0, 0), +(@CGUID+1, 15316, 531, 1, 1, -8752.732, 1622.762, -82.50239, 3.85716, 7200, 0, 0), +(@CGUID+2, 15316, 531, 1, 1, -8848.825, 1543.332, -95.77992, 0.3748086, 7200, 0, 0), +(@CGUID+3, 15316, 531, 1, 1, -8852.401, 1221.99, -104.3232, 5.082306, 7200, 0, 0), +(@CGUID+4, 15316, 531, 1, 1, -8856.361, 1231.608, -104.3222, 0.03505083, 7200, 0, 0), +(@CGUID+5, 15316, 531, 1, 1, -8857.818, 1211.251, -104.301, 1.676702, 7200, 0, 0), +(@CGUID+6, 15316, 531, 1, 1, -8861.068, 1221.99, -104.3127, 5.777609, 7200, 0, 0), +(@CGUID+7, 15316, 531, 1, 1, -8861.551, 1424.439, -91.73545, 4.751832, 7200, 0, 0), +(@CGUID+8, 15316, 531, 1, 1, -8861.7, 1215.009, -104.3096, 4.039688, 7200, 0, 0), +(@CGUID+9, 15316, 531, 1, 1, -8895.811, 1440.09, -90.5479, 6.037028, 7200, 0, 0), +(@CGUID+10, 15316, 531, 1, 1, -8903.062, 1233.613, -112.2933, 3.425546, 7200, 0, 0), +(@CGUID+11, 15316, 531, 1, 1, -8913.198, 1239.525, -112.2094, 5.026548, 7200, 0, 0), +(@CGUID+12, 15316, 531, 1, 1, -8914.45, 1228.33, -112.2933, 2.326542, 7200, 0, 0), +(@CGUID+13, 15316, 531, 1, 1, -8915.258, 1169.887, -112.3025, 3.203353, 7200, 0, 0), +(@CGUID+14, 15316, 531, 1, 1, -8915.822, 1271.88, -112.2893, 5.160469, 7200, 0, 0), +(@CGUID+15, 15316, 531, 1, 1, -8916.75, 1288.38, -112.2935, 0.1507932, 7200, 0, 0), +(@CGUID+16, 15316, 531, 1, 1, -8921.445, 1263.286, -112.2916, 1.408914, 7200, 0, 0), +(@CGUID+17, 15316, 531, 1, 1, -8921.779, 1299.67, -112.2189, 6.108652, 7200, 0, 0), +(@CGUID+18, 15316, 531, 1, 1, -8922.732, 1187.455, -112.2936, 5.639871, 7200, 0, 0), +(@CGUID+19, 15316, 531, 1, 1, -8923.949, 1172.429, -112.3033, 5.763388, 7200, 0, 0), +(@CGUID+20, 15316, 531, 1, 1, -8924.408, 1272.34, -112.2882, 5.481043, 7200, 0, 0), +(@CGUID+21, 15316, 531, 1, 1, -8926.774, 1237.892, -112.2923, 2.316605, 7200, 0, 0), +(@CGUID+22, 15316, 531, 1, 1, -8927.355, 1291.111, -112.2965, 2.028318, 7200, 0, 0), +(@CGUID+23, 15316, 531, 1, 1, -8928.101, 1227.168, -112.2921, 3.446646, 7200, 0, 0), +(@CGUID+24, 15316, 531, 1, 1, -8928.22, 1368.938, -104.2533, 0.8451178, 7200, 0, 0), +(@CGUID+25, 15316, 531, 1, 1, -8933.846, 1249.548, -112.2922, 2.21655, 7200, 0, 0), +(@CGUID+26, 15316, 531, 1, 1, -8935.909, 1189.324, -112.2886, 5.859407, 7200, 0, 0), +(@CGUID+27, 15316, 531, 1, 1, -8939.716, 1163.848, -112.2995, 0.5001168, 7200, 0, 0), +(@CGUID+28, 15316, 531, 1, 1, -8942.026, 1261.226, -112.2923, 5.235967, 7200, 0, 0), +(@CGUID+29, 15316, 531, 1, 1, -8943.135, 1192.366, -112.2916, 5.814977, 7200, 0, 0), +(@CGUID+30, 15316, 531, 1, 1, -8951.372, 1274.603, -112.2933, 3.105438, 7200, 0, 0), +(@CGUID+31, 15316, 531, 1, 1, -8960.903, 1280.689, -112.2933, 3.253839, 7200, 0, 0), +(@CGUID+32, 15316, 531, 1, 1, -8962.061, 1269.011, -112.5005, 4.200222, 7200, 0, 0), +(@CGUID+33, 15316, 531, 1, 1, -8964.825, 1240.759, -112.6207, 3.0616, 7200, 0, 0), +(@CGUID+34, 15316, 531, 1, 1, -8966.551, 1207.659, -112.2936, 4.477177, 7200, 0, 0), +(@CGUID+35, 15316, 531, 1, 1, -8968.729, 1325.82, -104.2429, 3.186054, 7200, 0, 0), +(@CGUID+36, 15316, 531, 1, 1, -8972.038, 1214.245, -112.2936, 1.164536, 7200, 0, 0), +(@CGUID+37, 15316, 531, 1, 1, -8972.853, 1276.217, -112.2933, 3.891855, 7200, 0, 0), +(@CGUID+38, 15316, 531, 1, 1, -8974.806, 1226.225, -112.2935, 1.722429, 7200, 0, 0), +(@CGUID+39, 15316, 531, 1, 1, -8977.898, 1320.487, -104.2417, 3.175818, 7200, 0, 0), +(@CGUID+40, 15316, 531, 1, 1, -8981.08, 1223.435, -112.2936, 0.2615982, 7200, 0, 0), +(@CGUID+41, 15316, 531, 1, 1, -8981.135, 1332.209, -104.2538, 5.953023, 7200, 0, 0), +(@CGUID+42, 15316, 531, 1, 1, -8982.36, 1235.153, -112.2919, 1.343902, 7200, 0, 0), +(@CGUID+43, 15316, 531, 1, 1, -8984.571, 1250.385, -112.2913, 5.36409, 7200, 0, 0), +(@CGUID+44, 15316, 531, 1, 1, -8991.225, 1329.982, -104.2318, 3.062955, 7200, 0, 0), +(@CGUID+45, 15316, 531, 1, 1, -8992.072, 1319.728, -104.2388, 3.363478, 7200, 0, 0), +(@CGUID+46, 15316, 531, 1, 1, -9002.667, 1154.327, -104.3145, 6.014025, 7200, 0, 0), +(@CGUID+47, 15316, 531, 1, 1, -9006.724, 1241.467, -112.2903, 1.948067, 7200, 0, 0), +(@CGUID+48, 15316, 531, 1, 1, -9011.103, 1167.529, -104.3195, 1.777823, 7200, 0, 0), +(@CGUID+49, 15316, 531, 1, 1, -9014.963, 1233.01, -112.2952, 3.99794, 7200, 0, 0), +(@CGUID+50, 15316, 531, 1, 1, -9016.687, 1169.943, -104.3132, 3.21999, 7200, 0, 0), +(@CGUID+51, 15316, 531, 1, 1, -9019.488, 1151.87, -104.3178, 4.565871, 7200, 0, 0), +(@CGUID+52, 15316, 531, 1, 1, -9020.327, 1250.439, -112.3019, 3.988241, 7200, 0, 0), +(@CGUID+53, 15316, 531, 1, 1, -9022.727, 1161.319, -104.2895, 2.878046, 7200, 0, 0), +(@CGUID+54, 15316, 531, 1, 1, -9026.855, 1240.548, -112.3019, 4.020616, 7200, 0, 0), +(@CGUID+55, 15316, 531, 1, 1, -9028.263, 1233.39, -112.303, 1.271099, 7200, 0, 0), +(@CGUID+56, 15316, 531, 1, 1, -9032.163, 1322.912, -104.1445, 2.076942, 7200, 0, 0), +(@CGUID+57, 15316, 531, 1, 1, -9041.214, 1418.469, -105.3165, 6.056293, 7200, 0, 0), +(@CGUID+58, 15316, 531, 1, 1, -9043.839, 1352.871, -103.4252, 0.4712389, 7200, 0, 0), +(@CGUID+59, 15316, 531, 1, 1, -9044.052, 1416.098, -105.2357, 5.078908, 7200, 0, 0), +(@CGUID+60, 15316, 531, 1, 1, -9052.255, 1412.902, -105.2205, 2.076942, 7200, 0, 0), +(@CGUID+61, 15316, 531, 1, 1, -9073.752, 1386.457, -107.3353, 0.7195361, 7200, 0, 0), +(@CGUID+62, 15316, 531, 1, 1, -9075.857, 1399.424, -106.766, 0.1396263, 7200, 0, 0), +(@CGUID+63, 15316, 531, 1, 1, -9077.962, 1380.42, -106.7133, 2.485329, 7200, 0, 0), +(@CGUID+64, 15316, 531, 1, 1, -9084.801, 1348.045, -104.9859, 2.426008, 7200, 0, 0), +(@CGUID+65, 15316, 531, 1, 1, -9085.026, 1341.638, -105.1593, 1.099557, 7200, 0, 0), +(@CGUID+66, 15316, 531, 1, 1, -9085.651, 1336.603, -104.9917, 2.395166, 7200, 0, 0), +(@CGUID+67, 15316, 531, 1, 1, -9088.616, 1402.316, -107.2495, 1.026358, 7200, 0, 0), +(@CGUID+68, 15316, 531, 1, 1, -9091.26, 1510.94, -99.81429, 3.543018, 7200, 0, 0), +(@CGUID+69, 15316, 531, 1, 1, -9092.019, 1351.04, -105.4157, 4.974188, 7200, 0, 0), +(@CGUID+70, 15316, 531, 1, 1, -9094.279, 1499.209, -102.2279, 0.6806784, 7200, 0, 0), +(@CGUID+71, 15316, 531, 1, 1, -9095.951, 1507.988, -100.7126, 4.886922, 7200, 0, 0), +(@CGUID+72, 15316, 531, 1, 1, -9098.203, 1357.665, -105.5745, 0.7330383, 7200, 0, 0), +(@CGUID+73, 15316, 531, 1, 1, -9099.199, 1350.561, -105.9741, 6.248279, 7200, 0, 0), +(@CGUID+74, 15316, 531, 1, 1, -9101.524, 1505.308, -100.3417, 1.174368, 7200, 0, 0), +(@CGUID+75, 15316, 531, 1, 1, -9102.322, 1446.374, -105.6202, 1.196755, 7200, 0, 0), +(@CGUID+76, 15316, 531, 1, 1, -9147.428, 1516.564, -94.89061, 1.853269, 7200, 0, 0), +(@CGUID+77, 15316, 531, 1, 1, -9176.505, 1554.577, -83.83012, 5.850253, 7200, 0, 0), +(@CGUID+78, 15316, 531, 1, 1, -9178.145, 1483.475, -96.65578, 3.036873, 7200, 0, 0), +(@CGUID+79, 15316, 531, 1, 1, -9178.386, 1652.744, -64.78233, 4.974188, 7200, 0, 0), +(@CGUID+80, 15316, 531, 1, 1, -9178.485, 1667.534, -60.37609, 1.297821, 7200, 0, 0), +(@CGUID+81, 15316, 531, 1, 1, -9178.765, 1479.855, -97.55507, 1.937315, 7200, 0, 0), +(@CGUID+82, 15316, 531, 1, 1, -9183.195, 1475.588, -98.77051, 2.478368, 7200, 0, 0), +(@CGUID+83, 15316, 531, 1, 1, -9183.288, 1489.488, -95.63787, 4.425344, 7200, 0, 0), +(@CGUID+84, 15316, 531, 1, 1, -9188.178, 1471.158, -99.32278, 5.113815, 7200, 0, 0), +(@CGUID+85, 15316, 531, 1, 1, -9188.786, 1657.487, -64.15721, 4.23883, 7200, 0, 0), +(@CGUID+86, 15316, 531, 1, 1, -9189.339, 1531.628, -85.89825, 6.195919, 7200, 0, 0), +(@CGUID+87, 15316, 531, 1, 1, -9191.104, 1521.98, -87.71062, 5.026548, 7200, 0, 0), +(@CGUID+88, 15316, 531, 1, 1, -9191.532, 1537.507, -84.53267, 5.864306, 7200, 0, 0), +(@CGUID+89, 15316, 531, 1, 1, -9192.622, 1647.297, -65.36017, 3.023633, 7200, 0, 0), +(@CGUID+90, 15316, 531, 1, 1, -9197.758, 1667.534, -61.18479, 1.386884, 7200, 0, 0), +(@CGUID+91, 15316, 531, 1, 1, -9211.669, 1526.513, -86.4464, 3.19899, 7200, 0, 0), +(@CGUID+92, 15316, 531, 1, 1, -9212.579, 1576.334, -75.70084, 1.349625, 7200, 0, 0), +(@CGUID+93, 15316, 531, 1, 1, -9218.398, 1574.924, -76.35339, 0.3938427, 7200, 0, 0), +(@CGUID+94, 15316, 531, 1, 1, -9220.125, 1595.057, -72.45622, 0.8910265, 7200, 0, 0), +(@CGUID+95, 15316, 531, 1, 1, -9225.136, 1585.159, -74.82648, 4.34335, 7200, 0, 0), +(@CGUID+96, 15316, 531, 1, 1, -9235.81, 1588.07, -73.63668, 3.152771, 7200, 0, 0); + +-- Qiraji Scorpion +SET @CGUID := 144332; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+84; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 15317, 531, 1, 1, -8767.857, 1577.66, -89.34533, 6.280417, 7200, 0, 0), +(@CGUID+1, 15317, 531, 1, 1, -8822.126, 1500.405, -93.85766, 3.89038, 7200, 0, 0), +(@CGUID+2, 15317, 531, 1, 1, -8863.717, 1188.008, -104.3105, 3.325896, 7200, 0, 0), +(@CGUID+3, 15317, 531, 1, 1, -8864.533, 1179.054, -104.2634, 3.61623, 7200, 0, 0), +(@CGUID+4, 15317, 531, 1, 1, -8868.387, 1219.072, -104.3231, 1.470888, 7200, 0, 0), +(@CGUID+5, 15317, 531, 1, 1, -8874.394, 1204.472, -104.3245, 2.822855, 7200, 0, 0), +(@CGUID+6, 15317, 531, 1, 1, -8875.634, 1184.706, -104.3149, 1.349733, 7200, 0, 0), +(@CGUID+7, 15317, 531, 1, 1, -8889.706, 1263.574, -112.2916, 1.86493, 7200, 0, 0), +(@CGUID+8, 15317, 531, 1, 1, -8896.925, 1271.528, -112.2916, 1.54404, 7200, 0, 0), +(@CGUID+9, 15317, 531, 1, 1, -8902.623, 1258.208, -112.2916, 1.783228, 7200, 0, 0), +(@CGUID+10, 15317, 531, 1, 1, -8907.309, 1264.09, -112.2916, 1.616129, 7200, 0, 0), +(@CGUID+11, 15317, 531, 1, 1, -8907.318, 1215.414, -112.2933, 5.120383, 7200, 0, 0), +(@CGUID+12, 15317, 531, 1, 1, -8909.942, 1288.731, -112.2903, 2.332356, 7200, 0, 0), +(@CGUID+13, 15317, 531, 1, 1, -8910.222, 1210.898, -112.2933, 0.9807646, 7200, 0, 0), +(@CGUID+14, 15317, 531, 1, 1, -8916.438, 1218.511, -112.2933, 1.023647, 7200, 0, 0), +(@CGUID+15, 15317, 531, 1, 1, -8927.608, 1219.249, -112.2919, 3.29309, 7200, 0, 0), +(@CGUID+16, 15317, 531, 1, 1, -8931.669, 1478.098, -92.41454, 4.330824, 7200, 0, 0), +(@CGUID+17, 15317, 531, 1, 1, -8932.62, 1206.902, -112.2916, 1.067478, 7200, 0, 0), +(@CGUID+18, 15317, 531, 1, 1, -8937.341, 1231.81, -112.293, 1.432786, 7200, 0, 0), +(@CGUID+19, 15317, 531, 1, 1, -8941.132, 1183.686, -112.289, 6.190642, 7200, 0, 0), +(@CGUID+20, 15317, 531, 1, 1, -8945.947, 1250.477, -112.2929, 2.542778, 7200, 0, 0), +(@CGUID+21, 15317, 531, 1, 1, -8948.824, 1331.953, -104.2506, 5.926363, 7200, 0, 0), +(@CGUID+22, 15317, 531, 1, 1, -8949.483, 1285.587, -112.21, 6.056293, 7200, 0, 0), +(@CGUID+23, 15317, 531, 1, 1, -8951.337, 1184.432, -112.2916, 5.571285, 7200, 0, 0), +(@CGUID+24, 15317, 531, 1, 1, -8951.586, 1472.797, -92.3147, 1.302438, 7200, 0, 0), +(@CGUID+25, 15317, 531, 1, 1, -8951.589, 1211.099, -112.2927, 1.28833, 7200, 0, 0), +(@CGUID+26, 15317, 531, 1, 1, -8952.454, 1166.542, -112.3003, 0.01904146, 7200, 0, 0), +(@CGUID+27, 15317, 531, 1, 1, -8953.988, 1344.636, -104.2234, 0.5719893, 7200, 0, 0), +(@CGUID+28, 15317, 531, 1, 1, -8955.576, 1230.115, -112.6207, 1.36077, 7200, 0, 0), +(@CGUID+29, 15317, 531, 1, 1, -8958.938, 1321.819, -104.2457, 5.784297, 7200, 0, 0), +(@CGUID+30, 15317, 531, 1, 1, -8960.115, 1254.93, -112.2935, 5.113963, 7200, 0, 0), +(@CGUID+31, 15317, 531, 1, 1, -8960.776, 1262.318, -112.2936, 3.113808, 7200, 0, 0), +(@CGUID+32, 15317, 531, 1, 1, -8961.691, 1200.368, -112.2923, 1.925909, 7200, 0, 0), +(@CGUID+33, 15317, 531, 1, 1, -8965.124, 1164.983, -112.2994, 0.2619652, 7200, 0, 0), +(@CGUID+34, 15317, 531, 1, 1, -8965.508, 1178.931, -112.2083, 4.729842, 7200, 0, 0), +(@CGUID+35, 15317, 531, 1, 1, -8966.613, 1337.695, -104.2513, 2.703376, 7200, 0, 0), +(@CGUID+36, 15317, 531, 1, 1, -8973.95, 1265.45, -112.2938, 1.584118, 7200, 0, 0), +(@CGUID+37, 15317, 531, 1, 1, -8977.52, 1266.341, -112.2916, 5.713685, 7200, 0, 0), +(@CGUID+38, 15317, 531, 1, 1, -8978.57, 1198.204, -112.2933, 2.00547, 7200, 0, 0), +(@CGUID+39, 15317, 531, 1, 1, -8984.783, 1209.762, -112.2933, 3.727343, 7200, 0, 0), +(@CGUID+40, 15317, 531, 1, 1, -8989.297, 1202.465, -112.2933, 5.423434, 7200, 0, 0), +(@CGUID+41, 15317, 531, 1, 1, -8992.732, 1212.768, -112.2933, 6.098367, 7200, 0, 0), +(@CGUID+42, 15317, 531, 1, 1, -8996.319, 1224.411, -112.2871, 3.1986, 7200, 0, 0), +(@CGUID+43, 15317, 531, 1, 1, -8996.775, 1272.687, -112.2916, 1.227572, 7200, 0, 0), +(@CGUID+44, 15317, 531, 1, 1, -9002.565, 1324.533, -104.2338, 2.005882, 7200, 0, 0), +(@CGUID+45, 15317, 531, 1, 1, -9005.325, 1249.047, -112.2889, 5.861159, 7200, 0, 0), +(@CGUID+46, 15317, 531, 1, 1, -9009.533, 1273.289, -112.3006, 0.9313107, 7200, 0, 0), +(@CGUID+47, 15317, 531, 1, 1, -9014.954, 1261.934, -112.3012, 1.054686, 7200, 0, 0), +(@CGUID+48, 15317, 531, 1, 1, -9020.213, 1262.013, -112.2994, 4.35212, 7200, 0, 0), +(@CGUID+49, 15317, 531, 1, 1, -9026.252, 1184.02, -104.3176, 2.335238, 7200, 0, 0), +(@CGUID+50, 15317, 531, 1, 1, -9029.824, 1168.414, -104.2877, 5.261246, 7200, 0, 0), +(@CGUID+51, 15317, 531, 1, 1, -9034.853, 1195.079, -104.3191, 5.497178, 7200, 0, 0), +(@CGUID+52, 15317, 531, 1, 1, -9044.638, 1179.075, -104.2623, 4.273608, 7200, 0, 0), +(@CGUID+53, 15317, 531, 1, 1, -9045.368, 1426.71, -106.2691, 4.956735, 7200, 0, 0), +(@CGUID+54, 15317, 531, 1, 1, -9045.752, 1189.078, -104.2579, 1.568065, 7200, 0, 0), +(@CGUID+55, 15317, 531, 1, 1, -9048.547, 1421.894, -106.3411, 0.05235988, 7200, 0, 0), +(@CGUID+56, 15317, 531, 1, 1, -9054.128, 1419.324, -106.088, 3.316126, 7200, 0, 0), +(@CGUID+57, 15317, 531, 1, 1, -9063.941, 1432.531, -107.3954, 6.056363, 7200, 0, 0), +(@CGUID+58, 15317, 531, 1, 1, -9064.931, 1387.491, -106.5863, 4.276057, 7200, 0, 0), +(@CGUID+59, 15317, 531, 1, 1, -9075.902, 1395.459, -106.8902, 0.5061455, 7200, 0, 0), +(@CGUID+60, 15317, 531, 1, 1, -9081.571, 1399.585, -107.172, 5.270895, 7200, 0, 0), +(@CGUID+61, 15317, 531, 1, 1, -9082.262, 1393.761, -107.1919, 0.1741033, 7200, 0, 0), +(@CGUID+62, 15317, 531, 1, 1, -9086.603, 1497.652, -102.6972, 3.385939, 7200, 0, 0), +(@CGUID+63, 15317, 531, 1, 1, -9087.264, 1506.401, -100.6753, 2.617994, 7200, 0, 0), +(@CGUID+64, 15317, 531, 1, 1, -9090.989, 1356.731, -105.0189, 3.124139, 7200, 0, 0), +(@CGUID+65, 15317, 531, 1, 1, -9091.271, 1492.376, -103.3976, 5.742133, 7200, 0, 0), +(@CGUID+66, 15317, 531, 1, 1, -9091.804, 1342.174, -105.5085, 5.340707, 7200, 0, 0), +(@CGUID+67, 15317, 531, 1, 1, -9098.125, 1447.736, -104.3787, 2.112744, 7200, 0, 0), +(@CGUID+68, 15317, 531, 1, 1, -9098.346, 1364.72, -105.1836, 2.565634, 7200, 0, 0), +(@CGUID+69, 15317, 531, 1, 1, -9099.76, 1498.805, -101.7028, 1.471863, 7200, 0, 0), +(@CGUID+70, 15317, 531, 1, 1, -9103.596, 1357.07, -106.0872, 4.729842, 7200, 0, 0), +(@CGUID+71, 15317, 531, 1, 1, -9105.113, 1363.609, -105.8369, 3.787364, 7200, 0, 0), +(@CGUID+72, 15317, 531, 1, 1, -9126.784, 1462.199, -104.2633, 0.7992821, 7200, 0, 0), +(@CGUID+73, 15317, 531, 1, 1, -9172.644, 1542.289, -87.25746, 4.763266, 7200, 0, 0), +(@CGUID+74, 15317, 531, 1, 1, -9177.08, 1683.528, -54.50222, 0.04849045, 7200, 0, 0), +(@CGUID+75, 15317, 531, 1, 1, -9183.351, 1644.611, -67.06108, 2.327298, 7200, 0, 0), +(@CGUID+76, 15317, 531, 1, 1, -9187.728, 1680.688, -57.8031, 5.651324, 7200, 0, 0), +(@CGUID+77, 15317, 531, 1, 1, -9190.996, 1674.806, -59.74267, 3.410446, 7200, 0, 0), +(@CGUID+78, 15317, 531, 1, 1, -9193.495, 1691.111, -54.63859, 3.411577, 7200, 0, 0), +(@CGUID+79, 15317, 531, 1, 1, -9197.91, 1677.646, -59.01847, 5.331757, 7200, 0, 0), +(@CGUID+80, 15317, 531, 1, 1, -9200.417, 1565.645, -78.08263, 3.682645, 7200, 0, 0), +(@CGUID+81, 15317, 531, 1, 1, -9215.096, 1566.989, -77.65082, 4.193158, 7200, 0, 0), +(@CGUID+82, 15317, 531, 1, 1, -9215.519, 1556.678, -79.77057, 3.495375, 7200, 0, 0), +(@CGUID+83, 15317, 531, 1, 1, -9223.643, 1562.967, -78.591, 0.9200022, 7200, 0, 0), +(@CGUID+84, 15317, 531, 1, 1, -9231.377, 1566.911, -77.66441, 5.653526, 7200, 0, 0); From ec83d0fd8c5327260e53dfafeb66cb4c22cfc097 Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 15 Oct 2015 04:35:49 +0200 Subject: [PATCH 163/524] DB/Item: Meteorite Crystal Trinket By @treak Closes #8669 --- sql/updates/world/2015_10_14_05_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_14_05_world.sql diff --git a/sql/updates/world/2015_10_14_05_world.sql b/sql/updates/world/2015_10_14_05_world.sql new file mode 100644 index 0000000000..5029b80705 --- /dev/null +++ b/sql/updates/world/2015_10_14_05_world.sql @@ -0,0 +1,2 @@ +-- Meteorite Crystal +UPDATE `spell_proc_event` SET `ppmRate`=0 WHERE `entry`=64999; From f3344bcd7b8e6bd2e8fb3de497d62f423da65d9b Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 15 Oct 2015 19:14:49 +0200 Subject: [PATCH 164/524] DB/Quest: The Nightmare Manifests Fix some issues: InhabitType, Hover during the combat, and Eranikus will no longer be attackable before the phase 2 --- sql/updates/world/2015_10_14_06_world.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 sql/updates/world/2015_10_14_06_world.sql diff --git a/sql/updates/world/2015_10_14_06_world.sql b/sql/updates/world/2015_10_14_06_world.sql new file mode 100644 index 0000000000..b3b5b23ea3 --- /dev/null +++ b/sql/updates/world/2015_10_14_06_world.sql @@ -0,0 +1,8 @@ +-- +UPDATE `waypoints` SET `position_z`=489.640110 WHERE `entry`=15491 AND `pointid`=3; +UPDATE `creature_template` SET `InhabitType`=6 WHERE `entry`=15491; +DELETE FROM `smart_scripts` WHERE `entryorguid`=15491 AND `source_type`=0 AND `id`>38; +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 +(15491,0,39,0,40,0,100,0,3,15491,0,0,91,2,3,0,0,0,0,1,0,0,0,0,0,0,0,"Eranikus, Tyrant of the Dream - On Waypoint 3 Reached - Remove Flag Hover"), +(15491,0,40,0,54,0,100,0,0,0,0,0,18,768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Eranikus, Tyrant of the Dream - On Just summoned - Set unitflag"), +(15491,0,41,0,40,0,100,0,4,15491,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,"Eranikus, Tyrant of the Dream - On Waypoint 4 Reached - Remove unitflag"); From 69fb441a283e0fdd4fb9517518c88ed846fbf70a Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 15 Oct 2015 21:57:59 +0200 Subject: [PATCH 165/524] DB/Creature: AQ20 Full respawn and waypoints By Malcrom --- sql/updates/world/2015_10_14_07_world.sql | 1839 +++++++++++++++++++++ 1 file changed, 1839 insertions(+) create mode 100644 sql/updates/world/2015_10_14_07_world.sql diff --git a/sql/updates/world/2015_10_14_07_world.sql b/sql/updates/world/2015_10_14_07_world.sql new file mode 100644 index 0000000000..2124eec2a4 --- /dev/null +++ b/sql/updates/world/2015_10_14_07_world.sql @@ -0,0 +1,1839 @@ +-- AQ20 Full Respawn, Full Pathing **** 355 & 434 & 6XX **** +SET @CGUID := 144417; +DELETE FROM `creature` WHERE `map`=509; +DELETE FROM `linked_respawn` WHERE `guid` BETWEEN 61988 AND 61993; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+383; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 4076, 509, 1, 1, -8557.875, 1475.61, 32.09278, 0.3173114, 7200, 10, 1), -- Roach +(@CGUID+1, 4076, 509, 1, 1, -8578.957, 1562.631, 38.3445, 2.08301, 7200, 10, 1), -- Roach +(@CGUID+2, 4076, 509, 1, 1, -8670.483, 1374.597, 32.03201, 3.178652, 7200, 10, 1), -- Roach +(@CGUID+3, 4076, 509, 1, 1, -8764.862, 1637.767, 21.83943, 1.083136, 7200, 10, 1), -- Roach +(@CGUID+4, 4076, 509, 1, 1, -8839.453, 2198.035, 21.48637, 3.546741, 7200, 10, 1), -- Roach +(@CGUID+5, 4076, 509, 1, 1, -8879.403, 1635.506, 21.51133, 0.4385682, 7200, 10, 1), -- Roach +(@CGUID+6, 4076, 509, 1, 1, -8895.27, 1739.468, 21.59288, 3.728892, 7200, 10, 1), -- Roach +(@CGUID+7, 4076, 509, 1, 1, -8958.73, 1640.258, 29.74357, 3.461734, 7200, 10, 1), -- Roach +(@CGUID+8, 4076, 509, 1, 1, -8993.171, 2054.444, 24.64812, 0.330403, 7200, 10, 1), -- Roach +(@CGUID+9, 4076, 509, 1, 1, -9007.328, 1625.977, 31.00255, 2.55359, 7200, 10, 1), -- Roach +(@CGUID+10, 4076, 509, 1, 1, -9159.453, 1308.013, 21.74607, 0.6927378, 7200, 10, 1), -- Roach +(@CGUID+11, 4076, 509, 1, 1, -9330.007, 1187.867, 21.52394, 5.304915, 7200, 10, 1), -- Roach +(@CGUID+12, 4076, 509, 1, 1, -9447.224, 1341.093, 21.44869, 3.252343, 7200, 10, 1), -- Roach +(@CGUID+13, 15168, 509, 1, 1, -8523.959, 1468.174, 32.73527, 2.546548, 7200, 5, 1), -- Vile Scarab +(@CGUID+14, 15168, 509, 1, 1, -8556.954, 1410.153, 32.13479, 4.098383, 7200, 5, 1), -- Vile Scarab +(@CGUID+15, 15168, 509, 1, 1, -8577.19, 1449.547, 32.29018, 0.351546, 7200, 5, 1), -- Vile Scarab +(@CGUID+16, 15168, 509, 1, 1, -8585.965, 1341.191, 34.02468, 6.263584, 7200, 5, 1), -- Vile Scarab +(@CGUID+17, 15168, 509, 1, 1, -8605.016, 1599.756, 32.03201, 2.771847, 7200, 5, 1), -- Vile Scarab +(@CGUID+18, 15168, 509, 1, 1, -8610.068, 1357.368, 32.42776, 6.232846, 7200, 5, 1), -- Vile Scarab +(@CGUID+19, 15168, 509, 1, 1, -8645.912, 1430.941, 32.48993, 4.987458, 7200, 5, 1), -- Vile Scarab +(@CGUID+20, 15168, 509, 1, 1, -8659.348, 1666.773, 21.51167, 2.910921, 7200, 5, 1), -- Vile Scarab +(@CGUID+21, 15168, 509, 1, 1, -8661.099, 1559.783, 32.03201, 5.295803, 7200, 5, 1), -- Vile Scarab +(@CGUID+22, 15168, 509, 1, 1, -8694.207, 1489.305, 32.14948, 3.348807, 7200, 5, 1), -- Vile Scarab +(@CGUID+23, 15168, 509, 1, 1, -8732.676, 1399.609, 32.53547, 3.420845, 7200, 5, 1), -- Vile Scarab +(@CGUID+24, 15168, 509, 1, 1, -8733.768, 1600.124, 21.46972, 3.246312, 7200, 5, 1), -- Vile Scarab +(@CGUID+25, 15168, 509, 1, 1, -8785.252, 2009.173, 21.46967, 3.001966, 7200, 5, 1), -- Vile Scarab +(@CGUID+26, 15168, 509, 1, 1, -8792.841, 2131.115, 21.46975, 5.183628, 7200, 5, 1), -- Vile Scarab +(@CGUID+27, 15168, 509, 1, 1, -8848.906, 1845.958, 21.46968, 2.059489, 7200, 5, 1), -- Vile Scarab +(@CGUID+28, 15168, 509, 1, 1, -8917.903, 1547.614, 21.46967, 0.9948376, 7200, 5, 1), -- Vile Scarab +(@CGUID+29, 15168, 509, 1, 1, -8978.44, 2101.632, 21.46971, 0.3665192, 7200, 5, 1), -- Vile Scarab +(@CGUID+30, 15168, 509, 1, 1, -8994.842, 1916.528, 21.46968, 5.5676, 7200, 5, 1), -- Vile Scarab +(@CGUID+31, 15168, 509, 1, 1, -9000.707, 1700.101, 21.57215, 4.433136, 7200, 5, 1), -- Vile Scarab +(@CGUID+32, 15168, 509, 1, 1, -9058.105, 2159.35, 21.46968, 4.363323, 7200, 5, 1), -- Vile Scarab +(@CGUID+33, 15168, 509, 1, 1, -9066.019, 1733.488, 21.53086, 3.246312, 7200, 5, 1), -- Vile Scarab +(@CGUID+34, 15168, 509, 1, 1, -9211.341, 1432.979, 21.46969, 4.014257, 7200, 5, 1), -- Vile Scarab +(@CGUID+35, 15318, 509, 1, 1, -9489.848, 1372.825, 21.59988, 4.380776, 7200, 5, 1), -- Hive'Zara Drone +(@CGUID+36, 15318, 509, 1, 1, -9524.376, 1383.685, 21.51131, 1.03884, 7200, 5, 1), -- Hive'Zara Drone +(@CGUID+37, 15318, 509, 1, 1, -9574.348, 1484.254, 22.76791, 1.781548, 7200, 5, 1), -- Hive'Zara Drone +(@CGUID+38, 15318, 509, 1, 1, -9578.559, 1506.852, 21.73697, 3.014219, 7200, 5, 1), -- Hive'Zara Drone +(@CGUID+39, 15318, 509, 1, 1, -9580.178, 1381.902, 23.9498, 1.777291, 7200, 5, 1), -- Hive'Zara Drone +(@CGUID+40, 15318, 509, 1, 1, -9592.439, 1388.404, 25.74436, 2.019479, 7200, 5, 1), -- Hive'Zara Drone +(@CGUID+41, 15319, 509, 1, 1, -9479.979, 1370.798, 23.41084, 1.989675, 7200, 5, 1), -- Hive'Zara Collector +(@CGUID+42, 15319, 509, 1, 1, -9511.272, 1386.067, 21.51131, 0.1170127, 7200, 5, 1), -- Hive'Zara Collector +(@CGUID+43, 15319, 509, 1, 1, -9571.893, 1493.507, 21.54095, 2.293517, 7200, 5, 1), -- Hive'Zara Collector +(@CGUID+44, 15319, 509, 1, 1, -9580.605, 1480.182, 22.21877, 4.90255, 7200, 5, 1), -- Hive'Zara Collector +(@CGUID+45, 15319, 509, 1, 1, -9589.697, 1407.815, 21.51132, 0.6980565, 7200, 5, 1), -- Hive'Zara Collector +(@CGUID+46, 15319, 509, 1, 1, -9592.67, 1425.937, 21.63632, 2.661848, 7200, 5, 1), -- Hive'Zara Collector +(@CGUID+47, 15320, 509, 1, 1, -9141.966, 1292.707, 21.46963, 1.710423, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+48, 15320, 509, 1, 1, -9149.69, 1284.749, 21.46964, 0.5061455, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+49, 15320, 509, 1, 1, -9187.016, 1463.765, 21.46968, 1.186824, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+50, 15320, 509, 1, 1, -9224.242, 1384.024, 21.46967, 3.193953, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+51, 15320, 509, 1, 1, -9236.348, 1396.04, 21.46967, 2.513274, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+52, 15320, 509, 1, 1, -9315.232, 1380.299, 21.50587, 5.462881, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+53, 15320, 509, 1, 1, -9340.127, 1210.839, 21.4696, 5.340707, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+54, 15320, 509, 1, 1, -9386.74, 1393.283, 21.46968, 2.076942, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+55, 15320, 509, 1, 1, -9395.24, 1388.353, 21.38681, 0.4920194, 7200, 5, 1), -- Hive'Zara Soldier +(@CGUID+56, 15323, 509, 1, 1, -9154.134, 1292.979, 21.46964, 4.276057, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+57, 15323, 509, 1, 1, -9189.154, 1452.477, 21.52919, 2.059489, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+58, 15323, 509, 1, 1, -9199.545, 1464.198, 21.48786, 2.70526, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+59, 15323, 509, 1, 1, -9231.433, 1386.642, 21.46967, 0.4363323, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+60, 15323, 509, 1, 1, -9301.522, 1385.101, 21.46969, 5.67232, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+61, 15323, 509, 1, 1, -9311.369, 1389.395, 21.50966, 5.532694, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+62, 15323, 509, 1, 1, -9353.457, 1204.119, 21.85404, 4.13643, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+63, 15323, 509, 1, 1, -9359.12, 1217.685, 21.46961, 3.124139, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+64, 15323, 509, 1, 1, -9379.337, 1401.022, 21.47204, 3.316126, 7200, 5, 1), -- Hive'Zara Sandstalker +(@CGUID+65, 15324, 509, 1, 1, -8517.444, 1505.661, 33.36475, 0.8377581, 7200, 0, 0), -- Qiraji Gladiator +(@CGUID+66, 15324, 509, 1, 1, -8531.854, 1515.689, 33.26437, 0.7679449, 7200, 0, 0), -- Qiraji Gladiator +(@CGUID+67, 15324, 509, 1, 1, -8693.788, 1565.823, 31.99034, 5.358161, 7200, 0, 0), -- Qiraji Gladiator +(@CGUID+68, 15324, 509, 1, 1, -8706.146, 1552.285, 31.99034, 5.410521, 7200, 0, 0), -- Qiraji Gladiator +(@CGUID+69, 15324, 509, 1, 1, -9053.818, 1664.356, 22.9385, 3.996804, 7200, 0, 0), -- Qiraji Gladiator +(@CGUID+70, 15324, 509, 1, 1, -9067.317, 1673.464, 23.0715, 4.310963, 7200, 0, 0), -- Qiraji Gladiator +(@CGUID+71, 15324, 509, 1, 1, -9148.94, 1510.32, 21.99232, 0.9424778, 7200, 0, 0), -- Qiraji Gladiator +(@CGUID+72, 15324, 509, 1, 1, -9162.49, 1518.798, 22.7809, 0.2268928, 7200, 0, 0), -- Qiraji Gladiator +(@CGUID+73, 15325, 509, 1, 1, -8515.021, 1397.78, 32.29177, 4.820597, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+74, 15325, 509, 1, 1, -8524.704, 1395.719, 31.98318, 5.121015, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+75, 15325, 509, 1, 1, -8535.219, 1424.391, 32.03201, 5.229107, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+76, 15325, 509, 1, 1, -8544.961, 1422.634, 32.03201, 5.260347, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+77, 15325, 509, 1, 1, -8639.566, 1345.902, 32.3508, 3.251172, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+78, 15325, 509, 1, 1, -8640.774, 1355.726, 32.31917, 3.251222, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+79, 15325, 509, 1, 1, -8654.444, 1491.354, 32.0958, 1.829467, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+80, 15325, 509, 1, 1, -8660.053, 1491.356, 32.18204, 2.223871, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+81, 15325, 509, 1, 1, -8660.561, 1414.245, 32.65175, 1.890694, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+82, 15325, 509, 1, 1, -8666.813, 1407.651, 32.03201, 2.012179, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+83, 15325, 509, 1, 1, -8695.072, 1455.611, 32.48226, 3.809897, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+84, 15325, 509, 1, 1, -8700.693, 1463.633, 33.78428, 3.815571, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+85, 15325, 509, 1, 1, -8743.022, 1607.379, 21.61758, 3.693705, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+86, 15325, 509, 1, 1, -8747.875, 1615.742, 21.87457, 3.717672, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+87, 15325, 509, 1, 1, -8752.388, 1622.344, 21.76074, 4.628274, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+88, 15325, 509, 1, 1, -8761.905, 1621.611, 21.83998, 4.671357, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+89, 15325, 509, 1, 1, -8773.826, 1640.988, 21.80477, 2.381759, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+90, 15325, 509, 1, 1, -8780.559, 1633.73, 21.72563, 2.381759, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+91, 15325, 509, 1, 1, -8816.079, 1599.633, 21.46869, 3.29854, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+92, 15325, 509, 1, 1, -8817.565, 1609.256, 20.37871, 3.284594, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+93, 15325, 509, 1, 1, -9586.802, 1602.671, 21.51135, 6.242362, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+94, 15325, 509, 1, 1, -9590.834, 1600.473, 21.51135, 0.05669658, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+95, 15325, 509, 1, 1, -9593.194, 1594.593, 21.55599, 1.229132, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+96, 15325, 509, 1, 1, -9606.353, 1571.422, 22.01131, 0.2620987, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+97, 15325, 509, 1, 1, -9607.973, 1606.99, 21.60341, 0.9448448, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+98, 15325, 509, 1, 1, -9608.446, 1563.199, 21.65768, 0.1963355, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+99, 15325, 509, 1, 1, -9609.348, 1615.344, 21.79114, 0.9476151, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+100, 15325, 509, 1, 1, -9610.393, 1610.891, 21.60728, 0.9449909, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+101, 15325, 509, 1, 1, -9649.376, 1648.167, 21.52642, 1.862836, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+102, 15325, 509, 1, 1, -9653.988, 1648.745, 21.59047, 1.866604, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+103, 15325, 509, 1, 1, -9656.947, 1652.301, 21.52642, 1.870413, 7200, 0, 0), -- Hive'Zara Wasp +(@CGUID+104, 15327, 509, 1, 1, -8521.604, 1377.789, 34.2847, 4.518502, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+105, 15327, 509, 1, 1, -8538.28, 1413.481, 32.03201, 4.890828, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+106, 15327, 509, 1, 1, -8654.492, 1349.237, 32.22055, 0.1095644, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+107, 15327, 509, 1, 1, -8660.443, 1499.997, 32.17234, 2.224768, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+108, 15327, 509, 1, 1, -8667.888, 1419.82, 32.11544, 1.778565, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+109, 15327, 509, 1, 1, -8705.161, 1452.156, 33.72097, 3.983237, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+110, 15327, 509, 1, 1, -8750.896, 1607.642, 22.07515, 3.82532, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+111, 15327, 509, 1, 1, -8758.171, 1609.758, 21.96272, 4.207295, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+112, 15327, 509, 1, 1, -8787.256, 1646.833, 22.81458, 2.358341, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+113, 15327, 509, 1, 1, -8822.804, 1603.601, 21.43074, 3.162875, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+114, 15327, 509, 1, 1, -9578.752, 1590.721, 21.58902, 5.604074, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+115, 15327, 509, 1, 1, -9582.396, 1601.374, 21.63635, 6.097988, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+116, 15327, 509, 1, 1, -9590.949, 1573.593, 21.64739, 0.5360234, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+117, 15327, 509, 1, 1, -9592.131, 1596.068, 21.52306, 0.03750357, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+118, 15327, 509, 1, 1, -9603.499, 1605.943, 21.51134, 0.9452588, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+119, 15327, 509, 1, 1, -9604.769, 1560.449, 21.63631, 0.2232969, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+120, 15327, 509, 1, 1, -9623.114, 1586.583, 21.88172, 0.9226059, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+121, 15327, 509, 1, 1, -9637.552, 1612.699, 21.51152, 1.132231, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+122, 15327, 509, 1, 1, -9643.36, 1625.865, 21.68241, 1.686941, 7200, 0, 0), -- Hive'Zara Stinger +(@CGUID+123, 15333, 509, 1, 1, -9450.053, 1422.016, 28.19568, 5.704928, 7200, 10, 1), -- Silicate Feeder +(@CGUID+124, 15333, 509, 1, 1, -9452.668, 1483.815, 22.87595, 1.221858, 7200, 10, 1), -- Silicate Feeder +(@CGUID+125, 15333, 509, 1, 1, -9454.068, 1451.504, 21.53237, 0.4250475, 7200, 10, 1), -- Silicate Feeder +(@CGUID+126, 15333, 509, 1, 1, -9483.096, 1476.489, 21.51131, 4.546051, 7200, 10, 1), -- Silicate Feeder +(@CGUID+127, 15333, 509, 1, 1, -9485.433, 1454.96, 21.51132, 1.341279, 7200, 10, 1), -- Silicate Feeder +(@CGUID+128, 15333, 509, 1, 1, -9491.116, 1377.249, 21.51131, 4.68092, 7200, 10, 1), -- Silicate Feeder +(@CGUID+129, 15333, 509, 1, 1, -9491.985, 1360.045, 21.51132, 1.734773, 7200, 10, 1), -- Silicate Feeder +(@CGUID+130, 15333, 509, 1, 1, -9505.238, 1333.173, 21.51132, 0.5689664, 7200, 10, 1), -- Silicate Feeder +(@CGUID+131, 15333, 509, 1, 1, -9508.66, 1373.73, 21.58461, 6.189344, 7200, 10, 1), -- Silicate Feeder +(@CGUID+132, 15333, 509, 1, 1, -9511.469, 1481.016, 22.00921, 1.69612, 7200, 10, 1), -- Silicate Feeder +(@CGUID+133, 15333, 509, 1, 1, -9512.081, 1354.932, 21.62411, 0.05311435, 7200, 10, 1), -- Silicate Feeder +(@CGUID+134, 15333, 509, 1, 1, -9520.733, 1456.67, 21.51132, 2.629578, 7200, 10, 1), -- Silicate Feeder +(@CGUID+135, 15333, 509, 1, 1, -9544.545, 1392.073, 21.51131, 0.8189642, 7200, 10, 1), -- Silicate Feeder +(@CGUID+136, 15333, 509, 1, 1, -9551.313, 1411.539, 21.51131, 3.517841, 7200, 10, 1), -- Silicate Feeder +(@CGUID+137, 15333, 509, 1, 1, -9559.898, 1520.136, 21.51131, 3.08167, 7200, 10, 1), -- Silicate Feeder +(@CGUID+138, 15333, 509, 1, 1, -9576.01, 1517.689, 21.53801, 2.500756, 7200, 10, 1), -- Silicate Feeder +(@CGUID+139, 15333, 509, 1, 1, -9581.107, 1420.726, 21.51132, 0.9606542, 7200, 10, 1), -- Silicate Feeder +(@CGUID+140, 15333, 509, 1, 1, -9581.575, 1491.29, 21.51131, 1.228613, 7200, 10, 1), -- Silicate Feeder +(@CGUID+141, 15333, 509, 1, 1, -9581.714, 1578.228, 21.64806, 3.731387, 7200, 10, 1), -- Silicate Feeder +(@CGUID+142, 15333, 509, 1, 1, -9582.215, 1391.218, 22.1015, 3.665587, 7200, 10, 1), -- Silicate Feeder +(@CGUID+143, 15333, 509, 1, 1, -9583.522, 1554.888, 21.58274, 2.520709, 7200, 10, 1), -- Silicate Feeder +(@CGUID+144, 15333, 509, 1, 1, -9586.859, 1644.306, 21.83975, 5.548194, 7200, 10, 1), -- Silicate Feeder +(@CGUID+145, 15333, 509, 1, 1, -9588.4, 1609.687, 22.03196, 4.592999, 7200, 10, 1), -- Silicate Feeder +(@CGUID+146, 15333, 509, 1, 1, -9589.72, 1442.263, 21.63682, 5.89996, 7200, 10, 1), -- Silicate Feeder +(@CGUID+147, 15333, 509, 1, 1, -9607.79, 1461.607, 22.79347, 3.408359, 7200, 10, 1), -- Silicate Feeder +(@CGUID+148, 15333, 509, 1, 1, -9610.552, 1614.562, 21.88635, 0.1637974, 7200, 10, 1), -- Silicate Feeder +(@CGUID+149, 15333, 509, 1, 1, -9612.232, 1582.742, 21.88631, 1.648435, 7200, 10, 1), -- Silicate Feeder +(@CGUID+150, 15333, 509, 1, 1, -9612.367, 1642.575, 21.51134, 5.734612, 7200, 10, 1), -- Silicate Feeder +(@CGUID+151, 15333, 509, 1, 1, -9612.531, 1553.086, 21.51131, 5.839962, 7200, 10, 1), -- Silicate Feeder +(@CGUID+152, 15333, 509, 1, 1, -9645.53, 1619.285, 22.01152, 1.771511, 7200, 10, 1), -- Silicate Feeder +(@CGUID+153, 15333, 509, 1, 1, -9647.195, 1651.031, 21.65448, 0.9608645, 7200, 10, 1), -- Silicate Feeder +(@CGUID+154, 15333, 509, 1, 1, -9653.326, 1673.394, 22.09751, 3.574276, 7200, 10, 1), -- Silicate Feeder +(@CGUID+155, 15333, 509, 1, 1, -9654.614, 1553.397, 21.51586, 3.283447, 7200, 10, 1), -- Silicate Feeder +(@CGUID+156, 15333, 509, 1, 1, -9656.288, 1585.146, 21.62086, 2.682987, 7200, 10, 1), -- Silicate Feeder +(@CGUID+157, 15333, 509, 1, 1, -9674.635, 1580.351, 21.51132, 6.094749, 7200, 10, 1), -- Silicate Feeder +(@CGUID+158, 15333, 509, 1, 1, -9675.218, 1611.29, 21.51152, 4.639176, 7200, 10, 1), -- Silicate Feeder +(@CGUID+159, 15333, 509, 1, 1, -9675.699, 1652.324, 21.51187, 3.384236, 7200, 10, 1), -- Silicate Feeder +(@CGUID+160, 15333, 509, 1, 1, -9681.588, 1551.112, 21.56898, 1.922503, 7200, 10, 1), -- Silicate Feeder +(@CGUID+161, 15333, 509, 1, 1, -9721.058, 1484.207, 21.63279, 4.123934, 7200, 10, 1), -- Silicate Feeder +(@CGUID+162, 15333, 509, 1, 1, -9740.685, 1486.821, 22.87148, 0.6774856, 7200, 10, 1), -- Silicate Feeder +(@CGUID+163, 15333, 509, 1, 1, -9746.62, 1514.349, 22.26016, 5.49662, 7200, 10, 1), -- Silicate Feeder +(@CGUID+164, 15335, 509, 1, 1, -8962.963, 1649.652, 24.11304, 0.4845064, 7200, 0, 0), -- Flesh Hunter +(@CGUID+165, 15335, 509, 1, 1, -9082.635, 2149.024, 23.20904, 5.902679, 7200, 0, 0), -- Flesh Hunter +(@CGUID+166, 15335, 509, 1, 1, -9305.492, 1403.459, 25.60786, 2.159173, 7200, 0, 0), -- Flesh Hunter +(@CGUID+167, 15335, 509, 1, 1, -9456.793, 1296.307, 22.1249, 1.87437, 7200, 0, 0), -- Flesh Hunter +(@CGUID+168, 15335, 509, 1, 1, -9328.003, 1298.321, -64.24252, 0.2443461, 7200, 5, 1), -- Flesh Hunter +(@CGUID+169, 15336, 509, 1, 1, -9494.096, 1385.02, 21.46964, 2.268928, 7200, 5, 1), -- Hive'Zara Tail Lasher +(@CGUID+170, 15336, 509, 1, 1, -9503.87, 1392.831, 21.51751, 0.9250245, 7200, 5, 1), -- Hive'Zara Tail Lasher +(@CGUID+171, 15336, 509, 1, 1, -9563.056, 1500.709, 22.59851, 4.18879, 7200, 5, 1), -- Hive'Zara Tail Lasher +(@CGUID+172, 15336, 509, 1, 1, -9592.147, 1496.167, 22.92012, 1.106082, 7200, 5, 1), -- Hive'Zara Tail Lasher +(@CGUID+173, 15336, 509, 1, 1, -9600.68, 1417.569, 22.99969, 5.747794, 7200, 5, 1), -- Hive'Zara Tail Lasher +(@CGUID+174, 15336, 509, 1, 1, -9602.287, 1403.74, 24.61112, 1.931395, 7200, 5, 1), -- Hive'Zara Tail Lasher +(@CGUID+175, 15338, 509, 1, 1, -8786.295, 2107.791, 21.79048, 5.001371, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+176, 15338, 509, 1, 1, -8798.089, 1934.021, 21.46238, 4.412516, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+177, 15338, 509, 1, 1, -8864.612, 2021.75, 21.64479, 3.131173, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+178, 15338, 509, 1, 1, -8868.629, 1877.659, 21.87304, 2.538011, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+179, 15338, 509, 1, 1, -8936.657, 1715.272, 21.51128, 4.108858, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+180, 15338, 509, 1, 1, -8970.525, 2080.208, 21.51132, 5.018237, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+181, 15338, 509, 1, 1, -9014.472, 1711.889, 21.48144, 2.354002, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+182, 15338, 509, 1, 1, -9018.842, 1888.04, 21.62847, 4.138173, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+183, 15338, 509, 1, 1, -9080.542, 1740.715, 21.51128, 5.577422, 7200, 0, 0), -- Obsidian Destroyer +(@CGUID+184, 15339, 509, 1, 1, -9502.8, 2042.65, 105.3096, 5.654867, 7200, 0, 0), -- Ossirian the Unscarred +(@CGUID+185, 15340, 509, 1, 1, -8845.518, 2260.144, 21.46967, 4.642576, 7200, 0, 0), -- Moam +(@CGUID+186, 15341, 509, 1, 1, -9129.729, 1602.503, 26.54407, 5.532694, 7200, 0, 0), -- General Rajaxx +(@CGUID+187, 15343, 509, 1, 1, -8595.92, 1447.688, 32.04808, 5.463164, 7200, 0, 0), -- Qiraji Swarmguard +(@CGUID+188, 15343, 509, 1, 1, -8634.026, 1515.246, 31.96161, 2.593201, 7200, 0, 0), -- Qiraji Swarmguard +(@CGUID+189, 15343, 509, 1, 1, -8641.496, 1392.684, 32.10234, 5.526043, 7200, 0, 0), -- Qiraji Swarmguard +(@CGUID+190, 15343, 509, 1, 1, -8642.217, 1445.216, 32.52929, 0.8981247, 7200, 0, 0), -- Qiraji Swarmguard +(@CGUID+191, 15343, 509, 1, 1, -8647.904, 1430.745, 32.16164, 3.90623, 7200, 0, 0), -- Qiraji Swarmguard +(@CGUID+192, 15343, 509, 1, 1, -8652.679, 1459.439, 32.04622, 2.591174, 7200, 0, 0), -- Qiraji Swarmguard +(@CGUID+193, 15344, 509, 1, 1, -8991.146, 1553.998, 21.65394, 2.775074, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+194, 15344, 509, 1, 1, -9003.747, 1536.158, 21.46966, 2.635447, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+195, 15344, 509, 1, 1, -9012.13, 1608.774, 24.86932, 3.141593, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+196, 15344, 509, 1, 1, -9014.358, 1597.683, 21.46967, 3.036873, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+197, 15344, 509, 1, 1, -9020.146, 1586.732, 21.46967, 2.949606, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+198, 15344, 509, 1, 1, -9022.039, 1612.046, 22.80729, 3.159046, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+199, 15344, 509, 1, 1, -9022.71, 1505.878, 21.55961, 2.408554, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+200, 15344, 509, 1, 1, -9029.94, 1498.077, 22.14014, 2.338741, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+201, 15344, 509, 1, 1, -9031.986, 1592.263, 21.46968, 2.984513, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+202, 15344, 509, 1, 1, -9038.44, 1491.037, 23.22957, 2.268928, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+203, 15344, 509, 1, 1, -9070.706, 1634.371, 21.48116, 3.490659, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+204, 15344, 509, 1, 1, -9071.044, 1622.144, 21.46969, 3.333579, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+205, 15344, 509, 1, 1, -9071.757, 1611.277, 21.4721, 3.176499, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+206, 15344, 509, 1, 1, -9076.421, 1530.23, 21.46967, 2.234021, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+207, 15344, 509, 1, 1, -9078.797, 1622.799, 21.46967, 3.368485, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+208, 15344, 509, 1, 1, -9083.137, 1524.759, 21.46966, 2.146755, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+209, 15344, 509, 1, 1, -9091.763, 1519.367, 21.46966, 2.059489, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+210, 15344, 509, 1, 1, -9092.34, 1586.273, 21.46964, 2.687807, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+211, 15344, 509, 1, 1, -9097.289, 1578.36, 21.46964, 2.513274, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+212, 15344, 509, 1, 1, -9102.547, 1569.417, 21.4757, 2.321288, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+213, 15344, 509, 1, 1, -9113.942, 1546.056, 21.46964, 1.954769, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+214, 15344, 509, 1, 1, -9132.825, 1539.097, 21.46964, 1.658063, 7200, 0, 0), -- Swarmguard Needler +(@CGUID+215, 15348, 509, 1, 1, -8822.197, 1625.819, 19.80574, 3.884628, 7200, 5, 1), -- Kurinnaxx +(@CGUID+216, 15355, 509, 1, 1, -9161.633, 1893.916, 86.4881, 4.610681, 7200, 0, 0), -- Anubisath Guardian +(@CGUID+217, 15355, 509, 1, 1, -9182.274, 1935.26, 85.68071, 0.07460589, 7200, 0, 0), -- Anubisath Guardian +(@CGUID+218, 15355, 509, 1, 1, -9211.516, 1874.948, 85.68073, 5.704421, 7200, 0, 0), -- Anubisath Guardian +(@CGUID+219, 15355, 509, 1, 1, -9239.259, 1907.01, 85.68074, 4.830944, 7200, 0, 0), -- Anubisath Guardian +(@CGUID+220, 15355, 509, 1, 1, -9291.042, 1947.945, 85.68074, 5.187096, 7200, 0, 0), -- Anubisath Guardian +(@CGUID+221, 15355, 509, 1, 1, -9294.917, 1760.814, 85.64307, 5.859818, 7200, 0, 0), -- Anubisath Guardian +(@CGUID+222, 15355, 509, 1, 1, -9322.551, 1736.57, 85.67474, 0.2409076, 7200, 0, 0), -- Anubisath Guardian +(@CGUID+223, 15355, 509, 1, 1, -9337.068, 1797.589, 85.67978, 4.818147, 7200, 0, 0), -- Anubisath Guardian +(@CGUID+224, 15369, 509, 1, 1, -9719.611, 1514.752, 27.55229, 0.7679449, 7200, 0, 0), -- Ayamiss the Hunter +(@CGUID+225, 15370, 509, 1, 1, -9235.976, 1234.066, -63.65783, 5.899213, 7200, 5, 1), -- Buru the Gorger +(@CGUID+226, 15384, 509, 1, 1, -9546.693, 1574.15, 25.31675, 2.059489, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE) +(@CGUID+227, 15384, 509, 1, 1, -9583.222, 1629.951, 23.97154, 0.6283185, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE) +(@CGUID+228, 15384, 509, 1, 1, -9596.415, 1545.681, 22.6737, 0.5585054, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE) +(@CGUID+229, 15384, 509, 1, 1, -9632.509, 1587.674, 22.96964, 1.134464, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE) +(@CGUID+230, 15384, 509, 1, 1, -9675.3, 1693.714, 30.20995, 4.206244, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE) +(@CGUID+231, 15384, 509, 1, 1, -9698.361, 1637.477, 23.61151, 6.161012, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE) +(@CGUID+232, 15384, 509, 1, 1, -9704.792, 1523.153, 21.52732, 0.1396263, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE) +(@CGUID+233, 15384, 509, 1, 1, -9759.329, 1480.819, 28.64592, 3.351032, 7200, 0, 0), -- OLDWorld Trigger (DO NOT DELETE) +(@CGUID+234, 15385, 509, 1, 1, -9108.294, 1584.171, 21.47101, 2.495821, 7200, 0, 0), -- Colonel Zerran +(@CGUID+235, 15386, 509, 1, 1, -9085.032, 1622.403, 21.46965, 3.368485, 7200, 0, 0), -- Major Yeggeth +(@CGUID+236, 15387, 509, 1, 1, -8994.835, 1542.269, 21.64863, 2.70526, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+237, 15387, 509, 1, 1, -8998.049, 1560.147, 22.13081, 2.80998, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+238, 15387, 509, 1, 1, -9001.262, 1549.051, 22.02086, 2.722714, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+239, 15387, 509, 1, 1, -9010.698, 1542.467, 21.46967, 2.6529, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+240, 15387, 509, 1, 1, -9023.852, 1601.583, 21.46967, 3.071779, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+241, 15387, 509, 1, 1, -9030.075, 1512.309, 21.47057, 2.408554, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+242, 15387, 509, 1, 1, -9038.825, 1505.317, 21.59063, 2.338741, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+243, 15387, 509, 1, 1, -9046.502, 1498.264, 22.0108, 2.268928, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+244, 15387, 509, 1, 1, -9066.888, 1521.481, 21.46966, 2.251475, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+245, 15387, 509, 1, 1, -9074.003, 1515.235, 21.46966, 2.164208, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+246, 15387, 509, 1, 1, -9078.066, 1635.034, 21.46967, 3.543018, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+247, 15387, 509, 1, 1, -9080.052, 1612.093, 21.46965, 3.193953, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+248, 15387, 509, 1, 1, -9082.668, 1510.194, 21.51312, 2.076942, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+249, 15387, 509, 1, 1, -9098.183, 1589.878, 21.46998, 2.70526, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+250, 15387, 509, 1, 1, -9102.671, 1581.557, 21.47097, 2.495821, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+251, 15387, 509, 1, 1, -9107.887, 1574.311, 21.48627, 2.303835, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+252, 15387, 509, 1, 1, -9117.37, 1553.283, 21.46964, 1.937315, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+253, 15387, 509, 1, 1, -9123.583, 1541.553, 21.46964, 1.797689, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+254, 15387, 509, 1, 1, -9125.76, 1549.293, 21.46964, 1.780236, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+255, 15387, 509, 1, 1, -9134.138, 1546.722, 21.46964, 1.64061, 7200, 0, 0), -- Qiraji Warrior +(@CGUID+256, 15388, 509, 1, 1, -9127.978, 1558.543, 21.68785, 1.797689, 7200, 0, 0), -- Major Pakkon +(@CGUID+257, 15389, 509, 1, 1, -9033.166, 1604.659, 21.46967, 3.089233, 7200, 0, 0), -- Captain Drenn +(@CGUID+258, 15390, 509, 1, 1, -9087.008, 1530.263, 21.46967, 2.146755, 7200, 0, 0), -- Captain Xurrem +(@CGUID+259, 15391, 509, 1, 1, -9007.403, 1556.874, 21.6039, 2.75762, 7200, 0, 0), -- Captain Qeez +(@CGUID+260, 15392, 509, 1, 1, -9041.356, 1512.58, 21.47481, 2.338741, 7200, 0, 0), -- Captain Tuubid +(@CGUID+261, 15426, 509, 1, 1, -8680.658, 1585.614, 33.19108, 2.548181, 7200, 0, 0), -- Ahn'Qiraj Trigger +(@CGUID+262, 15428, 509, 1, 1, -9230.038, 1916.913, 85.65411, 4.529287, 7200, 0, 0), -- Sand Vortex +(@CGUID+263, 15428, 509, 1, 1, -9523.837, 1881.484, 85.64066, 5.181685, 7200, 0, 0), -- Sand Vortex +(@CGUID+264, 15461, 509, 1, 1, -8777.984, 1946.542, 29.26133, 5.90431, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+265, 15461, 509, 1, 1, -8779.035, 1939.482, 28.63995, 5.916666, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+266, 15461, 509, 1, 1, -8779.128, 1927.207, 27.42442, 2.724261, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+267, 15461, 509, 1, 1, -8784.287, 1915.417, 24.22899, 5.393067, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+268, 15461, 509, 1, 1, -8799.364, 1954.671, 21.51133, 5.978374, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+269, 15461, 509, 1, 1, -8890.03, 1741.545, 21.7629, 1.518436, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+270, 15461, 509, 1, 1, -8900.689, 1727.25, 24.3461, 4.555309, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+271, 15461, 509, 1, 1, -8911.898, 1741.947, 21.96902, 1.021649, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+272, 15461, 509, 1, 1, -8914.18, 1776.939, 21.66511, 3.48624, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+273, 15461, 509, 1, 1, -8931.609, 2026.63, 23.34022, 5.709093, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+274, 15461, 509, 1, 1, -8933.949, 1761.936, 22.19745, 2.513257, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+275, 15461, 509, 1, 1, -8935.758, 1993.071, 22.7103, 3.963199, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+276, 15461, 509, 1, 1, -8936.32, 2034.411, 23.23642, 2.167205, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+277, 15461, 509, 1, 1, -8949.799, 1981.901, 21.69878, 1.727876, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+278, 15461, 509, 1, 1, -8986, 1995.47, 23.65904, 3.566723, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+279, 15461, 509, 1, 1, -9013.021, 1864.727, 22.24529, 6.056293, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+280, 15461, 509, 1, 1, -9021.092, 1856.039, 21.65097, 2.042035, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+281, 15461, 509, 1, 1, -9026.661, 1838.82, 21.46962, 4.590216, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+282, 15461, 509, 1, 1, -9048.649, 1860.379, 22.03692, 5.604976, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+283, 15461, 509, 1, 1, -9052.467, 1873.286, 24.717, 1.431662, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+284, 15461, 509, 1, 1, -9101.366, 2212.7, 21.51138, 2.302702, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+285, 15461, 509, 1, 1, -9102.915, 2204.249, 21.51138, 1.122511, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+286, 15461, 509, 1, 1, -9104.067, 2173.496, 21.51134, 0.5112051, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+287, 15461, 509, 1, 1, -9109.516, 2190.421, 21.51134, 0.7625134, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+288, 15461, 509, 1, 1, -9113.313, 2218.674, 22.06243, 1.520167, 7200, 5, 1), -- Shrieker Scarab +(@CGUID+289, 15462, 509, 1, 1, -8773.882, 1964.334, 28.00181, 1.714765, 7200, 5, 1), -- Spitting Scarab +(@CGUID+290, 15462, 509, 1, 1, -8777.861, 1955.941, 27.29991, 1.703948, 7200, 5, 1), -- Spitting Scarab +(@CGUID+291, 15462, 509, 1, 1, -8792.899, 1944.089, 21.55064, 3.30581, 7200, 5, 1), -- Spitting Scarab +(@CGUID+292, 15462, 509, 1, 1, -8805.239, 1936.149, 21.46968, 3.455752, 7200, 5, 1), -- Spitting Scarab +(@CGUID+293, 15462, 509, 1, 1, -8818.191, 1927.24, 22.42108, 5.61996, 7200, 5, 1), -- Spitting Scarab +(@CGUID+294, 15462, 509, 1, 1, -8879.906, 1771.096, 24.49183, 5.58218, 7200, 5, 1), -- Spitting Scarab +(@CGUID+295, 15462, 509, 1, 1, -8892.148, 1788.219, 22.04427, 5.124065, 7200, 5, 1), -- Spitting Scarab +(@CGUID+296, 15462, 509, 1, 1, -8894.619, 1763.474, 21.59097, 0.7297062, 7200, 5, 1), -- Spitting Scarab +(@CGUID+297, 15462, 509, 1, 1, -8929.951, 1760.378, 21.76128, 0.06232084, 7200, 5, 1), -- Spitting Scarab +(@CGUID+298, 15462, 509, 1, 1, -8935.928, 1744.146, 21.47835, 5.471159, 7200, 5, 1), -- Spitting Scarab +(@CGUID+299, 15462, 509, 1, 1, -8938.027, 2012.935, 22.70216, 0.9310265, 7200, 5, 1), -- Spitting Scarab +(@CGUID+300, 15462, 509, 1, 1, -8945.51, 1986.941, 21.54233, 3.434109, 7200, 5, 1), -- Spitting Scarab +(@CGUID+301, 15462, 509, 1, 1, -8961.313, 1989.169, 21.99717, 3.973462, 7200, 5, 1), -- Spitting Scarab +(@CGUID+302, 15462, 509, 1, 1, -8961.39, 2036.786, 21.94052, 5.367473, 7200, 5, 1), -- Spitting Scarab +(@CGUID+303, 15462, 509, 1, 1, -8986.513, 2005.445, 23.18358, 4.609489, 7200, 5, 1), -- Spitting Scarab +(@CGUID+304, 15462, 509, 1, 1, -9037.781, 1872.558, 21.83935, 3.590566, 7200, 5, 1), -- Spitting Scarab +(@CGUID+305, 15462, 509, 1, 1, -9038.259, 1894.863, 22.61593, 4.983107, 7200, 5, 1), -- Spitting Scarab +(@CGUID+306, 15462, 509, 1, 1, -9039.103, 1826.128, 22.9693, 5.044002, 7200, 5, 1), -- Spitting Scarab +(@CGUID+307, 15462, 509, 1, 1, -9046.372, 1886.375, 24.54025, 3.335346, 7200, 5, 1), -- Spitting Scarab +(@CGUID+308, 15462, 509, 1, 1, -9052.063, 1852.845, 22.53534, 1.600288, 7200, 5, 1), -- Spitting Scarab +(@CGUID+309, 15462, 509, 1, 1, -9077.655, 2199.215, 21.47052, 5.794493, 7200, 5, 1), -- Spitting Scarab +(@CGUID+310, 15462, 509, 1, 1, -9087.489, 2206.195, 21.49517, 2.583087, 7200, 5, 1), -- Spitting Scarab +(@CGUID+311, 15462, 509, 1, 1, -9091.026, 2222.007, 22.47916, 0.3574632, 7200, 5, 1), -- Spitting Scarab +(@CGUID+312, 15462, 509, 1, 1, -9094.922, 2187.126, 21.76134, 4.347096, 7200, 5, 1), -- Spitting Scarab +(@CGUID+313, 15462, 509, 1, 1, -9115.486, 2203.177, 21.51138, 4.066154, 7200, 5, 1), -- Spitting Scarab +(@CGUID+314, 15475, 509, 1, 1, -8558.053, 1335.651, 32.23059, 1.330155, 7200, 5, 1), -- Beetle +(@CGUID+315, 15475, 509, 1, 1, -8580.42, 1653.069, 43.2859, 3.590021, 7200, 5, 1), -- Beetle +(@CGUID+316, 15475, 509, 1, 1, -8649.051, 1482.82, 32.00608, 6.216755, 7200, 5, 1), -- Beetle +(@CGUID+317, 15475, 509, 1, 1, -8798.256, 1878.107, 22.0182, 0.3919355, 7200, 5, 1), -- Beetle +(@CGUID+318, 15475, 509, 1, 1, -8904.351, 1528.15, 21.60996, 2.543734, 7200, 5, 1), -- Beetle +(@CGUID+319, 15475, 509, 1, 1, -8999.541, 1989.413, 29.24577, 0.1391346, 7200, 5, 1), -- Beetle +(@CGUID+320, 15475, 509, 1, 1, -9022.933, 1472.28, 33.09048, 4.812155, 7200, 5, 1), -- Beetle +(@CGUID+321, 15475, 509, 1, 1, -9155.481, 2215.207, 26.00118, 3.855093, 7200, 5, 1), -- Beetle +(@CGUID+322, 15475, 509, 1, 1, -9200.068, 1430.018, 21.51133, 4.903863, 7200, 5, 1), -- Beetle +(@CGUID+323, 15475, 509, 1, 1, -9385.35, 1404.552, 21.51134, 4.628578, 7200, 5, 1), -- Beetle +(@CGUID+324, 15476, 509, 1, 1, -8603.881, 1356.801, 32.0353, 5.992309, 7200, 5, 1), -- Scorpid +(@CGUID+325, 15476, 509, 1, 1, -8673.53, 1535.038, 31.96736, 5.982349, 7200, 5, 1), -- Scorpid +(@CGUID+326, 15476, 509, 1, 1, -8770.431, 2134.666, 30.01231, 1.451406, 7200, 5, 1), -- Scorpid +(@CGUID+327, 15476, 509, 1, 1, -8782.575, 2207.545, 26.37049, 6.040576, 7200, 5, 1), -- Scorpid +(@CGUID+328, 15476, 509, 1, 1, -9030.191, 1901.198, 21.95046, 0.2293586, 7200, 5, 1), -- Scorpid +(@CGUID+329, 15476, 509, 1, 1, -9088.795, 1479.958, 29.47734, 4.849589, 7200, 5, 1), -- Scorpid +(@CGUID+330, 15476, 509, 1, 1, -9121.418, 1772.116, 22.70201, 4.443481, 7200, 5, 1), -- Scorpid +(@CGUID+331, 15505, 509, 1, 1, -8851.227, 2056.546, 4.849823, 3.996804, 7200, 5, 1), -- Canal Frenzy +(@CGUID+332, 15505, 509, 1, 1, -8857.7, 2072.103, 4.994012, 0.4886922, 7200, 5, 1), -- Canal Frenzy +(@CGUID+333, 15505, 509, 1, 1, -8858.738, 2062.827, 4.482691, 1.797689, 7200, 5, 1), -- Canal Frenzy +(@CGUID+334, 15505, 509, 1, 1, -8865.083, 2083.378, 3.65268, 5.078908, 7200, 5, 1), -- Canal Frenzy +(@CGUID+335, 15505, 509, 1, 1, -8870.662, 2109.143, 6.556806, 1.151917, 7200, 5, 1), -- Canal Frenzy +(@CGUID+336, 15505, 509, 1, 1, -8874.804, 1936.475, 6.60746, 1.133057, 7200, 5, 1), -- Canal Frenzy +(@CGUID+337, 15505, 509, 1, 1, -8874.903, 2058.621, 4.535347, 0, 7200, 5, 1), -- Canal Frenzy +(@CGUID+338, 15505, 509, 1, 1, -8875.742, 1945.669, 6.486465, 5.31958, 7200, 5, 1), -- Canal Frenzy +(@CGUID+339, 15505, 509, 1, 1, -8877.209, 2127.847, 7.684945, 1.867502, 7200, 5, 1), -- Canal Frenzy +(@CGUID+340, 15505, 509, 1, 1, -8877.619, 1959.799, 6.453036, 4.259987, 7200, 5, 1), -- Canal Frenzy +(@CGUID+341, 15505, 509, 1, 1, -8884.489, 1926.345, 4.517488, 1.902409, 7200, 5, 1), -- Canal Frenzy +(@CGUID+342, 15505, 509, 1, 1, -8886.457, 2125.595, 5.525422, 5.462881, 7200, 5, 1), -- Canal Frenzy +(@CGUID+343, 15505, 509, 1, 1, -8889.349, 1931.745, 5.704772, 4.119449, 7200, 5, 1), -- Canal Frenzy +(@CGUID+344, 15505, 509, 1, 1, -8889.567, 2115.469, 7.099297, 0.7679449, 7200, 5, 1), -- Canal Frenzy +(@CGUID+345, 15505, 509, 1, 1, -8896.666, 2135.883, 5.975152, 0.2310998, 7200, 5, 1), -- Canal Frenzy +(@CGUID+346, 15505, 509, 1, 1, -8916.911, 2170.905, 12.31206, 2.958982, 7200, 5, 1), -- Canal Frenzy +(@CGUID+347, 15505, 509, 1, 1, -8916.97, 2153.477, 5.997731, 3.785432, 7200, 5, 1), -- Canal Frenzy +(@CGUID+348, 15505, 509, 1, 1, -8918.426, 2159.507, 5.476036, 6.043295, 7200, 5, 1), -- Canal Frenzy +(@CGUID+349, 15505, 509, 1, 1, -8929.834, 1869.064, 4.986817, 3.717551, 7200, 5, 1), -- Canal Frenzy +(@CGUID+350, 15505, 509, 1, 1, -8930.449, 2162.486, 5.261242, 0.3141593, 7200, 5, 1), -- Canal Frenzy +(@CGUID+351, 15505, 509, 1, 1, -8931.279, 1852.244, 4.11584, 3.333579, 7200, 5, 1), -- Canal Frenzy +(@CGUID+352, 15505, 509, 1, 1, -8937.561, 2177.217, 4.788124, 2.3946, 7200, 5, 1), -- Canal Frenzy +(@CGUID+353, 15505, 509, 1, 1, -8938.794, 1854.301, 2.765879, 5.864306, 7200, 5, 1), -- Canal Frenzy +(@CGUID+354, 15505, 509, 1, 1, -8939.113, 1846.925, 2.428802, 4.869469, 7200, 5, 1), -- Canal Frenzy +(@CGUID+355, 15505, 509, 1, 1, -8947.23, 1868.441, 4.382745, 0.93376, 7200, 5, 1), -- Canal Frenzy +(@CGUID+356, 15505, 509, 1, 1, -8972.435, 1825.497, 3.846474, 0.122173, 7200, 5, 1), -- Canal Frenzy +(@CGUID+357, 15505, 509, 1, 1, -8974.198, 1807.207, 1.86357, 5.270895, 7200, 5, 1), -- Canal Frenzy +(@CGUID+358, 15505, 509, 1, 1, -8981.374, 1815.486, 4.08643, 5.166174, 7200, 5, 1), -- Canal Frenzy +(@CGUID+359, 15505, 509, 1, 1, -8989.232, 1811.111, 5.656726, 5.794493, 7200, 5, 1), -- Canal Frenzy +(@CGUID+360, 15505, 509, 1, 1, -8989.631, 1822.99, 6.513769, 0.4712389, 7200, 5, 1), -- Canal Frenzy +(@CGUID+361, 15514, 509, 1, 1, -9234.326, 1243.826, -63.52806, 3.490659, 7200, 0, 0), -- Buru Egg +(@CGUID+362, 15514, 509, 1, 1, -9243.427, 1280.498, -63.59377, 3.822271, 7200, 0, 0), -- Buru Egg +(@CGUID+363, 15514, 509, 1, 1, -9263.014, 1295.236, -63.80813, 1.797689, 7200, 0, 0), -- Buru Egg +(@CGUID+364, 15514, 509, 1, 1, -9270.393, 1243.896, -63.76731, 2.722714, 7200, 0, 0), -- Buru Egg +(@CGUID+365, 15514, 509, 1, 1, -9300.067, 1305.085, -63.69709, 4.18879, 7200, 0, 0), -- Buru Egg +(@CGUID+366, 15514, 509, 1, 1, -9300.189, 1266.665, -63.74272, 0.2617994, 7200, 0, 0), -- Buru Egg +(@CGUID+367, 15590, 509, 1, 1, -9188.444, 1940.21, 85.63905, 3.176499, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+368, 15590, 509, 1, 1, -9188.444, 1940.21, 85.63905, 3.176499, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+369, 15590, 509, 1, 1, -9244.413, 1808.983, 85.63908, 5.637414, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+370, 15590, 509, 1, 1, -9248.413, 1974.83, 85.63908, 5.899213, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+371, 15590, 509, 1, 1, -9282.08, 1887.34, 85.63908, 2.007129, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+372, 15590, 509, 1, 1, -9282.08, 1887.34, 85.63908, 2.007129, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+373, 15590, 509, 1, 1, -9299.727, 1748.453, 85.63907, 1.448623, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+374, 15590, 509, 1, 1, -9357.861, 1929.079, 85.63907, 1.064651, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+375, 15590, 509, 1, 1, -9357.861, 1929.079, 85.63907, 1.064651, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+376, 15590, 509, 1, 1, -9367.171, 1780.888, 85.63908, 1.902409, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+377, 15590, 509, 1, 1, -9367.171, 1780.888, 85.63908, 1.902409, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+378, 15590, 509, 1, 1, -9383.292, 2012.681, 85.65106, 2.932153, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+379, 15590, 509, 1, 1, -9383.292, 2012.681, 85.65106, 2.932153, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+380, 15590, 509, 1, 1, -9406.096, 1862.376, 85.63908, 6.230825, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+381, 15590, 509, 1, 1, -9407.718, 1960.211, 85.63906, 1.117011, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+382, 15590, 509, 1, 1, -9432.396, 1782.529, 85.63908, 5.864306, 7200, 0, 0), -- Ossirian Crystal Trigger +(@CGUID+383, 15590, 509, 1, 1, -9506.192, 1865.572, 85.63909, 4.276057, 7200, 0, 0); -- Ossirian Crystal Trigger + +DELETE FROM `creature_template_addon` WHERE `entry` IN (15324,15335,15387,15505,15339,15341,15385,15428); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(15324,0,1,0, '18950'),(15335,0,1,0, '18950'),(15387,0,1,0, '18950'),(15505,0,1,0, '18943'), +(15339,0,1,0, '25176'),(15341,0,1,0, '18943'),(15385,0,1,0, '25462'),(15428,0,1,0, '25160'); + +-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT' +SET @NPC := @CGUID+216; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9248.026,`position_y`=1888.945,`position_z`=85.68073 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9248.026,1888.945,85.68073,0,0,0,0,100,0), +(@PATH,2,-9282.023,1855.383,85.5974,0,0,0,0,100,0), +(@PATH,3,-9311.62,1831.059,84.10042,0,0,0,0,100,0), +(@PATH,4,-9339.822,1823.54,85.67978,0,0,0,0,100,0), +(@PATH,5,-9336.083,1788.304,85.67978,0,0,0,0,100,0), +(@PATH,6,-9373.787,1788.205,85.68073,0,0,0,0,100,0), +(@PATH,7,-9392.846,1821.798,85.68074,0,0,0,0,100,0), +(@PATH,8,-9396.511,1850.486,85.68074,0,0,0,0,100,0), +(@PATH,9,-9409.217,1865.23,85.68074,0,0,0,0,100,0), +(@PATH,10,-9438.716,1862.457,85.68074,0,0,0,0,100,0), +(@PATH,11,-9458.922,1889.078,85.68074,0,0,0,0,100,0), +(@PATH,12,-9451.585,1908.686,85.67978,0,0,0,0,100,0), +(@PATH,13,-9424.979,1921.917,85.58256,0,0,0,0,100,0), +(@PATH,14,-9399.763,1928.021,85.64656,0,0,0,0,100,0), +(@PATH,15,-9383.525,1958.783,85.68073,0,0,0,0,100,0), +(@PATH,16,-9371.938,1976.018,85.68073,0,0,0,0,100,0), +(@PATH,17,-9344.856,2007.821,85.68074,0,0,0,0,100,0), +(@PATH,18,-9315.889,2002.974,85.68073,0,0,0,0,100,0), +(@PATH,19,-9305.473,1976.09,85.68074,0,0,0,0,100,0), +(@PATH,20,-9294.416,1948.307,85.68074,0,0,0,0,100,0), +(@PATH,21,-9259.192,1938.78,85.68074,0,0,0,0,100,0), +(@PATH,22,-9234.046,1921.629,85.68074,0,0,0,0,100,0); + +-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT' +SET @NPC := @CGUID+217; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9184.5,`position_y`=1854.158,`position_z`=85.68073 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9184.5,1854.158,85.68073,0,0,0,0,100,0), +(@PATH,2,-9216.548,1824.755,85.68074,0,0,0,0,100,0), +(@PATH,3,-9250.388,1789.818,85.68074,0,0,0,0,100,0), +(@PATH,4,-9273.942,1769.737,85.67978,0,0,0,0,100,0), +(@PATH,5,-9287.727,1753.579,85.68074,0,0,0,0,100,0), +(@PATH,6,-9322.813,1721.81,87.2582,0,0,0,0,100,0), +(@PATH,7,-9353.575,1722.876,87.03452,0,0,0,0,100,0), +(@PATH,8,-9361.314,1755.279,85.68076,0,0,0,0,100,0), +(@PATH,9,-9364.741,1787.446,85.67978,0,0,0,0,100,0), +(@PATH,10,-9382.464,1800.235,85.68074,0,0,0,0,100,0), +(@PATH,11,-9383.027,1827.17,86.00362,0,0,0,0,100,0), +(@PATH,12,-9390.321,1846.647,85.68074,0,0,0,0,100,0), +(@PATH,13,-9419.723,1858.245,85.57466,0,0,0,0,100,0), +(@PATH,14,-9449.339,1865.135,85.68074,0,0,0,0,100,0), +(@PATH,15,-9486.292,1872.536,85.68074,0,0,0,0,100,0), +(@PATH,16,-9507.497,1867.104,85.68071,0,0,0,0,100,0), +(@PATH,17,-9527.903,1882.607,85.68071,0,0,0,0,100,0), +(@PATH,18,-9510.689,1925.589,85.68073,0,0,0,0,100,0), +(@PATH,19,-9488.487,1946.937,85.67978,0,0,0,0,100,0), +(@PATH,20,-9459.86,1976.461,85.92978,0,0,0,0,100,0), +(@PATH,21,-9442.087,1990.908,85.92978,0,0,0,0,100,0), +(@PATH,22,-9407.938,2024.798,85.93073,0,0,0,0,100,0), +(@PATH,23,-9380.547,2051.861,85.94083,0,0,0,0,100,0), +(@PATH,24,-9353.088,2075.302,86.06718,0,0,0,0,100,0), +(@PATH,25,-9322.948,2076.674,86.80594,0,0,0,0,100,0), +(@PATH,26,-9315.573,2050.009,85.64993,0,0,0,0,100,0), +(@PATH,27,-9314.585,2018.313,85.68073,0,0,0,0,100,0), +(@PATH,28,-9302.906,1992.931,85.68074,0,0,0,0,100,0), +(@PATH,29,-9307.348,1964.604,85.652,0,0,0,0,100,0), +(@PATH,30,-9282.028,1949.146,85.68074,0,0,0,0,100,0), +(@PATH,31,-9252.31,1944.22,85.68074,0,0,0,0,100,0), +(@PATH,32,-9227.021,1928.589,85.68074,0,0,0,0,100,0), +(@PATH,33,-9189.054,1932.123,85.68071,0,0,0,0,100,0), +(@PATH,34,-9158.877,1920.914,86.81694,0,0,0,0,100,0), +(@PATH,35,-9163.66,1874.253,86.90241,0,0,0,0,100,0); + +-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT' +SET @NPC := @CGUID+218; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9266.736,`position_y`=1785.315,`position_z`=85.67978 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9266.736,1785.315,85.67978,0,0,0,0,100,0), +(@PATH,2,-9254.919,1821.132,85.68074,0,0,0,0,100,0), +(@PATH,3,-9229.319,1826.478,85.68074,0,0,0,0,100,0), +(@PATH,4,-9219.66,1845.915,85.68073,0,0,0,0,100,0), +(@PATH,5,-9229.024,1871.725,85.68073,0,0,0,0,100,0), +(@PATH,6,-9245.31,1880.665,85.68073,0,0,0,0,100,0), +(@PATH,7,-9270.313,1884.48,85.68073,0,0,0,0,100,0), +(@PATH,8,-9290.14,1888.328,85.68073,0,0,0,0,100,0), +(@PATH,9,-9323.363,1912.306,85.58256,0,0,0,0,100,0), +(@PATH,10,-9346.232,1921.884,85.67978,0,0,0,0,100,0), +(@PATH,11,-9365.159,1955.121,85.63752,0,0,0,0,100,0), +(@PATH,12,-9373.188,1980.685,85.68073,0,0,0,0,100,0), +(@PATH,13,-9396.845,2005.119,85.68073,0,0,0,0,100,0), +(@PATH,14,-9424.114,2004.707,85.93073,0,0,0,0,100,0), +(@PATH,15,-9439.311,1988.515,85.92978,0,0,0,0,100,0), +(@PATH,16,-9442.091,1961.605,85.23379,0,0,0,0,100,0), +(@PATH,17,-9430.677,1936.73,85.55478,0,0,0,0,100,0), +(@PATH,18,-9423.523,1916.457,85.58256,0,0,0,0,100,0), +(@PATH,19,-9388.256,1899.98,86.93074,0,0,0,0,100,0), +(@PATH,20,-9365.732,1875.688,85.68073,0,0,0,0,100,0), +(@PATH,21,-9332.013,1843.525,85.67978,0,0,0,0,100,0), +(@PATH,22,-9335.819,1822.33,85.5914,0,0,0,0,100,0), +(@PATH,23,-9333.703,1798.843,84.41318,0,0,0,0,100,0), +(@PATH,24,-9323.364,1773.62,85.55771,0,0,0,0,100,0), +(@PATH,25,-9293.272,1760.073,85.68074,0,0,0,0,100,0); + +-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT' +SET @NPC := @CGUID+219; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9252.741,`position_y`=1943.686,`position_z`=85.68074 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9252.741,1943.686,85.68074,0,0,0,0,100,0), +(@PATH,2,-9222.651,1931.318,85.68074,0,0,0,0,100,0), +(@PATH,3,-9191.619,1942.506,85.68071,0,0,0,0,100,0), +(@PATH,4,-9170.24,1922.948,85.68071,0,0,0,0,100,0), +(@PATH,5,-9169.914,1879.729,85.68073,0,0,0,0,100,0), +(@PATH,6,-9195.714,1851.033,85.68073,0,0,0,0,100,0), +(@PATH,7,-9223.459,1817.724,85.68074,0,0,0,0,100,0), +(@PATH,8,-9244.517,1803.858,85.68074,0,0,0,0,100,0), +(@PATH,9,-9261.152,1787.29,85.68074,0,0,0,0,100,0), +(@PATH,10,-9284.998,1755.206,85.68074,0,0,0,0,100,0), +(@PATH,11,-9308.692,1733.549,85.68074,0,0,0,0,100,0), +(@PATH,12,-9345.574,1727.55,85.65805,0,0,0,0,100,0), +(@PATH,13,-9378.37,1742.617,85.68076,0,0,0,0,100,0), +(@PATH,14,-9376.036,1778.404,85.68073,0,0,0,0,100,0), +(@PATH,15,-9391.478,1813.657,85.68074,0,0,0,0,100,0), +(@PATH,16,-9395.252,1844.675,85.68074,0,0,0,0,100,0), +(@PATH,17,-9431.688,1857.969,85.68074,0,0,0,0,100,0), +(@PATH,18,-9457.778,1865.383,85.68074,0,0,0,0,100,0), +(@PATH,19,-9490.235,1866.432,85.50545,0,0,0,0,100,0), +(@PATH,20,-9530.864,1870.682,86.19707,0,0,0,0,100,0), +(@PATH,21,-9526.759,1911.277,86.01886,0,0,0,0,100,0), +(@PATH,22,-9496.368,1944.791,85.67978,0,0,0,0,100,0), +(@PATH,23,-9466.16,1972.771,85.92978,0,0,0,0,100,0), +(@PATH,24,-9439.001,1997.835,85.92978,0,0,0,0,100,0), +(@PATH,25,-9406.588,2025.468,85.93073,0,0,0,0,100,0), +(@PATH,26,-9381.611,2054.042,85.94083,0,0,0,0,100,0), +(@PATH,27,-9370.005,2074.14,86.93733,0,0,0,0,100,0), +(@PATH,28,-9326.063,2072.066,86.11478,0,0,0,0,100,0), +(@PATH,29,-9317.672,2030.484,85.68073,0,0,0,0,100,0), +(@PATH,30,-9309.036,1982.96,85.68074,0,0,0,0,100,0), +(@PATH,31,-9290.975,1947.814,85.68074,0,0,0,0,100,0); + +-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT' +SET @NPC := @CGUID+220; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9338.638,`position_y`=1812.094,`position_z`=85.67978 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9338.638,1812.094,85.67978,0,0,0,0,100,0), +(@PATH,2,-9349.664,1779.623,85.67978,0,0,0,0,100,0), +(@PATH,3,-9367.894,1745.984,85.68076,0,0,0,0,100,0), +(@PATH,4,-9352.953,1729.101,85.65805,0,0,0,0,100,0), +(@PATH,5,-9311.624,1739.255,85.68074,0,0,0,0,100,0), +(@PATH,6,-9327.572,1781.838,85.6329,0,0,0,0,100,0), +(@PATH,7,-9367.602,1793.721,85.68073,0,0,0,0,100,0), +(@PATH,8,-9389.63,1822.929,85.68074,0,0,0,0,100,0), +(@PATH,9,-9375.203,1855.041,85.68074,0,0,0,0,100,0), +(@PATH,10,-9361.834,1883.146,85.68073,0,0,0,0,100,0), +(@PATH,11,-9367.618,1915.205,85.68074,0,0,0,0,100,0), +(@PATH,12,-9369.153,1949.937,85.68073,0,0,0,0,100,0), +(@PATH,13,-9359.215,1982.555,85.86217,0,0,0,0,100,0), +(@PATH,14,-9347.963,2014.867,85.68074,0,0,0,0,100,0), +(@PATH,15,-9367.603,2028.901,85.68073,0,0,0,0,100,0), +(@PATH,16,-9373.234,2057.752,86.05863,0,0,0,0,100,0), +(@PATH,17,-9356.573,2072.664,86.02653,0,0,0,0,100,0), +(@PATH,18,-9327.185,2070.252,86.02213,0,0,0,0,100,0), +(@PATH,19,-9315.275,2050.388,85.64993,0,0,0,0,100,0), +(@PATH,20,-9316.94,2021.346,85.68073,0,0,0,0,100,0), +(@PATH,21,-9309.85,1985.53,85.68074,0,0,0,0,100,0), +(@PATH,22,-9315.965,1950.781,85.652,0,0,0,0,100,0), +(@PATH,23,-9321.123,1910.298,85.58256,0,0,0,0,100,0), +(@PATH,24,-9343.007,1881.461,85.68073,0,0,0,0,100,0), +(@PATH,25,-9341.981,1844.112,85.15749,0,0,0,0,100,0); + +-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT' +SET @NPC := @CGUID+221; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9373.941,`position_y`=2005.845,`position_z`=85.68073 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9373.941,2005.845,85.68073,0,0,0,0,100,0), +(@PATH,2,-9352.195,2015.95,85.68074,0,0,0,0,100,0), +(@PATH,3,-9317.304,2017.394,85.68073,0,0,0,0,100,0), +(@PATH,4,-9306.902,1975.931,85.68074,0,0,0,0,100,0), +(@PATH,5,-9294.695,1950.731,85.68074,0,0,0,0,100,0), +(@PATH,6,-9265.143,1937.398,85.68074,0,0,0,0,100,0), +(@PATH,7,-9240.809,1920.022,85.68074,0,0,0,0,100,0), +(@PATH,8,-9236.777,1886.178,85.68073,0,0,0,0,100,0), +(@PATH,9,-9257.813,1873.583,85.68073,0,0,0,0,100,0), +(@PATH,10,-9285.015,1845.869,85.5974,0,0,0,0,100,0), +(@PATH,11,-9317.275,1834.302,85.67978,0,0,0,0,100,0), +(@PATH,12,-9336.368,1823.559,85.67978,0,0,0,0,100,0), +(@PATH,13,-9338.676,1791.969,85.67978,0,0,0,0,100,0), +(@PATH,14,-9373.688,1782.111,85.68073,0,0,0,0,100,0), +(@PATH,15,-9389.025,1814.412,85.68074,0,0,0,0,100,0), +(@PATH,16,-9392.569,1842.455,85.68074,0,0,0,0,100,0), +(@PATH,17,-9416.333,1859.258,85.80574,0,0,0,0,100,0), +(@PATH,18,-9444.572,1859.874,85.68074,0,0,0,0,100,0), +(@PATH,19,-9468.98,1877.569,85.68074,0,0,0,0,100,0), +(@PATH,20,-9457.439,1907.662,85.67978,0,0,0,0,100,0), +(@PATH,21,-9429.858,1935.159,85.55478,0,0,0,0,100,0), +(@PATH,22,-9406.939,1970.748,86.69244,0,0,0,0,100,0), +(@PATH,23,-9385.19,1986.798,85.68073,0,0,0,0,100,0); + +-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT' +SET @NPC := @CGUID+222; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9166.672,`position_y`=1901.352,`position_z`=85.68071 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9166.672,1901.352,85.68071,0,0,0,0,100,0), +(@PATH,2,-9180.448,1880.267,85.68073,0,0,0,0,100,0), +(@PATH,3,-9213.866,1872.235,85.68073,0,0,0,0,100,0), +(@PATH,4,-9249.758,1884.736,85.68073,0,0,0,0,100,0), +(@PATH,5,-9278.231,1876.297,85.68073,0,0,0,0,100,0), +(@PATH,6,-9306.932,1891.425,85.68074,0,0,0,0,100,0), +(@PATH,7,-9352.966,1877.49,85.68073,0,0,0,0,100,0), +(@PATH,8,-9377.938,1866.495,85.68074,0,0,0,0,100,0), +(@PATH,9,-9409.548,1865.281,85.68074,0,0,0,0,100,0), +(@PATH,10,-9446.503,1862.634,85.68074,0,0,0,0,100,0), +(@PATH,11,-9485.57,1861.776,86.05574,0,0,0,0,100,0), +(@PATH,12,-9520.958,1858.505,85.6807,0,0,0,0,100,0), +(@PATH,13,-9527.915,1885.158,85.68071,0,0,0,0,100,0), +(@PATH,14,-9480.079,1874.759,85.68074,0,0,0,0,100,0), +(@PATH,15,-9454.199,1899.666,85.68074,0,0,0,0,100,0), +(@PATH,16,-9424.421,1915.016,85.58256,0,0,0,0,100,0), +(@PATH,17,-9382.796,1911.83,85.68074,0,0,0,0,100,0), +(@PATH,18,-9350.083,1908.802,85.67978,0,0,0,0,100,0), +(@PATH,19,-9317.604,1914.786,85.90751,0,0,0,0,100,0), +(@PATH,20,-9294.263,1930.234,85.68073,0,0,0,0,100,0), +(@PATH,21,-9273.63,1940.642,85.68074,0,0,0,0,100,0), +(@PATH,22,-9244.164,1935.673,85.68074,0,0,0,0,100,0), +(@PATH,23,-9217.478,1932.629,85.68074,0,0,0,0,100,0), +(@PATH,24,-9177.326,1935.63,85.68071,0,0,0,0,100,0); + +-- Pathing for Anubisath Guardian Entry: 15355 'TDB FORMAT' +SET @NPC := @CGUID+223; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9172.666,`position_y`=1878.279,`position_z`=85.68073 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9172.666,1878.279,85.68073,0,0,0,0,100,0), +(@PATH,2,-9174.009,1917.66,85.68071,0,0,0,0,100,0), +(@PATH,3,-9211.638,1928.865,85.68074,0,0,0,0,100,0), +(@PATH,4,-9227.843,1913.313,85.68074,0,0,0,0,100,0), +(@PATH,5,-9260.224,1888.819,85.90156,0,0,0,0,100,0), +(@PATH,6,-9288.68,1887.306,85.68073,0,0,0,0,100,0), +(@PATH,7,-9322.48,1900.894,85.58256,0,0,0,0,100,0), +(@PATH,8,-9350.107,1903.339,85.67978,0,0,0,0,100,0), +(@PATH,9,-9366.493,1879.411,85.68073,0,0,0,0,100,0), +(@PATH,10,-9377.524,1841.84,85.68074,0,0,0,0,100,0), +(@PATH,11,-9384.171,1822.345,85.68074,0,0,0,0,100,0), +(@PATH,12,-9374.88,1798.042,85.68073,0,0,0,0,100,0), +(@PATH,13,-9366.794,1776.835,85.68073,0,0,0,0,100,0), +(@PATH,14,-9339.757,1770.504,86.38388,0,0,0,0,100,0), +(@PATH,15,-9321.449,1758.749,85.56721,0,0,0,0,100,0), +(@PATH,16,-9322.691,1729.77,85.69717,0,0,0,0,100,0), +(@PATH,17,-9349.976,1722.141,87.03061,0,0,0,0,100,0), +(@PATH,18,-9370.238,1754.357,85.68076,0,0,0,0,100,0), +(@PATH,19,-9344.755,1789.065,85.67978,0,0,0,0,100,0), +(@PATH,20,-9337.997,1823.515,85.67978,0,0,0,0,100,0), +(@PATH,21,-9338.635,1860.298,85.58352,0,0,0,0,100,0), +(@PATH,22,-9343.844,1902.833,86.33212,0,0,0,0,100,0), +(@PATH,23,-9356.249,1927.595,85.67978,0,0,0,0,100,0), +(@PATH,24,-9361.627,1950.974,85.26081,0,0,0,0,100,0), +(@PATH,25,-9365.068,1978.835,85.56127,0,0,0,0,100,0), +(@PATH,26,-9370.208,2007.365,85.68073,0,0,0,0,100,0), +(@PATH,27,-9379.047,2042.119,85.94083,0,0,0,0,100,0), +(@PATH,28,-9358.38,2067.382,86.02653,0,0,0,0,100,0), +(@PATH,29,-9326.092,2045.334,85.64993,0,0,0,0,100,0), +(@PATH,30,-9321.812,2013.535,85.68073,0,0,0,0,100,0), +(@PATH,31,-9312.634,1989.898,85.68074,0,0,0,0,100,0), +(@PATH,32,-9320.132,1941.708,85.652,0,0,0,0,100,0), +(@PATH,33,-9334.301,1916.916,85.67978,0,0,0,0,100,0), +(@PATH,34,-9363.942,1895.521,85.68073,0,0,0,0,100,0), +(@PATH,35,-9385.781,1880.747,86.05794,0,0,0,0,100,0), +(@PATH,36,-9417.543,1860.298,85.97346,0,0,0,0,100,0), +(@PATH,37,-9446.719,1864.315,85.68074,0,0,0,0,100,0), +(@PATH,38,-9482.172,1869.57,85.68074,0,0,0,0,100,0), +(@PATH,39,-9529.659,1878.282,85.84587,0,0,0,0,100,0), +(@PATH,40,-9513.365,1858.603,85.6807,0,0,0,0,100,0), +(@PATH,41,-9475.059,1881.233,85.68074,0,0,0,0,100,0), +(@PATH,42,-9447.695,1905.845,85.67978,0,0,0,0,100,0), +(@PATH,43,-9414.993,1911.188,85.58256,0,0,0,0,100,0), +(@PATH,44,-9382.191,1909.415,85.68074,0,0,0,0,100,0), +(@PATH,45,-9351.412,1910.773,85.67978,0,0,0,0,100,0), +(@PATH,46,-9310.615,1922.279,85.58256,0,0,0,0,100,0), +(@PATH,47,-9277.019,1933.476,85.68074,0,0,0,0,100,0), +(@PATH,48,-9235.7,1928.599,85.68074,0,0,0,0,100,0), +(@PATH,49,-9224.213,1883.244,85.68073,0,0,0,0,100,0), +(@PATH,50,-9199.386,1867.022,85.68073,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+175; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9033.357,`position_y`=1700.726,`position_z`=21.50263 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9033.357,1700.726,21.50263,0,0,0,0,100,0), +(@PATH,2,-9015.379,1687.783,21.51133,0,0,0,0,100,0), +(@PATH,3,-8994.662,1677.224,21.51133,0,0,0,0,100,0), +(@PATH,4,-8978.021,1677.923,21.51133,0,0,0,0,100,0), +(@PATH,5,-8972.52,1687.417,21.51133,0,0,0,0,100,0), +(@PATH,6,-8984.521,1701.282,21.51128,0,0,0,0,100,0), +(@PATH,7,-9001.419,1714.948,21.44322,0,0,0,0,100,0), +(@PATH,8,-9022.22,1741.963,21.47298,0,0,0,0,100,0), +(@PATH,9,-9031.46,1752.775,21.47298,0,0,0,0,100,0), +(@PATH,10,-9055.802,1756.606,21.51128,0,0,0,0,100,0), +(@PATH,11,-9067.387,1766.724,21.51128,0,0,0,0,100,0), +(@PATH,12,-9072.949,1783.319,21.51128,0,0,0,0,100,0), +(@PATH,13,-9081.565,1794.618,21.51128,0,0,0,0,100,0), +(@PATH,14,-9091.146,1792.92,21.51128,0,0,0,0,100,0), +(@PATH,15,-9095.299,1779.993,21.51128,0,0,0,0,100,0), +(@PATH,16,-9094.856,1764.921,21.51128,0,0,0,0,100,0), +(@PATH,17,-9080.542,1740.715,21.51128,0,0,0,0,100,0), +(@PATH,18,-9063.872,1726.509,21.50263,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+176; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9042.727,`position_y`=1737.669,`position_z`=21.51128 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9042.727,1737.669,21.51128,0,0,0,0,100,0), +(@PATH,2,-9074.525,1763.811,21.63628,0,0,0,0,100,0), +(@PATH,3,-9042.727,1737.669,21.51128,0,0,0,0,100,0), +(@PATH,4,-9016.15,1713.575,21.44322,0,0,0,0,100,0), +(@PATH,5,-8996.683,1694.021,21.88633,0,0,0,0,100,0), +(@PATH,6,-9016.15,1713.575,21.44322,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+177; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8912.597,`position_y`=1750.176,`position_z`=21.51128 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8912.597,1750.176,21.51128,0,0,0,0,100,0), +(@PATH,2,-8887.421,1790.745,21.89122,0,0,0,0,100,0), +(@PATH,3,-8875.27,1810.156,21.52765,0,0,0,0,100,0), +(@PATH,4,-8857.879,1833.748,21.51134,0,0,0,0,100,0), +(@PATH,5,-8875.27,1810.156,21.52765,0,0,0,0,100,0), +(@PATH,6,-8887.421,1790.745,21.89122,0,0,0,0,100,0), +(@PATH,7,-8912.597,1750.176,21.51128,0,0,0,0,100,0), +(@PATH,8,-8939.655,1710.923,21.51128,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+178; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9042.861,`position_y`=1841.39,`position_z`=21.51129 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9042.861,1841.39,21.51129,0,0,0,0,100,0), +(@PATH,2,-9068.371,1808.513,21.51134,0,0,0,0,100,0), +(@PATH,3,-9042.861,1841.39,21.51129,0,0,0,0,100,0), +(@PATH,4,-9027.129,1875.23,21.73922,0,0,0,0,100,0), +(@PATH,5,-9010.076,1901.59,21.51132,0,0,0,0,100,0), +(@PATH,6,-8985.672,1928.493,21.39046,0,0,0,0,100,0), +(@PATH,7,-9010.076,1901.59,21.51132,0,0,0,0,100,0), +(@PATH,8,-9027.129,1875.23,21.73922,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+179; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8783.435,`position_y`=2068.937,`position_z`=21.51132 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8783.435,2068.937,21.51132,0,0,0,0,100,0), +(@PATH,2,-8783.41,2098.071,21.99277,0,0,0,0,100,0), +(@PATH,3,-8790.493,2121.913,21.39743,0,0,0,0,100,0), +(@PATH,4,-8804.847,2146.174,21.5113,0,0,0,0,100,0), +(@PATH,5,-8816.018,2179.885,21.5113,0,0,0,0,100,0), +(@PATH,6,-8825.034,2192.031,21.5113,0,0,0,0,100,0), +(@PATH,7,-8816.018,2179.885,21.5113,0,0,0,0,100,0), +(@PATH,8,-8804.847,2146.174,21.5113,0,0,0,0,100,0), +(@PATH,9,-8790.493,2121.913,21.39743,0,0,0,0,100,0), +(@PATH,10,-8783.41,2098.071,21.99277,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+180; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8973.863,`position_y`=2090.781,`position_z`=21.51132 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8973.863,2090.781,21.51132,0,0,0,0,100,0), +(@PATH,2,-8965.227,2063.428,21.51132,0,0,0,0,100,0), +(@PATH,3,-8973.863,2090.781,21.51132,0,0,0,0,100,0), +(@PATH,4,-8997.472,2114.756,21.51132,0,0,0,0,100,0), +(@PATH,5,-9038.394,2142.94,21.51132,0,0,0,0,100,0), +(@PATH,6,-9071.605,2173.132,21.51134,0,0,0,0,100,0), +(@PATH,7,-9100.489,2204.315,21.51138,0,0,0,0,100,0), +(@PATH,8,-9128.889,2235.459,21.51138,0,0,0,0,100,0), +(@PATH,9,-9100.489,2204.315,21.51138,0,0,0,0,100,0), +(@PATH,10,-9071.605,2173.132,21.51134,0,0,0,0,100,0), +(@PATH,11,-9038.394,2142.94,21.51132,0,0,0,0,100,0), +(@PATH,12,-8997.472,2114.756,21.51132,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+181; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8816.171,`position_y`=1898.789,`position_z`=21.44084 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8816.171,1898.789,21.44084,0,0,0,0,100,0), +(@PATH,2,-8839.262,1867.66,21.49597,0,0,0,0,100,0), +(@PATH,3,-8816.171,1898.789,21.44084,0,0,0,0,100,0), +(@PATH,4,-8802.058,1921.186,21.51134,0,0,0,0,100,0), +(@PATH,5,-8793.903,1947.559,21.41075,0,0,0,0,100,0), +(@PATH,6,-8790.971,1971.102,21.51134,0,0,0,0,100,0), +(@PATH,7,-8789.137,2003.844,21.50675,0,0,0,0,100,0), +(@PATH,8,-8786.372,2039.531,21.51132,0,0,0,0,100,0), +(@PATH,9,-8789.137,2003.844,21.50675,0,0,0,0,100,0), +(@PATH,10,-8790.971,1971.102,21.51134,0,0,0,0,100,0), +(@PATH,11,-8793.903,1947.559,21.41075,0,0,0,0,100,0), +(@PATH,12,-8802.058,1921.186,21.51134,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+182; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8969.802,`position_y`=2023.487,`position_z`=22.20616 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8969.802,2023.487,22.20616,0,0,0,0,100,0), +(@PATH,2,-8944.742,2022.87,21.63633,0,0,0,0,100,0), +(@PATH,3,-8921.641,2023.073,22.70727,0,0,0,0,100,0), +(@PATH,4,-8898.989,2022.108,20.80474,0,0,0,0,100,0), +(@PATH,5,-8863.61,2021.74,20.80473,0,0,0,0,100,0), +(@PATH,6,-8823.653,2020.322,22.78971,0,0,0,0,100,0), +(@PATH,7,-8779.903,2018.759,21.7045,0,0,0,0,100,0), +(@PATH,8,-8823.653,2020.322,22.78971,0,0,0,0,100,0), +(@PATH,9,-8822.38,2017.285,22.79048,0,0,0,0,100,0), +(@PATH,10,-8863.61,2021.74,21.66928,0,0,0,0,100,0), +(@PATH,11,-8898.989,2022.108,20.80474,0,0,0,0,100,0), +(@PATH,12,-8921.641,2023.073,22.70727,0,0,0,0,100,0), +(@PATH,13,-8944.742,2022.87,21.63633,0,0,0,0,100,0); + +-- Pathing for Obsidian Destroyer Entry: 15338 'TDB FORMAT' +SET @NPC := @CGUID+183; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8892.271,`position_y`=1893.26,`position_z`=21.65431 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '19818'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8892.271,1893.26,21.65431,0,0,0,0,100,0), +(@PATH,2,-8920.27,1911.372,21.77089,0,0,0,0,100,0), +(@PATH,3,-8947.984,1930.219,22.32584,0,0,0,0,100,0), +(@PATH,4,-8976.198,1948.563,21.51134,0,0,0,0,100,0), +(@PATH,5,-8947.984,1930.219,22.32584,0,0,0,0,100,0), +(@PATH,6,-8920.27,1911.372,21.77089,0,0,0,0,100,0), +(@PATH,7,-8892.271,1893.26,21.77088,0,0,0,0,100,0), +(@PATH,8,-8868.629,1877.659,21.87304,0,0,0,0,100,0), +(@PATH,9,-8832.841,1852.986,21.54105,0,0,0,0,100,0), +(@PATH,10,-8868.629,1877.659,21.87304,0,0,0,0,100,0); + +-- Pathing for Flesh Hunter Entry: 15335 'TDB FORMAT' +SET @NPC := @CGUID+164; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9043.481,`position_y`=2118.309,`position_z`=21.77282 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9043.481,2118.309,21.77282,0,0,0,0,100,0), +(@PATH,2,-9015.23,2102.794,22.79501,0,0,0,0,100,0), +(@PATH,3,-8984.772,2078.662,21.99447,0,0,0,0,100,0), +(@PATH,4,-8946.997,2073.267,22.66354,0,0,0,0,100,0), +(@PATH,5,-8946.354,2104.688,23.20453,0,0,0,0,100,0), +(@PATH,6,-8979.36,2128.562,22.51132,0,0,0,0,100,0), +(@PATH,7,-9000.776,2157.609,23.0173,0,0,0,0,100,0), +(@PATH,8,-8997.853,2188.157,24.82291,0,0,0,0,100,0), +(@PATH,9,-8980.488,2222.645,24.47016,0,0,0,0,100,0), +(@PATH,10,-8947.694,2247.549,26.53898,0,0,0,0,100,0), +(@PATH,11,-8925.727,2254.902,22.93172,0,0,0,0,100,0), +(@PATH,12,-8899.796,2231.063,21.50976,0,0,0,0,100,0), +(@PATH,13,-8774.992,2122.031,27.18796,0,0,0,0,100,0), +(@PATH,14,-8788.56,2156.315,22.57724,0,0,0,0,100,0), +(@PATH,15,-8824.089,2150.349,21.5113,0,0,0,0,100,0), +(@PATH,16,-8847.282,2160.686,22.8295,0,0,0,0,100,0), +(@PATH,17,-8878.708,2195.174,24.06134,0,0,0,0,100,0), +(@PATH,18,-8899.255,2224.002,21.50976,0,0,0,0,100,0), +(@PATH,19,-8927.709,2249.856,23.44112,0,0,0,0,100,0), +(@PATH,20,-8943.206,2244.535,26.44963,0,0,0,0,100,0), +(@PATH,21,-8975.5,2223.893,23.89484,0,0,0,0,100,0), +(@PATH,22,-8992.835,2203.356,24.46564,0,0,0,0,100,0), +(@PATH,23,-9000.075,2177.49,24.70543,0,0,0,0,100,0), +(@PATH,24,-9022.258,2168.586,25.53624,0,0,0,0,100,0), +(@PATH,25,-9048.837,2191.075,25.16519,0,0,0,0,100,0), +(@PATH,26,-9067.234,2222.022,23.55216,0,0,0,0,100,0), +(@PATH,27,-9091.356,2246.307,25.71063,0,0,0,0,100,0), +(@PATH,28,-9117.254,2253.088,23.81876,0,0,0,0,100,0), +(@PATH,29,-9142.09,2238.851,22.44915,0,0,0,0,100,0), +(@PATH,30,-9146.989,2216.528,23.29689,0,0,0,0,100,0), +(@PATH,31,-9118.285,2185.291,22.93004,0,0,0,0,100,0), +(@PATH,32,-9102.656,2157.033,21.51134,0,0,0,0,100,0), +(@PATH,33,-9075.009,2145.98,23.58446,0,0,0,0,100,0); + +-- Pathing for Flesh Hunter Entry: 15335 'TDB FORMAT' +SET @NPC := @CGUID+165; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8937.627,`position_y`=1698.941,`position_z`=21.93345 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8937.627,1698.941,21.93345,0,0,0,0,100,0), +(@PATH,2,-8920.532,1729.919,21.51128,0,0,0,0,100,0), +(@PATH,3,-8908.218,1761.801,21.51128,0,0,0,0,100,0), +(@PATH,4,-8885.667,1785.599,21.55186,0,0,0,0,100,0), +(@PATH,5,-8865.728,1829.28,21.51134,0,0,0,0,100,0), +(@PATH,6,-8873.043,1860.568,24.12182,0,0,0,0,100,0), +(@PATH,7,-8840.51,1857.832,21.51134,0,0,0,0,100,0), +(@PATH,8,-8808.15,1884.686,21.48137,0,0,0,0,100,0), +(@PATH,9,-8789.465,1924.165,21.91466,0,0,0,0,100,0), +(@PATH,10,-8785.51,1961.738,22.2678,0,0,0,0,100,0), +(@PATH,11,-8795.169,2004.241,21.50675,0,0,0,0,100,0), +(@PATH,12,-8785.291,2024.753,21.50675,0,0,0,0,100,0), +(@PATH,13,-8781.997,2063.416,21.51132,0,0,0,0,100,0), +(@PATH,14,-8785.409,2085.489,21.51132,0,0,0,0,100,0), +(@PATH,15,-8800.996,2059.075,21.54108,0,0,0,0,100,0), +(@PATH,16,-8797.33,2012.523,21.50675,0,0,0,0,100,0), +(@PATH,17,-8785.368,1995.146,21.51134,0,0,0,0,100,0), +(@PATH,18,-8796.997,1956.54,21.51133,0,0,0,0,100,0), +(@PATH,19,-8803.447,1922.115,21.51134,0,0,0,0,100,0), +(@PATH,20,-8826.821,1891.991,21.44084,0,0,0,0,100,0), +(@PATH,21,-8853.722,1857.549,21.64537,0,0,0,0,100,0), +(@PATH,22,-8875.416,1831.338,21.5401,0,0,0,0,100,0), +(@PATH,23,-8891.538,1801.722,21.40265,0,0,0,0,100,0), +(@PATH,24,-8913.353,1764.123,21.51128,0,0,0,0,100,0), +(@PATH,25,-8932.728,1722.069,21.51128,0,0,0,0,100,0), +(@PATH,26,-8953.999,1702.306,21.51128,0,0,0,0,100,0), +(@PATH,27,-8971.226,1712.679,22.30425,0,0,0,0,100,0), +(@PATH,28,-8992.638,1723.895,21.95708,0,0,0,0,100,0), +(@PATH,29,-9019.508,1750.176,21.47298,0,0,0,0,100,0), +(@PATH,30,-9050.058,1757.618,21.51128,0,0,0,0,100,0), +(@PATH,31,-9067.125,1783.419,21.51128,0,0,0,0,100,0), +(@PATH,32,-9051.433,1827.842,21.51132,0,0,0,0,100,0), +(@PATH,33,-9017.392,1854.547,21.78888,0,0,0,0,100,0), +(@PATH,34,-9005.049,1877.975,22.21676,0,0,0,0,100,0), +(@PATH,35,-9007.448,1920.794,21.51132,0,0,0,0,100,0), +(@PATH,36,-8989.702,1949.567,22.3109,0,0,0,0,100,0), +(@PATH,37,-8979.287,1983.77,21.65501,0,0,0,0,100,0), +(@PATH,38,-8973.602,2011.78,21.51134,0,0,0,0,100,0), +(@PATH,39,-8968.567,2049.794,21.88634,0,0,0,0,100,0), +(@PATH,40,-8969.888,2083.404,21.51132,0,0,0,0,100,0), +(@PATH,41,-8956.057,2078.304,21.806,0,0,0,0,100,0), +(@PATH,42,-8938.739,2045.659,22.83847,0,0,0,0,100,0), +(@PATH,43,-8939.479,2009.669,22.33628,0,0,0,0,100,0), +(@PATH,44,-8953.139,1989.581,21.85654,0,0,0,0,100,0), +(@PATH,45,-8956.321,1957.073,21.82368,0,0,0,0,100,0), +(@PATH,46,-8969.141,1927.572,22.15987,0,0,0,0,100,0), +(@PATH,47,-8989.028,1899.803,21.95286,0,0,0,0,100,0), +(@PATH,48,-9020.87,1876.037,21.51132,0,0,0,0,100,0), +(@PATH,49,-9055.008,1842.989,22.47308,0,0,0,0,100,0), +(@PATH,50,-9084.486,1817.886,25.49034,0,0,0,0,100,0), +(@PATH,51,-9097.041,1783.97,21.51128,0,0,0,0,100,0), +(@PATH,52,-9118.29,1753.874,22.52647,0,0,0,0,100,0), +(@PATH,53,-9093.203,1728.075,24.58226,0,0,0,0,100,0), +(@PATH,54,-9052.174,1708.394,21.50263,0,0,0,0,100,0), +(@PATH,55,-9020.147,1686.075,21.61656,0,0,0,0,100,0), +(@PATH,56,-8986.377,1657.262,22.46316,0,0,0,0,100,0), +(@PATH,57,-8964.914,1648.625,24.69013,0,0,0,0,100,0), +(@PATH,58,-8944.825,1659.208,24.58833,0,0,0,0,100,0); + +-- Pathing for Flesh Hunter Entry: 15335 'TDB FORMAT' +SET @NPC := @CGUID+166; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9290.099,`position_y`=1380.387,`position_z`=21.38616 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9290.099,1380.387,21.38616,0,0,0,0,100,0), +(@PATH,2,-9266.542,1382.812,21.44118,0,0,0,0,100,0), +(@PATH,3,-9243.845,1402.906,23.31999,0,0,0,0,100,0), +(@PATH,4,-9224.515,1442.994,24.32664,0,0,0,0,100,0), +(@PATH,5,-9206.087,1475.642,25.78873,0,0,0,0,100,0), +(@PATH,6,-9173.119,1482.051,21.5113,0,0,0,0,100,0), +(@PATH,7,-9176.457,1441.36,22.84715,0,0,0,0,100,0), +(@PATH,8,-9192.751,1415.595,22.71139,0,0,0,0,100,0), +(@PATH,9,-9214.301,1378.276,21.75317,0,0,0,0,100,0), +(@PATH,10,-9213.823,1340.182,21.47529,0,0,0,0,100,0), +(@PATH,11,-9186.384,1316.321,21.47732,0,0,0,0,100,0), +(@PATH,12,-9146.026,1309.063,22.9012,0,0,0,0,100,0), +(@PATH,13,-9186.384,1316.321,21.47732,0,0,0,0,100,0), +(@PATH,14,-9213.823,1340.182,21.47529,0,0,0,0,100,0), +(@PATH,15,-9214.301,1378.276,21.75317,0,0,0,0,100,0), +(@PATH,16,-9192.751,1415.595,22.71139,0,0,0,0,100,0), +(@PATH,17,-9176.457,1441.36,22.84715,0,0,0,0,100,0), +(@PATH,18,-9173.119,1482.051,21.5113,0,0,0,0,100,0), +(@PATH,19,-9206.087,1475.642,25.78873,0,0,0,0,100,0), +(@PATH,20,-9224.515,1442.994,24.32664,0,0,0,0,100,0), +(@PATH,21,-9243.845,1402.906,23.31999,0,0,0,0,100,0), +(@PATH,22,-9266.542,1382.812,21.44118,0,0,0,0,100,0), +(@PATH,23,-9290.099,1380.387,21.48297,0,10000,0,0,100,0), +(@PATH,24,-9305.492,1403.459,25.60786,0,15000,0,0,100,0); + +-- Pathing for Flesh Hunter Entry: 15335 'TDB FORMAT' +SET @NPC := @CGUID+167; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9452.126,`position_y`=1337.869,`position_z`=21.42187 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, '18950'); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9452.126,1337.869,21.42187,0,0,0,0,100,0), +(@PATH,2,-9417.646,1355.137,22.36102,0,0,0,0,100,0), +(@PATH,3,-9403.974,1352.924,21.39361,0,0,0,0,100,0), +(@PATH,4,-9432.193,1352.471,21.55352,0,0,0,0,100,0), +(@PATH,5,-9457.63,1330.037,21.44484,0,0,0,0,100,0), +(@PATH,6,-9442.115,1301.084,18.79591,0,0,0,0,100,0), +(@PATH,7,-9421.976,1294.538,6.835041,0,0,0,0,100,0), +(@PATH,8,-9395.618,1285.335,-8.039509,0,0,0,0,100,0), +(@PATH,9,-9381.646,1286.155,-14.88204,0,0,0,0,100,0), +(@PATH,10,-9364.117,1279.244,-22.36019,0,0,0,0,100,0), +(@PATH,11,-9341.927,1257.022,-42.71544,0,0,0,0,100,0), +(@PATH,12,-9358.893,1279.803,-24.58626,0,0,0,0,100,0), +(@PATH,13,-9378.188,1284.211,-16.61263,0,0,0,0,100,0), +(@PATH,14,-9402.994,1287.507,-3.193645,0,0,0,0,100,0), +(@PATH,15,-9429.794,1296.828,10.47188,0,0,0,0,100,0), +(@PATH,16,-9459.201,1309.284,21.44484,0,0,0,0,100,0), +(@PATH,17,-9449.167,1266.607,21.47515,0,0,0,0,100,0), +(@PATH,18,-9420.796,1250.398,21.60155,0,0,0,0,100,0), +(@PATH,19,-9449.167,1266.607,21.47515,0,0,0,0,100,0), +(@PATH,20,-9459.201,1309.284,21.44484,0,0,0,0,100,0), +(@PATH,21,-9429.794,1296.828,10.47188,0,0,0,0,100,0), +(@PATH,22,-9403.174,1287.535,-3.026531,0,0,0,0,100,0), +(@PATH,23,-9378.188,1284.211,-16.61263,0,0,0,0,100,0), +(@PATH,24,-9358.893,1279.803,-24.58626,0,0,0,0,100,0), +(@PATH,25,-9341.927,1257.022,-42.71544,0,0,0,0,100,0), +(@PATH,26,-9364.117,1279.244,-22.36019,0,0,0,0,100,0), +(@PATH,27,-9381.559,1286.167,-14.92842,0,0,0,0,100,0), +(@PATH,28,-9395.531,1285.347,-8.382038,0,0,0,0,100,0), +(@PATH,29,-9421.976,1294.538,6.835041,0,0,0,0,100,0), +(@PATH,30,-9442.115,1301.084,18.79591,0,0,0,0,100,0), +(@PATH,31,-9457.63,1330.037,21.44484,0,0,0,0,100,0), +(@PATH,32,-9432.193,1352.471,21.55352,0,0,0,0,100,0), +(@PATH,33,-9403.974,1352.924,21.39361,0,0,0,0,100,0), +(@PATH,34,-9417.646,1355.137,22.36102,0,0,0,0,100,0), +(@PATH,35,-9452.126,1337.869,21.42187,0,0,0,0,100,0), +(@PATH,36,-9460.447,1307.998,21.44484,0,0,0,0,100,0), +(@PATH,37,-9451.692,1280.025,21.41385,0,0,0,0,100,0), +(@PATH,38,-9436.887,1255.127,21.91142,0,0,0,0,100,0), +(@PATH,39,-9402.084,1241.667,21.54369,0,0,0,0,100,0), +(@PATH,40,-9382.529,1226.703,21.4241,0,0,0,0,100,0), +(@PATH,41,-9401.425,1241.072,21.55248,0,0,0,0,100,0), +(@PATH,42,-9436.887,1255.127,21.91142,0,0,0,0,100,0), +(@PATH,43,-9451.692,1280.025,21.41385,0,0,0,0,100,0), +(@PATH,44,-9460.447,1307.998,21.44484,0,0,0,0,100,0); + +-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT' +SET @NPC := @CGUID+187; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8715.07,`position_y`=1514.421,`position_z`=32.02237 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8715.07,1514.421,32.02237,0,0,0,0,100,0), +(@PATH,2,-8707.966,1495.304,32.03201,0,0,0,0,100,0), +(@PATH,3,-8676.498,1465.334,32.03133,0,0,0,0,100,0), +(@PATH,4,-8674.114,1424.483,32.03201,0,0,0,0,100,0), +(@PATH,5,-8676.498,1465.334,32.03133,0,0,0,0,100,0), +(@PATH,6,-8707.966,1495.304,32.03201,0,0,0,0,100,0), +(@PATH,7,-8715.07,1514.421,32.02237,0,0,0,0,100,0), +(@PATH,8,-8683.518,1489.15,32.03194,0,0,0,0,100,0), +(@PATH,9,-8652.897,1459.573,32.03194,0,0,0,0,100,0), +(@PATH,10,-8624.121,1441.949,32.86404,0,0,0,0,100,0), +(@PATH,11,-8632.826,1463.566,32.03201,0,0,0,0,100,0), +(@PATH,12,-8643.889,1475.416,32.00608,0,0,0,0,100,0), +(@PATH,13,-8605.078,1462.348,32.03201,0,0,0,0,100,0), +(@PATH,14,-8608.562,1487.01,32.13507,0,0,0,0,100,0), +(@PATH,15,-8598.64,1521.189,37.2549,0,0,0,0,100,0), +(@PATH,16,-8624.487,1500.118,31.95148,0,0,0,0,100,0), +(@PATH,17,-8650.246,1484.845,32.00608,0,0,0,0,100,0), +(@PATH,18,-8627.65,1525.419,32.07648,0,0,0,0,100,0), +(@PATH,19,-8658.124,1488.298,32.00608,0,0,0,0,100,0), +(@PATH,20,-8649.376,1536.51,32.03201,0,0,0,0,100,0), +(@PATH,21,-8678.199,1552.388,31.96736,0,0,0,0,100,0), +(@PATH,22,-8649.376,1536.51,32.03201,0,0,0,0,100,0), +(@PATH,23,-8658.124,1488.298,32.00608,0,0,0,0,100,0), +(@PATH,24,-8627.65,1525.419,32.07648,0,0,0,0,100,0), +(@PATH,25,-8650.246,1484.845,32.00608,0,0,0,0,100,0), +(@PATH,26,-8624.487,1500.118,31.95148,0,0,0,0,100,0), +(@PATH,27,-8598.64,1521.189,37.2549,0,0,0,0,100,0), +(@PATH,28,-8608.562,1487.01,32.13507,0,0,0,0,100,0), +(@PATH,29,-8605.078,1462.348,32.03201,0,0,0,0,100,0), +(@PATH,30,-8643.889,1475.416,32.00608,0,0,0,0,100,0), +(@PATH,31,-8632.826,1463.566,32.03201,0,0,0,0,100,0), +(@PATH,32,-8624.121,1441.949,32.86404,0,0,0,0,100,0), +(@PATH,33,-8652.897,1459.573,32.03194,0,0,0,0,100,0), +(@PATH,34,-8683.518,1489.15,32.03194,0,0,0,0,100,0); + +-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT' +SET @NPC := @CGUID+188; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8626.872,`position_y`=1393.024,`position_z`=32.11965 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8626.872,1393.024,32.11965,0,0,0,0,100,0), +(@PATH,2,-8612.871,1397.043,32.03201,0,0,0,0,100,0), +(@PATH,3,-8601.797,1405.588,33.28201,0,0,0,0,100,0), +(@PATH,4,-8597.448,1422.481,32.04214,0,0,0,0,100,0), +(@PATH,5,-8602.82,1435.621,32.58205,0,0,0,0,100,0), +(@PATH,6,-8614.282,1446.714,32.03201,0,0,0,0,100,0), +(@PATH,7,-8632.753,1445.288,32.78201,0,0,0,0,100,0), +(@PATH,8,-8648.204,1430.458,32.16177,0,0,0,0,100,0), +(@PATH,9,-8651.211,1414.462,32.32424,0,0,0,0,100,0), +(@PATH,10,-8639.497,1397.023,32.03201,0,0,0,0,100,0); + +-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT' +SET @NPC := @CGUID+189; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8698.72,`position_y`=1557.427,`position_z`=31.96736 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8698.72,1557.427,31.96736,0,0,0,0,100,0), +(@PATH,2,-8727.424,1587.903,21.51132,0,0,0,0,100,0), +(@PATH,3,-8745.534,1586.328,21.51132,0,0,0,0,100,0), +(@PATH,4,-8750.269,1568.49,23.20175,0,0,0,0,100,0), +(@PATH,5,-8749.061,1555.604,27.10514,0,0,0,0,100,0), +(@PATH,6,-8745.534,1586.328,21.51132,0,0,0,0,100,0), +(@PATH,7,-8727.424,1587.903,21.51132,0,0,0,0,100,0), +(@PATH,8,-8698.72,1557.427,31.96736,0,0,0,0,100,0), +(@PATH,9,-8677.868,1540.741,31.96736,0,0,0,0,100,0), +(@PATH,10,-8652.031,1526.245,32.03201,0,0,0,0,100,0), +(@PATH,11,-8631.435,1513.663,31.95148,0,0,0,0,100,0), +(@PATH,12,-8620.831,1486.299,31.94367,0,0,0,0,100,0), +(@PATH,13,-8631.435,1513.663,31.95148,0,0,0,0,100,0), +(@PATH,14,-8652.031,1526.245,32.03201,0,0,0,0,100,0), +(@PATH,15,-8677.868,1540.741,31.96736,0,0,0,0,100,0); + +-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT' +SET @NPC := @CGUID+190; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8596.261,`position_y`=1445.324,`position_z`=32.03201 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8596.261,1445.324,32.03201,0,0,0,0,100,0), +(@PATH,2,-8579.316,1455.001,32.57644,0,0,0,0,100,0), +(@PATH,3,-8558.855,1463.694,32.03201,0,0,0,0,100,0), +(@PATH,4,-8544.131,1479.762,32.15701,0,0,0,0,100,0), +(@PATH,5,-8534.158,1494.747,32.78201,0,0,0,0,100,0), +(@PATH,6,-8523.998,1511.022,32.90698,0,0,0,0,100,0), +(@PATH,7,-8515.556,1523.541,32.28198,0,0,0,0,100,0), +(@PATH,8,-8501.833,1535.644,32.03198,0,0,0,0,100,0), +(@PATH,9,-8523.998,1511.022,32.90698,0,0,0,0,100,0), +(@PATH,10,-8534.158,1494.747,32.78201,0,0,0,0,100,0), +(@PATH,11,-8544.131,1479.762,32.15701,0,0,0,0,100,0), +(@PATH,12,-8558.855,1463.694,32.03201,0,0,0,0,100,0), +(@PATH,13,-8579.316,1455.001,32.57644,0,0,0,0,100,0), +(@PATH,14,-8596.261,1445.324,32.03201,0,0,0,0,100,0), +(@PATH,15,-8609.186,1444.716,32.03201,0,0,0,0,100,0), +(@PATH,16,-8624.747,1453.474,32.03201,0,0,0,0,100,0), +(@PATH,17,-8648.166,1437.747,32.03194,0,0,0,0,100,0), +(@PATH,18,-8653.364,1427.667,32.90701,0,0,0,0,100,0), +(@PATH,19,-8652.444,1412.949,32.52126,0,0,0,0,100,0), +(@PATH,20,-8635.768,1394.096,32.03201,0,0,0,0,100,0), +(@PATH,21,-8624.594,1389.992,32.03201,0,0,0,0,100,0), +(@PATH,22,-8605.42,1395.665,32.03201,0,0,0,0,100,0), +(@PATH,23,-8594.566,1415.467,32.03201,0,0,0,0,100,0), +(@PATH,24,-8599.567,1429.468,32.63076,0,0,0,0,100,0), +(@PATH,25,-8620.474,1447.892,32.03201,0,0,0,0,100,0), +(@PATH,26,-8632.201,1448.974,32.83376,0,0,0,0,100,0), +(@PATH,27,-8648.3,1425.739,32.86428,0,0,0,0,100,0), +(@PATH,28,-8647.554,1415.542,32.81582,0,0,0,0,100,0), +(@PATH,29,-8634.466,1397.044,32.08352,0,0,0,0,100,0), +(@PATH,30,-8612.184,1395.429,32.03201,0,0,0,0,100,0), +(@PATH,31,-8602.937,1404.893,33.18166,0,0,0,0,100,0), +(@PATH,32,-8606.291,1430.675,33.09939,0,0,0,0,100,0), +(@PATH,33,-8614.849,1438.85,32.68252,0,0,0,0,100,0), +(@PATH,34,-8636.876,1442.12,32.39876,0,0,0,0,100,0), +(@PATH,35,-8642.267,1432.34,32.03201,0,0,0,0,100,0), +(@PATH,36,-8640.708,1410.744,33.11062,0,0,0,0,100,0), +(@PATH,37,-8625.944,1401.671,32.70779,0,0,0,0,100,0), +(@PATH,38,-8607.826,1407.917,32.91775,0,0,0,0,100,0), +(@PATH,39,-8610.313,1427.698,33.28201,0,0,0,0,100,0), +(@PATH,40,-8622.624,1437.455,33.24148,0,0,0,0,100,0), +(@PATH,41,-8629.749,1439.459,32.77468,0,0,0,0,100,0), +(@PATH,42,-8605.587,1416.063,33.04202,0,0,0,0,100,0), +(@PATH,43,-8607.826,1407.917,32.91775,0,0,0,0,100,0), +(@PATH,44,-8625.944,1401.671,32.70779,0,0,0,0,100,0), +(@PATH,45,-8640.708,1410.744,33.11062,0,0,0,0,100,0), +(@PATH,46,-8642.267,1432.34,32.03201,0,0,0,0,100,0), +(@PATH,47,-8623.281,1444.953,32.4501,0,0,0,0,100,0), +(@PATH,48,-8614.849,1438.85,32.68252,0,0,0,0,100,0), +(@PATH,49,-8600.551,1419.44,32.26528,0,0,0,0,100,0), +(@PATH,50,-8602.937,1404.893,33.18166,0,0,0,0,100,0), +(@PATH,51,-8625.483,1394.269,32.41152,0,0,0,0,100,0), +(@PATH,52,-8634.466,1397.044,32.08352,0,0,0,0,100,0), +(@PATH,53,-8647.554,1415.542,32.81582,0,0,0,0,100,0), +(@PATH,54,-8643.316,1438.734,32.03194,0,0,0,0,100,0), +(@PATH,55,-8632.201,1448.974,32.83376,0,0,0,0,100,0), +(@PATH,56,-8608.438,1441.045,32.11904,0,0,0,0,100,0), +(@PATH,57,-8599.567,1429.468,32.63076,0,0,0,0,100,0), +(@PATH,58,-8594.566,1415.467,32.03201,0,0,0,0,100,0), +(@PATH,59,-8605.42,1395.665,32.03201,0,0,0,0,100,0), +(@PATH,60,-8624.594,1389.992,32.03201,0,0,0,0,100,0), +(@PATH,61,-8642.364,1400.395,32.03201,0,0,0,0,100,0), +(@PATH,62,-8652.444,1412.949,32.52126,0,0,0,0,100,0), +(@PATH,63,-8653.364,1427.667,32.90701,0,0,0,0,100,0), +(@PATH,64,-8638.11,1450.366,33.01338,0,0,0,0,100,0), +(@PATH,65,-8624.747,1453.474,32.03201,0,0,0,0,100,0), +(@PATH,66,-8609.186,1444.716,32.03201,0,0,0,0,100,0); + +-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT' +SET @NPC := @CGUID+191; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8554.364,`position_y`=1453.022,`position_z`=32.44558 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8554.364,1453.022,32.44558,0,0,0,0,100,0), +(@PATH,2,-8531.382,1409.837,32.03201,0,0,0,0,100,0), +(@PATH,3,-8565.742,1422.705,32.03201,0,0,0,0,100,0), +(@PATH,4,-8597.424,1431.692,32.89761,0,0,0,0,100,0), +(@PATH,5,-8579.544,1395.944,32.03201,0,0,0,0,100,0), +(@PATH,6,-8568.221,1369.643,32.03201,0,0,0,0,100,0), +(@PATH,7,-8550.396,1335.821,32.04605,0,0,0,0,100,0), +(@PATH,8,-8568.221,1369.643,32.03201,0,0,0,0,100,0), +(@PATH,9,-8579.544,1395.944,32.03201,0,0,0,0,100,0), +(@PATH,10,-8597.424,1431.692,32.89761,0,0,0,0,100,0), +(@PATH,11,-8565.742,1422.705,32.03201,0,0,0,0,100,0), +(@PATH,12,-8531.382,1409.837,32.03201,0,0,0,0,100,0), +(@PATH,13,-8554.364,1453.022,32.44558,0,0,0,0,100,0), +(@PATH,14,-8585.673,1436.706,32.06472,0,0,0,0,100,0), +(@PATH,15,-8605.817,1458.296,32.03201,0,0,0,0,100,0), +(@PATH,16,-8571.966,1465.175,32.03201,0,0,0,0,100,0), +(@PATH,17,-8599.507,1480.402,32.61454,0,0,0,0,100,0), +(@PATH,18,-8571.966,1465.175,32.03201,0,0,0,0,100,0), +(@PATH,19,-8605.817,1458.296,32.03201,0,0,0,0,100,0), +(@PATH,20,-8585.673,1436.706,32.06472,0,0,0,0,100,0); + +-- Pathing for Qiraji Swarmguard Entry: 15343 'TDB FORMAT' +SET @NPC := @CGUID+192; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8601.664,`position_y`=1390.749,`position_z`=32.03201 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8601.664,1390.749,32.03201,0,0,0,0,100,0), +(@PATH,2,-8591.866,1403.699,32.15054,0,0,0,0,100,0), +(@PATH,3,-8588.45,1414.927,32.03201,0,0,0,0,100,0), +(@PATH,4,-8586.888,1427.869,33.06387,0,0,0,0,100,0), +(@PATH,5,-8591.98,1441.59,31.97866,0,0,0,0,100,0), +(@PATH,6,-8604.068,1451.8,32.03201,0,0,0,0,100,0), +(@PATH,7,-8622.909,1456.538,32.03201,0,0,0,0,100,0), +(@PATH,8,-8642.18,1452.721,32.90791,0,0,0,0,100,0), +(@PATH,9,-8653.962,1444.923,32.03194,0,0,0,0,100,0), +(@PATH,10,-8662.412,1435.851,32.79219,0,0,0,0,100,0), +(@PATH,11,-8661.74,1419.056,32.18276,0,0,0,0,100,0), +(@PATH,12,-8654.638,1405.104,33.02615,0,0,0,0,100,0), +(@PATH,13,-8639.636,1390.926,32.03201,0,0,0,0,100,0), +(@PATH,14,-8622.461,1385.466,32.03201,0,0,0,0,100,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+104; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8529.958,`position_y`=1364.049,`position_z`=36.8613 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8529.958,`position_y`=1364.049,`position_z`=36.8613 WHERE `guid`=@CGUID+73; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8529.958,`position_y`=1364.049,`position_z`=36.8613 WHERE `guid`=@CGUID+74; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+73,@CGUID+74); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+73,@PATH,0,0,1,0, ''),(@CGUID+74,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8529.958,1364.049,36.8613,0,0,0,0,100,0), +(@PATH,2,-8539.803,1346.646,35.40701,0,0,0,0,100,0), +(@PATH,3,-8548.704,1332.98,32.31227,0,0,0,0,100,0), +(@PATH,4,-8558.811,1320.909,33.84633,0,0,0,0,100,0), +(@PATH,5,-8566.942,1311.42,35.92106,0,0,0,0,100,0), +(@PATH,6,-8576.419,1309.016,37.23088,0,0,0,0,100,0), +(@PATH,7,-8584.488,1311.995,38.23796,0,0,0,0,100,0), +(@PATH,8,-8595.519,1311.563,38.18644,0,0,0,0,100,0), +(@PATH,9,-8600.222,1319.612,36.98295,0,0,0,0,100,0), +(@PATH,10,-8607.076,1327.968,35.15849,0,0,0,0,100,0), +(@PATH,11,-8615.813,1346.86,34.1813,0,0,0,0,100,0), +(@PATH,12,-8625.896,1351.781,33.83559,0,0,0,0,100,0), +(@PATH,13,-8640.597,1348.754,32.22292,0,0,0,0,100,0), +(@PATH,14,-8656.664,1339.812,32.06704,0,0,0,0,100,0), +(@PATH,15,-8665.035,1340.468,32.31985,0,0,0,0,100,0), +(@PATH,16,-8675.461,1346.442,32.03201,0,0,0,0,100,0), +(@PATH,17,-8681.545,1352.296,32.03201,0,0,0,0,100,0), +(@PATH,18,-8689.306,1363.689,32.03201,0,0,0,0,100,0), +(@PATH,19,-8689.081,1377.316,32.1592,0,0,0,0,100,0), +(@PATH,20,-8689.243,1386.516,32.03201,0,0,0,0,100,0), +(@PATH,21,-8689.553,1391.781,32.03201,0,0,0,0,100,0), +(@PATH,22,-8696.313,1401.926,32.03201,0,0,0,0,100,0), +(@PATH,23,-8710.984,1403.616,32.03201,0,0,0,0,100,0), +(@PATH,24,-8725,1401.026,32.09084,0,0,0,0,100,0), +(@PATH,25,-8731.581,1405.537,33.48586,0,0,0,0,100,0), +(@PATH,26,-8734.479,1414.433,36.20397,0,0,0,0,100,0), +(@PATH,27,-8732.03,1423.297,37.67117,0,0,0,0,100,0), +(@PATH,28,-8725.299,1431.885,36.10378,0,0,0,0,100,0), +(@PATH,29,-8707.934,1441.262,33.016,0,0,0,0,100,0), +(@PATH,30,-8698.775,1448.582,32.44686,0,0,0,0,100,0), +(@PATH,31,-8689.356,1462.353,32.23666,0,0,0,0,100,0), +(@PATH,32,-8689.169,1472.879,32.03194,0,0,0,0,100,0), +(@PATH,33,-8700.186,1486.412,32.03201,0,0,0,0,100,0), +(@PATH,34,-8713.146,1492.665,32.6149,0,0,0,0,100,0), +(@PATH,35,-8722.861,1496.83,33.90457,0,0,0,0,100,0), +(@PATH,36,-8729.367,1504.248,33.60392,0,0,0,0,100,0), +(@PATH,37,-8722.961,1517.956,31.73966,0,0,0,0,100,0), +(@PATH,38,-8709.675,1523.971,32.02237,0,0,0,0,100,0), +(@PATH,39,-8700.321,1534.454,32.01286,0,0,0,0,100,0), +(@PATH,40,-8695.349,1544.921,31.96736,0,0,0,0,100,0), +(@PATH,41,-8681.404,1547.222,31.96736,0,0,0,0,100,0), +(@PATH,42,-8653.026,1542.493,32.03201,0,0,0,0,100,0), +(@PATH,43,-8647.881,1531.499,32.03201,0,0,0,0,100,0), +(@PATH,44,-8639.888,1526.415,32.03201,0,0,0,0,100,0), +(@PATH,45,-8626.61,1527.882,32.1098,0,0,0,0,100,0), +(@PATH,46,-8615.333,1529.297,33.04889,0,0,0,0,100,0), +(@PATH,47,-8607.277,1521.799,34.45148,0,0,0,0,100,0), +(@PATH,48,-8610.157,1511.149,32.29498,0,0,0,0,100,0), +(@PATH,49,-8613.661,1498.537,31.88141,0,0,0,0,100,0), +(@PATH,50,-8609.094,1485.39,31.94074,0,0,0,0,100,0), +(@PATH,51,-8598.721,1477.947,32.41422,0,0,0,0,100,0), +(@PATH,52,-8582.448,1473.503,32.78202,0,0,0,0,100,0), +(@PATH,53,-8562.289,1476.467,32.03201,0,0,0,0,100,0), +(@PATH,54,-8541.956,1473.268,32.03201,0,0,0,0,100,0), +(@PATH,55,-8537.244,1462.648,32.03201,0,0,0,0,100,0), +(@PATH,56,-8534.426,1453.312,32.03201,0,0,0,0,100,0), +(@PATH,57,-8529.186,1446.878,32.46731,0,0,0,0,100,0), +(@PATH,58,-8521.271,1435.866,32.78323,0,0,0,0,100,0), +(@PATH,59,-8523.449,1424.432,32.15139,0,0,0,0,100,0), +(@PATH,60,-8521.978,1406.374,32.03201,0,0,0,0,100,0), +(@PATH,61,-8518.832,1391.909,33.57486,0,0,0,0,100,0), +(@PATH,62,-8521.604,1377.789,34.2847,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+73,8,315,2,0,0), +(@NPC,@CGUID+74,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+105; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8548.863,`position_y`=1386.292,`position_z`=32.03201 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8548.863,`position_y`=1386.292,`position_z`=32.03201 WHERE `guid`=@CGUID+75; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8548.863,`position_y`=1386.292,`position_z`=32.03201 WHERE `guid`=@CGUID+76; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+75,@CGUID+76); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+75,@PATH,0,0,1,0, ''),(@CGUID+76,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8548.863,1386.292,32.03201,0,0,0,0,100,0), +(@PATH,2,-8565.712,1372.886,32.03201,0,0,0,0,100,0), +(@PATH,3,-8581.622,1367.627,32.03201,0,0,0,0,100,0), +(@PATH,4,-8606.725,1366.843,32.03201,0,0,0,0,100,0), +(@PATH,5,-8632.288,1375.482,32.03201,0,0,0,0,100,0), +(@PATH,6,-8654.506,1394.647,32.03201,0,0,0,0,100,0), +(@PATH,7,-8671.173,1419.873,32.03201,0,0,0,0,100,0), +(@PATH,8,-8676.283,1440.234,32.03133,0,0,0,0,100,0), +(@PATH,9,-8667.241,1453.61,32.03133,0,0,0,0,100,0), +(@PATH,10,-8646.296,1471.409,32.00608,0,0,0,0,100,0), +(@PATH,11,-8622.894,1479.165,32.00641,0,0,0,0,100,0), +(@PATH,12,-8601.697,1470.526,32.00641,0,0,0,0,100,0), +(@PATH,13,-8572.213,1460.675,32.03201,0,0,0,0,100,0), +(@PATH,14,-8551.573,1441.729,32.03201,0,0,0,0,100,0), +(@PATH,15,-8540.968,1428.382,32.03201,0,0,0,0,100,0), +(@PATH,16,-8537.028,1406.539,32.03201,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+75,8,315,2,0,0), +(@NPC,@CGUID+76,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+106; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8597.936,`position_y`=1369.124,`position_z`=32.03201 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8597.936,`position_y`=1369.124,`position_z`=32.03201 WHERE `guid`=@CGUID+77; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8597.936,`position_y`=1369.124,`position_z`=32.03201 WHERE `guid`=@CGUID+78; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+77,@CGUID+78); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+77,@PATH,0,0,1,0, ''),(@CGUID+78,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8597.936,1369.124,32.03201,0,0,0,0,100,0), +(@PATH,2,-8597.158,1401.358,32.62844,0,0,0,0,100,0), +(@PATH,3,-8590.24,1447.263,32.03201,0,0,0,0,100,0), +(@PATH,4,-8559.169,1456.705,32.03201,0,0,0,0,100,0), +(@PATH,5,-8590.24,1447.263,32.03201,0,0,0,0,100,0), +(@PATH,6,-8597.158,1401.358,32.62844,0,0,0,0,100,0), +(@PATH,7,-8597.936,1369.124,32.03201,0,0,0,0,100,0), +(@PATH,8,-8623.723,1352.624,33.90456,0,0,0,0,100,0), +(@PATH,9,-8662.29,1348.379,32.03201,0,0,0,0,100,0), +(@PATH,10,-8623.723,1352.624,33.90456,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+77,8,315,2,0,0), +(@NPC,@CGUID+78,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+107; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8676.303,`position_y`=1523.413,`position_z`=32.03201 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8676.303,`position_y`=1523.413,`position_z`=32.03201 WHERE `guid`=@CGUID+79; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8676.303,`position_y`=1523.413,`position_z`=32.03201 WHERE `guid`=@CGUID+80; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+79,@CGUID+80); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+79,@PATH,0,0,1,0, ''),(@CGUID+80,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8676.303,1523.413,32.03201,0,0,0,0,100,0), +(@PATH,2,-8674.751,1532.686,32.03201,0,0,0,0,100,0), +(@PATH,3,-8666.7,1549.006,31.96736,0,0,0,0,100,0), +(@PATH,4,-8661.062,1564.438,32.03201,0,0,0,0,100,0), +(@PATH,5,-8653.452,1584.203,32.00211,0,0,0,0,100,0), +(@PATH,6,-8635.348,1595.124,32.00211,0,0,0,0,100,0), +(@PATH,7,-8623.174,1592.671,32.03201,0,0,0,0,100,0), +(@PATH,8,-8613.221,1590.594,32.03201,0,0,0,0,100,0), +(@PATH,9,-8601.792,1588.857,32.03201,0,0,0,0,100,0), +(@PATH,10,-8593.638,1591.012,32.03201,0,0,0,0,100,0), +(@PATH,11,-8587.351,1597.304,32.03201,0,0,0,0,100,0), +(@PATH,12,-8587.771,1604.197,31.95384,0,0,0,0,100,0), +(@PATH,13,-8592.951,1609.818,31.95384,0,0,0,0,100,0), +(@PATH,14,-8601.403,1614.527,31.92987,0,0,0,0,100,0), +(@PATH,15,-8609.681,1613.565,31.92987,0,0,0,0,100,0), +(@PATH,16,-8619.378,1610.386,31.92987,0,0,0,0,100,0), +(@PATH,17,-8635.724,1600.521,32.01131,0,0,0,0,100,0), +(@PATH,18,-8654.849,1586.285,32.00211,0,0,0,0,100,0), +(@PATH,19,-8667.545,1565.508,31.96736,0,0,0,0,100,0), +(@PATH,20,-8686.157,1545.365,31.96736,0,0,0,0,100,0), +(@PATH,21,-8700.114,1518.251,32.02237,0,0,0,0,100,0), +(@PATH,22,-8698.923,1495.54,32.03194,0,0,0,0,100,0), +(@PATH,23,-8684.854,1482.41,32.03194,0,0,0,0,100,0), +(@PATH,24,-8671.786,1476.209,32.03194,0,0,0,0,100,0), +(@PATH,25,-8662.458,1477.07,32.00608,0,0,0,0,100,0), +(@PATH,26,-8655.018,1486.244,32.00608,0,0,0,0,100,0), +(@PATH,27,-8657.109,1495.647,32.17112,0,0,0,0,100,0), +(@PATH,28,-8665.246,1506.262,32.1741,0,0,0,0,100,0), +(@PATH,29,-8672.817,1514.818,32.03201,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+79,8,315,2,0,0), +(@NPC,@CGUID+80,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+108; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8658.216,`position_y`=1452.975,`position_z`=32.03194 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8658.216,`position_y`=1452.975,`position_z`=32.03194 WHERE `guid`=@CGUID+81; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8658.216,`position_y`=1452.975,`position_z`=32.03194 WHERE `guid`=@CGUID+82; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+81,@CGUID+82); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+81,@PATH,0,0,1,0, ''),(@CGUID+82,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8658.216,1452.975,32.03194,0,0,0,0,100,0), +(@PATH,2,-8641.388,1466.459,32.03194,0,0,0,0,100,0), +(@PATH,3,-8621.116,1464.743,32.03201,0,0,0,0,100,0), +(@PATH,4,-8585.999,1450.884,32.03201,0,0,0,0,100,0), +(@PATH,5,-8549.127,1432.836,32.03201,0,0,0,0,100,0), +(@PATH,6,-8542.808,1418.113,32.03201,0,0,0,0,100,0), +(@PATH,7,-8549.8,1395.085,32.03201,0,0,0,0,100,0), +(@PATH,8,-8563.838,1378,32.03201,0,0,0,0,100,0), +(@PATH,9,-8577.313,1367.248,32.03201,0,0,0,0,100,0), +(@PATH,10,-8597.477,1364.023,32.03201,0,0,0,0,100,0), +(@PATH,11,-8615.605,1370.76,32.03201,0,0,0,0,100,0), +(@PATH,12,-8634.19,1381.713,32.03201,0,0,0,0,100,0), +(@PATH,13,-8665.271,1407.404,32.16384,0,0,0,0,100,0), +(@PATH,14,-8671.109,1435.101,32.05587,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+81,8,315,2,0,0), +(@NPC,@CGUID+82,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+109; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8729.304,`position_y`=1429.319,`position_z`=37.32424 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8729.304,`position_y`=1429.319,`position_z`=37.32424 WHERE `guid`=@CGUID+83; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8729.304,`position_y`=1429.319,`position_z`=37.32424 WHERE `guid`=@CGUID+84; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+83,@CGUID+84); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+83,@PATH,0,0,1,0, ''),(@CGUID+84,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8729.304,1429.319,37.32424,0,0,0,0,100,0), +(@PATH,2,-8706.372,1430.352,34.3594,0,0,0,0,100,0), +(@PATH,3,-8674.178,1445.882,32.03133,0,0,0,0,100,0), +(@PATH,4,-8669.013,1458.894,32.03133,0,0,0,0,100,0), +(@PATH,5,-8665.397,1470.97,32.00608,0,0,0,0,100,0), +(@PATH,6,-8640.486,1471.08,32.00608,0,0,0,0,100,0), +(@PATH,7,-8599.312,1477.941,32.30228,0,0,0,0,100,0), +(@PATH,8,-8640.486,1471.08,32.00608,0,0,0,0,100,0), +(@PATH,9,-8665.397,1470.97,32.00608,0,0,0,0,100,0), +(@PATH,10,-8669.013,1458.894,32.03133,0,0,0,0,100,0), +(@PATH,11,-8674.178,1445.882,32.03133,0,0,0,0,100,0), +(@PATH,12,-8706.372,1430.352,34.3594,0,0,0,0,100,0), +(@PATH,13,-8729.304,1429.319,37.32424,0,0,0,0,100,0), +(@PATH,14,-8713.892,1442.385,34.02357,0,0,0,0,100,0), +(@PATH,15,-8696.722,1461.607,33.19967,0,0,0,0,100,0), +(@PATH,16,-8671.114,1479.966,32.03194,0,0,0,0,100,0), +(@PATH,17,-8645.507,1492.281,32.76731,0,0,0,0,100,0), +(@PATH,18,-8621.361,1512.898,32.07648,0,0,0,0,100,0), +(@PATH,19,-8645.507,1492.281,32.76731,0,0,0,0,100,0), +(@PATH,20,-8671.114,1479.966,32.03194,0,0,0,0,100,0), +(@PATH,21,-8696.722,1461.607,33.19967,0,0,0,0,100,0), +(@PATH,22,-8713.892,1442.385,34.02357,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+83,8,315,2,0,0), +(@NPC,@CGUID+84,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+110; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8764.116,`position_y`=1581.645,`position_z`=22.68807 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8764.116,`position_y`=1581.645,`position_z`=22.68807 WHERE `guid`=@CGUID+85; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8764.116,`position_y`=1581.645,`position_z`=22.68807 WHERE `guid`=@CGUID+86; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+85,@CGUID+86); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+85,@PATH,0,0,1,0, ''),(@CGUID+86,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8764.116,1581.645,22.68807,0,0,0,0,100,0), +(@PATH,2,-8753.808,1574.044,22.58163,0,0,0,0,100,0), +(@PATH,3,-8738.576,1574.061,21.51132,0,0,0,0,100,0), +(@PATH,4,-8725.54,1586.539,21.51132,0,0,0,0,100,0), +(@PATH,5,-8721.115,1598.405,21.51132,0,0,0,0,100,0), +(@PATH,6,-8716.487,1608.771,21.50764,0,0,0,0,100,0), +(@PATH,7,-8697.559,1617.893,21.50965,0,0,0,0,100,0), +(@PATH,8,-8689.124,1620.98,21.4054,0,0,0,0,100,0), +(@PATH,9,-8676.7,1633.637,21.5121,0,0,0,0,100,0), +(@PATH,10,-8664.844,1651.779,22.2621,0,0,0,0,100,0), +(@PATH,11,-8658.319,1668.855,21.51167,0,0,0,0,100,0), +(@PATH,12,-8664.207,1676.173,22.29316,0,0,0,0,100,0), +(@PATH,13,-8674.647,1676.72,22.07937,0,0,0,0,100,0), +(@PATH,14,-8683.002,1674.971,23.14468,0,0,0,0,100,0), +(@PATH,15,-8690.661,1662.559,23.09059,0,0,0,0,100,0), +(@PATH,16,-8692.645,1651.498,22.43434,0,0,0,0,100,0), +(@PATH,17,-8701.47,1635.077,22.32766,0,0,0,0,100,0), +(@PATH,18,-8713.073,1627.768,22.65229,0,0,0,0,100,0), +(@PATH,19,-8728.455,1620.784,21.50764,0,0,0,0,100,0), +(@PATH,20,-8742.18,1614.745,21.63534,0,0,0,0,100,0), +(@PATH,21,-8754.88,1604.404,22.26132,0,0,0,0,100,0), +(@PATH,22,-8767.513,1589.608,21.55936,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+85,8,315,2,0,0), +(@NPC,@CGUID+86,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+111; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8767.31,`position_y`=1593.834,`position_z`=21.49979 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8767.31,`position_y`=1593.834,`position_z`=21.49979 WHERE `guid`=@CGUID+87; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8767.31,`position_y`=1593.834,`position_z`=21.49979 WHERE `guid`=@CGUID+88; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+87,@CGUID+88); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+87,@PATH,0,0,1,0, ''),(@CGUID+88,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8767.31,1593.834,21.49979,0,0,0,0,100,0), +(@PATH,2,-8770.036,1585.847,22.46646,0,0,0,0,100,0), +(@PATH,3,-8768.942,1580.037,24.6282,0,0,0,0,100,0), +(@PATH,4,-8761.078,1573.96,24.66903,0,0,0,0,100,0), +(@PATH,5,-8754.317,1573.614,23.1307,0,0,0,0,100,0), +(@PATH,6,-8749.495,1583.887,21.51132,0,0,0,0,100,0), +(@PATH,7,-8749.606,1598.333,22.0267,0,0,0,0,100,0), +(@PATH,8,-8744.066,1615.724,21.68685,0,0,0,0,100,0), +(@PATH,9,-8738.805,1626.016,22.66122,0,0,0,0,100,0), +(@PATH,10,-8737.81,1633.883,24.68712,0,0,0,0,100,0), +(@PATH,11,-8741.979,1643.341,28.25573,0,0,0,0,100,0), +(@PATH,12,-8748.667,1644.332,26.70861,0,0,0,0,100,0), +(@PATH,13,-8755.17,1639.595,23.78893,0,0,0,0,100,0), +(@PATH,14,-8756.532,1629.037,21.51132,0,0,0,0,100,0), +(@PATH,15,-8755.539,1614.518,21.83163,0,0,0,0,100,0), +(@PATH,16,-8761.656,1603.455,22.13632,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+87,8,315,2,0,0), +(@NPC,@CGUID+88,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+112; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8812.028,`position_y`=1669.479,`position_z`=21.51077 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8812.028,`position_y`=1669.479,`position_z`=21.51077 WHERE `guid`=@CGUID+89; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8812.028,`position_y`=1669.479,`position_z`=21.51077 WHERE `guid`=@CGUID+90; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+89,@CGUID+90); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+89,@PATH,0,0,1,0, ''),(@CGUID+90,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8812.028,1669.479,21.51077,0,0,0,0,100,0), +(@PATH,2,-8829.116,1676.292,21.51077,0,0,0,0,100,0), +(@PATH,3,-8844.153,1674.81,21.51133,0,0,0,0,100,0), +(@PATH,4,-8862.958,1666.421,21.44188,0,0,0,0,100,0), +(@PATH,5,-8879.5,1648.462,21.51133,0,0,0,0,100,0), +(@PATH,6,-8889.997,1630.464,21.74863,0,0,0,0,100,0), +(@PATH,7,-8881.832,1613.655,21.51133,0,0,0,0,100,0), +(@PATH,8,-8868.665,1603.683,21.51133,0,0,0,0,100,0), +(@PATH,9,-8851.86,1597.849,21.51132,0,0,0,0,100,0), +(@PATH,10,-8825.522,1596.61,21.49979,0,0,0,0,100,0), +(@PATH,11,-8808.65,1596.895,21.49979,0,0,0,0,100,0), +(@PATH,12,-8787.695,1598.145,21.49979,0,0,0,0,100,0), +(@PATH,13,-8771.377,1609.977,21.58078,0,0,0,0,100,0), +(@PATH,14,-8770.968,1626.16,21.45578,0,0,0,0,100,0), +(@PATH,15,-8774.21,1634.483,21.43074,0,0,0,0,100,0), +(@PATH,16,-8783.411,1643.005,23.20686,0,0,0,0,100,0), +(@PATH,17,-8797.109,1656.653,21.46516,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+89,8,315,2,0,0), +(@NPC,@CGUID+90,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+113; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8853.164,`position_y`=1601.762,`position_z`=21.43074 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8853.164,`position_y`=1601.762,`position_z`=21.43074 WHERE `guid`=@CGUID+91; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-8853.164,`position_y`=1601.762,`position_z`=21.43074 WHERE `guid`=@CGUID+92; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+91,@CGUID+92); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+91,@PATH,0,0,1,0, ''),(@CGUID+92,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8853.164,1601.762,21.43074,0,0,0,0,100,0), +(@PATH,2,-8866.146,1609.803,21.43074,0,0,0,0,100,0), +(@PATH,3,-8867.712,1619.324,21.51133,0,0,0,0,100,0), +(@PATH,4,-8869.861,1636.031,21.51133,0,0,0,0,100,0), +(@PATH,5,-8868.245,1642.404,21.51133,0,0,0,0,100,0), +(@PATH,6,-8860.811,1651.562,21.44188,0,0,0,0,100,0), +(@PATH,7,-8846.482,1659.746,21.44188,0,0,0,0,100,0), +(@PATH,8,-8832.089,1664.295,21.43074,0,0,0,0,100,0), +(@PATH,9,-8818.774,1664.332,21.43074,0,0,0,0,100,0), +(@PATH,10,-8804.403,1654.945,21.43074,0,0,0,0,100,0), +(@PATH,11,-8798.054,1646.651,21.43074,0,0,0,0,100,0), +(@PATH,12,-8793.324,1634.422,21.43074,0,0,0,0,100,0), +(@PATH,13,-8790.466,1615.461,21.45578,0,0,0,0,100,0), +(@PATH,14,-8805.591,1606.401,21.21346,0,0,0,0,100,0), +(@PATH,15,-8817.363,1603.717,21.43074,0,0,0,0,100,0), +(@PATH,16,-8839.466,1603.247,21.43074,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+91,8,315,2,0,0), +(@NPC,@CGUID+92,8,405,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+116; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+117; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+95; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+96; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+98; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+117,@CGUID+95,@CGUID+96,@CGUID+98); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+117,@PATH,0,0,1,0, ''),(@CGUID+95,@PATH,0,0,1,0, ''),(@CGUID+96,@PATH,0,0,1,0, ''),(@CGUID+98,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9616.939,1598.47,21.51131,0,0,0,0,100,0), +(@PATH,2,-9644.368,1600.97,21.51152,0,0,0,0,100,0), +(@PATH,3,-9666.587,1602.68,21.51152,0,0,0,0,100,0), +(@PATH,4,-9693.127,1615.85,24.8499,0,0,0,0,100,0), +(@PATH,5,-9666.587,1602.68,21.51152,0,0,0,0,100,0), +(@PATH,6,-9644.368,1600.97,21.51152,0,0,0,0,100,0), +(@PATH,7,-9616.939,1598.47,21.51131,0,0,0,0,100,0), +(@PATH,8,-9593.868,1602.922,21.51135,0,0,0,0,100,0), +(@PATH,9,-9567.264,1581.447,21.64806,0,0,0,0,100,0), +(@PATH,10,-9593.868,1602.922,21.51135,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+117,7,55,2,4,9), +(@NPC,@CGUID+95,7,15,2,4,9), +(@NPC,@CGUID+96,7,345,2,4,9), +(@NPC,@CGUID+98,7,305,2,4,9); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+119; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+114; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+115; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+93; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9616.939,`position_y`=1598.47,`position_z`=21.51131 WHERE `guid`=@CGUID+94; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+93,@CGUID+94,@CGUID+114,@CGUID+115); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+93,@PATH,0,0,1,0, ''),(@CGUID+94,@PATH,0,0,1,0, ''),(@CGUID+114,@PATH,0,0,1,0, ''),(@CGUID+115,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9590.347,1600.979,21.51135,0,0,0,0,100,0), +(@PATH,2,-9617.396,1634.867,21.51134,0,0,0,0,100,0), +(@PATH,3,-9648.472,1660.417,21.77227,0,0,0,0,100,0), +(@PATH,4,-9672.451,1659.046,21.51187,0,0,0,0,100,0), +(@PATH,5,-9684.246,1618.948,22.01957,0,0,0,0,100,0), +(@PATH,6,-9680.485,1588.97,21.73227,0,0,0,0,100,0), +(@PATH,7,-9686.441,1561.453,21.56898,0,0,0,0,100,0), +(@PATH,8,-9669.827,1543.189,21.56898,0,0,0,0,100,0), +(@PATH,9,-9643.708,1556.367,21.51131,0,0,0,0,100,0), +(@PATH,10,-9611.799,1561.207,21.63631,0,0,0,0,100,0), +(@PATH,11,-9589.686,1574.344,21.64806,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+114,7,55,2,0,0), +(@NPC,@CGUID+93,7,15,2,0,0), +(@NPC,@CGUID+94,7,345,2,0,0), +(@NPC,@CGUID+115,7,305,2,0,0); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+120; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@CGUID+118; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@CGUID+97; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@CGUID+99; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9631.854,`position_y`=1575.044,`position_z`=21.51131 WHERE `guid`=@CGUID+100; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+118,@CGUID+97,@CGUID+99,@CGUID+100); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+118,@PATH,0,0,1,0, ''),(@CGUID+97,@PATH,0,0,1,0, ''),(@CGUID+99,@PATH,0,0,1,0, ''),(@CGUID+100,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9631.854,1575.044,21.51131,0,0,0,0,100,0), +(@PATH,2,-9665.344,1553.455,21.51131,0,0,0,0,100,0), +(@PATH,3,-9690.092,1528.433,21.56898,0,0,0,0,100,0), +(@PATH,4,-9697.1,1511.1,21.57094,0,0,0,0,100,0), +(@PATH,5,-9716.545,1490.724,22.14614,0,0,0,0,100,0), +(@PATH,6,-9737.131,1482.494,23.25845,0,0,0,0,100,0), +(@PATH,7,-9716.545,1490.724,22.14614,0,0,0,0,100,0), +(@PATH,8,-9697.1,1511.1,21.57094,0,0,0,0,100,0), +(@PATH,9,-9690.092,1528.433,21.56898,0,0,0,0,100,0), +(@PATH,10,-9665.344,1553.455,21.51131,0,0,0,0,100,0), +(@PATH,11,-9631.854,1575.044,21.51131,0,0,0,0,100,0), +(@PATH,12,-9613.673,1599.045,21.51131,0,0,0,0,100,0), +(@PATH,13,-9592.846,1628.057,22.5028,0,0,0,0,100,0), +(@PATH,14,-9613.673,1599.045,21.51131,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+118,7,55,2,6,13), +(@NPC,@CGUID+97,7,15,2,6,13), +(@NPC,@CGUID+99,7,345,2,6,13), +(@NPC,@CGUID+100,7,305,2,6,13); + +-- Pathing for Hive'Zara Stinger Entry: 15327 'TDB FORMAT' +SET @NPC := @CGUID+121; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@NPC; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@CGUID+122; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@CGUID+101; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@CGUID+102; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-9641.111,`position_y`=1606.591,`position_z`=21.51152 WHERE `guid`=@CGUID+103; +DELETE FROM `creature_addon` WHERE `guid` IN (@NPC,@CGUID+122,@CGUID+101,@CGUID+102,@CGUID+103); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(@NPC,@PATH,0,0,1,0, ''),(@CGUID+122,@PATH,0,0,1,0, ''),(@CGUID+101,@PATH,0,0,1,0, ''),(@CGUID+102,@PATH,0,0,1,0, ''),(@CGUID+103,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-9641.111,1606.591,21.51152,0,0,0,0,100,0), +(@PATH,2,-9644.073,1631.978,21.73661,0,0,0,0,100,0), +(@PATH,3,-9656.497,1670.769,21.86399,0,0,0,0,100,0), +(@PATH,4,-9644.073,1631.978,21.73661,0,0,0,0,100,0), +(@PATH,5,-9641.111,1606.591,21.51152,0,0,0,0,100,0), +(@PATH,6,-9654.327,1587.958,21.51131,0,0,0,0,100,0), +(@PATH,7,-9649.587,1562.207,21.51131,0,0,0,0,100,0), +(@PATH,8,-9639.38,1544.195,21.51131,0,0,0,0,100,0), +(@PATH,9,-9649.587,1562.207,21.51131,0,0,0,0,100,0), +(@PATH,10,-9654.327,1587.958,21.51131,0,0,0,0,100,0); + +-- Vekniss Stinger formation +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@NPC); +INSERT INTO `creature_formations` (`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`,`point_1`,`point_2`) VALUES +(@NPC,@NPC,0,0,2,0,0), +(@NPC,@CGUID+122,7,55,2,3,8), +(@NPC,@CGUID+101,7,15,2,3,8), +(@NPC,@CGUID+102,7,345,2,3,8), +(@NPC,@CGUID+103,7,305,2,3,8); From 2185165e8481ebcfd28895e5066991c89baaec14 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Thu, 15 Oct 2015 23:08:00 +0200 Subject: [PATCH 166/524] Core/Misc split Rate.XP.Kill and Rate.XP.BattlegroundKill settings --- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Miscellaneous/Formulas.h | 4 ++-- src/server/game/World/World.cpp | 1 + src/server/game/World/World.h | 1 + src/server/worldserver/worldserver.conf.dist | 13 +++++++++++-- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 253ca5ad38..d609cb1b52 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -504,7 +504,7 @@ inline void KillRewarder::_InitXP(Player* player) // * otherwise, not in PvP; // * not if killer is on vehicle. if (_isBattleGround || (!_isPvP && !_killer->GetVehicle())) - _xp = Trinity::XP::Gain(player, _victim); + _xp = Trinity::XP::Gain(player, _victim, _isBattleGround); } inline void KillRewarder::_RewardHonor(Player* player) diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h index ba39723b19..aa9a738b5d 100644 --- a/src/server/game/Miscellaneous/Formulas.h +++ b/src/server/game/Miscellaneous/Formulas.h @@ -158,7 +158,7 @@ namespace Trinity return baseGain; } - inline uint32 Gain(Player* player, Unit* u) + inline uint32 Gain(Player* player, Unit* u, bool isBattleGround = false) { Creature* creature = u->ToCreature(); uint32 gain = 0; @@ -184,7 +184,7 @@ namespace Trinity xpMod *= creature->GetCreatureTemplate()->ModExperience; } - xpMod *= sWorld->getRate(RATE_XP_KILL); + xpMod *= isBattleGround ? sWorld->getRate(RATE_XP_BG_KILL) : sWorld->getRate(RATE_XP_KILL); gain = uint32(gain * xpMod); } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 6fa9f17653..730601ac7c 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -456,6 +456,7 @@ void World::LoadConfigSettings(bool reload) rate_values[RATE_DROP_ITEM_REFERENCED_AMOUNT] = sConfigMgr->GetFloatDefault("Rate.Drop.Item.ReferencedAmount", 1.0f); rate_values[RATE_DROP_MONEY] = sConfigMgr->GetFloatDefault("Rate.Drop.Money", 1.0f); rate_values[RATE_XP_KILL] = sConfigMgr->GetFloatDefault("Rate.XP.Kill", 1.0f); + rate_values[RATE_XP_BG_KILL] = sConfigMgr->GetFloatDefault("Rate.XP.BattlegroundKill", 1.0f); rate_values[RATE_XP_QUEST] = sConfigMgr->GetFloatDefault("Rate.XP.Quest", 1.0f); rate_values[RATE_XP_EXPLORE] = sConfigMgr->GetFloatDefault("Rate.XP.Explore", 1.0f); rate_values[RATE_REPAIRCOST] = sConfigMgr->GetFloatDefault("Rate.RepairCost", 1.0f); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 1f71975cde..68ab75c724 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -374,6 +374,7 @@ enum Rates RATE_DROP_ITEM_REFERENCED_AMOUNT, RATE_DROP_MONEY, RATE_XP_KILL, + RATE_XP_BG_KILL, RATE_XP_QUEST, RATE_XP_EXPLORE, RATE_REPAIRCOST, diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 40271bfee3..9926fbcdda 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1855,7 +1855,7 @@ Rate.Drop.Item.ReferencedAmount = 1 # Rate.XP.Quest # Rate.XP.Explore # Description: Experience rates. -# Default: 1 - (Rate.XP.Kill) +# Default: 1 - (Rate.XP.Kill, affects only kills outside of Battlegrounds) # 1 - (Rate.XP.Quest) # 1 - (Rate.XP.Explore) @@ -1863,6 +1863,14 @@ Rate.XP.Kill = 1 Rate.XP.Quest = 1 Rate.XP.Explore = 1 +# +# Rate.XP.BattlegroundKill +# Description: Experience rate for honorable kills in battlegrounds, +# it works when Battleground.GiveXPForKills = 1 +# Default: 1 + +Rate.XP.BattlegroundKill = 1 + # # Rate.Quest.Money.Reward # Rate.Quest.Money.Max.Level.Reward @@ -2221,7 +2229,8 @@ BattleGround.PremadeGroupWaitForMatch = 1800000 # # Battleground.GiveXPForKills -# Description: Give experience for honorable kills in battlegrounds. +# Description: Give experience for honorable kills in battlegrounds, +# the rate can be changed in the Rate.XP.BattlegroundKill setting. # Default: 0 - (Disabled) # 1 - (Enabled) From 5a3b1d32f7536501b18e2aabca541224fe84cde4 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 16 Oct 2015 00:42:16 +0200 Subject: [PATCH 167/524] DB/Misc: More AQ40 fixes By Malcrom. --- sql/updates/world/2015_10_16_00_world.sql | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 sql/updates/world/2015_10_16_00_world.sql diff --git a/sql/updates/world/2015_10_16_00_world.sql b/sql/updates/world/2015_10_16_00_world.sql new file mode 100644 index 0000000000..fcc4e6bf42 --- /dev/null +++ b/sql/updates/world/2015_10_16_00_world.sql @@ -0,0 +1,24 @@ +-- +UPDATE `creature` SET `spawndist`=0,`MovementType`=0 WHERE `guid` IN (87678,87679,87680,87681,87682,87683,87684,87690,87698,87702,87704,87705,87707,87710,87712,87714,87715,87716,87719,87721,87725,87728,87730,87731,87732,87733,87734,87738,87739,87740,87747,87749,87750,87751,87756,87762,87764,87765,87767,87769,87772,87774,87777,87778,87779,87791,87793,87794,87795,87797,87799,87800,87801,87802,87803,87807,87816,87818,87820,87822,87824,87826,87828,87829); +INSERT INTO `creature_addon` (`guid`,`emote`) (SELECT `guid`, 28 FROM `creature` WHERE `id`=15300 AND `MovementType`=0); + +-- Fixing position of some AQ40 spawns +DELETE FROM `creature` WHERE `guid` IN (87561,87562,87563,4458,87559,87560,88073,88076,88077,88072); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(87561, 15378, 531, 1, 1, -8652.15, 2020.907, 108.6608, 4.014257, 7200, 0, 0), -- Merithra of the Dream +(87562, 15379, 531, 1, 1, -8660.591, 2022.339, 108.6608, 4.031711, 7200, 0, 0), -- Caelestrasz +(87563, 15380, 531, 1, 1, -8663.463, 2029.885, 108.6608, 4.310963, 7200, 0, 0), -- Arygos +(4458, 15896, 531, 1, 1, -8578.104, 1986.944, 100.3037, 2.303835, 7200, 0, 0), -- C'Thun Portal +(87559, 15727, 531, 1, 1, -8578.648, 1985.847, 100.3037, 3.490659, 7200, 0, 0), -- C'Thun +(87560, 15589, 531, 1, 1, -8578.792, 1986.183, 100.3037, 3.508112, 7200, 0, 0), -- Eye of C'Thun +(88073, 15957, 531, 1, 1, -9173.091, 2107.334, -65.08635 ,1.430085, 7200, 5, 1), -- Ouro should be Ouro Spawner +(88076, 15275, 531, 1, 1, -9023.666, 1176.24, -104.226, 0.7679449, 7200, 0, 0), -- Emperor Vek'nilash +(88077, 15276, 531, 1, 1, -8868.309, 1205.966, -104.2311, 2.70526, 7200, 0, 0), -- Emperor Vek'lor +(88072, 15963, 531, 1, 1, -8953.297, 1233.641, -99.71796, 5.305801, 7200, 0, 0); -- The Master's Eye +-- Ouro Spawner should spawn Ouro "BOSS" on aggro and despawn self. + +DELETE FROM `creature_template_addon` WHERE `entry` IN (15589,15957,15963); +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(15589,0,1,0, '18950'),(15957,0,1,0, '26092'),(15963,0,1,0, '18430'); + +UPDATE `creature_template` SET `InhabitType`=7 WHERE `entry` IN (15963); From 148b772fb6bf6b8e3e72b2957649805d02eab66d Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 16 Oct 2015 11:04:23 +0200 Subject: [PATCH 168/524] Update README.md --- README.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 2ef13384ac..0c9199e8c7 100644 --- a/README.md +++ b/README.md @@ -28,14 +28,9 @@ website at [TrinityCore.org](http://www.trinitycore.org). ## Requirements -+ Platform: Linux, Windows or Mac -+ Processor with SSE2 support -+ Boost ≥ 1.49 -+ MySQL ≥ 5.1.0 -+ CMake ≥ 2.8.11.2 / 2.8.9 (Windows / Linux) -+ OpenSSL ≥ 1.0.0 -+ GCC ≥ 4.7.2 (Linux only) -+ MS Visual Studio ≥ 12 (2013) (Windows only) + +Software requirements are available in the [wiki](http://collab.kpsn.org/display/tc/Requirements) for +Windows, Linux and Mac OSX. ## Install @@ -58,8 +53,9 @@ reports are wasteful and are subject to deletion. ## Submitting fixes -Fixes are submitted as pull requests via Github. For more information on how to +C++ fixes are submitted as pull requests via Github. For more information on how to properly submit a pull request, read the [how-to: maintain a remote fork](http://www.trinitycore.org/f/topic/6037-howto-maintain-a-remote-fork-for-pull-requests-tortoisegit/). +For SQL only fixes open a ticket or if a bug report exists for the bug post on existing ticket. ## Copyright From d4f2367c6bfe62cec4e3194c545cff3d4d8a8cfb Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 16 Oct 2015 11:16:30 +0200 Subject: [PATCH 169/524] Update CONTRIBUTING.md --- CONTRIBUTING.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 01e941cc46..660825c9d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -61,13 +61,8 @@ You are welcome to create an account and help us improve and extend the wiki. Requirements ============ -Platform: Linux, Windows or Mac -Processor with SSE2 support -Boost ≥ 1.4.9 -MySQL ≥ 5.1.0 -CMake ≥ 2.8.11.2 / 2.8.9 (Windows / Linux) -OpenSSL ≥ 1.0.0 -GCC ≥ 4.7.2 (Linux only) -MS Visual Studio ≥ 12 (2013) Update 4 (Windows only) + +Software requirements are available in the [wiki](http://collab.kpsn.org/display/tc/Requirements) for +Windows, Linux and Mac OSX. If you choose Linux, we recommend to use Debian 8, since it's the Linux that we use to test compilations. From def132d5ab4dd5db6dad86f74f56d0223297cecb Mon Sep 17 00:00:00 2001 From: Dr-J Date: Fri, 16 Oct 2015 19:05:23 +0100 Subject: [PATCH 170/524] DB/Misc: Updates for Argent Tournament Quests * add visual for The Light's Mercy * On Agro text for Mistcaller Yngcar * Correct Defend spell for Boneguard Lieutenant Thanks to @killyana for updates to script for the Light's Mercy --- sql/updates/world/2015_10_16_01_world.sql | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 sql/updates/world/2015_10_16_01_world.sql diff --git a/sql/updates/world/2015_10_16_01_world.sql b/sql/updates/world/2015_10_16_01_world.sql new file mode 100644 index 0000000000..050d198e94 --- /dev/null +++ b/sql/updates/world/2015_10_16_01_world.sql @@ -0,0 +1,21 @@ +DELETE FROM `creature_text` WHERE `entry`=34965; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(34965, 0, 0, 'Foolish $c, you cannot stop the Kvaldir!', 12, 0, 100, 0, 0, 0, 35393, 0, 'Mistcaller Yngvar'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=34965 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 +(34965, 0, 4, 0, 4, 0, 100, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Mistcaller Yngvar - On Agro - Say'); + +UPDATE `creature_template` SET `unit_flags`=33555200, `InhabitType`=4 WHERE `entry`=34888; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(34852,34888) 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 +(34852, 0, 0, 1, 8, 0, 100, 1, 66390, 0, 0, 0, 33, 34852, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Slain Tualiq Villager - On Spellhit \'Read Last Rites\' - Quest Credit \'The Light\'s Mercy\' (No Repeat)'), +(34852, 0, 1, 2, 61, 0, 100, 1, 0, 0, 0, 0, 11, 66412, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Slain Tualiq Villager - On Spellhit \'Read Last Rites\' - Cast 66412'), +(34852, 0, 2, 0, 61, 0, 100, 1, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Slain Tualiq Villager - On Spellhit \'Read Last Rites\' - Despawn'), +(34888, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 90, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Set Bytes 2'), +(34888, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 11, 37119, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Cast Spirit Particles (Spawn)'), +(34888, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 11, 64462, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Cast Feign and Drown'), +(34888, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Set run off'), +(34888, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 114, 90, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Tualiq Spirit - On Just Summoned - Rise up'); + +UPDATE `smart_scripts` SET `action_param1`=64100 WHERE `entryorguid`=33429 AND `source_type`=0 AND `id`=6 AND `link`=0; From 7c0270913926c7daac154fb060f8203260cd1366 Mon Sep 17 00:00:00 2001 From: Rushor Date: Fri, 16 Oct 2015 20:59:45 +0200 Subject: [PATCH 171/524] DB/SAI: Dalaran Mages - Add Emotescripts --- sql/updates/world/2015_10_16_02_world.sql | 119 ++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 sql/updates/world/2015_10_16_02_world.sql diff --git a/sql/updates/world/2015_10_16_02_world.sql b/sql/updates/world/2015_10_16_02_world.sql new file mode 100644 index 0000000000..b80f4909a3 --- /dev/null +++ b/sql/updates/world/2015_10_16_02_world.sql @@ -0,0 +1,119 @@ +-- +-- Darthalia Ebonscorch SAI +SET @ENTRY := 32679; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Darthalia Ebonscorch - Out of Combat - Play Emote 1"); + +-- Archmage Tenaj SAI +SET @ENTRY := 32688; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Archmage Tenaj - Out of Combat - Play Emote 1"); + +-- Adorean Lew SAI +SET @ENTRY := 32689; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Adorean Lew - Out of Combat - Play Emote 1"); + +-- Bitty Frostflinger SAI +SET @ENTRY := 32690; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Bitty Frostflinger - Out of Combat - Play Emote 1"); + +-- Grindle Firespark SAI +SET @ENTRY := 32676; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grindle Firespark - Out of Combat - Play Emote 1"); + +-- Fabioso the Fabulous SAI +SET @ENTRY := 32680; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Fabioso the Fabulous - Out of Combat - Play Emote 1"); + +-- Sabriana Sorrowgaze SAI +SET @ENTRY := 32693; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sabriana Sorrowgaze - Out of Combat - Play Emote 1"); + +-- Emeline Fizzlefry SAI +SET @ENTRY := 32678; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Emeline Fizzlefry - Out of Combat - Play Emote 1"); + +-- Whirt the All-Knowing SAI +SET @ENTRY := 32677; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Whirt the All-Knowing - Out of Combat - Play Emote 1"); + +-- Mona Everspring SAI +SET @ENTRY := 32684; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Mona Everspring - Out of Combat - Play Emote 1"); + +-- The Magnificent Merleaux SAI +SET @ENTRY := 32681; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"The Magnificent Merleaux - Out of Combat - Play Emote 1"); + +-- Kitz Proudbreeze SAI +SET @ENTRY := 32685; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Kitz Proudbreeze - Out of Combat - Play Emote 1"); + +-- Crafticus Mindbender SAI +SET @ENTRY := 32686; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Crafticus Mindbender - Out of Combat - Play Emote 1"); + +-- Babagahnoosh the Grumpy SAI +SET @ENTRY := 32675; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Babagahnoosh the Grumpy - Out of Combat - Play Emote 1"); + +-- Magus Fansy Goodbringer SAI +SET @ENTRY := 32691; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Magus Fansy Goodbringer - Out of Combat - Play Emote 1"); + +-- Arcanist Alec SAI +SET @ENTRY := 32692; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Arcanist Alec - Out of Combat - Play Emote 1"); + +-- Linda Ann Kastinglow SAI +SET @ENTRY := 32687; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,4000,8000,4000,8000,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Linda Ann Kastinglow - Out of Combat - Play Emote 1"); From a120053de743a8c74cb48dccdb34f610daff625d Mon Sep 17 00:00:00 2001 From: Incorrect Date: Sat, 17 Oct 2015 05:52:20 +0300 Subject: [PATCH 172/524] Core/Items: Fix a trading spoof exploit. --- src/server/game/Entities/Item/Item.cpp | 16 ++++++++++++++++ src/server/game/Entities/Item/Item.h | 2 +- src/server/game/Entities/Player/Player.cpp | 4 ++-- src/server/game/Entities/Player/Player.h | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 9a6af376e6..19cf9beff2 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1435,3 +1435,19 @@ void Item::ItemContainerDeleteLootMoneyAndLootItemsFromDB() ItemContainerDeleteLootMoneyFromDB(); ItemContainerDeleteLootItemsFromDB(); } + +void Item::SetCount(uint32 value) +{ + SetUInt32Value(ITEM_FIELD_STACK_COUNT, value); + + if (Player* player = GetOwner()) + { + if (TradeData* tradeData = player->GetTradeData()) + { + TradeSlots slot = tradeData->GetTradeSlotForItem(GetGUID()); + + if (slot != TRADE_SLOT_INVALID) + tradeData->SetItem(slot, this, true); + } + } +} diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index a268334b21..1eb6530a99 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -262,7 +262,7 @@ class Item : public Object bool GemsFitSockets() const; uint32 GetCount() const { return GetUInt32Value(ITEM_FIELD_STACK_COUNT); } - void SetCount(uint32 value) { SetUInt32Value(ITEM_FIELD_STACK_COUNT, value); } + void SetCount(uint32 value); uint32 GetMaxStackCount() const { return GetTemplate()->GetMaxStackSize(); } uint8 GetGemCountWithID(uint32 GemID) const; uint8 GetGemCountWithLimitCategory(uint32 limitCategory) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d609cb1b52..8a50013026 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -323,13 +323,13 @@ Item* TradeData::GetSpellCastItem() const return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL; } -void TradeData::SetItem(TradeSlots slot, Item* item) +void TradeData::SetItem(TradeSlots slot, Item* item, bool update /*= false*/) { ObjectGuid itemGuid; if (item) itemGuid = item->GetGUID(); - if (m_items[slot] == itemGuid) + if (m_items[slot] == itemGuid && !update) return; m_items[slot] = itemGuid; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2c3dbc331c..524b688ba7 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1021,7 +1021,7 @@ class TradeData Item* GetItem(TradeSlots slot) const; bool HasItem(ObjectGuid itemGuid) const; TradeSlots GetTradeSlotForItem(ObjectGuid itemGuid) const; - void SetItem(TradeSlots slot, Item* item); + void SetItem(TradeSlots slot, Item* item, bool update = false); uint32 GetSpell() const { return m_spell; } void SetSpell(uint32 spell_id, Item* castItem = NULL); From ebf5b18fbc412705faddccc6bfe72a7993105884 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 17 Oct 2015 18:13:25 +0200 Subject: [PATCH 173/524] DB/Creature: Fix spawnMask for Spire Frostwyrm --- sql/updates/world/2015_10_17_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_17_00_world.sql diff --git a/sql/updates/world/2015_10_17_00_world.sql b/sql/updates/world/2015_10_17_00_world.sql new file mode 100644 index 0000000000..c519abb709 --- /dev/null +++ b/sql/updates/world/2015_10_17_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature` SET `spawnMask`=15 WHERE `id`=37230; From 1e52dd4797941566bae9b883442dd4385c69e334 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sun, 11 Oct 2015 04:39:44 +0200 Subject: [PATCH 174/524] Core/Player rewritten duel CD reset system --- sql/updates/world/2015_10_17_01_world.sql | 1 + src/server/game/Entities/Player/Player.cpp | 15 ++---- src/server/game/Entities/Player/Player.h | 6 +-- src/server/game/Handlers/DuelHandler.cpp | 10 +++- src/server/game/Miscellaneous/Language.h | 3 +- src/server/game/Spells/SpellHistory.cpp | 52 ++++++++++++++++---- src/server/game/Spells/SpellHistory.h | 4 +- src/server/game/World/World.cpp | 2 +- src/server/game/World/World.h | 2 +- src/server/worldserver/worldserver.conf.dist | 6 +-- 10 files changed, 66 insertions(+), 35 deletions(-) create mode 100644 sql/updates/world/2015_10_17_01_world.sql diff --git a/sql/updates/world/2015_10_17_01_world.sql b/sql/updates/world/2015_10_17_01_world.sql new file mode 100644 index 0000000000..f6ddc034e2 --- /dev/null +++ b/sql/updates/world/2015_10_17_01_world.sql @@ -0,0 +1 @@ +DELETE FROM `trinity_string` WHERE `entry` = 11010; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1be3c2454b..7d817a18bc 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7610,18 +7610,13 @@ void Player::DuelComplete(DuelCompleteType type) duel->opponent->SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty); duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 0); - if (sWorld->getBoolConfig(CONFIG_RESET_COOLDOWN_AFTER_DUEL) && - type != DUEL_INTERRUPTED) + if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) { - if (!HasCoolDownBeforeDuel()) - RemoveArenaSpellCooldowns(true); - else - ChatHandler(GetSession()).PSendSysMessage(LANG_COOLDOWN_NOT_RESET_AFTER_DUEL); + RemoveArenaSpellCooldowns(true); + duel->opponent->RemoveArenaSpellCooldowns(true); - if (!duel->opponent->HasCoolDownBeforeDuel()) - duel->opponent->RemoveArenaSpellCooldowns(true); - else - ChatHandler(duel->opponent->GetSession()).PSendSysMessage(LANG_COOLDOWN_NOT_RESET_AFTER_DUEL); + GetSpellHistory()->RestoreCooldownStateAfterDuel(); + duel->opponent->GetSpellHistory()->RestoreCooldownStateAfterDuel(); } delete duel->opponent->duel; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0c1fdd8f03..e62673855b 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -285,7 +285,7 @@ struct PvPInfo struct DuelInfo { - DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false), hasCoolDownBeforeDuel(false) { } + DuelInfo() : initiator(NULL), opponent(NULL), startTimer(0), startTime(0), outOfBound(0), isMounted(false) { } Player* initiator; Player* opponent; @@ -293,7 +293,6 @@ struct DuelInfo time_t startTime; time_t outOfBound; bool isMounted; - bool hasCoolDownBeforeDuel; }; struct Areas @@ -1948,9 +1947,6 @@ class Player : public Unit, public GridObject void SetHonorPoints(uint32 value); void SetArenaPoints(uint32 value); - bool HasCoolDownBeforeDuel() const { return duel->hasCoolDownBeforeDuel; } - void UpdateHasCoolDownBeforeDuel() { duel->hasCoolDownBeforeDuel = GetSpellHistory()->GetArenaCooldownsSize() > 0; } - //End of PvP System void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0); diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp index 6e8ff5547d..79539258bd 100644 --- a/src/server/game/Handlers/DuelHandler.cpp +++ b/src/server/game/Handlers/DuelHandler.cpp @@ -43,8 +43,14 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "Player 1 is: %u (%s)", player->GetGUID().GetCounter(), player->GetName().c_str()); TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", plTarget->GetGUID().GetCounter(), plTarget->GetName().c_str()); - player->UpdateHasCoolDownBeforeDuel(); - plTarget->UpdateHasCoolDownBeforeDuel(); + if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) + { + player->GetSpellHistory()->SaveCooldownStateBeforeDuel(); + plTarget->GetSpellHistory()->SaveCooldownStateBeforeDuel(); + + player->RemoveArenaSpellCooldowns(true); + plTarget->RemoveArenaSpellCooldowns(true); + } time_t now = time(NULL); player->duel->startTimer = now; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index d374c8c509..de117905b3 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1202,8 +1202,7 @@ enum TrinityStrings LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007, LANG_NPCINFO_INHABIT_TYPE = 11008, - LANG_NPCINFO_FLAGS_EXTRA = 11009, + LANG_NPCINFO_FLAGS_EXTRA = 11009 - LANG_COOLDOWN_NOT_RESET_AFTER_DUEL = 11010 }; #endif diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 208b4cf7ed..0ae5fe97b1 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -637,21 +637,53 @@ void SpellHistory::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCoo } } -uint16 SpellHistory::GetArenaCooldownsSize() +void SpellHistory::SaveCooldownStateBeforeDuel() { - uint16 count = 0; + _spellCooldownsBeforeDuel = _spellCooldowns; +} - for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end();) +void SpellHistory::RestoreCooldownStateAfterDuel() +{ + if (Player* player = _owner->ToPlayer()) { - SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); + // add all profession CDs created while in duel (if any) + for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end(); ++itr) + { + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); - if (spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS && - spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS) - ++count; - ++itr; + if (spellInfo->RecoveryTime > 10 * MINUTE * IN_MILLISECONDS || + spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS) + _spellCooldownsBeforeDuel[itr->first] = _spellCooldowns[itr->first]; + } + + _spellCooldowns = _spellCooldownsBeforeDuel; + + // update the client: clear all cooldowns + std::vector resetCooldowns; + resetCooldowns.reserve(_spellCooldowns.size()); + + for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end(); ++itr) + resetCooldowns.push_back(itr->first); + + if (resetCooldowns.empty()) + return; + + SendClearCooldowns(resetCooldowns); + + // update the client: restore old cooldowns + PacketCooldowns cooldowns; + + for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end(); ++itr) + { + Clock::time_point now = Clock::now(); + uint32 cooldownDuration = itr->second.CooldownEnd > now ? std::chrono::duration_cast(itr->second.CooldownEnd - now).count() : 0; + cooldowns[itr->first] = cooldownDuration; + } + + WorldPacket data; + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); + player->SendDirectMessage(&data); } - - return count; } template void SpellHistory::LoadFromDB(PreparedQueryResult cooldownsResult); diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h index 4d0642d644..86737ec7da 100644 --- a/src/server/game/Spells/SpellHistory.h +++ b/src/server/game/Spells/SpellHistory.h @@ -117,7 +117,8 @@ public: void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) const; CooldownStorageType::size_type GetCooldownsSizeForPacket() const { return _spellCooldowns.size(); } - uint16 GetArenaCooldownsSize(); + void SaveCooldownStateBeforeDuel(); + void RestoreCooldownStateAfterDuel(); private: Player* GetPlayerOwner() const; @@ -128,6 +129,7 @@ private: Unit* _owner; CooldownStorageType _spellCooldowns; + CooldownStorageType _spellCooldownsBeforeDuel; Clock::time_point _schoolLockouts[MAX_SPELL_SCHOOL]; GlobalCooldownStorageType _globalCooldowns; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 85e79168b7..56c4cdf0ac 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1190,7 +1190,7 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_MAX_WHO] = sConfigMgr->GetIntDefault("MaxWhoListReturns", 49); m_bool_configs[CONFIG_START_ALL_SPELLS] = sConfigMgr->GetBoolDefault("PlayerStart.AllSpells", false); m_int_configs[CONFIG_HONOR_AFTER_DUEL] = sConfigMgr->GetIntDefault("HonorPointsAfterDuel", 0); - m_bool_configs[CONFIG_RESET_COOLDOWN_AFTER_DUEL] = sConfigMgr->GetBoolDefault("ResetCoolDownAfterDuel", 0); + m_bool_configs[CONFIG_RESET_DUEL_COOLDOWNS] = sConfigMgr->GetBoolDefault("ResetDuelCooldowns", 0); m_bool_configs[CONFIG_START_ALL_EXPLORED] = sConfigMgr->GetBoolDefault("PlayerStart.MapsExplored", false); m_bool_configs[CONFIG_START_ALL_REP] = sConfigMgr->GetBoolDefault("PlayerStart.AllReputation", false); m_bool_configs[CONFIG_ALWAYS_MAXSKILL] = sConfigMgr->GetBoolDefault("AlwaysMaxWeaponSkill", false); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 1f71975cde..5efa3ce3f4 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -161,7 +161,7 @@ enum WorldBoolConfigs CONFIG_ALLOW_TRACK_BOTH_RESOURCES, CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA, CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA, - CONFIG_RESET_COOLDOWN_AFTER_DUEL, + CONFIG_RESET_DUEL_COOLDOWNS, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 1689f05966..a885c23ab8 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2605,12 +2605,12 @@ PlayerStart.MapsExplored = 0 HonorPointsAfterDuel = 0 # -# ResetCoolDownAfterDuel -# Description: Reset all cooldowns after duel, but only if player has no cooldowns before the duel. +# ResetDuelCooldowns +# Description: Reset all cooldowns before duel starts and restore them when duel ends. # Default: 0 - (Disabled) # 1 - (Enabled) -ResetCoolDownAfterDuel = 0 +ResetDuelCooldowns = 0 # # AlwaysMaxWeaponSkill From 8ff619ddc40fee1739125e91d20b519078c3f2fb Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 18 Oct 2015 01:23:35 +0200 Subject: [PATCH 175/524] DB/Creature: Add missing npcs in Dalaran --- sql/updates/world/2015_10_17_02_world.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/updates/world/2015_10_17_02_world.sql diff --git a/sql/updates/world/2015_10_17_02_world.sql b/sql/updates/world/2015_10_17_02_world.sql new file mode 100644 index 0000000000..1960d33f7d --- /dev/null +++ b/sql/updates/world/2015_10_17_02_world.sql @@ -0,0 +1,15 @@ +-- +UPDATE `creature` SET `position_x`=5832.238, `position_y`=564.013611, `position_z`=651.771301, `Orientation`=2.596493 WHERE `guid`=105661; +UPDATE `creature_addon` SET `auras`=60191 WHERE `guid` IN (105661, 103039); +DELETE FROM `creature_addon` WHERE `guid` IN (115295, 48251,48252,48253); +INSERT INTO `creature_addon` (`guid`, `bytes1`, `bytes2`, `auras`) VALUES +(115295,65536,1,60191), +(48251,65536,1,60190), +(48252,65536,1,60190), +(48253,65536,1,60190); + +DELETE FROM `creature` WHERE `guid` IN (48251,48252,48253); +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `Orientation`, `spawntimesecs`) VALUES +(48251, 31851, 571, 1, 1, 5832.240, 564.0139, 651.77099, 2.596490,300), +(48252, 32335, 571, 1, 1, 5833.799, 567.3480, 651.92498, 2.460910,300), +(48253, 32206, 571, 1, 1, 5836.709, 570.0759, 652.10797, 2.146750,300); From 9bd8522c0d626a83dacccaeb2dbb32861ec7e137 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sun, 18 Oct 2015 02:11:51 +0200 Subject: [PATCH 176/524] Core/SpellHistory: Improved Cooldown Duel Reset - Do not send useless data to the client - Fixed a rare visual bug --- src/server/game/Spells/SpellHistory.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 0ae5fe97b1..3c157f0b17 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -677,6 +677,10 @@ void SpellHistory::RestoreCooldownStateAfterDuel() { Clock::time_point now = Clock::now(); uint32 cooldownDuration = itr->second.CooldownEnd > now ? std::chrono::duration_cast(itr->second.CooldownEnd - now).count() : 0; + + if (cooldownDuration == 0) + continue; + cooldowns[itr->first] = cooldownDuration; } From c6c3e72b55846ccfb565fd09580509800bd25c2a Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sun, 18 Oct 2015 15:53:46 +0200 Subject: [PATCH 177/524] Core/Scripts: convert the Duel Cooldown Reset feature to scripts --- src/server/game/Entities/Player/Player.cpp | 9 ---- src/server/game/Handlers/DuelHandler.cpp | 9 ---- src/server/game/Scripting/ScriptLoader.cpp | 2 + src/server/game/World/World.cpp | 2 +- src/server/scripts/World/duel_reset.cpp | 57 ++++++++++++++++++++++ 5 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 src/server/scripts/World/duel_reset.cpp diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9737940dc1..bfcdb7a8f5 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7610,15 +7610,6 @@ void Player::DuelComplete(DuelCompleteType type) duel->opponent->SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty); duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 0); - if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) - { - RemoveArenaSpellCooldowns(true); - duel->opponent->RemoveArenaSpellCooldowns(true); - - GetSpellHistory()->RestoreCooldownStateAfterDuel(); - duel->opponent->GetSpellHistory()->RestoreCooldownStateAfterDuel(); - } - delete duel->opponent->duel; duel->opponent->duel = NULL; delete duel; diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp index 79539258bd..2f39a91afb 100644 --- a/src/server/game/Handlers/DuelHandler.cpp +++ b/src/server/game/Handlers/DuelHandler.cpp @@ -43,15 +43,6 @@ void WorldSession::HandleDuelAcceptedOpcode(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "Player 1 is: %u (%s)", player->GetGUID().GetCounter(), player->GetName().c_str()); TC_LOG_DEBUG("network", "Player 2 is: %u (%s)", plTarget->GetGUID().GetCounter(), plTarget->GetName().c_str()); - if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) - { - player->GetSpellHistory()->SaveCooldownStateBeforeDuel(); - plTarget->GetSpellHistory()->SaveCooldownStateBeforeDuel(); - - player->RemoveArenaSpellCooldowns(true); - plTarget->RemoveArenaSpellCooldowns(true); - } - time_t now = time(NULL); player->duel->startTimer = now; plTarget->duel->startTimer = now; diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 7c4b11769b..a6a8eca600 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -92,6 +92,7 @@ void AddSC_npcs_special(); void AddSC_npc_taxi(); void AddSC_achievement_scripts(); void AddSC_action_ip_logger(); +void AddSC_duel_reset(); //eastern kingdoms void AddSC_alterac_valley(); //Alterac Valley @@ -789,6 +790,7 @@ void AddWorldScripts() // 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 } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 8a84176ade..1c401be97c 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1191,7 +1191,7 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_MAX_WHO] = sConfigMgr->GetIntDefault("MaxWhoListReturns", 49); m_bool_configs[CONFIG_START_ALL_SPELLS] = sConfigMgr->GetBoolDefault("PlayerStart.AllSpells", false); m_int_configs[CONFIG_HONOR_AFTER_DUEL] = sConfigMgr->GetIntDefault("HonorPointsAfterDuel", 0); - m_bool_configs[CONFIG_RESET_DUEL_COOLDOWNS] = sConfigMgr->GetBoolDefault("ResetDuelCooldowns", 0); + m_bool_configs[CONFIG_RESET_DUEL_COOLDOWNS] = sConfigMgr->GetBoolDefault("ResetDuelCooldowns", false); m_bool_configs[CONFIG_START_ALL_EXPLORED] = sConfigMgr->GetBoolDefault("PlayerStart.MapsExplored", false); m_bool_configs[CONFIG_START_ALL_REP] = sConfigMgr->GetBoolDefault("PlayerStart.AllReputation", false); m_bool_configs[CONFIG_ALWAYS_MAXSKILL] = sConfigMgr->GetBoolDefault("AlwaysMaxWeaponSkill", false); diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp new file mode 100644 index 0000000000..f08469d5bd --- /dev/null +++ b/src/server/scripts/World/duel_reset.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2008-2015 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 "ScriptMgr.h" +#include "Player.h" + +class DuelResetScript : public PlayerScript +{ + public: + DuelResetScript() : PlayerScript("DuelResetScript") { } + + // Called when a duel starts (after 3s countdown) + void OnDuelStart(Player* player1, Player* player2) override + { + if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) + { + player1->GetSpellHistory()->SaveCooldownStateBeforeDuel(); + player2->GetSpellHistory()->SaveCooldownStateBeforeDuel(); + + player1->RemoveArenaSpellCooldowns(true); + player2->RemoveArenaSpellCooldowns(true); + } + } + + // Called when a duel ends + void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType /*type*/) override + { + if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) + { + winner->RemoveArenaSpellCooldowns(true); + loser->RemoveArenaSpellCooldowns(true); + + winner->GetSpellHistory()->RestoreCooldownStateAfterDuel(); + loser->GetSpellHistory()->RestoreCooldownStateAfterDuel(); + } + } +}; + +void AddSC_duel_reset() +{ + new DuelResetScript(); +} + From 183b89dcc31e38f23645a008a8c8e6ac4e4aa9f6 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 19 Oct 2015 13:36:44 +0200 Subject: [PATCH 178/524] Update UnixInstall.txt --- doc/UnixInstall.txt | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/doc/UnixInstall.txt b/doc/UnixInstall.txt index d01ca041fe..7c27e43149 100644 --- a/doc/UnixInstall.txt +++ b/doc/UnixInstall.txt @@ -14,23 +14,8 @@ using Windows refer to http://www.trinitycore.info/How-to:Win Installing TrinityCore is fairly simple on a Linux machine, assuming you have all required applications -The most important ones are: +http://collab.kpsn.org/display/tc/Requirements - g++ - gcc version 4.3.x or greater - make - cmake version 2.6.x or greater - libmysql++-dev - git (for checking out the core and database) - openssl - libssl-dev - zlib1g-dev - libtool - libmysqlclient15-dev - patch - build-essential - mysql-client - Most of these are included on common Linux distros, others you may have to install by your self. Please check your distro's repos. From be0649fafbc2e700b1f6043a1c33f44796ce7e7d Mon Sep 17 00:00:00 2001 From: Rushor Date: Tue, 20 Oct 2015 11:25:01 +0200 Subject: [PATCH 179/524] DB/Creature: Gryphoneer Leafbeard - Gossip * closes #15745 --- sql/updates/world/2015_10_20_00_world.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 sql/updates/world/2015_10_20_00_world.sql diff --git a/sql/updates/world/2015_10_20_00_world.sql b/sql/updates/world/2015_10_20_00_world.sql new file mode 100644 index 0000000000..ed787f90f6 --- /dev/null +++ b/sql/updates/world/2015_10_20_00_world.sql @@ -0,0 +1,12 @@ +-- Gryphoneer Leafbeard - Gossip +DELETE FROM `gossip_menu_option` WHERE (`menu_id`=8100 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 +(8100, 0, 0, 'Send me to Shatter Point!', 17935, 1, 1, 0, 0, 0, 0, NULL, 0); + +-- Gryphoneer Leafbeard SAI +SET @ENTRY := 20236; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,1,62,0,100,0,8100,0,0,0,11,35066,2,0,0,0,0,7,0,0,0,0,0,0,0,"Gryphoneer Leafbeard - On Gossip Option 0 Selected - Cast 'Taxi - Hellfire Peninsula - Beach Head to Shatter Point'"), +(@ENTRY,0,1,0,61,0,100,0,8100,0,0,0,72,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Gryphoneer Leafbeard - On Gossip Option 0 Selected - Close Gossip"); From 1bce1b99b9c64d5be59f51dfcf2b3b4dfbff7ac6 Mon Sep 17 00:00:00 2001 From: Rushor Date: Tue, 20 Oct 2015 11:32:41 +0200 Subject: [PATCH 180/524] DB/Creature: Young Thistle Boar - Skinning Loot * closes #15743 --- sql/updates/world/2015_10_20_01_world.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2015_10_20_01_world.sql diff --git a/sql/updates/world/2015_10_20_01_world.sql b/sql/updates/world/2015_10_20_01_world.sql new file mode 100644 index 0000000000..f2d3e950a9 --- /dev/null +++ b/sql/updates/world/2015_10_20_01_world.sql @@ -0,0 +1,5 @@ +-- Young Thistle Boar - Skinning Loot +UPDATE `creature_template` SET `skinloot`=1984 WHERE `entry`=1984; +DELETE FROM `skinning_loot_template` WHERE `Entry`=1984; +INSERT INTO `skinning_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(1984, 2934, 0, 80, 0, 1, 1, 1, 1, NULL); From 85616fcec3afde5fb6d456341d1b192b5d44d5bd Mon Sep 17 00:00:00 2001 From: Rushor Date: Tue, 20 Oct 2015 11:39:18 +0200 Subject: [PATCH 181/524] DB/Creature: Small Crag Boar - Remove invalid skinning Loot * closes #15742 --- sql/updates/world/2015_10_20_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_20_02_world.sql diff --git a/sql/updates/world/2015_10_20_02_world.sql b/sql/updates/world/2015_10_20_02_world.sql new file mode 100644 index 0000000000..e2211a704e --- /dev/null +++ b/sql/updates/world/2015_10_20_02_world.sql @@ -0,0 +1,2 @@ +-- Small Crag Boar - Skinning Loot +UPDATE `creature_template` SET `skinloot`=0 WHERE `entry`=708; From 54341dc8ab77d48c0c0c245648e6fd51bed3e0eb Mon Sep 17 00:00:00 2001 From: Rushor Date: Tue, 20 Oct 2015 11:47:44 +0200 Subject: [PATCH 182/524] DB/Creature: Thistle Boar - Skinning Loot * closes #15744 --- sql/updates/world/2015_10_20_03_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2015_10_20_03_world.sql diff --git a/sql/updates/world/2015_10_20_03_world.sql b/sql/updates/world/2015_10_20_03_world.sql new file mode 100644 index 0000000000..23f7ba806c --- /dev/null +++ b/sql/updates/world/2015_10_20_03_world.sql @@ -0,0 +1,6 @@ +-- Thistle Boar - Skinning Loot +UPDATE `creature_template` SET `skinloot`=1985 WHERE `entry`=1985; +DELETE FROM `skinning_loot_template` WHERE `Entry`=1985; +INSERT INTO `skinning_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(1985, 2934, 0, 88, 0, 1, 1, 1, 1, NULL), +(1985, 2318, 0, 10, 0, 1, 1, 1, 1, NULL); From 5dbe53279b5c1045532bf6fb19b9205f5e036255 Mon Sep 17 00:00:00 2001 From: Rushor Date: Tue, 20 Oct 2015 14:11:57 +0200 Subject: [PATCH 183/524] Core/Spells: Reduce Duration for EffectEnchantHeldItem-Spells --- src/server/game/Spells/SpellEffects.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index e587a59858..b345c5affe 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4373,11 +4373,14 @@ void Spell::EffectEnchantHeldItem(SpellEffIndex effIndex) if (m_spellInfo->Effects[effIndex].MiscValue) { uint32 enchant_id = m_spellInfo->Effects[effIndex].MiscValue; - int32 duration = m_spellInfo->GetDuration(); //Try duration index first .. + int32 duration = m_spellInfo->GetDuration(); // Try duration index first .. if (!duration) - duration = damage;//+1; //Base points after .. + duration = damage;//+1; // Base points after .. if (!duration) - duration = 10; //10 seconds for enchants which don't have listed duration + duration = 10 * IN_MILLISECONDS; // 10 seconds for enchants which don't have listed duration + + if (m_spellInfo->Id == 14792) // Venomhide Poison + duration = 5 * MINUTE * IN_MILLISECONDS; SpellItemEnchantmentEntry const* pEnchant = sSpellItemEnchantmentStore.LookupEntry(enchant_id); if (!pEnchant) @@ -4391,7 +4394,7 @@ void Spell::EffectEnchantHeldItem(SpellEffIndex effIndex) return; // Apply the temporary enchantment - item->SetEnchantment(slot, enchant_id, duration*IN_MILLISECONDS, 0, m_caster->GetGUID()); + item->SetEnchantment(slot, enchant_id, duration, 0, m_caster->GetGUID()); item_owner->ApplyEnchantment(item, slot, true); } } From 6a0ceb96fdb9b911f1a561d1bde23e4d06d68f36 Mon Sep 17 00:00:00 2001 From: Rushor Date: Wed, 21 Oct 2015 10:52:26 +0200 Subject: [PATCH 184/524] DB/Pathing: Onyxia's Lair --- sql/updates/world/2015_10_21_00_world.sql | 265 ++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 sql/updates/world/2015_10_21_00_world.sql diff --git a/sql/updates/world/2015_10_21_00_world.sql b/sql/updates/world/2015_10_21_00_world.sql new file mode 100644 index 0000000000..d751a6e65b --- /dev/null +++ b/sql/updates/world/2015_10_21_00_world.sql @@ -0,0 +1,265 @@ +-- Onyxia Add WPs +SET @NPC := 52051; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-128.604,`position_y`=-135.78,`position_z`=-51.68033 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-128.604,-135.78,-51.68033,0,0,0,0,100,0), +(@PATH,2,-127.7581,-135.2467,-51.68033,0,0,0,0,100,0), +(@PATH,3,-124.1603,-132.1572,-51.38051,0,0,0,0,100,0), +(@PATH,4,-117.3008,-126.2667,-49.287,0,0,0,0,100,0), +(@PATH,5,-114.3034,-123.6929,-49.21809,0,0,0,0,100,0), +(@PATH,6,-110.7887,-120.6747,-48.59732,0,0,0,0,100,0), +(@PATH,7,-106.7952,-117.2454,-45.67963,0,0,0,0,100,0), +(@PATH,8,-103.1414,-114.1078,-42.60856,0,0,0,0,100,0), +(@PATH,9,-103.1414,-114.1078,-42.60856,0,0,0,0,100,0), +(@PATH,10,-102.9662,-113.9184,-42.13044,0,0,0,0,100,0), +(@PATH,11,-101.9662,-112.9184,-41.38044,0,0,0,0,100,0), +(@PATH,12,-97.21623,-108.9184,-39.38044,0,0,0,0,100,0), +(@PATH,13,-94.21623,-106.4184,-38.38044,0,0,0,0,100,0), +(@PATH,14,-91.96623,-104.4184,-38.38044,0,0,0,0,100,0), +(@PATH,15,-87.21623,-100.1684,-36.63044,0,0,0,0,100,0), +(@PATH,16,-86.88522,-99.955,-36.61054,0,0,0,0,100,0), +(@PATH,17,-86.13522,-99.705,-36.36054,0,0,0,0,100,0), +(@PATH,18,-82.63522,-99.205,-35.61054,0,0,0,0,100,0), +(@PATH,19,-80.88522,-99.205,-35.61054,0,0,0,0,100,0), +(@PATH,20,-78.38522,-98.955,-35.11054,0,0,0,0,100,0), +(@PATH,21,-73.38522,-98.455,-34.61054,0,0,0,0,100,0), +(@PATH,22,-73.4659,-98.32379,-34.65569,0,0,0,0,100,0), +(@PATH,23,-77.9659,-98.82379,-35.15569,0,0,0,0,100,0), +(@PATH,24,-80.9659,-98.82379,-35.65569,0,0,0,0,100,0), +(@PATH,25,-82.7159,-99.07379,-35.65569,0,0,0,0,100,0), +(@PATH,26,-82.87637,-99.18207,-35.74073,0,0,0,0,100,0), +(@PATH,27,-86.12637,-99.68207,-36.49073,0,0,0,0,100,0), +(@PATH,28,-87.12637,-100.1821,-36.49073,0,0,0,0,100,0), +(@PATH,29,-91.87637,-104.4321,-38.24073,0,0,0,0,100,0), +(@PATH,30,-93.87637,-106.4321,-38.24073,0,0,0,0,100,0), +(@PATH,31,-96.87637,-108.6821,-39.24073,0,0,0,0,100,0), +(@PATH,32,-101.8764,-112.9321,-41.24073,0,0,0,0,100,0), +(@PATH,33,-102.2544,-113.366,-41.50324,0,0,0,0,100,0), +(@PATH,34,-103.2544,-114.116,-42.50324,0,0,0,0,100,0), +(@PATH,35,-106.7544,-117.366,-45.50324,0,0,0,0,100,0), +(@PATH,36,-110.7544,-120.616,-48.25324,0,0,0,0,100,0), +(@PATH,37,-114.2544,-123.616,-48.75324,0,0,0,0,100,0), +(@PATH,38,-117.0044,-126.116,-48.75324,0,0,0,0,100,0), +(@PATH,39,-123.5044,-131.616,-50.75324,0,0,0,0,100,0), +(@PATH,40,-127.0044,-134.616,-51.00324,0,0,0,0,100,0), +(@PATH,41,-127.2775,-134.812,-51.39043,0,0,0,0,100,0), +(@PATH,42,-127.7775,-135.312,-51.39043,0,0,0,0,100,0), +(@PATH,43,-129.0275,-136.062,-51.89043,0,0,0,0,100,0), +(@PATH,44,-135.7775,-140.312,-52.64043,0,0,0,0,100,0), +(@PATH,45,-136.7775,-141.062,-52.89043,0,0,0,0,100,0), +(@PATH,46,-144.7775,-145.812,-53.89043,0,0,0,0,100,0), +(@PATH,47,-147.2775,-147.562,-53.14043,0,0,0,0,100,0), +(@PATH,48,-147.5882,-147.6326,-53.39889,0,0,0,0,100,0), +(@PATH,49,-148.3382,-148.3826,-53.14889,0,0,0,0,100,0), +(@PATH,50,-150.5882,-150.6326,-53.14889,0,0,0,0,100,0), +(@PATH,51,-151.3382,-151.6326,-53.64889,0,0,0,0,100,0), +(@PATH,52,-156.5882,-157.6326,-56.39889,0,0,0,0,100,0), +(@PATH,53,-158.0882,-159.1326,-57.14889,0,0,0,0,100,0), +(@PATH,54,-162.8382,-164.6326,-58.64889,0,0,0,0,100,0), +(@PATH,55,-163.5882,-165.3826,-59.64889,0,0,0,0,100,0), +(@PATH,56,-166.3382,-168.3826,-61.14889,0,0,0,0,100,0), +(@PATH,57,-166.5622,-168.6543,-61.35694,0,0,0,0,100,0), +(@PATH,58,-163.5622,-165.4043,-59.60694,0,0,0,0,100,0), +(@PATH,59,-162.8122,-164.6543,-58.85694,0,0,0,0,100,0), +(@PATH,60,-158.3122,-159.4043,-57.10694,0,0,0,0,100,0), +(@PATH,61,-156.8122,-157.6543,-56.35694,0,0,0,0,100,0), +(@PATH,62,-151.8122,-152.1543,-54.10694,0,0,0,0,100,0), +(@PATH,63,-150.5622,-150.6543,-53.10694,0,0,0,0,100,0), +(@PATH,64,-148.4862,-148.2634,-52.81345,0,0,0,0,100,0), +(@PATH,65,-147.2362,-147.5134,-53.06345,0,0,0,0,100,0), +(@PATH,66,-144.7362,-146.0134,-53.81345,0,0,0,0,100,0), +(@PATH,67,-136.9862,-141.0134,-52.81345,0,0,0,0,100,0), +(@PATH,68,-135.9862,-140.2634,-52.56345,0,0,0,0,100,0), +(@PATH,69,-129.7362,-136.5134,-52.06345,0,0,0,0,100,0), +(@PATH,70,-129.596,-136.2151,-51.79766,0,0,0,0,100,0); + +SET @NPC := 52049; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-141.0218,`position_y`=-144.2874,`position_z`=-53.78587 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-141.0218,-144.2874,-53.78587,0,0,0,0,100,0), +(@PATH,2,-140.2045,-143.7111,-53.78587,0,0,0,0,100,0), +(@PATH,3,-136.8762,-141.0416,-53.2686,0,0,0,0,100,0), +(@PATH,4,-135.8708,-140.2352,-53.07284,0,0,0,0,100,0), +(@PATH,5,-130.4393,-135.8787,-52.2235,0,0,0,0,100,0), +(@PATH,6,-128.077,-133.984,-51.39751,0,0,0,0,100,0), +(@PATH,7,-126.1452,-132.4346,-51.30407,0,0,0,0,100,0), +(@PATH,8,-126.1452,-132.4346,-51.30407,0,0,0,0,100,0), +(@PATH,9,-127.6748,-133.5728,-51.29497,0,0,0,0,100,0), +(@PATH,10,-130.4248,-135.8228,-52.04497,0,0,0,0,100,0), +(@PATH,11,-135.6748,-140.0728,-52.54497,0,0,0,0,100,0), +(@PATH,12,-136.6748,-140.8228,-52.79497,0,0,0,0,100,0), +(@PATH,13,-140.2209,-143.5945,-53.65104,0,0,0,0,100,0), +(@PATH,14,-144.7209,-146.8445,-54.15104,0,0,0,0,100,0), +(@PATH,15,-147.2209,-148.5945,-53.40104,0,0,0,0,100,0), +(@PATH,16,-150.2209,-150.5945,-53.15104,0,0,0,0,100,0), +(@PATH,17,-150.9709,-151.3445,-53.65104,0,0,0,0,100,0), +(@PATH,18,-152.2209,-152.0945,-54.15104,0,0,0,0,100,0), +(@PATH,19,-157.7209,-155.8445,-56.40104,0,0,0,0,100,0), +(@PATH,20,-160.7863,-158.1388,-57.63475,0,0,0,0,100,0), +(@PATH,21,-162.7863,-162.1388,-58.63475,0,0,0,0,100,0), +(@PATH,22,-163.7863,-163.8888,-59.13475,0,0,0,0,100,0), +(@PATH,23,-166.0363,-168.6388,-61.13475,0,0,0,0,100,0), +(@PATH,24,-168.5363,-173.3888,-62.88475,0,0,0,0,100,0), +(@PATH,25,-170.4057,-176.7284,-64.06725,0,0,0,0,100,0), +(@PATH,26,-170.6557,-177.9784,-64.31725,0,0,0,0,100,0), +(@PATH,27,-171.1557,-178.9784,-64.81725,0,0,0,0,100,0), +(@PATH,28,-172.6557,-184.2284,-65.56725,0,0,0,0,100,0), +(@PATH,29,-175.3081,-192.9928,-66.43716,0,0,0,0,100,0), +(@PATH,30,-171.8081,-197.2428,-66.43716,0,0,0,0,100,0), +(@PATH,31,-168.8081,-201.2428,-66.18716,0,0,0,0,100,0), +(@PATH,32,-165.1812,-205.6809,-66.07635,0,0,0,0,100,0), +(@PATH,33,-160.4312,-207.9309,-66.07635,0,0,0,0,100,0), +(@PATH,34,-154.1812,-210.9309,-66.32635,0,0,0,0,100,0), +(@PATH,35,-154.1465,-210.945,-66.31016,0,0,0,0,100,0), +(@PATH,36,-160.3965,-207.945,-66.06016,0,0,0,0,100,0), +(@PATH,37,-165.1298,-205.5847,-66.08299,0,0,0,0,100,0), +(@PATH,38,-168.6298,-201.3347,-66.33299,0,0,0,0,100,0), +(@PATH,39,-171.8798,-197.3347,-66.58299,0,0,0,0,100,0), +(@PATH,40,-174.8798,-193.8347,-66.58299,0,0,0,0,100,0), +(@PATH,41,-174.8037,-193.4657,-66.47095,0,0,0,0,100,0), +(@PATH,42,-175.3037,-192.7157,-66.47095,0,0,0,0,100,0), +(@PATH,43,-172.5537,-184.4657,-65.47095,0,0,0,0,100,0), +(@PATH,44,-171.0537,-179.2157,-64.97095,0,0,0,0,100,0), +(@PATH,45,-170.8037,-177.9657,-64.22095,0,0,0,0,100,0), +(@PATH,46,-170.8405,-178.8178,-64.7157,0,0,0,0,100,0), +(@PATH,47,-170.5905,-177.8178,-63.9657,0,0,0,0,100,0), +(@PATH,48,-170.0905,-176.5678,-63.7157,0,0,0,0,100,0), +(@PATH,49,-168.3405,-173.3178,-62.9657,0,0,0,0,100,0), +(@PATH,50,-166.3405,-169.0678,-61.4657,0,0,0,0,100,0), +(@PATH,51,-164.0905,-164.5678,-59.7157,0,0,0,0,100,0), +(@PATH,52,-162.8405,-162.0678,-58.7157,0,0,0,0,100,0), +(@PATH,53,-160.623,-157.9054,-57.24116,0,0,0,0,100,0), +(@PATH,54,-157.623,-155.9054,-56.24116,0,0,0,0,100,0), +(@PATH,55,-152.123,-152.4054,-54.24116,0,0,0,0,100,0), +(@PATH,56,-151.373,-151.6554,-53.49116,0,0,0,0,100,0), +(@PATH,57,-150.373,-150.9054,-53.24116,0,0,0,0,100,0), +(@PATH,58,-147.373,-148.9054,-53.24116,0,0,0,0,100,0), +(@PATH,59,-144.623,-146.9054,-54.24116,0,0,0,0,100,0); + +SET @NPC := 52048; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-117.2994,`position_y`=-214.0461,`position_z`=-72.49876 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-117.2994,-214.0461,-72.49876,0,0,0,0,100,0), +(@PATH,2,-121.5494,-213.7961,-71.24876,0,0,0,0,100,0), +(@PATH,3,-125.0494,-213.5461,-71.24876,0,0,0,0,100,0), +(@PATH,4,-138.0494,-212.5461,-69.49876,0,0,0,0,100,0), +(@PATH,5,-141.0494,-212.2961,-68.49876,0,0,0,0,100,0), +(@PATH,6,-144.2994,-212.0461,-68.49876,0,0,0,0,100,0), +(@PATH,7,-146.5494,-211.7961,-68.24876,0,0,0,0,100,0), +(@PATH,8,-153.7994,-211.2961,-66.49876,0,0,0,0,100,0), +(@PATH,9,-160.8753,-210.4289,-66.45905,0,0,0,0,100,0), +(@PATH,10,-162.8753,-208.4289,-66.20905,0,0,0,0,100,0), +(@PATH,11,-165.3753,-205.9289,-66.20905,0,0,0,0,100,0), +(@PATH,12,-169.3753,-201.6789,-66.20905,0,0,0,0,100,0), +(@PATH,13,-175.155,-195.7021,-66.3976,0,0,0,0,100,0), +(@PATH,14,-174.155,-193.2021,-66.3976,0,0,0,0,100,0), +(@PATH,15,-170.655,-182.9521,-65.3976,0,0,0,0,100,0), +(@PATH,16,-169.405,-179.2021,-64.6476,0,0,0,0,100,0), +(@PATH,17,-168.905,-177.7021,-63.8976,0,0,0,0,100,0), +(@PATH,18,-167.655,-173.9521,-63.1476,0,0,0,0,100,0), +(@PATH,19,-165.9926,-169.4054,-61.62289,0,0,0,0,100,0), +(@PATH,20,-163.2426,-166.4054,-59.87289,0,0,0,0,100,0), +(@PATH,21,-162.2426,-165.4054,-58.62289,0,0,0,0,100,0), +(@PATH,22,-156.4926,-158.6554,-56.37289,0,0,0,0,100,0), +(@PATH,23,-152.4926,-153.9054,-54.37289,0,0,0,0,100,0), +(@PATH,24,-152.2406,-153.7879,-54.28136,0,0,0,0,100,0), +(@PATH,25,-150.4906,-152.0379,-53.28136,0,0,0,0,100,0), +(@PATH,26,-147.9906,-150.0379,-53.28136,0,0,0,0,100,0), +(@PATH,27,-146.7406,-149.0379,-53.28136,0,0,0,0,100,0), +(@PATH,28,-144.2406,-147.0379,-54.03136,0,0,0,0,100,0), +(@PATH,29,-136.7406,-141.2879,-52.78136,0,0,0,0,100,0), +(@PATH,30,-129.9906,-136.2879,-52.03136,0,0,0,0,100,0), +(@PATH,31,-127.4906,-134.5379,-51.28136,0,0,0,0,100,0), +(@PATH,32,-124.2406,-131.7879,-51.28136,0,0,0,0,100,0), +(@PATH,33,-121.0758,-129.5125,-50.05389,0,0,0,0,100,0), +(@PATH,34,-116.8258,-126.2625,-48.80389,0,0,0,0,100,0), +(@PATH,35,-113.8258,-123.7625,-48.80389,0,0,0,0,100,0), +(@PATH,36,-110.5758,-121.0125,-48.30389,0,0,0,0,100,0), +(@PATH,37,-106.3258,-117.7625,-45.55389,0,0,0,0,100,0), +(@PATH,38,-101.5758,-114.0125,-41.55389,0,0,0,0,100,0), +(@PATH,39,-98.82584,-111.7625,-40.30389,0,0,0,0,100,0), +(@PATH,40,-97.149,-110.4035,-39.23767,0,0,0,0,100,0), +(@PATH,41,-95.899,-109.6535,-38.73767,0,0,0,0,100,0), +(@PATH,42,-95.149,-109.1535,-38.48767,0,0,0,0,100,0), +(@PATH,43,-92.399,-107.6535,-37.73767,0,0,0,0,100,0), +(@PATH,44,-89.649,-105.9035,-37.73767,0,0,0,0,100,0), +(@PATH,45,-84.649,-103.1535,-36.23767,0,0,0,0,100,0), +(@PATH,46,-82.649,-101.9035,-35.73767,0,0,0,0,100,0), +(@PATH,47,-78.149,-99.15355,-35.23767,0,0,0,0,100,0), +(@PATH,48,-77.96553,-98.93108,-35.05116,0,0,0,0,100,0), +(@PATH,49,-75.21553,-97.68108,-34.80116,0,0,0,0,100,0), +(@PATH,50,-73.21553,-97.68108,-34.80116,0,0,0,0,100,0), +(@PATH,51,-68.21553,-97.68108,-37.05116,0,0,0,0,100,0), +(@PATH,52,-63.21553,-97.68108,-38.55116,0,0,0,0,100,0), +(@PATH,53,-57.46553,-97.68108,-38.30116,0,0,0,0,100,0), +(@PATH,54,-57.42111,-98.24262,-38.41855,0,0,0,0,100,0), +(@PATH,55,-63.42111,-98.49262,-38.41855,0,0,0,0,100,0), +(@PATH,56,-68.17111,-98.49262,-36.91855,0,0,0,0,100,0), +(@PATH,57,-73.17111,-98.74262,-34.66855,0,0,0,0,100,0), +(@PATH,58,-73.4623,-98.88531,-34.77631,0,0,0,0,100,0), +(@PATH,59,-76.2123,-99.13531,-35.02631,0,0,0,0,100,0), +(@PATH,60,-78.2123,-99.88531,-35.02631,0,0,0,0,100,0), +(@PATH,61,-82.7123,-101.3853,-35.77631,0,0,0,0,100,0), +(@PATH,62,-85.2123,-101.8853,-36.27631,0,0,0,0,100,0), +(@PATH,63,-91.4623,-104.1353,-38.02631,0,0,0,0,100,0), +(@PATH,64,-91.69406,-104.2236,-38.36034,0,0,0,0,100,0), +(@PATH,65,-93.44406,-104.7236,-38.11034,0,0,0,0,100,0), +(@PATH,66,-94.69406,-105.7236,-38.11034,0,0,0,0,100,0), +(@PATH,67,-97.69406,-108.4736,-39.11034,0,0,0,0,100,0), +(@PATH,68,-98.69406,-109.4736,-39.86034,0,0,0,0,100,0), +(@PATH,69,-102.4441,-112.4736,-41.61034,0,0,0,0,100,0), +(@PATH,70,-106.9441,-116.4736,-45.36034,0,0,0,0,100,0), +(@PATH,71,-111.2919,-119.9628,-48.522,0,0,0,0,100,0), +(@PATH,72,-114.7919,-123.2128,-49.022,0,0,0,0,100,0), +(@PATH,73,-117.5419,-125.9628,-49.022,0,0,0,0,100,0), +(@PATH,74,-123.5419,-131.4628,-51.022,0,0,0,0,100,0), +(@PATH,75,-126.7919,-134.7128,-51.022,0,0,0,0,100,0), +(@PATH,76,-129.2919,-136.7128,-51.772,0,0,0,0,100,0), +(@PATH,77,-133.0963,-140.5668,-52.85578,0,0,0,0,100,0), +(@PATH,78,-135.5963,-142.3168,-53.10578,0,0,0,0,100,0), +(@PATH,79,-143.5963,-147.5668,-54.35578,0,0,0,0,100,0), +(@PATH,80,-146.3463,-149.3168,-53.35578,0,0,0,0,100,0), +(@PATH,81,-149.5963,-151.5668,-53.35578,0,0,0,0,100,0), +(@PATH,82,-151.0963,-152.5668,-53.85578,0,0,0,0,100,0), +(@PATH,83,-156.1434,-156.1172,-55.97437,0,0,0,0,100,0), +(@PATH,84,-156.8934,-157.3672,-56.47437,0,0,0,0,100,0), +(@PATH,85,-159.1434,-159.8672,-57.47437,0,0,0,0,100,0), +(@PATH,86,-162.8934,-164.8672,-58.97437,0,0,0,0,100,0), +(@PATH,87,-163.3934,-165.6172,-59.72437,0,0,0,0,100,0), +(@PATH,88,-165.8934,-168.6172,-61.22437,0,0,0,0,100,0), +(@PATH,89,-169.1434,-172.8672,-62.72437,0,0,0,0,100,0), +(@PATH,90,-169.4215,-173.0583,-63.12639,0,0,0,0,100,0), +(@PATH,91,-170.6715,-175.0583,-63.62639,0,0,0,0,100,0), +(@PATH,92,-170.9215,-178.0583,-64.37639,0,0,0,0,100,0), +(@PATH,93,-170.9215,-179.0583,-64.87639,0,0,0,0,100,0), +(@PATH,94,-170.9215,-183.3083,-65.37639,0,0,0,0,100,0), +(@PATH,95,-171.4215,-191.8083,-66.12639,0,0,0,0,100,0), +(@PATH,96,-171.6715,-197.3083,-66.12639,0,0,0,0,100,0), +(@PATH,97,-171.9399,-201.3128,-66.46771,0,0,0,0,100,0), +(@PATH,98,-170.4399,-202.0628,-66.21771,0,0,0,0,100,0), +(@PATH,99,-165.1899,-205.0628,-66.21771,0,0,0,0,100,0), +(@PATH,100,-160.1899,-207.5628,-66.21771,0,0,0,0,100,0), +(@PATH,101,-154.1899,-211.0628,-66.46771,0,0,0,0,100,0), +(@PATH,102,-153.828,-211.3276,-66.49379,0,0,0,0,100,0), +(@PATH,103,-153.078,-211.8276,-66.74379,0,0,0,0,100,0), +(@PATH,104,-145.828,-212.8276,-68.49379,0,0,0,0,100,0), +(@PATH,105,-141.578,-213.0776,-68.74379,0,0,0,0,100,0), +(@PATH,106,-138.828,-213.5776,-69.24379,0,0,0,0,100,0), +(@PATH,107,-131.328,-214.5776,-70.24379,0,0,0,0,100,0), +(@PATH,108,-131.1989,-214.7451,-70.56252,0,0,0,0,100,0), +(@PATH,109,-129.4489,-214.7451,-70.81252,0,0,0,0,100,0), +(@PATH,110,-124.6989,-214.7451,-71.56252,0,0,0,0,100,0), +(@PATH,111,-121.6989,-214.7451,-71.56252,0,0,0,0,100,0), +(@PATH,112,-117.6989,-214.7451,-72.31252,0,0,0,0,100,0); From 82b727360c310fcc07439cbe2ad057941c914c43 Mon Sep 17 00:00:00 2001 From: Rushor Date: Wed, 21 Oct 2015 13:33:42 +0200 Subject: [PATCH 185/524] DB/Creature: Grethok the Controller - Add text on Death --- sql/updates/world/2015_10_21_01_world.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 sql/updates/world/2015_10_21_01_world.sql diff --git a/sql/updates/world/2015_10_21_01_world.sql b/sql/updates/world/2015_10_21_01_world.sql new file mode 100644 index 0000000000..dd5e289d2c --- /dev/null +++ b/sql/updates/world/2015_10_21_01_world.sql @@ -0,0 +1,11 @@ +-- +-- Grethok the Controller SAI +SET @ENTRY := 12557; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,4,0,6,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grethok the Controller - On Just Died - Say Line 0"); + +DELETE FROM `creature_text` WHERE `entry`=12557; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `comment`) VALUES +(12557, 0, 0, 'Intruders have breached the hatchery! Sound the alarm! Protect the eggs at all costs!', 14, 0, 100, 0, 0, 0, 9958, 'Grethok the Controller'); From db8aba662ae94aeaab74ae2ae29c38cf0b8bffb4 Mon Sep 17 00:00:00 2001 From: Rushor Date: Thu, 22 Oct 2015 11:21:10 +0200 Subject: [PATCH 186/524] DB/Gossip: Orbaz Bloodbane - Gossip option by @tkrokli + @Pitcrawler , closes #15737 --- sql/updates/world/2015_10_22_00_world.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 sql/updates/world/2015_10_22_00_world.sql diff --git a/sql/updates/world/2015_10_22_00_world.sql b/sql/updates/world/2015_10_22_00_world.sql new file mode 100644 index 0000000000..8075c4e1b2 --- /dev/null +++ b/sql/updates/world/2015_10_22_00_world.sql @@ -0,0 +1,14 @@ +-- +-- Orbaz Bloodbane (NPC 28914) condition for gossip option 9769 to be visible only for quest 12757, Scarlet Armies Approach... +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9769 AND `ConditionValue1`=39654; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,9769,0,0,0,2,0,39654,1,0,0,0,0,'','Orbaz Bloodbane - Show gossip option only if player has received item 39654, The Path of Redemption, from quest 12757'); + +-- Orbaz Bloodbane SAI +SET @ENTRY := 28914; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,19,0,100,0,12757,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Quest 'Scarlet Armies Approach' Taken - Run Script"), +(@ENTRY,0,1,2,62,0,100,0,9769,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Gossip Option 0 Selected - Close Gossip"), +(@ENTRY,0,2,0,61,0,100,0,9769,0,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Orbaz Bloodbane - On Gossip Option 0 Selected - Run Script"); From c5641a9a58e385015dbbcefd9dd747ee52f21f97 Mon Sep 17 00:00:00 2001 From: Rushor Date: Thu, 22 Oct 2015 12:24:26 +0200 Subject: [PATCH 187/524] Scripts/IcecrownCitadel: Quest 'Blood Quickening' - Add Killcredit in 25ManRaid closes #15733 --- .../Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp | 2 +- src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index efc24b94cd..a7ac5d1227 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -203,7 +203,7 @@ class boss_blood_queen_lana_thel : public CreatureScript { instance->SetData(DATA_BLOOD_QUICKENING_STATE, DONE); if (Player* player = killer->ToPlayer()) - player->RewardPlayerAndGroupAtEvent(NPC_INFILTRATOR_MINCHAR_BQ, player); + player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_BQ_25 : NPC_INFILTRATOR_MINCHAR_BQ, player); if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f)) { minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 091190b6b4..e739f5a503 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -155,6 +155,7 @@ enum CreaturesIds NPC_ALCHEMIST_ADRIANNA = 38501, NPC_ALRIN_THE_AGILE = 38551, NPC_INFILTRATOR_MINCHAR_BQ = 38558, + NPC_INFILTRATOR_MINCHAR_BQ_25 = 39123, NPC_MINCHAR_BEAM_STALKER = 38557, NPC_VALITHRIA_DREAMWALKER_QUEST = 38589, From c92faf627712d26a7abdce2db62ffb8b938a4522 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 22 Oct 2015 20:26:56 +0200 Subject: [PATCH 188/524] Core/Commands: Refactored chat command script hook, fixes a crash when building with gcc 5 Closes #15616 Closes #15740 (cherry picked from commit 2d942ddcc528cc9fe718ebbd5903318fcbdab817) # Conflicts: # src/server/scripts/Commands/cs_battlenet_account.cpp # src/server/scripts/Commands/cs_cast.cpp # src/server/scripts/Commands/cs_debug.cpp # src/server/scripts/Commands/cs_go.cpp # src/server/scripts/Commands/cs_misc.cpp # src/server/scripts/Commands/cs_mmaps.cpp # src/server/scripts/Commands/cs_modify.cpp # src/server/scripts/Commands/cs_npc.cpp # src/server/scripts/Commands/cs_reload.cpp # src/server/scripts/Commands/cs_ticket.cpp --- src/server/game/Chat/Chat.cpp | 82 ++----- src/server/game/Chat/Chat.h | 27 ++- src/server/game/Scripting/ScriptMgr.cpp | 10 +- src/server/game/Scripting/ScriptMgr.h | 4 +- src/server/scripts/Commands/cs_account.cpp | 45 ++-- .../scripts/Commands/cs_achievement.cpp | 10 +- src/server/scripts/Commands/cs_ahbot.cpp | 44 ++-- src/server/scripts/Commands/cs_arena.cpp | 20 +- src/server/scripts/Commands/cs_ban.cpp | 45 ++-- src/server/scripts/Commands/cs_bf.cpp | 18 +- src/server/scripts/Commands/cs_cast.cpp | 20 +- src/server/scripts/Commands/cs_character.cpp | 44 ++-- src/server/scripts/Commands/cs_cheat.cpp | 25 +- src/server/scripts/Commands/cs_debug.cpp | 94 ++++---- src/server/scripts/Commands/cs_deserter.cpp | 22 +- src/server/scripts/Commands/cs_disable.cpp | 46 ++-- src/server/scripts/Commands/cs_event.cpp | 16 +- src/server/scripts/Commands/cs_gm.cpp | 20 +- src/server/scripts/Commands/cs_go.cpp | 28 ++- src/server/scripts/Commands/cs_gobject.cpp | 36 ++- src/server/scripts/Commands/cs_group.cpp | 20 +- src/server/scripts/Commands/cs_guild.cpp | 22 +- src/server/scripts/Commands/cs_honor.cpp | 17 +- src/server/scripts/Commands/cs_instance.cpp | 20 +- src/server/scripts/Commands/cs_learn.cpp | 36 ++- src/server/scripts/Commands/cs_lfg.cpp | 18 +- src/server/scripts/Commands/cs_list.cpp | 18 +- src/server/scripts/Commands/cs_lookup.cpp | 50 ++-- src/server/scripts/Commands/cs_message.cpp | 27 +-- src/server/scripts/Commands/cs_misc.cpp | 107 +++++---- src/server/scripts/Commands/cs_mmaps.cpp | 20 +- src/server/scripts/Commands/cs_modify.cpp | 67 +++--- src/server/scripts/Commands/cs_npc.cpp | 176 ++++----------- src/server/scripts/Commands/cs_pet.cpp | 14 +- src/server/scripts/Commands/cs_quest.cpp | 16 +- src/server/scripts/Commands/cs_rbac.cpp | 21 +- src/server/scripts/Commands/cs_reload.cpp | 213 +++++++++--------- src/server/scripts/Commands/cs_reset.cpp | 22 +- src/server/scripts/Commands/cs_send.cpp | 16 +- src/server/scripts/Commands/cs_server.cpp | 57 ++--- src/server/scripts/Commands/cs_tele.cpp | 18 +- src/server/scripts/Commands/cs_ticket.cpp | 45 ++-- src/server/scripts/Commands/cs_titles.cpp | 19 +- src/server/scripts/Commands/cs_wp.cpp | 22 +- .../worldserver/CommandLine/CliRunnable.cpp | 13 +- 45 files changed, 744 insertions(+), 986 deletions(-) diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index da3055ebaa..259e51eb47 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -34,54 +34,16 @@ bool ChatHandler::load_command_table = true; -// get number of commands in table -static size_t getCommandTableSize(const ChatCommand* commands) +std::vector const& ChatHandler::getCommandTable() { - if (!commands) - return 0; - size_t count = 0; - while (commands[count].Name != NULL) - count++; - return count; -} - -// append source command table to target, return number of appended commands -static size_t appendCommandTable(ChatCommand* target, const ChatCommand* source) -{ - const size_t count = getCommandTableSize(source); - if (count) - memcpy(target, source, count * sizeof(ChatCommand)); - return count; -} - -ChatCommand* ChatHandler::getCommandTable() -{ - // cache for commands, needed because some commands are loaded dynamically through ScriptMgr - // cache is never freed and will show as a memory leak in diagnostic tools - // can't use vector as vector storage is implementation-dependent, eg, there can be alignment gaps between elements - static ChatCommand* commandTableCache = NULL; + static std::vector commandTableCache; if (LoadCommandTable()) { SetLoadCommandTable(false); - { - // count total number of top-level commands - size_t total = 0; - std::vector const& dynamic = sScriptMgr->GetChatCommands(); - for (std::vector::const_iterator it = dynamic.begin(); it != dynamic.end(); ++it) - total += getCommandTableSize(*it); - total += 1; // ending zero - - // cache top-level commands - size_t added = 0; - free(commandTableCache); - commandTableCache = (ChatCommand*)malloc(sizeof(ChatCommand) * total); - ASSERT(commandTableCache); - memset(commandTableCache, 0, sizeof(ChatCommand) * total); - for (std::vector::const_iterator it = dynamic.begin(); it != dynamic.end(); ++it) - added += appendCommandTable(commandTableCache + added, *it); - } + std::vector cmds = sScriptMgr->GetChatCommands(); + commandTableCache.swap(cmds); PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_COMMANDS); PreparedQueryResult result = WorldDatabase.Query(stmt); @@ -264,7 +226,7 @@ void ChatHandler::SendSysMessage(uint32 entry) SendSysMessage(GetTrinityString(entry)); } -bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, std::string const& fullcmd) +bool ChatHandler::ExecuteCommandInTable(std::vector const& table, const char* text, std::string const& fullcmd) { char const* oldtext = text; std::string cmd = ""; @@ -277,7 +239,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st while (*text == ' ') ++text; - for (uint32 i = 0; table[i].Name != NULL; ++i) + for (uint32 i = 0; i < table.size(); ++i) { if (!hasStringAbbr(table[i].Name, cmd.c_str())) continue; @@ -285,7 +247,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st bool match = false; if (strlen(table[i].Name) > cmd.length()) { - for (uint32 j = 0; table[j].Name != NULL; ++j) + for (uint32 j = 0; j < table.size(); ++j) { if (!hasStringAbbr(table[j].Name, cmd.c_str())) continue; @@ -301,7 +263,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st continue; // select subcommand from child commands list - if (table[i].ChildCommands != NULL) + if (!table[i].ChildCommands.empty()) { if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd)) { @@ -367,7 +329,7 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, st return false; } -bool ChatHandler::SetDataForCommandInTable(ChatCommand* table, char const* text, uint32 permission, std::string const& help, std::string const& fullcommand) +bool ChatHandler::SetDataForCommandInTable(std::vector& table, char const* text, uint32 permission, std::string const& help, std::string const& fullcommand) { std::string cmd = ""; @@ -379,14 +341,14 @@ bool ChatHandler::SetDataForCommandInTable(ChatCommand* table, char const* text, while (*text == ' ') ++text; - for (uint32 i = 0; table[i].Name != NULL; i++) + for (uint32 i = 0; i < table.size(); i++) { // for data fill use full explicit command names if (table[i].Name != cmd) continue; // select subcommand from child commands list (including "") - if (table[i].ChildCommands != NULL) + if (!table[i].ChildCommands.empty()) { if (SetDataForCommandInTable(table[i].ChildCommands, text, permission, help, fullcommand)) return true; @@ -413,7 +375,7 @@ bool ChatHandler::SetDataForCommandInTable(ChatCommand* table, char const* text, // in case "" command let process by caller if (!cmd.empty()) { - if (table == getCommandTable()) + if (&table == &getCommandTable()) TC_LOG_ERROR("sql.sql", "Table `command` have not existed command '%s', skip.", cmd.c_str()); else TC_LOG_ERROR("sql.sql", "Table `command` have not existed subcommand '%s' in command '%s', skip.", cmd.c_str(), fullcommand.c_str()); @@ -519,10 +481,10 @@ Valid examples: return LinkExtractor(message).IsValidMessage(); } -bool ChatHandler::ShowHelpForSubCommands(ChatCommand* table, char const* cmd, char const* subcmd) +bool ChatHandler::ShowHelpForSubCommands(std::vector const& table, char const* cmd, char const* subcmd) { std::string list; - for (uint32 i = 0; table[i].Name != NULL; ++i) + for (uint32 i = 0; i < table.size(); ++i) { // must be available (ignore handler existence for show command with possible available subcommands) if (!isAvailable(table[i])) @@ -539,14 +501,14 @@ bool ChatHandler::ShowHelpForSubCommands(ChatCommand* table, char const* cmd, ch list += table[i].Name; - if (table[i].ChildCommands) + if (!table[i].ChildCommands.empty()) list += " ..."; } if (list.empty()) return false; - if (table == getCommandTable()) + if (&table == &getCommandTable()) { SendSysMessage(LANG_AVIABLE_CMD); PSendSysMessage("%s", list.c_str()); @@ -557,11 +519,11 @@ bool ChatHandler::ShowHelpForSubCommands(ChatCommand* table, char const* cmd, ch return true; } -bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd) +bool ChatHandler::ShowHelpForCommand(std::vector const& table, const char* cmd) { if (*cmd) { - for (uint32 i = 0; table[i].Name != NULL; ++i) + for (uint32 i = 0; i < table.size(); ++i) { // must be available (ignore handler existence for show command with possible available subcommands) if (!isAvailable(table[i])) @@ -573,7 +535,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd) // have subcommand char const* subcmd = (*cmd) ? strtok(NULL, " ") : ""; - if (table[i].ChildCommands && subcmd && *subcmd) + if (!table[i].ChildCommands.empty() && subcmd && *subcmd) { if (ShowHelpForCommand(table[i].ChildCommands, subcmd)) return true; @@ -582,7 +544,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd) if (!table[i].Help.empty()) SendSysMessage(table[i].Help.c_str()); - if (table[i].ChildCommands) + if (!table[i].ChildCommands.empty()) if (ShowHelpForSubCommands(table[i].ChildCommands, table[i].Name, subcmd ? subcmd : "")) return true; @@ -591,7 +553,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd) } else { - for (uint32 i = 0; table[i].Name != NULL; ++i) + for (uint32 i = 0; i < table.size(); ++i) { // must be available (ignore handler existence for show command with possible available subcommands) if (!isAvailable(table[i])) @@ -603,7 +565,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd) if (!table[i].Help.empty()) SendSysMessage(table[i].Help.c_str()); - if (table[i].ChildCommands) + if (!table[i].ChildCommands.empty()) if (ShowHelpForSubCommands(table[i].ChildCommands, "", "")) return true; diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 57192f948d..ff8757a891 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -38,13 +38,18 @@ struct GameTele; class ChatCommand { + typedef bool(*pHandler)(ChatHandler*, char const*); + public: - const char * Name; - uint32 Permission; // function pointer required correct align (use uint32) - bool AllowConsole; - bool (*Handler)(ChatHandler*, const char* args); - std::string Help; - ChatCommand* ChildCommands; + ChatCommand(char const* name, uint32 permission, bool allowConsole, pHandler handler, std::string help, std::vector childCommands = std::vector()) + : Name(name), Permission(permission), AllowConsole(allowConsole), Handler(handler), Help(std::move(help)), ChildCommands(std::move(childCommands)) { } + + char const* Name; + uint32 Permission; // function pointer required correct align (use uint32) + bool AllowConsole; + pHandler Handler; + std::string Help; + std::vector ChildCommands; }; class ChatHandler @@ -90,7 +95,7 @@ class ChatHandler bool ParseCommands(const char* text); - static ChatCommand* getCommandTable(); + static std::vector const& getCommandTable(); bool isValidChatMessage(const char* msg); void SendGlobalSysMessage(const char *str); @@ -141,12 +146,12 @@ class ChatHandler static bool LoadCommandTable() { return load_command_table; } static void SetLoadCommandTable(bool val) { load_command_table = val; } - bool ShowHelpForCommand(ChatCommand* table, const char* cmd); + bool ShowHelpForCommand(std::vector const& table, const char* cmd); protected: explicit ChatHandler() : m_session(NULL), sentErrorMessage(false) { } // for CLI subclass - static bool SetDataForCommandInTable(ChatCommand* table, const char* text, uint32 permission, std::string const& help, std::string const& fullcommand); - bool ExecuteCommandInTable(ChatCommand* table, const char* text, std::string const& fullcmd); - bool ShowHelpForSubCommands(ChatCommand* table, char const* cmd, char const* subcmd); + static bool SetDataForCommandInTable(std::vector& table, const char* text, uint32 permission, std::string const& help, std::string const& fullcommand); + bool ExecuteCommandInTable(std::vector const& table, const char* text, std::string const& fullcmd); + bool ShowHelpForSubCommands(std::vector const& table, char const* cmd, char const* subcmd); private: WorldSession* m_session; // != NULL for chat command call and NULL for CLI command diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index db5e09c5d2..f2613b0267 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -33,6 +33,7 @@ #include "Player.h" #include "WorldPacket.h" #include "WorldSession.h" +#include "Chat.h" // namespace // { @@ -972,12 +973,15 @@ OutdoorPvP* ScriptMgr::CreateOutdoorPvP(OutdoorPvPData const* data) return tmpscript->GetOutdoorPvP(); } -std::vector ScriptMgr::GetChatCommands() +std::vector ScriptMgr::GetChatCommands() { - std::vector table; + std::vector table; FOR_SCRIPTS_RET(CommandScript, itr, end, table) - table.push_back(itr->second->GetCommands()); + { + std::vector cmds = itr->second->GetCommands(); + table.insert(table.end(), cmds.begin(), cmds.end()); + } return table; } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 7e1751244f..a2024a5ccb 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -554,7 +554,7 @@ class CommandScript : public ScriptObject public: // Should return a pointer to a valid command table (ChatCommand array) to be used by ChatHandler. - virtual ChatCommand* GetCommands() const = 0; + virtual std::vector GetCommands() const = 0; }; class WeatherScript : public ScriptObject, public UpdatableScript @@ -1014,7 +1014,7 @@ class ScriptMgr public: /* CommandScript */ - std::vector GetChatCommands(); + std::vector GetChatCommands(); public: /* WeatherScript */ diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index 04520101d1..8d9a40d9d1 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -33,45 +33,40 @@ class account_commandscript : public CommandScript public: account_commandscript() : CommandScript("account_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand accountSetSecTable[] = + static std::vector accountSetSecTable = { - { "regmail", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_REGMAIL, true, &HandleAccountSetRegEmailCommand, "", NULL }, - { "email", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_EMAIL, true, &HandleAccountSetEmailCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "regmail", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_REGMAIL, true, &HandleAccountSetRegEmailCommand, "" }, + { "email", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC_EMAIL, true, &HandleAccountSetEmailCommand, "" }, }; - static ChatCommand accountSetCommandTable[] = + static std::vector accountSetCommandTable = { - { "addon", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON, true, &HandleAccountSetAddonCommand, "", NULL }, + { "addon", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_ADDON, true, &HandleAccountSetAddonCommand, "" }, { "sec", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_SEC, true, NULL, "", accountSetSecTable }, - { "gmlevel", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL, true, &HandleAccountSetGmLevelCommand, "", NULL }, - { "password", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD, true, &HandleAccountSetPasswordCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "gmlevel", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_GMLEVEL, true, &HandleAccountSetGmLevelCommand, "" }, + { "password", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET_PASSWORD, true, &HandleAccountSetPasswordCommand, "" }, }; - static ChatCommand accountLockCommandTable[] = + static std::vector accountLockCommandTable = { - { "country", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY, false, &HandleAccountLockCountryCommand, "", NULL }, - { "ip", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP, false, &HandleAccountLockIpCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "country", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_COUNTRY, false, &HandleAccountLockCountryCommand, "" }, + { "ip", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK_IP, false, &HandleAccountLockIpCommand, "" }, }; - static ChatCommand accountCommandTable[] = + static std::vector accountCommandTable = { - { "addon", rbac::RBAC_PERM_COMMAND_ACCOUNT_ADDON, false, &HandleAccountAddonCommand, "", NULL }, - { "create", rbac::RBAC_PERM_COMMAND_ACCOUNT_CREATE, true, &HandleAccountCreateCommand, "", NULL }, - { "delete", rbac::RBAC_PERM_COMMAND_ACCOUNT_DELETE, true, &HandleAccountDeleteCommand, "", NULL }, - { "email", rbac::RBAC_PERM_COMMAND_ACCOUNT_EMAIL, false, &HandleAccountEmailCommand, "", NULL }, - { "onlinelist", rbac::RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST, true, &HandleAccountOnlineListCommand, "", NULL }, + { "addon", rbac::RBAC_PERM_COMMAND_ACCOUNT_ADDON, false, &HandleAccountAddonCommand, "" }, + { "create", rbac::RBAC_PERM_COMMAND_ACCOUNT_CREATE, true, &HandleAccountCreateCommand, "" }, + { "delete", rbac::RBAC_PERM_COMMAND_ACCOUNT_DELETE, true, &HandleAccountDeleteCommand, "" }, + { "email", rbac::RBAC_PERM_COMMAND_ACCOUNT_EMAIL, false, &HandleAccountEmailCommand, "" }, + { "onlinelist", rbac::RBAC_PERM_COMMAND_ACCOUNT_ONLINE_LIST, true, &HandleAccountOnlineListCommand, "" }, { "lock", rbac::RBAC_PERM_COMMAND_ACCOUNT_LOCK, false, NULL, "", accountLockCommandTable }, { "set", rbac::RBAC_PERM_COMMAND_ACCOUNT_SET, true, NULL, "", accountSetCommandTable }, - { "password", rbac::RBAC_PERM_COMMAND_ACCOUNT_PASSWORD, false, &HandleAccountPasswordCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_ACCOUNT, false, &HandleAccountCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "password", rbac::RBAC_PERM_COMMAND_ACCOUNT_PASSWORD, false, &HandleAccountPasswordCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_ACCOUNT, false, &HandleAccountCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "account", rbac::RBAC_PERM_COMMAND_ACCOUNT, true, NULL, "", accountCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp index 8a038844ec..ea77bc1f18 100644 --- a/src/server/scripts/Commands/cs_achievement.cpp +++ b/src/server/scripts/Commands/cs_achievement.cpp @@ -33,17 +33,15 @@ class achievement_commandscript : public CommandScript public: achievement_commandscript() : CommandScript("achievement_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand achievementCommandTable[] = + static std::vector achievementCommandTable = { - { "add", rbac::RBAC_PERM_COMMAND_ACHIEVEMENT_ADD, false, &HandleAchievementAddCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "add", rbac::RBAC_PERM_COMMAND_ACHIEVEMENT_ADD, false, &HandleAchievementAddCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "achievement", rbac::RBAC_PERM_COMMAND_ACHIEVEMENT, false, NULL, "", achievementCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_ahbot.cpp b/src/server/scripts/Commands/cs_ahbot.cpp index 559a775da3..44889fccd3 100644 --- a/src/server/scripts/Commands/cs_ahbot.cpp +++ b/src/server/scripts/Commands/cs_ahbot.cpp @@ -33,44 +33,40 @@ class ahbot_commandscript : public CommandScript public: ahbot_commandscript(): CommandScript("ahbot_commandscript") {} - ChatCommand* GetCommands() const + std::vector GetCommands() const { - static ChatCommand ahbotItemsAmountCommandTable[] = + static std::vector ahbotItemsAmountCommandTable = { - { "gray", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_GRAY, true, &HandleAHBotItemsAmountQualityCommand, "", NULL }, - { "white", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_WHITE, true, &HandleAHBotItemsAmountQualityCommand, "", NULL }, - { "green", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_GREEN, true, &HandleAHBotItemsAmountQualityCommand, "", NULL }, - { "blue", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_BLUE, true, &HandleAHBotItemsAmountQualityCommand, "", NULL }, - { "purple", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_PURPLE, true, &HandleAHBotItemsAmountQualityCommand, "", NULL }, - { "orange", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_ORANGE, true, &HandleAHBotItemsAmountQualityCommand, "", NULL }, - { "yellow", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_YELLOW, true, &HandleAHBotItemsAmountQualityCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS, true, &HandleAHBotItemsAmountCommand, "", NULL }, - { NULL, 0, true, NULL, "", NULL } + { "gray", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_GRAY, true, &HandleAHBotItemsAmountQualityCommand, "" }, + { "white", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_WHITE, true, &HandleAHBotItemsAmountQualityCommand, "" }, + { "green", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_GREEN, true, &HandleAHBotItemsAmountQualityCommand, "" }, + { "blue", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_BLUE, true, &HandleAHBotItemsAmountQualityCommand, "" }, + { "purple", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_PURPLE, true, &HandleAHBotItemsAmountQualityCommand, "" }, + { "orange", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_ORANGE, true, &HandleAHBotItemsAmountQualityCommand, "" }, + { "yellow", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS_YELLOW, true, &HandleAHBotItemsAmountQualityCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS, true, &HandleAHBotItemsAmountCommand, "" }, }; - static ChatCommand ahbotItemsRatioCommandTable[] = + static std::vector ahbotItemsRatioCommandTable = { - { "alliance", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_ALLIANCE, true, &HandleAHBotItemsRatioHouseCommand, "", NULL }, - { "horde", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_HORDE, true, &HandleAHBotItemsRatioHouseCommand, "", NULL }, - { "neutral", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_NEUTRAL, true, &HandleAHBotItemsRatioHouseCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO, true, &HandleAHBotItemsRatioCommand, "", NULL }, - { NULL, 0, true, NULL, "", NULL } + { "alliance", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_ALLIANCE, true, &HandleAHBotItemsRatioHouseCommand, "" }, + { "horde", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_HORDE, true, &HandleAHBotItemsRatioHouseCommand, "" }, + { "neutral", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO_NEUTRAL, true, &HandleAHBotItemsRatioHouseCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO, true, &HandleAHBotItemsRatioCommand, "" }, }; - static ChatCommand ahbotCommandTable[] = + static std::vector ahbotCommandTable = { { "items", rbac::RBAC_PERM_COMMAND_AHBOT_ITEMS, true, NULL, "", ahbotItemsAmountCommandTable }, { "ratio", rbac::RBAC_PERM_COMMAND_AHBOT_RATIO, true, NULL, "", ahbotItemsRatioCommandTable }, - { "rebuild", rbac::RBAC_PERM_COMMAND_AHBOT_REBUILD, true, &HandleAHBotRebuildCommand, "", NULL }, - { "reload", rbac::RBAC_PERM_COMMAND_AHBOT_RELOAD, true, &HandleAHBotReloadCommand, "", NULL }, - { "status", rbac::RBAC_PERM_COMMAND_AHBOT_STATUS, true, &HandleAHBotStatusCommand, "", NULL }, - { NULL, 0, true, NULL, "", NULL } + { "rebuild", rbac::RBAC_PERM_COMMAND_AHBOT_REBUILD, true, &HandleAHBotRebuildCommand, "" }, + { "reload", rbac::RBAC_PERM_COMMAND_AHBOT_RELOAD, true, &HandleAHBotReloadCommand, "" }, + { "status", rbac::RBAC_PERM_COMMAND_AHBOT_STATUS, true, &HandleAHBotStatusCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "ahbot", rbac::RBAC_PERM_COMMAND_AHBOT, false, NULL, "", ahbotCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp index 4cafb651ad..f6b355a8db 100644 --- a/src/server/scripts/Commands/cs_arena.cpp +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -34,22 +34,20 @@ class arena_commandscript : public CommandScript public: arena_commandscript() : CommandScript("arena_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand arenaCommandTable[] = + static std::vector arenaCommandTable = { - { "create", rbac::RBAC_PERM_COMMAND_ARENA_CREATE, true, &HandleArenaCreateCommand, "", NULL }, - { "disband", rbac::RBAC_PERM_COMMAND_ARENA_DISBAND, true, &HandleArenaDisbandCommand, "", NULL }, - { "rename", rbac::RBAC_PERM_COMMAND_ARENA_RENAME, true, &HandleArenaRenameCommand, "", NULL }, - { "captain", rbac::RBAC_PERM_COMMAND_ARENA_CAPTAIN, false, &HandleArenaCaptainCommand, "", NULL }, - { "info", rbac::RBAC_PERM_COMMAND_ARENA_INFO, true, &HandleArenaInfoCommand, "", NULL }, - { "lookup", rbac::RBAC_PERM_COMMAND_ARENA_LOOKUP, false, &HandleArenaLookupCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "create", rbac::RBAC_PERM_COMMAND_ARENA_CREATE, true, &HandleArenaCreateCommand, "" }, + { "disband", rbac::RBAC_PERM_COMMAND_ARENA_DISBAND, true, &HandleArenaDisbandCommand, "" }, + { "rename", rbac::RBAC_PERM_COMMAND_ARENA_RENAME, true, &HandleArenaRenameCommand, "" }, + { "captain", rbac::RBAC_PERM_COMMAND_ARENA_CAPTAIN, false, &HandleArenaCaptainCommand, "" }, + { "info", rbac::RBAC_PERM_COMMAND_ARENA_INFO, true, &HandleArenaInfoCommand, "" }, + { "lookup", rbac::RBAC_PERM_COMMAND_ARENA_LOOKUP, false, &HandleArenaLookupCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "arena", rbac::RBAC_PERM_COMMAND_ARENA, false, NULL, "", arenaCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index ed7b31198d..67015cd7d9 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -35,45 +35,40 @@ class ban_commandscript : public CommandScript public: ban_commandscript() : CommandScript("ban_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand unbanCommandTable[] = + static std::vector unbanCommandTable = { - { "account", rbac::RBAC_PERM_COMMAND_UNBAN_ACCOUNT, true, &HandleUnBanAccountCommand, "", NULL }, - { "character", rbac::RBAC_PERM_COMMAND_UNBAN_CHARACTER, true, &HandleUnBanCharacterCommand, "", NULL }, - { "playeraccount", rbac::RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT, true, &HandleUnBanAccountByCharCommand, "", NULL }, - { "ip", rbac::RBAC_PERM_COMMAND_UNBAN_IP, true, &HandleUnBanIPCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "account", rbac::RBAC_PERM_COMMAND_UNBAN_ACCOUNT, true, &HandleUnBanAccountCommand, "" }, + { "character", rbac::RBAC_PERM_COMMAND_UNBAN_CHARACTER, true, &HandleUnBanCharacterCommand, "" }, + { "playeraccount", rbac::RBAC_PERM_COMMAND_UNBAN_PLAYERACCOUNT, true, &HandleUnBanAccountByCharCommand, "" }, + { "ip", rbac::RBAC_PERM_COMMAND_UNBAN_IP, true, &HandleUnBanIPCommand, "" }, }; - static ChatCommand banlistCommandTable[] = + static std::vector banlistCommandTable = { - { "account", rbac::RBAC_PERM_COMMAND_BANLIST_ACCOUNT, true, &HandleBanListAccountCommand, "", NULL }, - { "character", rbac::RBAC_PERM_COMMAND_BANLIST_CHARACTER, true, &HandleBanListCharacterCommand, "", NULL }, - { "ip", rbac::RBAC_PERM_COMMAND_BANLIST_IP, true, &HandleBanListIPCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "account", rbac::RBAC_PERM_COMMAND_BANLIST_ACCOUNT, true, &HandleBanListAccountCommand, "" }, + { "character", rbac::RBAC_PERM_COMMAND_BANLIST_CHARACTER, true, &HandleBanListCharacterCommand, "" }, + { "ip", rbac::RBAC_PERM_COMMAND_BANLIST_IP, true, &HandleBanListIPCommand, "" }, }; - static ChatCommand baninfoCommandTable[] = + static std::vector baninfoCommandTable = { - { "account", rbac::RBAC_PERM_COMMAND_BANINFO_ACCOUNT, true, &HandleBanInfoAccountCommand, "", NULL }, - { "character", rbac::RBAC_PERM_COMMAND_BANINFO_CHARACTER, true, &HandleBanInfoCharacterCommand, "", NULL }, - { "ip", rbac::RBAC_PERM_COMMAND_BANINFO_IP, true, &HandleBanInfoIPCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "account", rbac::RBAC_PERM_COMMAND_BANINFO_ACCOUNT, true, &HandleBanInfoAccountCommand, "" }, + { "character", rbac::RBAC_PERM_COMMAND_BANINFO_CHARACTER, true, &HandleBanInfoCharacterCommand, "" }, + { "ip", rbac::RBAC_PERM_COMMAND_BANINFO_IP, true, &HandleBanInfoIPCommand, "" }, }; - static ChatCommand banCommandTable[] = + static std::vector banCommandTable = { - { "account", rbac::RBAC_PERM_COMMAND_BAN_ACCOUNT, true, &HandleBanAccountCommand, "", NULL }, - { "character", rbac::RBAC_PERM_COMMAND_BAN_CHARACTER, true, &HandleBanCharacterCommand, "", NULL }, - { "playeraccount", rbac::RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT, true, &HandleBanAccountByCharCommand, "", NULL }, - { "ip", rbac::RBAC_PERM_COMMAND_BAN_IP, true, &HandleBanIPCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "account", rbac::RBAC_PERM_COMMAND_BAN_ACCOUNT, true, &HandleBanAccountCommand, "" }, + { "character", rbac::RBAC_PERM_COMMAND_BAN_CHARACTER, true, &HandleBanCharacterCommand, "" }, + { "playeraccount", rbac::RBAC_PERM_COMMAND_BAN_PLAYERACCOUNT, true, &HandleBanAccountByCharCommand, "" }, + { "ip", rbac::RBAC_PERM_COMMAND_BAN_IP, true, &HandleBanIPCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "ban", rbac::RBAC_PERM_COMMAND_BAN, true, NULL, "", banCommandTable }, { "baninfo", rbac::RBAC_PERM_COMMAND_BANINFO, true, NULL, "", baninfoCommandTable }, { "banlist", rbac::RBAC_PERM_COMMAND_BANLIST, true, NULL, "", banlistCommandTable }, { "unban", rbac::RBAC_PERM_COMMAND_UNBAN, true, NULL, "", unbanCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_bf.cpp b/src/server/scripts/Commands/cs_bf.cpp index 830e801bce..7101b89b5f 100644 --- a/src/server/scripts/Commands/cs_bf.cpp +++ b/src/server/scripts/Commands/cs_bf.cpp @@ -31,21 +31,19 @@ class bf_commandscript : public CommandScript public: bf_commandscript() : CommandScript("bf_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand battlefieldcommandTable[] = + static std::vector battlefieldcommandTable = { - { "start", rbac::RBAC_PERM_COMMAND_BF_START, false, &HandleBattlefieldStart, "", NULL }, - { "stop", rbac::RBAC_PERM_COMMAND_BF_STOP, false, &HandleBattlefieldEnd, "", NULL }, - { "switch", rbac::RBAC_PERM_COMMAND_BF_SWITCH, false, &HandleBattlefieldSwitch, "", NULL }, - { "timer", rbac::RBAC_PERM_COMMAND_BF_TIMER, false, &HandleBattlefieldTimer, "", NULL }, - { "enable", rbac::RBAC_PERM_COMMAND_BF_ENABLE, false, &HandleBattlefieldEnable, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "start", rbac::RBAC_PERM_COMMAND_BF_START, false, &HandleBattlefieldStart, "" }, + { "stop", rbac::RBAC_PERM_COMMAND_BF_STOP, false, &HandleBattlefieldEnd, "" }, + { "switch", rbac::RBAC_PERM_COMMAND_BF_SWITCH, false, &HandleBattlefieldSwitch, "" }, + { "timer", rbac::RBAC_PERM_COMMAND_BF_TIMER, false, &HandleBattlefieldTimer, "" }, + { "enable", rbac::RBAC_PERM_COMMAND_BF_ENABLE, false, &HandleBattlefieldEnable, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "bf", rbac::RBAC_PERM_COMMAND_BF, false, NULL, "", battlefieldcommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp index dfd0bb3675..59c919abd2 100644 --- a/src/server/scripts/Commands/cs_cast.cpp +++ b/src/server/scripts/Commands/cs_cast.cpp @@ -33,22 +33,20 @@ class cast_commandscript : public CommandScript public: cast_commandscript() : CommandScript("cast_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand castCommandTable[] = + static std::vector castCommandTable = { - { "back", rbac::RBAC_PERM_COMMAND_CAST_BACK, false, &HandleCastBackCommand, "", NULL }, - { "dist", rbac::RBAC_PERM_COMMAND_CAST_DIST, false, &HandleCastDistCommand, "", NULL }, - { "self", rbac::RBAC_PERM_COMMAND_CAST_SELF, false, &HandleCastSelfCommand, "", NULL }, - { "target", rbac::RBAC_PERM_COMMAND_CAST_TARGET, false, &HandleCastTargetCommad, "", NULL }, - { "dest", rbac::RBAC_PERM_COMMAND_CAST_DEST, false, &HandleCastDestCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_CAST, false, &HandleCastCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "back", rbac::RBAC_PERM_COMMAND_CAST_BACK, false, &HandleCastBackCommand, "" }, + { "dist", rbac::RBAC_PERM_COMMAND_CAST_DIST, false, &HandleCastDistCommand, "" }, + { "self", rbac::RBAC_PERM_COMMAND_CAST_SELF, false, &HandleCastSelfCommand, "" }, + { "target", rbac::RBAC_PERM_COMMAND_CAST_TARGET, false, &HandleCastTargetCommad, "" }, + { "dest", rbac::RBAC_PERM_COMMAND_CAST_DEST, false, &HandleCastDestCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_CAST, false, &HandleCastCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "cast", rbac::RBAC_PERM_COMMAND_CAST, false, NULL, "", castCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 8714838879..1582d465b8 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -35,43 +35,39 @@ class character_commandscript : public CommandScript public: character_commandscript() : CommandScript("character_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand pdumpCommandTable[] = + static std::vector pdumpCommandTable = { - { "load", rbac::RBAC_PERM_COMMAND_PDUMP_LOAD, true, &HandlePDumpLoadCommand, "", NULL }, - { "write", rbac::RBAC_PERM_COMMAND_PDUMP_WRITE, true, &HandlePDumpWriteCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "load", rbac::RBAC_PERM_COMMAND_PDUMP_LOAD, true, &HandlePDumpLoadCommand, "" }, + { "write", rbac::RBAC_PERM_COMMAND_PDUMP_WRITE, true, &HandlePDumpWriteCommand, "" }, }; - static ChatCommand characterDeletedCommandTable[] = + static std::vector characterDeletedCommandTable = { - { "delete", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE, true, &HandleCharacterDeletedDeleteCommand, "", NULL }, - { "list", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST, true, &HandleCharacterDeletedListCommand, "", NULL }, - { "restore", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE, true, &HandleCharacterDeletedRestoreCommand, "", NULL }, - { "old", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD, true, &HandleCharacterDeletedOldCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "delete", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_DELETE, true, &HandleCharacterDeletedDeleteCommand, "" }, + { "list", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_LIST, true, &HandleCharacterDeletedListCommand, "" }, + { "restore", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_RESTORE, true, &HandleCharacterDeletedRestoreCommand, "" }, + { "old", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED_OLD, true, &HandleCharacterDeletedOldCommand, "" }, }; - static ChatCommand characterCommandTable[] = + static std::vector characterCommandTable = { - { "customize", rbac::RBAC_PERM_COMMAND_CHARACTER_CUSTOMIZE, true, &HandleCharacterCustomizeCommand, "", NULL }, - { "changefaction", rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION, true, &HandleCharacterChangeFactionCommand, "", NULL }, - { "changerace", rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGERACE, true, &HandleCharacterChangeRaceCommand, "", NULL }, + { "customize", rbac::RBAC_PERM_COMMAND_CHARACTER_CUSTOMIZE, true, &HandleCharacterCustomizeCommand, "", }, + { "changefaction", rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGEFACTION, true, &HandleCharacterChangeFactionCommand, "", }, + { "changerace", rbac::RBAC_PERM_COMMAND_CHARACTER_CHANGERACE, true, &HandleCharacterChangeRaceCommand, "", }, { "deleted", rbac::RBAC_PERM_COMMAND_CHARACTER_DELETED, true, NULL, "", characterDeletedCommandTable }, - { "erase", rbac::RBAC_PERM_COMMAND_CHARACTER_ERASE, true, &HandleCharacterEraseCommand, "", NULL }, - { "level", rbac::RBAC_PERM_COMMAND_CHARACTER_LEVEL, true, &HandleCharacterLevelCommand, "", NULL }, - { "rename", rbac::RBAC_PERM_COMMAND_CHARACTER_RENAME, true, &HandleCharacterRenameCommand, "", NULL }, - { "reputation", rbac::RBAC_PERM_COMMAND_CHARACTER_REPUTATION, true, &HandleCharacterReputationCommand, "", NULL }, - { "titles", rbac::RBAC_PERM_COMMAND_CHARACTER_TITLES, true, &HandleCharacterTitlesCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "erase", rbac::RBAC_PERM_COMMAND_CHARACTER_ERASE, true, &HandleCharacterEraseCommand, "", }, + { "level", rbac::RBAC_PERM_COMMAND_CHARACTER_LEVEL, true, &HandleCharacterLevelCommand, "", }, + { "rename", rbac::RBAC_PERM_COMMAND_CHARACTER_RENAME, true, &HandleCharacterRenameCommand, "", }, + { "reputation", rbac::RBAC_PERM_COMMAND_CHARACTER_REPUTATION, true, &HandleCharacterReputationCommand, "", }, + { "titles", rbac::RBAC_PERM_COMMAND_CHARACTER_TITLES, true, &HandleCharacterTitlesCommand, "", }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "character", rbac::RBAC_PERM_COMMAND_CHARACTER, true, NULL, "", characterCommandTable }, - { "levelup", rbac::RBAC_PERM_COMMAND_LEVELUP, false, &HandleLevelUpCommand, "", NULL }, + { "levelup", rbac::RBAC_PERM_COMMAND_LEVELUP, false, &HandleLevelUpCommand, "" }, { "pdump", rbac::RBAC_PERM_COMMAND_PDUMP, true, NULL, "", pdumpCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp index 78ba5a4dc7..2dc2c17bdc 100644 --- a/src/server/scripts/Commands/cs_cheat.cpp +++ b/src/server/scripts/Commands/cs_cheat.cpp @@ -32,27 +32,24 @@ class cheat_commandscript : public CommandScript public: cheat_commandscript() : CommandScript("cheat_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - - static ChatCommand cheatCommandTable[] = + static std::vector cheatCommandTable = { - { "god", rbac::RBAC_PERM_COMMAND_CHEAT_GOD, false, &HandleGodModeCheatCommand, "", NULL }, - { "casttime", rbac::RBAC_PERM_COMMAND_CHEAT_CASTTIME, false, &HandleCasttimeCheatCommand, "", NULL }, - { "cooldown", rbac::RBAC_PERM_COMMAND_CHEAT_COOLDOWN, false, &HandleCoolDownCheatCommand, "", NULL }, - { "power", rbac::RBAC_PERM_COMMAND_CHEAT_POWER, false, &HandlePowerCheatCommand, "", NULL }, - { "waterwalk", rbac::RBAC_PERM_COMMAND_CHEAT_WATERWALK, false, &HandleWaterWalkCheatCommand, "", NULL }, - { "status", rbac::RBAC_PERM_COMMAND_CHEAT_STATUS, false, &HandleCheatStatusCommand, "", NULL }, - { "taxi", rbac::RBAC_PERM_COMMAND_CHEAT_TAXI, false, &HandleTaxiCheatCommand, "", NULL }, - { "explore", rbac::RBAC_PERM_COMMAND_CHEAT_EXPLORE, false, &HandleExploreCheatCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "god", rbac::RBAC_PERM_COMMAND_CHEAT_GOD, false, &HandleGodModeCheatCommand, "" }, + { "casttime", rbac::RBAC_PERM_COMMAND_CHEAT_CASTTIME, false, &HandleCasttimeCheatCommand, "" }, + { "cooldown", rbac::RBAC_PERM_COMMAND_CHEAT_COOLDOWN, false, &HandleCoolDownCheatCommand, "" }, + { "power", rbac::RBAC_PERM_COMMAND_CHEAT_POWER, false, &HandlePowerCheatCommand, "" }, + { "waterwalk", rbac::RBAC_PERM_COMMAND_CHEAT_WATERWALK, false, &HandleWaterWalkCheatCommand, "" }, + { "status", rbac::RBAC_PERM_COMMAND_CHEAT_STATUS, false, &HandleCheatStatusCommand, "" }, + { "taxi", rbac::RBAC_PERM_COMMAND_CHEAT_TAXI, false, &HandleTaxiCheatCommand, "" }, + { "explore", rbac::RBAC_PERM_COMMAND_CHEAT_EXPLORE, false, &HandleExploreCheatCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "cheat", rbac::RBAC_PERM_COMMAND_CHEAT, false, NULL, "", cheatCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 901043980c..7f517d09e9 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -42,66 +42,62 @@ class debug_commandscript : public CommandScript public: debug_commandscript() : CommandScript("debug_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand debugPlayCommandTable[] = + static std::vector debugPlayCommandTable = { - { "cinematic", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC, false, &HandleDebugPlayCinematicCommand, "", NULL }, - { "movie", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_MOVIE, false, &HandleDebugPlayMovieCommand, "", NULL }, - { "sound", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_SOUND, false, &HandleDebugPlaySoundCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cinematic", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC, false, &HandleDebugPlayCinematicCommand, "" }, + { "movie", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_MOVIE, false, &HandleDebugPlayMovieCommand, "" }, + { "sound", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY_SOUND, false, &HandleDebugPlaySoundCommand, "" }, }; - static ChatCommand debugSendCommandTable[] = + static std::vector debugSendCommandTable = { - { "buyerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_BUYERROR, false, &HandleDebugSendBuyErrorCommand, "", NULL }, - { "channelnotify", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_CHANNELNOTIFY, false, &HandleDebugSendChannelNotifyCommand, "", NULL }, - { "chatmessage", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_CHATMESSAGE, false, &HandleDebugSendChatMsgCommand, "", NULL }, - { "equiperror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_EQUIPERROR, false, &HandleDebugSendEquipErrorCommand, "", NULL }, - { "largepacket", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_LARGEPACKET, false, &HandleDebugSendLargePacketCommand, "", NULL }, - { "opcode", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_OPCODE, false, &HandleDebugSendOpcodeCommand, "", NULL }, - { "qpartymsg", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_QPARTYMSG, false, &HandleDebugSendQuestPartyMsgCommand, "", NULL }, - { "qinvalidmsg", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_QINVALIDMSG, false, &HandleDebugSendQuestInvalidMsgCommand, "", NULL }, - { "sellerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR, false, &HandleDebugSendSellErrorCommand, "", NULL }, - { "setphaseshift", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT, false, &HandleDebugSendSetPhaseShiftCommand, "", NULL }, - { "spellfail", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL, false, &HandleDebugSendSpellFailCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "buyerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_BUYERROR, false, &HandleDebugSendBuyErrorCommand, "" }, + { "channelnotify", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_CHANNELNOTIFY, false, &HandleDebugSendChannelNotifyCommand, "" }, + { "chatmessage", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_CHATMESSAGE, false, &HandleDebugSendChatMsgCommand, "" }, + { "equiperror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_EQUIPERROR, false, &HandleDebugSendEquipErrorCommand, "" }, + { "largepacket", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_LARGEPACKET, false, &HandleDebugSendLargePacketCommand, "" }, + { "opcode", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_OPCODE, false, &HandleDebugSendOpcodeCommand, "" }, + { "qpartymsg", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_QPARTYMSG, false, &HandleDebugSendQuestPartyMsgCommand, "" }, + { "qinvalidmsg", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_QINVALIDMSG, false, &HandleDebugSendQuestInvalidMsgCommand, "" }, + { "sellerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR, false, &HandleDebugSendSellErrorCommand, "" }, + { "setphaseshift", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT, false, &HandleDebugSendSetPhaseShiftCommand, "" }, + { "spellfail", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL, false, &HandleDebugSendSpellFailCommand, "" }, }; - static ChatCommand debugCommandTable[] = + static std::vector debugCommandTable = { - { "setbit", rbac::RBAC_PERM_COMMAND_DEBUG_SETBIT, false, &HandleDebugSet32BitCommand, "", NULL }, - { "threat", rbac::RBAC_PERM_COMMAND_DEBUG_THREAT, false, &HandleDebugThreatListCommand, "", NULL }, - { "hostil", rbac::RBAC_PERM_COMMAND_DEBUG_HOSTIL, false, &HandleDebugHostileRefListCommand, "", NULL }, - { "anim", rbac::RBAC_PERM_COMMAND_DEBUG_ANIM, false, &HandleDebugAnimCommand, "", NULL }, - { "arena", rbac::RBAC_PERM_COMMAND_DEBUG_ARENA, false, &HandleDebugArenaCommand, "", NULL }, - { "bg", rbac::RBAC_PERM_COMMAND_DEBUG_BG, false, &HandleDebugBattlegroundCommand, "", NULL }, - { "getitemstate", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE, false, &HandleDebugGetItemStateCommand, "", NULL }, - { "lootrecipient", rbac::RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT, false, &HandleDebugGetLootRecipientCommand, "", NULL }, - { "getvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETVALUE, false, &HandleDebugGetValueCommand, "", NULL }, - { "getitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE, false, &HandleDebugGetItemValueCommand, "", NULL }, - { "Mod32Value", rbac::RBAC_PERM_COMMAND_DEBUG_MOD32VALUE, false, &HandleDebugMod32ValueCommand, "", NULL }, + { "setbit", rbac::RBAC_PERM_COMMAND_DEBUG_SETBIT, false, &HandleDebugSet32BitCommand, "" }, + { "threat", rbac::RBAC_PERM_COMMAND_DEBUG_THREAT, false, &HandleDebugThreatListCommand, "" }, + { "hostil", rbac::RBAC_PERM_COMMAND_DEBUG_HOSTIL, false, &HandleDebugHostileRefListCommand, "" }, + { "anim", rbac::RBAC_PERM_COMMAND_DEBUG_ANIM, false, &HandleDebugAnimCommand, "" }, + { "arena", rbac::RBAC_PERM_COMMAND_DEBUG_ARENA, false, &HandleDebugArenaCommand, "" }, + { "bg", rbac::RBAC_PERM_COMMAND_DEBUG_BG, false, &HandleDebugBattlegroundCommand, "" }, + { "getitemstate", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE, false, &HandleDebugGetItemStateCommand, "" }, + { "lootrecipient", rbac::RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT, false, &HandleDebugGetLootRecipientCommand, "" }, + { "getvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETVALUE, false, &HandleDebugGetValueCommand, "" }, + { "getitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE, false, &HandleDebugGetItemValueCommand, "" }, + { "Mod32Value", rbac::RBAC_PERM_COMMAND_DEBUG_MOD32VALUE, false, &HandleDebugMod32ValueCommand, "" }, { "play", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY, false, NULL, "", debugPlayCommandTable }, { "send", rbac::RBAC_PERM_COMMAND_DEBUG_SEND, false, NULL, "", debugSendCommandTable }, - { "setaurastate", rbac::RBAC_PERM_COMMAND_DEBUG_SETAURASTATE, false, &HandleDebugSetAuraStateCommand, "", NULL }, - { "setitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE, false, &HandleDebugSetItemValueCommand, "", NULL }, - { "setvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETVALUE, false, &HandleDebugSetValueCommand, "", NULL }, - { "spawnvehicle", rbac::RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE, false, &HandleDebugSpawnVehicleCommand, "", NULL }, - { "setvid", rbac::RBAC_PERM_COMMAND_DEBUG_SETVID, false, &HandleDebugSetVehicleIdCommand, "", NULL }, - { "entervehicle", rbac::RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE, false, &HandleDebugEnterVehicleCommand, "", NULL }, - { "uws", rbac::RBAC_PERM_COMMAND_DEBUG_UWS, false, &HandleDebugUpdateWorldStateCommand, "", NULL }, - { "update", rbac::RBAC_PERM_COMMAND_DEBUG_UPDATE, false, &HandleDebugUpdateCommand, "", NULL }, - { "itemexpire", rbac::RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE, false, &HandleDebugItemExpireCommand, "", NULL }, - { "areatriggers", rbac::RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "", NULL }, - { "los", rbac::RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "", NULL }, - { "moveflags", rbac::RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "", NULL }, - { "transport", rbac::RBAC_PERM_COMMAND_DEBUG_TRANSPORT, false, &HandleDebugTransportCommand, "", NULL }, - { "loadcells", rbac::RBAC_PERM_COMMAND_DEBUG_LOADCELLS, false, &HandleDebugLoadCellsCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "setaurastate", rbac::RBAC_PERM_COMMAND_DEBUG_SETAURASTATE, false, &HandleDebugSetAuraStateCommand, "" }, + { "setitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE, false, &HandleDebugSetItemValueCommand, "" }, + { "setvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETVALUE, false, &HandleDebugSetValueCommand, "" }, + { "spawnvehicle", rbac::RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE, false, &HandleDebugSpawnVehicleCommand, "" }, + { "setvid", rbac::RBAC_PERM_COMMAND_DEBUG_SETVID, false, &HandleDebugSetVehicleIdCommand, "" }, + { "entervehicle", rbac::RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE, false, &HandleDebugEnterVehicleCommand, "" }, + { "uws", rbac::RBAC_PERM_COMMAND_DEBUG_UWS, false, &HandleDebugUpdateWorldStateCommand, "" }, + { "update", rbac::RBAC_PERM_COMMAND_DEBUG_UPDATE, false, &HandleDebugUpdateCommand, "" }, + { "itemexpire", rbac::RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE, false, &HandleDebugItemExpireCommand, "" }, + { "areatriggers", rbac::RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "" }, + { "los", rbac::RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "" }, + { "moveflags", rbac::RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "" }, + { "transport", rbac::RBAC_PERM_COMMAND_DEBUG_TRANSPORT, false, &HandleDebugTransportCommand, "" }, + { "loadcells", rbac::RBAC_PERM_COMMAND_DEBUG_LOADCELLS, false, &HandleDebugLoadCellsCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "debug", rbac::RBAC_PERM_COMMAND_DEBUG, true, NULL, "", debugCommandTable }, - { "wpgps", rbac::RBAC_PERM_COMMAND_WPGPS, false, &HandleWPGPSCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "wpgps", rbac::RBAC_PERM_COMMAND_WPGPS, false, &HandleWPGPSCommand, "" }, }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_deserter.cpp b/src/server/scripts/Commands/cs_deserter.cpp index 2887ac8c13..9f46120770 100644 --- a/src/server/scripts/Commands/cs_deserter.cpp +++ b/src/server/scripts/Commands/cs_deserter.cpp @@ -43,31 +43,27 @@ public: * @brief Returns the command structure for the system. */ - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand deserterInstanceCommandTable[] = + static std::vector deserterInstanceCommandTable = { - { "add", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD, false, &HandleDeserterInstanceAdd, "", NULL }, - { "remove", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE, false, &HandleDeserterInstanceRemove, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "add", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD, false, &HandleDeserterInstanceAdd, "" }, + { "remove", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE, false, &HandleDeserterInstanceRemove, "" }, }; - static ChatCommand deserterBGCommandTable[] = + static std::vector deserterBGCommandTable = { - { "add", rbac::RBAC_PERM_COMMAND_DESERTER_BG_ADD, false, &HandleDeserterBGAdd, "", NULL }, - { "remove", rbac::RBAC_PERM_COMMAND_DESERTER_BG_REMOVE, false, &HandleDeserterBGRemove, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "add", rbac::RBAC_PERM_COMMAND_DESERTER_BG_ADD, false, &HandleDeserterBGAdd, "" }, + { "remove", rbac::RBAC_PERM_COMMAND_DESERTER_BG_REMOVE, false, &HandleDeserterBGRemove, "" }, }; - static ChatCommand deserterCommandTable[] = + static std::vector deserterCommandTable = { { "instance", rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE, false, NULL, "", deserterInstanceCommandTable }, { "bg", rbac::RBAC_PERM_COMMAND_DESERTER_BG, false, NULL, "", deserterBGCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "deserter", rbac::RBAC_PERM_COMMAND_DESERTER, false, NULL, "", deserterCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp index 14f76945a8..8c73f3f41d 100644 --- a/src/server/scripts/Commands/cs_disable.cpp +++ b/src/server/scripts/Commands/cs_disable.cpp @@ -37,42 +37,38 @@ class disable_commandscript : public CommandScript public: disable_commandscript() : CommandScript("disable_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand removeDisableCommandTable[] = + static std::vector removeDisableCommandTable = { - { "spell", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL, true, &HandleRemoveDisableSpellCommand, "", NULL }, - { "quest", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST, true, &HandleRemoveDisableQuestCommand, "", NULL }, - { "map", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP, true, &HandleRemoveDisableMapCommand, "", NULL }, - { "battleground", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND, true, &HandleRemoveDisableBattlegroundCommand, "", NULL }, - { "achievement_criteria", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA, true, &HandleRemoveDisableAchievementCriteriaCommand, "", NULL }, - { "outdoorpvp", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP, true, &HandleRemoveDisableOutdoorPvPCommand, "", NULL }, - { "vmap", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP, true, &HandleRemoveDisableVmapCommand, "", NULL }, - { "mmap", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP, true, &HandleRemoveDisableMMapCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "spell", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_SPELL, true, &HandleRemoveDisableSpellCommand, "" }, + { "quest", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_QUEST, true, &HandleRemoveDisableQuestCommand, "" }, + { "map", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_MAP, true, &HandleRemoveDisableMapCommand, "" }, + { "battleground", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_BATTLEGROUND, true, &HandleRemoveDisableBattlegroundCommand, "" }, + { "achievement_criteria", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_ACHIEVEMENT_CRITERIA, true, &HandleRemoveDisableAchievementCriteriaCommand, "" }, + { "outdoorpvp", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_OUTDOORPVP, true, &HandleRemoveDisableOutdoorPvPCommand, "" }, + { "vmap", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_VMAP, true, &HandleRemoveDisableVmapCommand, "" }, + { "mmap", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE_MMAP, true, &HandleRemoveDisableMMapCommand, "" }, }; - static ChatCommand addDisableCommandTable[] = + static std::vector addDisableCommandTable = { - { "spell", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_SPELL, true, &HandleAddDisableSpellCommand, "", NULL }, - { "quest", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_QUEST, true, &HandleAddDisableQuestCommand, "", NULL }, - { "map", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_MAP, true, &HandleAddDisableMapCommand, "", NULL }, - { "battleground", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND, true, &HandleAddDisableBattlegroundCommand, "", NULL }, - { "achievement_criteria", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA, true, &HandleAddDisableAchievementCriteriaCommand, "", NULL }, - { "outdoorpvp", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP, true, &HandleAddDisableOutdoorPvPCommand, "", NULL }, - { "vmap", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_VMAP, true, &HandleAddDisableVmapCommand, "", NULL }, - { "mmap", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_MMAP, true, &HandleAddDisableMMapCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "spell", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_SPELL, true, &HandleAddDisableSpellCommand, "" }, + { "quest", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_QUEST, true, &HandleAddDisableQuestCommand, "" }, + { "map", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_MAP, true, &HandleAddDisableMapCommand, "" }, + { "battleground", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_BATTLEGROUND, true, &HandleAddDisableBattlegroundCommand, "" }, + { "achievement_criteria", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_ACHIEVEMENT_CRITERIA, true, &HandleAddDisableAchievementCriteriaCommand, "" }, + { "outdoorpvp", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_OUTDOORPVP, true, &HandleAddDisableOutdoorPvPCommand, "" }, + { "vmap", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_VMAP, true, &HandleAddDisableVmapCommand, "" }, + { "mmap", rbac::RBAC_PERM_COMMAND_DISABLE_ADD_MMAP, true, &HandleAddDisableMMapCommand, "" }, }; - static ChatCommand disableCommandTable[] = + static std::vector disableCommandTable = { { "add", rbac::RBAC_PERM_COMMAND_DISABLE_ADD, true, NULL, "", addDisableCommandTable }, { "remove", rbac::RBAC_PERM_COMMAND_DISABLE_REMOVE, true, NULL, "", removeDisableCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "disable", rbac::RBAC_PERM_COMMAND_DISABLE, false, NULL, "", disableCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_event.cpp b/src/server/scripts/Commands/cs_event.cpp index 3749528914..352bce4e7f 100644 --- a/src/server/scripts/Commands/cs_event.cpp +++ b/src/server/scripts/Commands/cs_event.cpp @@ -33,20 +33,18 @@ class event_commandscript : public CommandScript public: event_commandscript() : CommandScript("event_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand eventCommandTable[] = + static std::vector eventCommandTable = { - { "activelist", rbac::RBAC_PERM_COMMAND_EVENT_ACTIVELIST, true, &HandleEventActiveListCommand, "", NULL }, - { "start", rbac::RBAC_PERM_COMMAND_EVENT_START, true, &HandleEventStartCommand, "", NULL }, - { "stop", rbac::RBAC_PERM_COMMAND_EVENT_STOP, true, &HandleEventStopCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_EVENT, true, &HandleEventInfoCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "activelist", rbac::RBAC_PERM_COMMAND_EVENT_ACTIVELIST, true, &HandleEventActiveListCommand, "" }, + { "start", rbac::RBAC_PERM_COMMAND_EVENT_START, true, &HandleEventStartCommand, "" }, + { "stop", rbac::RBAC_PERM_COMMAND_EVENT_STOP, true, &HandleEventStopCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_EVENT, true, &HandleEventInfoCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "event", rbac::RBAC_PERM_COMMAND_EVENT, false, NULL, "", eventCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index 94e974bea0..81b7060368 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -36,22 +36,20 @@ class gm_commandscript : public CommandScript public: gm_commandscript() : CommandScript("gm_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand gmCommandTable[] = + static std::vector gmCommandTable = { - { "chat", rbac::RBAC_PERM_COMMAND_GM_CHAT, false, &HandleGMChatCommand, "", NULL }, - { "fly", rbac::RBAC_PERM_COMMAND_GM_FLY, false, &HandleGMFlyCommand, "", NULL }, - { "ingame", rbac::RBAC_PERM_COMMAND_GM_INGAME, true, &HandleGMListIngameCommand, "", NULL }, - { "list", rbac::RBAC_PERM_COMMAND_GM_LIST, true, &HandleGMListFullCommand, "", NULL }, - { "visible", rbac::RBAC_PERM_COMMAND_GM_VISIBLE, false, &HandleGMVisibleCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_GM, false, &HandleGMCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "chat", rbac::RBAC_PERM_COMMAND_GM_CHAT, false, &HandleGMChatCommand, "" }, + { "fly", rbac::RBAC_PERM_COMMAND_GM_FLY, false, &HandleGMFlyCommand, "" }, + { "ingame", rbac::RBAC_PERM_COMMAND_GM_INGAME, true, &HandleGMListIngameCommand, "" }, + { "list", rbac::RBAC_PERM_COMMAND_GM_LIST, true, &HandleGMListFullCommand, "" }, + { "visible", rbac::RBAC_PERM_COMMAND_GM_VISIBLE, false, &HandleGMVisibleCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_GM, false, &HandleGMCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "gm", rbac::RBAC_PERM_COMMAND_GM, false, NULL, "", gmCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index ce1a42e6e7..33fc594a4c 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -36,27 +36,25 @@ class go_commandscript : public CommandScript public: go_commandscript() : CommandScript("go_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand goCommandTable[] = + static std::vector goCommandTable = { - { "creature", rbac::RBAC_PERM_COMMAND_GO_CREATURE, false, &HandleGoCreatureCommand, "", NULL }, - { "graveyard", rbac::RBAC_PERM_COMMAND_GO_GRAVEYARD, false, &HandleGoGraveyardCommand, "", NULL }, - { "grid", rbac::RBAC_PERM_COMMAND_GO_GRID, false, &HandleGoGridCommand, "", NULL }, - { "object", rbac::RBAC_PERM_COMMAND_GO_OBJECT, false, &HandleGoObjectCommand, "", NULL }, - { "taxinode", rbac::RBAC_PERM_COMMAND_GO_TAXINODE, false, &HandleGoTaxinodeCommand, "", NULL }, - { "trigger", rbac::RBAC_PERM_COMMAND_GO_TRIGGER, false, &HandleGoTriggerCommand, "", NULL }, - { "zonexy", rbac::RBAC_PERM_COMMAND_GO_ZONEXY, false, &HandleGoZoneXYCommand, "", NULL }, - { "xyz", rbac::RBAC_PERM_COMMAND_GO_XYZ, false, &HandleGoXYZCommand, "", NULL }, - { "ticket", rbac::RBAC_PERM_COMMAND_GO_TICKET, false, &HandleGoTicketCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_GO, false, &HandleGoXYZCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "creature", rbac::RBAC_PERM_COMMAND_GO_CREATURE, false, &HandleGoCreatureCommand, "" }, + { "graveyard", rbac::RBAC_PERM_COMMAND_GO_GRAVEYARD, false, &HandleGoGraveyardCommand, "" }, + { "grid", rbac::RBAC_PERM_COMMAND_GO_GRID, false, &HandleGoGridCommand, "" }, + { "object", rbac::RBAC_PERM_COMMAND_GO_OBJECT, false, &HandleGoObjectCommand, "" }, + { "taxinode", rbac::RBAC_PERM_COMMAND_GO_TAXINODE, false, &HandleGoTaxinodeCommand, "" }, + { "trigger", rbac::RBAC_PERM_COMMAND_GO_TRIGGER, false, &HandleGoTriggerCommand, "" }, + { "zonexy", rbac::RBAC_PERM_COMMAND_GO_ZONEXY, false, &HandleGoZoneXYCommand, "" }, + { "xyz", rbac::RBAC_PERM_COMMAND_GO_XYZ, false, &HandleGoXYZCommand, "" }, + { "bugticket", rbac::RBAC_PERM_COMMAND_GO_TICKET, false, &HandleGoTicketCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_GO, false, &HandleGoXYZCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "go", rbac::RBAC_PERM_COMMAND_GO, false, NULL, "", goCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 9710a7e634..fda9101fc3 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -37,37 +37,33 @@ class gobject_commandscript : public CommandScript public: gobject_commandscript() : CommandScript("gobject_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand gobjectAddCommandTable[] = + static std::vector gobjectAddCommandTable = { - { "temp", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP, false, &HandleGameObjectAddTempCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD, false, &HandleGameObjectAddCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "temp", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD_TEMP, false, &HandleGameObjectAddTempCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD, false, &HandleGameObjectAddCommand, "" }, }; - static ChatCommand gobjectSetCommandTable[] = + static std::vector gobjectSetCommandTable = { - { "phase", rbac::RBAC_PERM_COMMAND_GOBJECT_SET_PHASE, false, &HandleGameObjectSetPhaseCommand, "", NULL }, - { "state", rbac::RBAC_PERM_COMMAND_GOBJECT_SET_STATE, false, &HandleGameObjectSetStateCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "phase", rbac::RBAC_PERM_COMMAND_GOBJECT_SET_PHASE, false, &HandleGameObjectSetPhaseCommand, "" }, + { "state", rbac::RBAC_PERM_COMMAND_GOBJECT_SET_STATE, false, &HandleGameObjectSetStateCommand, "" }, }; - static ChatCommand gobjectCommandTable[] = + static std::vector gobjectCommandTable = { - { "activate", rbac::RBAC_PERM_COMMAND_GOBJECT_ACTIVATE, false, &HandleGameObjectActivateCommand, "", NULL }, - { "delete", rbac::RBAC_PERM_COMMAND_GOBJECT_DELETE, false, &HandleGameObjectDeleteCommand, "", NULL }, - { "info", rbac::RBAC_PERM_COMMAND_GOBJECT_INFO, false, &HandleGameObjectInfoCommand, "", NULL }, - { "move", rbac::RBAC_PERM_COMMAND_GOBJECT_MOVE, false, &HandleGameObjectMoveCommand, "", NULL }, - { "near", rbac::RBAC_PERM_COMMAND_GOBJECT_NEAR, false, &HandleGameObjectNearCommand, "", NULL }, - { "target", rbac::RBAC_PERM_COMMAND_GOBJECT_TARGET, false, &HandleGameObjectTargetCommand, "", NULL }, - { "turn", rbac::RBAC_PERM_COMMAND_GOBJECT_TURN, false, &HandleGameObjectTurnCommand, "", NULL }, + { "activate", rbac::RBAC_PERM_COMMAND_GOBJECT_ACTIVATE, false, &HandleGameObjectActivateCommand, "" }, + { "delete", rbac::RBAC_PERM_COMMAND_GOBJECT_DELETE, false, &HandleGameObjectDeleteCommand, "" }, + { "info", rbac::RBAC_PERM_COMMAND_GOBJECT_INFO, false, &HandleGameObjectInfoCommand, "" }, + { "move", rbac::RBAC_PERM_COMMAND_GOBJECT_MOVE, false, &HandleGameObjectMoveCommand, "" }, + { "near", rbac::RBAC_PERM_COMMAND_GOBJECT_NEAR, false, &HandleGameObjectNearCommand, "" }, + { "target", rbac::RBAC_PERM_COMMAND_GOBJECT_TARGET, false, &HandleGameObjectTargetCommand, "" }, + { "turn", rbac::RBAC_PERM_COMMAND_GOBJECT_TURN, false, &HandleGameObjectTurnCommand, "" }, { "add", rbac::RBAC_PERM_COMMAND_GOBJECT_ADD, false, NULL, "", gobjectAddCommandTable }, { "set", rbac::RBAC_PERM_COMMAND_GOBJECT_SET, false, NULL, "", gobjectSetCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "gobject", rbac::RBAC_PERM_COMMAND_GOBJECT, false, NULL, "", gobjectCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index 8152508c5d..054cff996f 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -28,23 +28,21 @@ class group_commandscript : public CommandScript public: group_commandscript() : CommandScript("group_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand groupCommandTable[] = + static std::vector groupCommandTable = { - { "leader", rbac::RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "", NULL }, - { "disband", rbac::RBAC_PERM_COMMAND_GROUP_DISBAND, false, &HandleGroupDisbandCommand, "", NULL }, - { "remove", rbac::RBAC_PERM_COMMAND_GROUP_REMOVE, false, &HandleGroupRemoveCommand, "", NULL }, - { "join", rbac::RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "", NULL }, - { "list", rbac::RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "", NULL }, - { "summon", rbac::RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "leader", rbac::RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "" }, + { "disband", rbac::RBAC_PERM_COMMAND_GROUP_DISBAND, false, &HandleGroupDisbandCommand, "" }, + { "remove", rbac::RBAC_PERM_COMMAND_GROUP_REMOVE, false, &HandleGroupRemoveCommand, "" }, + { "join", rbac::RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "" }, + { "list", rbac::RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "" }, + { "summon", rbac::RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "group", rbac::RBAC_PERM_COMMAND_GROUP, false, NULL, "", groupCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index c2b9076017..04b633f6f4 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -34,23 +34,21 @@ class guild_commandscript : public CommandScript public: guild_commandscript() : CommandScript("guild_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand guildCommandTable[] = + static std::vector guildCommandTable = { - { "create", rbac::RBAC_PERM_COMMAND_GUILD_CREATE, true, &HandleGuildCreateCommand, "", NULL }, - { "delete", rbac::RBAC_PERM_COMMAND_GUILD_DELETE, true, &HandleGuildDeleteCommand, "", NULL }, - { "invite", rbac::RBAC_PERM_COMMAND_GUILD_INVITE, true, &HandleGuildInviteCommand, "", NULL }, - { "uninvite", rbac::RBAC_PERM_COMMAND_GUILD_UNINVITE, true, &HandleGuildUninviteCommand, "", NULL }, - { "rank", rbac::RBAC_PERM_COMMAND_GUILD_RANK, true, &HandleGuildRankCommand, "", NULL }, - { "rename", rbac::RBAC_PERM_COMMAND_GUILD_RENAME, true, &HandleGuildRenameCommand, "", NULL }, - { "info", rbac::RBAC_PERM_COMMAND_GUILD_INFO, true, &HandleGuildInfoCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "create", rbac::RBAC_PERM_COMMAND_GUILD_CREATE, true, &HandleGuildCreateCommand, "" }, + { "delete", rbac::RBAC_PERM_COMMAND_GUILD_DELETE, true, &HandleGuildDeleteCommand, "" }, + { "invite", rbac::RBAC_PERM_COMMAND_GUILD_INVITE, true, &HandleGuildInviteCommand, "" }, + { "uninvite", rbac::RBAC_PERM_COMMAND_GUILD_UNINVITE, true, &HandleGuildUninviteCommand, "" }, + { "rank", rbac::RBAC_PERM_COMMAND_GUILD_RANK, true, &HandleGuildRankCommand, "" }, + { "rename", rbac::RBAC_PERM_COMMAND_GUILD_RENAME, true, &HandleGuildRenameCommand, "" }, + { "info", rbac::RBAC_PERM_COMMAND_GUILD_INFO, true, &HandleGuildInfoCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "guild", rbac::RBAC_PERM_COMMAND_GUILD, true, NULL, "", guildCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_honor.cpp b/src/server/scripts/Commands/cs_honor.cpp index ad2c53415b..e8b41309d4 100644 --- a/src/server/scripts/Commands/cs_honor.cpp +++ b/src/server/scripts/Commands/cs_honor.cpp @@ -33,26 +33,23 @@ class honor_commandscript : public CommandScript public: honor_commandscript() : CommandScript("honor_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand honorAddCommandTable[] = + static std::vector honorAddCommandTable = { - { "kill", rbac::RBAC_PERM_COMMAND_HONOR_ADD_KILL, false, &HandleHonorAddKillCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_HONOR_ADD, false, &HandleHonorAddCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "kill", rbac::RBAC_PERM_COMMAND_HONOR_ADD_KILL, false, &HandleHonorAddKillCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_HONOR_ADD, false, &HandleHonorAddCommand, "" }, }; - static ChatCommand honorCommandTable[] = + static std::vector honorCommandTable = { { "add", rbac::RBAC_PERM_COMMAND_HONOR_ADD, false, NULL, "", honorAddCommandTable }, - { "update", rbac::RBAC_PERM_COMMAND_HONOR_UPDATE, false, &HandleHonorUpdateCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "update", rbac::RBAC_PERM_COMMAND_HONOR_UPDATE, false, &HandleHonorUpdateCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "honor", rbac::RBAC_PERM_COMMAND_HONOR, false, NULL, "", honorCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp index aa7310e3c6..e51b7bcc59 100644 --- a/src/server/scripts/Commands/cs_instance.cpp +++ b/src/server/scripts/Commands/cs_instance.cpp @@ -36,23 +36,21 @@ class instance_commandscript : public CommandScript public: instance_commandscript() : CommandScript("instance_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand instanceCommandTable[] = + static std::vector instanceCommandTable = { - { "listbinds", rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "", NULL }, - { "unbind", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "", NULL }, - { "stats", rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "", NULL }, - { "savedata", rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "", NULL }, - { "setbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE, true, &HandleInstanceSetBossStateCommand, "", NULL }, - { "getbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE, true, &HandleInstanceGetBossStateCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "listbinds", rbac::RBAC_PERM_COMMAND_INSTANCE_LISTBINDS, false, &HandleInstanceListBindsCommand, "" }, + { "unbind", rbac::RBAC_PERM_COMMAND_INSTANCE_UNBIND, false, &HandleInstanceUnbindCommand, "" }, + { "stats", rbac::RBAC_PERM_COMMAND_INSTANCE_STATS, true, &HandleInstanceStatsCommand, "" }, + { "savedata", rbac::RBAC_PERM_COMMAND_INSTANCE_SAVEDATA, false, &HandleInstanceSaveDataCommand, "" }, + { "setbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_SET_BOSS_STATE, true, &HandleInstanceSetBossStateCommand, "" }, + { "getbossstate", rbac::RBAC_PERM_COMMAND_INSTANCE_GET_BOSS_STATE, true, &HandleInstanceGetBossStateCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "instance", rbac::RBAC_PERM_COMMAND_INSTANCE, true, NULL, "", instanceCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index 21211afad5..d7fd4e6664 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -36,40 +36,36 @@ class learn_commandscript : public CommandScript public: learn_commandscript() : CommandScript("learn_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand learnAllMyCommandTable[] = + static std::vector learnAllMyCommandTable = { - { "class", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_CLASS, false, &HandleLearnAllMyClassCommand, "", NULL }, - { "pettalents", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_PETTALENTS, false, &HandleLearnAllMyPetTalentsCommand, "", NULL }, - { "spells", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_SPELLS, false, &HandleLearnAllMySpellsCommand, "", NULL }, - { "talents", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_TALENTS, false, &HandleLearnAllMyTalentsCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "class", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_CLASS, false, &HandleLearnAllMyClassCommand, "" }, + { "pettalents", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_PETTALENTS, false, &HandleLearnAllMyPetTalentsCommand, "" }, + { "spells", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_SPELLS, false, &HandleLearnAllMySpellsCommand, "" }, + { "talents", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY_TALENTS, false, &HandleLearnAllMyTalentsCommand, "" }, }; - static ChatCommand learnAllCommandTable[] = + static std::vector learnAllCommandTable = { { "my", rbac::RBAC_PERM_COMMAND_LEARN_ALL_MY, false, NULL, "", learnAllMyCommandTable }, - { "gm", rbac::RBAC_PERM_COMMAND_LEARN_ALL_GM, false, &HandleLearnAllGMCommand, "", NULL }, - { "crafts", rbac::RBAC_PERM_COMMAND_LEARN_ALL_CRAFTS, false, &HandleLearnAllCraftsCommand, "", NULL }, - { "default", rbac::RBAC_PERM_COMMAND_LEARN_ALL_DEFAULT, false, &HandleLearnAllDefaultCommand, "", NULL }, - { "lang", rbac::RBAC_PERM_COMMAND_LEARN_ALL_LANG, false, &HandleLearnAllLangCommand, "", NULL }, - { "recipes", rbac::RBAC_PERM_COMMAND_LEARN_ALL_RECIPES, false, &HandleLearnAllRecipesCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "gm", rbac::RBAC_PERM_COMMAND_LEARN_ALL_GM, false, &HandleLearnAllGMCommand, "" }, + { "crafts", rbac::RBAC_PERM_COMMAND_LEARN_ALL_CRAFTS, false, &HandleLearnAllCraftsCommand, "" }, + { "default", rbac::RBAC_PERM_COMMAND_LEARN_ALL_DEFAULT, false, &HandleLearnAllDefaultCommand, "" }, + { "lang", rbac::RBAC_PERM_COMMAND_LEARN_ALL_LANG, false, &HandleLearnAllLangCommand, "" }, + { "recipes", rbac::RBAC_PERM_COMMAND_LEARN_ALL_RECIPES, false, &HandleLearnAllRecipesCommand, "" }, }; - static ChatCommand learnCommandTable[] = + static std::vector learnCommandTable = { { "all", rbac::RBAC_PERM_COMMAND_LEARN_ALL, false, NULL, "", learnAllCommandTable }, - { "", rbac::RBAC_PERM_COMMAND_LEARN, false, &HandleLearnCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "", rbac::RBAC_PERM_COMMAND_LEARN, false, &HandleLearnCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "learn", rbac::RBAC_PERM_COMMAND_LEARN, false, NULL, "", learnCommandTable }, - { "unlearn", rbac::RBAC_PERM_COMMAND_UNLEARN, false, &HandleUnLearnCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "unlearn", rbac::RBAC_PERM_COMMAND_UNLEARN, false, &HandleUnLearnCommand, "" }, }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp index 2de22714a1..9287d5553e 100644 --- a/src/server/scripts/Commands/cs_lfg.cpp +++ b/src/server/scripts/Commands/cs_lfg.cpp @@ -43,22 +43,20 @@ class lfg_commandscript : public CommandScript public: lfg_commandscript() : CommandScript("lfg_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand lfgCommandTable[] = + static std::vector lfgCommandTable = { - { "player", rbac::RBAC_PERM_COMMAND_LFG_PLAYER, false, &HandleLfgPlayerInfoCommand, "", NULL }, - { "group", rbac::RBAC_PERM_COMMAND_LFG_GROUP, false, &HandleLfgGroupInfoCommand, "", NULL }, - { "queue", rbac::RBAC_PERM_COMMAND_LFG_QUEUE, true, &HandleLfgQueueInfoCommand, "", NULL }, - { "clean", rbac::RBAC_PERM_COMMAND_LFG_CLEAN, true, &HandleLfgCleanCommand, "", NULL }, - { "options", rbac::RBAC_PERM_COMMAND_LFG_OPTIONS, true, &HandleLfgOptionsCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "player", rbac::RBAC_PERM_COMMAND_LFG_PLAYER, false, &HandleLfgPlayerInfoCommand, "" }, + { "group", rbac::RBAC_PERM_COMMAND_LFG_GROUP, false, &HandleLfgGroupInfoCommand, "" }, + { "queue", rbac::RBAC_PERM_COMMAND_LFG_QUEUE, true, &HandleLfgQueueInfoCommand, "" }, + { "clean", rbac::RBAC_PERM_COMMAND_LFG_CLEAN, true, &HandleLfgCleanCommand, "" }, + { "options", rbac::RBAC_PERM_COMMAND_LFG_OPTIONS, true, &HandleLfgOptionsCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "lfg", rbac::RBAC_PERM_COMMAND_LFG, true, NULL, "", lfgCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index 0de62f805d..a1b79a6960 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -36,21 +36,19 @@ class list_commandscript : public CommandScript public: list_commandscript() : CommandScript("list_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand listCommandTable[] = + static std::vector listCommandTable = { - { "creature", rbac::RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "", NULL }, - { "item", rbac::RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "", NULL }, - { "object", rbac::RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "", NULL }, - { "auras", rbac::RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "", NULL }, - { "mail", rbac::RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "creature", rbac::RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "" }, + { "item", rbac::RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "" }, + { "object", rbac::RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "" }, + { "auras", rbac::RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "" }, + { "mail", rbac::RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "list", rbac::RBAC_PERM_COMMAND_LIST,true, NULL, "", listCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index cb2d467f8d..ec35c5a7b6 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -37,47 +37,43 @@ class lookup_commandscript : public CommandScript public: lookup_commandscript() : CommandScript("lookup_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand lookupPlayerCommandTable[] = + static std::vector lookupPlayerCommandTable = { - { "ip", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP, true, &HandleLookupPlayerIpCommand, "", NULL }, - { "account", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_ACCOUNT, true, &HandleLookupPlayerAccountCommand, "", NULL }, - { "email", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_EMAIL, true, &HandleLookupPlayerEmailCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "ip", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_IP, true, &HandleLookupPlayerIpCommand, "" }, + { "account", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_ACCOUNT, true, &HandleLookupPlayerAccountCommand, "" }, + { "email", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER_EMAIL, true, &HandleLookupPlayerEmailCommand, "" }, }; - static ChatCommand lookupSpellCommandTable[] = + static std::vector lookupSpellCommandTable = { - { "id", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL_ID, true, &HandleLookupSpellIdCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, &HandleLookupSpellCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "id", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL_ID, true, &HandleLookupSpellIdCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, &HandleLookupSpellCommand, "" }, }; - static ChatCommand lookupCommandTable[] = + static std::vector lookupCommandTable = { - { "area", rbac::RBAC_PERM_COMMAND_LOOKUP_AREA, true, &HandleLookupAreaCommand, "", NULL }, - { "creature", rbac::RBAC_PERM_COMMAND_LOOKUP_CREATURE, true, &HandleLookupCreatureCommand, "", NULL }, - { "event", rbac::RBAC_PERM_COMMAND_LOOKUP_EVENT, true, &HandleLookupEventCommand, "", NULL }, - { "faction", rbac::RBAC_PERM_COMMAND_LOOKUP_FACTION, true, &HandleLookupFactionCommand, "", NULL }, - { "item", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEM, true, &HandleLookupItemCommand, "", NULL }, - { "itemset", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEMSET, true, &HandleLookupItemSetCommand, "", NULL }, - { "object", rbac::RBAC_PERM_COMMAND_LOOKUP_OBJECT, true, &HandleLookupObjectCommand, "", NULL }, - { "quest", rbac::RBAC_PERM_COMMAND_LOOKUP_QUEST, true, &HandleLookupQuestCommand, "", NULL }, + { "area", rbac::RBAC_PERM_COMMAND_LOOKUP_AREA, true, &HandleLookupAreaCommand, "" }, + { "creature", rbac::RBAC_PERM_COMMAND_LOOKUP_CREATURE, true, &HandleLookupCreatureCommand, "" }, + { "event", rbac::RBAC_PERM_COMMAND_LOOKUP_EVENT, true, &HandleLookupEventCommand, "" }, + { "faction", rbac::RBAC_PERM_COMMAND_LOOKUP_FACTION, true, &HandleLookupFactionCommand, "" }, + { "item", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEM, true, &HandleLookupItemCommand, "" }, + { "itemset", rbac::RBAC_PERM_COMMAND_LOOKUP_ITEMSET, true, &HandleLookupItemSetCommand, "" }, + { "object", rbac::RBAC_PERM_COMMAND_LOOKUP_OBJECT, true, &HandleLookupObjectCommand, "" }, + { "quest", rbac::RBAC_PERM_COMMAND_LOOKUP_QUEST, true, &HandleLookupQuestCommand, "" }, { "player", rbac::RBAC_PERM_COMMAND_LOOKUP_PLAYER, true, NULL, "", lookupPlayerCommandTable }, - { "skill", rbac::RBAC_PERM_COMMAND_LOOKUP_SKILL, true, &HandleLookupSkillCommand, "", NULL }, + { "skill", rbac::RBAC_PERM_COMMAND_LOOKUP_SKILL, true, &HandleLookupSkillCommand, "" }, { "spell", rbac::RBAC_PERM_COMMAND_LOOKUP_SPELL, true, NULL, "", lookupSpellCommandTable }, - { "taxinode", rbac::RBAC_PERM_COMMAND_LOOKUP_TAXINODE, true, &HandleLookupTaxiNodeCommand, "", NULL }, - { "tele", rbac::RBAC_PERM_COMMAND_LOOKUP_TELE, true, &HandleLookupTeleCommand, "", NULL }, - { "title", rbac::RBAC_PERM_COMMAND_LOOKUP_TITLE, true, &HandleLookupTitleCommand, "", NULL }, - { "map", rbac::RBAC_PERM_COMMAND_LOOKUP_MAP, true, &HandleLookupMapCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "taxinode", rbac::RBAC_PERM_COMMAND_LOOKUP_TAXINODE, true, &HandleLookupTaxiNodeCommand, "" }, + { "tele", rbac::RBAC_PERM_COMMAND_LOOKUP_TELE, true, &HandleLookupTeleCommand, "" }, + { "title", rbac::RBAC_PERM_COMMAND_LOOKUP_TITLE, true, &HandleLookupTitleCommand, "" }, + { "map", rbac::RBAC_PERM_COMMAND_LOOKUP_MAP, true, &HandleLookupMapCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "lookup", rbac::RBAC_PERM_COMMAND_LOOKUP, true, NULL, "", lookupCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp index 922958f722..f3c1f4d7df 100644 --- a/src/server/scripts/Commands/cs_message.cpp +++ b/src/server/scripts/Commands/cs_message.cpp @@ -34,29 +34,26 @@ class message_commandscript : public CommandScript public: message_commandscript() : CommandScript("message_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand channelSetCommandTable[] = + static std::vector channelSetCommandTable = { - { "ownership", rbac::RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP, false, &HandleChannelSetOwnership, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "ownership", rbac::RBAC_PERM_COMMAND_CHANNEL_SET_OWNERSHIP, false, &HandleChannelSetOwnership, "" }, }; - static ChatCommand channelCommandTable[] = + static std::vector channelCommandTable = { { "set", rbac::RBAC_PERM_COMMAND_CHANNEL_SET, true, NULL, "", channelSetCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "channel", rbac::RBAC_PERM_COMMAND_CHANNEL, true, NULL, "", channelCommandTable }, - { "nameannounce", rbac::RBAC_PERM_COMMAND_NAMEANNOUNCE, true, &HandleNameAnnounceCommand, "", NULL }, - { "gmnameannounce", rbac::RBAC_PERM_COMMAND_GMNAMEANNOUNCE, true, &HandleGMNameAnnounceCommand, "", NULL }, - { "announce", rbac::RBAC_PERM_COMMAND_ANNOUNCE, true, &HandleAnnounceCommand, "", NULL }, - { "gmannounce", rbac::RBAC_PERM_COMMAND_GMANNOUNCE, true, &HandleGMAnnounceCommand, "", NULL }, - { "notify", rbac::RBAC_PERM_COMMAND_NOTIFY, true, &HandleNotifyCommand, "", NULL }, - { "gmnotify", rbac::RBAC_PERM_COMMAND_GMNOTIFY, true, &HandleGMNotifyCommand, "", NULL }, - { "whispers", rbac::RBAC_PERM_COMMAND_WHISPERS, false, &HandleWhispersCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "nameannounce", rbac::RBAC_PERM_COMMAND_NAMEANNOUNCE, true, &HandleNameAnnounceCommand, "" }, + { "gmnameannounce", rbac::RBAC_PERM_COMMAND_GMNAMEANNOUNCE, true, &HandleGMNameAnnounceCommand, "" }, + { "announce", rbac::RBAC_PERM_COMMAND_ANNOUNCE, true, &HandleAnnounceCommand, "" }, + { "gmannounce", rbac::RBAC_PERM_COMMAND_GMANNOUNCE, true, &HandleGMAnnounceCommand, "" }, + { "notify", rbac::RBAC_PERM_COMMAND_NOTIFY, true, &HandleNotifyCommand, "" }, + { "gmnotify", rbac::RBAC_PERM_COMMAND_GMNOTIFY, true, &HandleGMNotifyCommand, "" }, + { "whispers", rbac::RBAC_PERM_COMMAND_WHISPERS, false, &HandleWhispersCommand, "" }, }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 725fdd4c27..b22f56ef92 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -42,62 +42,61 @@ class misc_commandscript : public CommandScript public: misc_commandscript() : CommandScript("misc_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand commandTable[] = + static std::vector commandTable = { - { "additem", rbac::RBAC_PERM_COMMAND_ADDITEM, false, &HandleAddItemCommand, "", NULL }, - { "additemset", rbac::RBAC_PERM_COMMAND_ADDITEMSET, false, &HandleAddItemSetCommand, "", NULL }, - { "appear", rbac::RBAC_PERM_COMMAND_APPEAR, false, &HandleAppearCommand, "", NULL }, - { "aura", rbac::RBAC_PERM_COMMAND_AURA, false, &HandleAuraCommand, "", NULL }, - { "bank", rbac::RBAC_PERM_COMMAND_BANK, false, &HandleBankCommand, "", NULL }, - { "bindsight", rbac::RBAC_PERM_COMMAND_BINDSIGHT, false, &HandleBindSightCommand, "", NULL }, - { "combatstop", rbac::RBAC_PERM_COMMAND_COMBATSTOP, true, &HandleCombatStopCommand, "", NULL }, - { "cometome", rbac::RBAC_PERM_COMMAND_COMETOME, false, &HandleComeToMeCommand, "", NULL }, - { "commands", rbac::RBAC_PERM_COMMAND_COMMANDS, true, &HandleCommandsCommand, "", NULL }, - { "cooldown", rbac::RBAC_PERM_COMMAND_COOLDOWN, false, &HandleCooldownCommand, "", NULL }, - { "damage", rbac::RBAC_PERM_COMMAND_DAMAGE, false, &HandleDamageCommand, "", NULL }, - { "dev", rbac::RBAC_PERM_COMMAND_DEV, false, &HandleDevCommand, "", NULL }, - { "die", rbac::RBAC_PERM_COMMAND_DIE, false, &HandleDieCommand, "", NULL }, - { "dismount", rbac::RBAC_PERM_COMMAND_DISMOUNT, false, &HandleDismountCommand, "", NULL }, - { "distance", rbac::RBAC_PERM_COMMAND_DISTANCE, false, &HandleGetDistanceCommand, "", NULL }, - { "flusharenapoints", rbac::RBAC_PERM_COMMAND_FLUSHARENAPOINTS, false, &HandleFlushArenaPointsCommand, "", NULL }, - { "freeze", rbac::RBAC_PERM_COMMAND_FREEZE, false, &HandleFreezeCommand, "", NULL }, - { "gps", rbac::RBAC_PERM_COMMAND_GPS, false, &HandleGPSCommand, "", NULL }, - { "guid", rbac::RBAC_PERM_COMMAND_GUID, false, &HandleGUIDCommand, "", NULL }, - { "help", rbac::RBAC_PERM_COMMAND_HELP, true, &HandleHelpCommand, "", NULL }, - { "hidearea", rbac::RBAC_PERM_COMMAND_HIDEAREA, false, &HandleHideAreaCommand, "", NULL }, - { "itemmove", rbac::RBAC_PERM_COMMAND_ITEMMOVE, false, &HandleItemMoveCommand, "", NULL }, - { "kick", rbac::RBAC_PERM_COMMAND_KICK, true, &HandleKickPlayerCommand, "", NULL }, - { "linkgrave", rbac::RBAC_PERM_COMMAND_LINKGRAVE, false, &HandleLinkGraveCommand, "", NULL }, - { "listfreeze", rbac::RBAC_PERM_COMMAND_LISTFREEZE, false, &HandleListFreezeCommand, "", NULL }, - { "maxskill", rbac::RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "", NULL }, - { "movegens", rbac::RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "", NULL }, - { "mute", rbac::RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "", NULL }, - { "mutehistory", rbac::RBAC_PERM_COMMAND_MUTEHISTORY, true, &HandleMuteInfoCommand, "", NULL }, - { "neargrave", rbac::RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "", NULL }, - { "pinfo", rbac::RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "", NULL }, - { "playall", rbac::RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "", NULL }, - { "possess", rbac::RBAC_PERM_COMMAND_POSSESS, false, &HandlePossessCommand, "", NULL }, - { "pvpstats", rbac::RBAC_PERM_COMMAND_PVPSTATS, true, &HandlePvPstatsCommand, "", NULL }, - { "recall", rbac::RBAC_PERM_COMMAND_RECALL, false, &HandleRecallCommand, "", NULL }, - { "repairitems", rbac::RBAC_PERM_COMMAND_REPAIRITEMS, true, &HandleRepairitemsCommand, "", NULL }, - { "respawn", rbac::RBAC_PERM_COMMAND_RESPAWN, false, &HandleRespawnCommand, "", NULL }, - { "revive", rbac::RBAC_PERM_COMMAND_REVIVE, true, &HandleReviveCommand, "", NULL }, - { "saveall", rbac::RBAC_PERM_COMMAND_SAVEALL, true, &HandleSaveAllCommand, "", NULL }, - { "save", rbac::RBAC_PERM_COMMAND_SAVE, false, &HandleSaveCommand, "", NULL }, - { "setskill", rbac::RBAC_PERM_COMMAND_SETSKILL, false, &HandleSetSkillCommand, "", NULL }, - { "showarea", rbac::RBAC_PERM_COMMAND_SHOWAREA, false, &HandleShowAreaCommand, "", NULL }, - { "summon", rbac::RBAC_PERM_COMMAND_SUMMON, false, &HandleSummonCommand, "", NULL }, - { "unaura", rbac::RBAC_PERM_COMMAND_UNAURA, false, &HandleUnAuraCommand, "", NULL }, - { "unbindsight", rbac::RBAC_PERM_COMMAND_UNBINDSIGHT, false, HandleUnbindSightCommand, "", NULL }, - { "unfreeze", rbac::RBAC_PERM_COMMAND_UNFREEZE, false, &HandleUnFreezeCommand, "", NULL }, - { "unmute", rbac::RBAC_PERM_COMMAND_UNMUTE, true, &HandleUnmuteCommand, "", NULL }, - { "unpossess", rbac::RBAC_PERM_COMMAND_UNPOSSESS, false, &HandleUnPossessCommand, "", NULL }, - { "unstuck", rbac::RBAC_PERM_COMMAND_UNSTUCK, true, &HandleUnstuckCommand, "", NULL }, - { "wchange", rbac::RBAC_PERM_COMMAND_WCHANGE, false, &HandleChangeWeather, "", NULL }, - { "mailbox", rbac::RBAC_PERM_COMMAND_MAILBOX, false, &HandleMailBoxCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "additem", rbac::RBAC_PERM_COMMAND_ADDITEM, false, &HandleAddItemCommand, "" }, + { "additemset", rbac::RBAC_PERM_COMMAND_ADDITEMSET, false, &HandleAddItemSetCommand, "" }, + { "appear", rbac::RBAC_PERM_COMMAND_APPEAR, false, &HandleAppearCommand, "" }, + { "aura", rbac::RBAC_PERM_COMMAND_AURA, false, &HandleAuraCommand, "" }, + { "bank", rbac::RBAC_PERM_COMMAND_BANK, false, &HandleBankCommand, "" }, + { "bindsight", rbac::RBAC_PERM_COMMAND_BINDSIGHT, false, &HandleBindSightCommand, "" }, + { "combatstop", rbac::RBAC_PERM_COMMAND_COMBATSTOP, true, &HandleCombatStopCommand, "" }, + { "cometome", rbac::RBAC_PERM_COMMAND_COMETOME, false, &HandleComeToMeCommand, "" }, + { "commands", rbac::RBAC_PERM_COMMAND_COMMANDS, true, &HandleCommandsCommand, "" }, + { "cooldown", rbac::RBAC_PERM_COMMAND_COOLDOWN, false, &HandleCooldownCommand, "" }, + { "damage", rbac::RBAC_PERM_COMMAND_DAMAGE, false, &HandleDamageCommand, "" }, + { "dev", rbac::RBAC_PERM_COMMAND_DEV, false, &HandleDevCommand, "" }, + { "die", rbac::RBAC_PERM_COMMAND_DIE, false, &HandleDieCommand, "" }, + { "dismount", rbac::RBAC_PERM_COMMAND_DISMOUNT, false, &HandleDismountCommand, "" }, + { "distance", rbac::RBAC_PERM_COMMAND_DISTANCE, false, &HandleGetDistanceCommand, "" }, + { "flusharenapoints", rbac::RBAC_PERM_COMMAND_FLUSHARENAPOINTS, false, &HandleFlushArenaPointsCommand, "" }, + { "freeze", rbac::RBAC_PERM_COMMAND_FREEZE, false, &HandleFreezeCommand, "" }, + { "gps", rbac::RBAC_PERM_COMMAND_GPS, false, &HandleGPSCommand, "" }, + { "guid", rbac::RBAC_PERM_COMMAND_GUID, false, &HandleGUIDCommand, "" }, + { "help", rbac::RBAC_PERM_COMMAND_HELP, true, &HandleHelpCommand, "" }, + { "hidearea", rbac::RBAC_PERM_COMMAND_HIDEAREA, false, &HandleHideAreaCommand, "" }, + { "itemmove", rbac::RBAC_PERM_COMMAND_ITEMMOVE, false, &HandleItemMoveCommand, "" }, + { "kick", rbac::RBAC_PERM_COMMAND_KICK, true, &HandleKickPlayerCommand, "" }, + { "linkgrave", rbac::RBAC_PERM_COMMAND_LINKGRAVE, false, &HandleLinkGraveCommand, "" }, + { "listfreeze", rbac::RBAC_PERM_COMMAND_LISTFREEZE, false, &HandleListFreezeCommand, "" }, + { "maxskill", rbac::RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "" }, + { "movegens", rbac::RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "" }, + { "mute", rbac::RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "" }, + { "mutehistory", rbac::RBAC_PERM_COMMAND_MUTEHISTORY, true, &HandleMuteInfoCommand, "" }, + { "neargrave", rbac::RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "" }, + { "pinfo", rbac::RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "" }, + { "playall", rbac::RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "" }, + { "possess", rbac::RBAC_PERM_COMMAND_POSSESS, false, &HandlePossessCommand, "" }, + { "pvpstats", rbac::RBAC_PERM_COMMAND_PVPSTATS, true, &HandlePvPstatsCommand, "" }, + { "recall", rbac::RBAC_PERM_COMMAND_RECALL, false, &HandleRecallCommand, "" }, + { "repairitems", rbac::RBAC_PERM_COMMAND_REPAIRITEMS, true, &HandleRepairitemsCommand, "" }, + { "respawn", rbac::RBAC_PERM_COMMAND_RESPAWN, false, &HandleRespawnCommand, "" }, + { "revive", rbac::RBAC_PERM_COMMAND_REVIVE, true, &HandleReviveCommand, "" }, + { "saveall", rbac::RBAC_PERM_COMMAND_SAVEALL, true, &HandleSaveAllCommand, "" }, + { "save", rbac::RBAC_PERM_COMMAND_SAVE, false, &HandleSaveCommand, "" }, + { "setskill", rbac::RBAC_PERM_COMMAND_SETSKILL, false, &HandleSetSkillCommand, "" }, + { "showarea", rbac::RBAC_PERM_COMMAND_SHOWAREA, false, &HandleShowAreaCommand, "" }, + { "summon", rbac::RBAC_PERM_COMMAND_SUMMON, false, &HandleSummonCommand, "" }, + { "unaura", rbac::RBAC_PERM_COMMAND_UNAURA, false, &HandleUnAuraCommand, "" }, + { "unbindsight", rbac::RBAC_PERM_COMMAND_UNBINDSIGHT, false, HandleUnbindSightCommand, "" }, + { "unfreeze", rbac::RBAC_PERM_COMMAND_UNFREEZE, false, &HandleUnFreezeCommand, "" }, + { "unmute", rbac::RBAC_PERM_COMMAND_UNMUTE, true, &HandleUnmuteCommand, "" }, + { "unpossess", rbac::RBAC_PERM_COMMAND_UNPOSSESS, false, &HandleUnPossessCommand, "" }, + { "unstuck", rbac::RBAC_PERM_COMMAND_UNSTUCK, true, &HandleUnstuckCommand, "" }, + { "wchange", rbac::RBAC_PERM_COMMAND_WCHANGE, false, &HandleChangeWeather, "" }, + { "mailbox", rbac::RBAC_PERM_COMMAND_MAILBOX, false, &HandleMailBoxCommand, "" }, }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index e06159a674..479c34dd90 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -42,22 +42,20 @@ class mmaps_commandscript : public CommandScript public: mmaps_commandscript() : CommandScript("mmaps_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand mmapCommandTable[] = + static std::vector mmapCommandTable = { - { "loadedtiles", rbac::RBAC_PERM_COMMAND_MMAP_LOADEDTILES, false, &HandleMmapLoadedTilesCommand, "", NULL }, - { "loc", rbac::RBAC_PERM_COMMAND_MMAP_LOC, false, &HandleMmapLocCommand, "", NULL }, - { "path", rbac::RBAC_PERM_COMMAND_MMAP_PATH, false, &HandleMmapPathCommand, "", NULL }, - { "stats", rbac::RBAC_PERM_COMMAND_MMAP_STATS, false, &HandleMmapStatsCommand, "", NULL }, - { "testarea", rbac::RBAC_PERM_COMMAND_MMAP_TESTAREA, false, &HandleMmapTestArea, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "loadedtiles", rbac::RBAC_PERM_COMMAND_MMAP_LOADEDTILES, false, &HandleMmapLoadedTilesCommand, "" }, + { "loc", rbac::RBAC_PERM_COMMAND_MMAP_LOC, false, &HandleMmapLocCommand, "" }, + { "path", rbac::RBAC_PERM_COMMAND_MMAP_PATH, false, &HandleMmapPathCommand, "" }, + { "stats", rbac::RBAC_PERM_COMMAND_MMAP_STATS, false, &HandleMmapStatsCommand, "" }, + { "testarea", rbac::RBAC_PERM_COMMAND_MMAP_TESTAREA, false, &HandleMmapTestArea, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { - { "mmap", rbac::RBAC_PERM_COMMAND_MMAP, true, NULL, "", mmapCommandTable }, - { NULL, 0, false, NULL, "", NULL } + { "mmap", rbac::RBAC_PERM_COMMAND_MMAP, true, NULL, "", mmapCommandTable }, }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index bf82b81a8b..a3eed4dfd5 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -36,49 +36,46 @@ class modify_commandscript : public CommandScript public: modify_commandscript() : CommandScript("modify_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand modifyspeedCommandTable[] = + static std::vector modifyspeedCommandTable = { - { "all", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_ALL, false, &HandleModifyASpeedCommand, "", NULL }, - { "backwalk", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK, false, &HandleModifyBWalkCommand, "", NULL }, - { "fly", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_FLY, false, &HandleModifyFlyCommand, "", NULL }, - { "walk", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_WALK, false, &HandleModifySpeedCommand, "", NULL }, - { "swim", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM, false, &HandleModifySwimCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED, false, &HandleModifyASpeedCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "all", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_ALL, false, &HandleModifyASpeedCommand, "" }, + { "backwalk", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK, false, &HandleModifyBWalkCommand, "" }, + { "fly", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_FLY, false, &HandleModifyFlyCommand, "" }, + { "walk", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_WALK, false, &HandleModifySpeedCommand, "" }, + { "swim", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM, false, &HandleModifySwimCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED, false, &HandleModifyASpeedCommand, "" }, }; - static ChatCommand modifyCommandTable[] = + static std::vector modifyCommandTable = { - { "arenapoints", rbac::RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS, false, &HandleModifyArenaCommand, "", NULL }, - { "bit", rbac::RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "", NULL }, - { "drunk", rbac::RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "", NULL }, - { "energy", rbac::RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "", NULL }, - { "faction", rbac::RBAC_PERM_COMMAND_MODIFY_FACTION, false, &HandleModifyFactionCommand, "", NULL }, - { "gender", rbac::RBAC_PERM_COMMAND_MODIFY_GENDER, false, &HandleModifyGenderCommand, "", NULL }, - { "honor", rbac::RBAC_PERM_COMMAND_MODIFY_HONOR, false, &HandleModifyHonorCommand, "", NULL }, - { "hp", rbac::RBAC_PERM_COMMAND_MODIFY_HP, false, &HandleModifyHPCommand, "", NULL }, - { "mana", rbac::RBAC_PERM_COMMAND_MODIFY_MANA, false, &HandleModifyManaCommand, "", NULL }, - { "money", rbac::RBAC_PERM_COMMAND_MODIFY_MONEY, false, &HandleModifyMoneyCommand, "", NULL }, - { "mount", rbac::RBAC_PERM_COMMAND_MODIFY_MOUNT, false, &HandleModifyMountCommand, "", NULL }, - { "phase", rbac::RBAC_PERM_COMMAND_MODIFY_PHASE, false, &HandleModifyPhaseCommand, "", NULL }, - { "rage", rbac::RBAC_PERM_COMMAND_MODIFY_RAGE, false, &HandleModifyRageCommand, "", NULL }, - { "reputation", rbac::RBAC_PERM_COMMAND_MODIFY_REPUTATION, false, &HandleModifyRepCommand, "", NULL }, - { "runicpower", rbac::RBAC_PERM_COMMAND_MODIFY_RUNICPOWER, false, &HandleModifyRunicPowerCommand, "", NULL }, - { "scale", rbac::RBAC_PERM_COMMAND_MODIFY_SCALE, false, &HandleModifyScaleCommand, "", NULL }, + { "arenapoints", rbac::RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS, false, &HandleModifyArenaCommand, "" }, + { "bit", rbac::RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "" }, + { "drunk", rbac::RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "" }, + { "energy", rbac::RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "" }, + { "faction", rbac::RBAC_PERM_COMMAND_MODIFY_FACTION, false, &HandleModifyFactionCommand, "" }, + { "gender", rbac::RBAC_PERM_COMMAND_MODIFY_GENDER, false, &HandleModifyGenderCommand, "" }, + { "honor", rbac::RBAC_PERM_COMMAND_MODIFY_HONOR, false, &HandleModifyHonorCommand, "" }, + { "hp", rbac::RBAC_PERM_COMMAND_MODIFY_HP, false, &HandleModifyHPCommand, "" }, + { "mana", rbac::RBAC_PERM_COMMAND_MODIFY_MANA, false, &HandleModifyManaCommand, "" }, + { "money", rbac::RBAC_PERM_COMMAND_MODIFY_MONEY, false, &HandleModifyMoneyCommand, "" }, + { "mount", rbac::RBAC_PERM_COMMAND_MODIFY_MOUNT, false, &HandleModifyMountCommand, "" }, + { "phase", rbac::RBAC_PERM_COMMAND_MODIFY_PHASE, false, &HandleModifyPhaseCommand, "" }, + { "rage", rbac::RBAC_PERM_COMMAND_MODIFY_RAGE, false, &HandleModifyRageCommand, "" }, + { "reputation", rbac::RBAC_PERM_COMMAND_MODIFY_REPUTATION, false, &HandleModifyRepCommand, "" }, + { "runicpower", rbac::RBAC_PERM_COMMAND_MODIFY_RUNICPOWER, false, &HandleModifyRunicPowerCommand, "" }, + { "scale", rbac::RBAC_PERM_COMMAND_MODIFY_SCALE, false, &HandleModifyScaleCommand, "" }, { "speed", rbac::RBAC_PERM_COMMAND_MODIFY_SPEED, false, NULL, "", modifyspeedCommandTable }, - { "spell", rbac::RBAC_PERM_COMMAND_MODIFY_SPELL, false, &HandleModifySpellCommand, "", NULL }, - { "standstate", rbac::RBAC_PERM_COMMAND_MODIFY_STANDSTATE, false, &HandleModifyStandStateCommand, "", NULL }, - { "talentpoints", rbac::RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS, false, &HandleModifyTalentCommand, "", NULL }, - { "xp", rbac::RBAC_PERM_COMMAND_MODIFY_XP, false, &HandleModifyXPCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "spell", rbac::RBAC_PERM_COMMAND_MODIFY_SPELL, false, &HandleModifySpellCommand, "" }, + { "standstate", rbac::RBAC_PERM_COMMAND_MODIFY_STANDSTATE, false, &HandleModifyStandStateCommand, "" }, + { "talentpoints", rbac::RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS, false, &HandleModifyTalentCommand, "" }, + { "xp", rbac::RBAC_PERM_COMMAND_MODIFY_XP, false, &HandleModifyXPCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { - { "morph", rbac::RBAC_PERM_COMMAND_MORPH, false, &HandleModifyMorphCommand, "", NULL }, - { "demorph", rbac::RBAC_PERM_COMMAND_DEMORPH, false, &HandleDeMorphCommand, "", NULL }, + { "morph", rbac::RBAC_PERM_COMMAND_MORPH, false, &HandleModifyMorphCommand, "" }, + { "demorph", rbac::RBAC_PERM_COMMAND_DEMORPH, false, &HandleDeMorphCommand, "" }, { "modify", rbac::RBAC_PERM_COMMAND_MODIFY, false, NULL, "", modifyCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 8e7a1387a3..99c10b074a 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -170,69 +170,61 @@ class npc_commandscript : public CommandScript public: npc_commandscript() : CommandScript("npc_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand npcAddCommandTable[] = + static std::vector npcAddCommandTable = { - { "formation", rbac::RBAC_PERM_COMMAND_NPC_ADD_FORMATION, false, &HandleNpcAddFormationCommand, "", NULL }, - { "item", rbac::RBAC_PERM_COMMAND_NPC_ADD_ITEM, false, &HandleNpcAddVendorItemCommand, "", NULL }, - { "move", rbac::RBAC_PERM_COMMAND_NPC_ADD_MOVE, false, &HandleNpcAddMoveCommand, "", NULL }, - { "temp", rbac::RBAC_PERM_COMMAND_NPC_ADD_TEMP, false, &HandleNpcAddTempSpawnCommand, "", NULL }, - //{ "weapon", rbac::RBAC_PERM_COMMAND_NPC_ADD_WEAPON, false, &HandleNpcAddWeaponCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_NPC_ADD, false, &HandleNpcAddCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "formation", rbac::RBAC_PERM_COMMAND_NPC_ADD_FORMATION, false, &HandleNpcAddFormationCommand, "" }, + { "item", rbac::RBAC_PERM_COMMAND_NPC_ADD_ITEM, false, &HandleNpcAddVendorItemCommand, "" }, + { "move", rbac::RBAC_PERM_COMMAND_NPC_ADD_MOVE, false, &HandleNpcAddMoveCommand, "" }, + { "temp", rbac::RBAC_PERM_COMMAND_NPC_ADD_TEMP, false, &HandleNpcAddTempSpawnCommand, "" }, + //{ "weapon", rbac::RBAC_PERM_COMMAND_NPC_ADD_WEAPON, false, &HandleNpcAddWeaponCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_NPC_ADD, false, &HandleNpcAddCommand, "" }, }; - static ChatCommand npcDeleteCommandTable[] = + static std::vector npcDeleteCommandTable = { - { "item", rbac::RBAC_PERM_COMMAND_NPC_DELETE_ITEM, false, &HandleNpcDeleteVendorItemCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_NPC_DELETE, false, &HandleNpcDeleteCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "item", rbac::RBAC_PERM_COMMAND_NPC_DELETE_ITEM, false, &HandleNpcDeleteVendorItemCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_NPC_DELETE, false, &HandleNpcDeleteCommand, "" }, }; - static ChatCommand npcFollowCommandTable[] = + static std::vector npcFollowCommandTable = { - { "stop", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW_STOP, false, &HandleNpcUnFollowCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW, false, &HandleNpcFollowCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "stop", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW_STOP, false, &HandleNpcUnFollowCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW, false, &HandleNpcFollowCommand, "" }, }; - static ChatCommand npcSetCommandTable[] = + static std::vector npcSetCommandTable = { - { "allowmove", rbac::RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE, false, &HandleNpcSetAllowMovementCommand, "", NULL }, - { "entry", rbac::RBAC_PERM_COMMAND_NPC_SET_ENTRY, false, &HandleNpcSetEntryCommand, "", NULL }, - { "factionid", rbac::RBAC_PERM_COMMAND_NPC_SET_FACTIONID, false, &HandleNpcSetFactionIdCommand, "", NULL }, - { "flag", rbac::RBAC_PERM_COMMAND_NPC_SET_FLAG, false, &HandleNpcSetFlagCommand, "", NULL }, - { "level", rbac::RBAC_PERM_COMMAND_NPC_SET_LEVEL, false, &HandleNpcSetLevelCommand, "", NULL }, - { "link", rbac::RBAC_PERM_COMMAND_NPC_SET_LINK, false, &HandleNpcSetLinkCommand, "", NULL }, - { "model", rbac::RBAC_PERM_COMMAND_NPC_SET_MODEL, false, &HandleNpcSetModelCommand, "", NULL }, - { "movetype", rbac::RBAC_PERM_COMMAND_NPC_SET_MOVETYPE, false, &HandleNpcSetMoveTypeCommand, "", NULL }, - { "phase", rbac::RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseCommand, "", NULL }, - { "spawndist", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST, false, &HandleNpcSetSpawnDistCommand, "", NULL }, - { "spawntime", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME, false, &HandleNpcSetSpawnTimeCommand, "", NULL }, - { "data", rbac::RBAC_PERM_COMMAND_NPC_SET_DATA, false, &HandleNpcSetDataCommand, "", NULL }, - //{ "name", rbac::RBAC_PERM_COMMAND_NPC_SET_NAME, false, &HandleNpcSetNameCommand, "", NULL }, - //{ "subname", rbac::RBAC_PERM_COMMAND_NPC_SET_SUBNAME, false, &HandleNpcSetSubNameCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "allowmove", rbac::RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE, false, &HandleNpcSetAllowMovementCommand, "" }, + { "entry", rbac::RBAC_PERM_COMMAND_NPC_SET_ENTRY, false, &HandleNpcSetEntryCommand, "" }, + { "factionid", rbac::RBAC_PERM_COMMAND_NPC_SET_FACTIONID, false, &HandleNpcSetFactionIdCommand, "" }, + { "flag", rbac::RBAC_PERM_COMMAND_NPC_SET_FLAG, false, &HandleNpcSetFlagCommand, "" }, + { "level", rbac::RBAC_PERM_COMMAND_NPC_SET_LEVEL, false, &HandleNpcSetLevelCommand, "" }, + { "link", rbac::RBAC_PERM_COMMAND_NPC_SET_LINK, false, &HandleNpcSetLinkCommand, "" }, + { "model", rbac::RBAC_PERM_COMMAND_NPC_SET_MODEL, false, &HandleNpcSetModelCommand, "" }, + { "movetype", rbac::RBAC_PERM_COMMAND_NPC_SET_MOVETYPE, false, &HandleNpcSetMoveTypeCommand, "" }, + { "phase", rbac::RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseCommand, "" }, + { "spawndist", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST, false, &HandleNpcSetSpawnDistCommand, "" }, + { "spawntime", rbac::RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME, false, &HandleNpcSetSpawnTimeCommand, "" }, + { "data", rbac::RBAC_PERM_COMMAND_NPC_SET_DATA, false, &HandleNpcSetDataCommand, "" }, }; - static ChatCommand npcCommandTable[] = + static std::vector npcCommandTable = { - { "info", rbac::RBAC_PERM_COMMAND_NPC_INFO, false, &HandleNpcInfoCommand, "", NULL }, - { "near", rbac::RBAC_PERM_COMMAND_NPC_NEAR, false, &HandleNpcNearCommand, "", NULL }, - { "move", rbac::RBAC_PERM_COMMAND_NPC_MOVE, false, &HandleNpcMoveCommand, "", NULL }, - { "playemote", rbac::RBAC_PERM_COMMAND_NPC_PLAYEMOTE, false, &HandleNpcPlayEmoteCommand, "", NULL }, - { "say", rbac::RBAC_PERM_COMMAND_NPC_SAY, false, &HandleNpcSayCommand, "", NULL }, - { "textemote", rbac::RBAC_PERM_COMMAND_NPC_TEXTEMOTE, false, &HandleNpcTextEmoteCommand, "", NULL }, - { "whisper", rbac::RBAC_PERM_COMMAND_NPC_WHISPER, false, &HandleNpcWhisperCommand, "", NULL }, - { "yell", rbac::RBAC_PERM_COMMAND_NPC_YELL, false, &HandleNpcYellCommand, "", NULL }, - { "tame", rbac::RBAC_PERM_COMMAND_NPC_TAME, false, &HandleNpcTameCommand, "", NULL }, + { "info", rbac::RBAC_PERM_COMMAND_NPC_INFO, false, &HandleNpcInfoCommand, "" }, + { "near", rbac::RBAC_PERM_COMMAND_NPC_NEAR, false, &HandleNpcNearCommand, "" }, + { "move", rbac::RBAC_PERM_COMMAND_NPC_MOVE, false, &HandleNpcMoveCommand, "" }, + { "playemote", rbac::RBAC_PERM_COMMAND_NPC_PLAYEMOTE, false, &HandleNpcPlayEmoteCommand, "" }, + { "say", rbac::RBAC_PERM_COMMAND_NPC_SAY, false, &HandleNpcSayCommand, "" }, + { "textemote", rbac::RBAC_PERM_COMMAND_NPC_TEXTEMOTE, false, &HandleNpcTextEmoteCommand, "" }, + { "whisper", rbac::RBAC_PERM_COMMAND_NPC_WHISPER, false, &HandleNpcWhisperCommand, "" }, + { "yell", rbac::RBAC_PERM_COMMAND_NPC_YELL, false, &HandleNpcYellCommand, "" }, + { "tame", rbac::RBAC_PERM_COMMAND_NPC_TAME, false, &HandleNpcTameCommand, "" }, { "add", rbac::RBAC_PERM_COMMAND_NPC_ADD, false, NULL, "", npcAddCommandTable }, { "delete", rbac::RBAC_PERM_COMMAND_NPC_DELETE, false, NULL, "", npcDeleteCommandTable }, { "follow", rbac::RBAC_PERM_COMMAND_NPC_FOLLOW, false, NULL, "", npcFollowCommandTable }, { "set", rbac::RBAC_PERM_COMMAND_NPC_SET, false, NULL, "", npcSetCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "npc", rbac::RBAC_PERM_COMMAND_NPC, false, NULL, "", npcCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } @@ -1563,98 +1555,6 @@ public: */ return true; } - - static bool HandleNpcSetNameCommand(ChatHandler* /*handler*/, char const* /*args*/) - { - /* Temp. disabled - if (!*args) - return false; - - if (strlen((char*)args)>75) - { - handler->PSendSysMessage(LANG_TOO_LONG_NAME, strlen((char*)args)-75); - return true; - } - - for (uint8 i = 0; i < strlen(args); ++i) - { - if (!isalpha(args[i]) && args[i] != ' ') - { - handler->SendSysMessage(LANG_CHARS_ONLY); - return false; - } - } - - uint64 guid; - guid = handler->GetSession()->GetPlayer()->GetSelection(); - if (guid == 0) - { - handler->SendSysMessage(LANG_NO_SELECTION); - return true; - } - - Creature* creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), guid); - - if (!creature) - { - handler->SendSysMessage(LANG_SELECT_CREATURE); - return true; - } - - creature->SetName(args); - uint32 idname = sObjectMgr->AddCreatureTemplate(creature->GetName()); - creature->SetUInt32Value(OBJECT_FIELD_ENTRY, idname); - - creature->SaveToDB(); - */ - - return true; - } - - static bool HandleNpcSetSubNameCommand(ChatHandler* /*handler*/, char const* /*args*/) - { - /* Temp. disabled - - if (!*args) - args = ""; - - if (strlen((char*)args)>75) - { - handler->PSendSysMessage(LANG_TOO_LONG_SUBNAME, strlen((char*)args)-75); - return true; - } - - for (uint8 i = 0; i < strlen(args); i++) - { - if (!isalpha(args[i]) && args[i] != ' ') - { - handler->SendSysMessage(LANG_CHARS_ONLY); - return false; - } - } - uint64 guid; - guid = handler->GetSession()->GetPlayer()->GetSelection(); - if (guid == 0) - { - handler->SendSysMessage(LANG_NO_SELECTION); - return true; - } - - Creature* creature = ObjectAccessor::GetCreature(*handler->GetSession()->GetPlayer(), guid); - - if (!creature) - { - handler->SendSysMessage(LANG_SELECT_CREATURE); - return true; - } - - uint32 idname = sObjectMgr->AddCreatureSubName(creature->GetName(), args, creature->GetUInt32Value(UNIT_FIELD_DISPLAYID)); - creature->SetUInt32Value(OBJECT_FIELD_ENTRY, idname); - - creature->SaveToDB(); - */ - return true; - } }; void AddSC_npc_commandscript() diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp index fdac9d1a35..e304681782 100644 --- a/src/server/scripts/Commands/cs_pet.cpp +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -27,20 +27,18 @@ class pet_commandscript : public CommandScript public: pet_commandscript() : CommandScript("pet_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand petCommandTable[] = + static std::vector petCommandTable = { - { "create", rbac::RBAC_PERM_COMMAND_PET_CREATE, false, &HandlePetCreateCommand, "", NULL }, - { "learn", rbac::RBAC_PERM_COMMAND_PET_LEARN, false, &HandlePetLearnCommand, "", NULL }, - { "unlearn", rbac::RBAC_PERM_COMMAND_PET_UNLEARN, false, &HandlePetUnlearnCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "create", rbac::RBAC_PERM_COMMAND_PET_CREATE, false, &HandlePetCreateCommand, "" }, + { "learn", rbac::RBAC_PERM_COMMAND_PET_LEARN, false, &HandlePetLearnCommand, "" }, + { "unlearn", rbac::RBAC_PERM_COMMAND_PET_UNLEARN, false, &HandlePetUnlearnCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "pet", rbac::RBAC_PERM_COMMAND_PET, false, NULL, "", petCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 82904efc94..442950bca9 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -33,20 +33,18 @@ class quest_commandscript : public CommandScript public: quest_commandscript() : CommandScript("quest_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand questCommandTable[] = + static std::vector questCommandTable = { - { "add", rbac::RBAC_PERM_COMMAND_QUEST_ADD, false, &HandleQuestAdd, "", NULL }, - { "complete", rbac::RBAC_PERM_COMMAND_QUEST_COMPLETE, false, &HandleQuestComplete, "", NULL }, - { "remove", rbac::RBAC_PERM_COMMAND_QUEST_REMOVE, false, &HandleQuestRemove, "", NULL }, - { "reward", rbac::RBAC_PERM_COMMAND_QUEST_REWARD, false, &HandleQuestReward, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "add", rbac::RBAC_PERM_COMMAND_QUEST_ADD, false, &HandleQuestAdd, "" }, + { "complete", rbac::RBAC_PERM_COMMAND_QUEST_COMPLETE, false, &HandleQuestComplete, "" }, + { "remove", rbac::RBAC_PERM_COMMAND_QUEST_REMOVE, false, &HandleQuestRemove, "" }, + { "reward", rbac::RBAC_PERM_COMMAND_QUEST_REWARD, false, &HandleQuestReward, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "quest", rbac::RBAC_PERM_COMMAND_QUEST, false, NULL, "", questCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_rbac.cpp b/src/server/scripts/Commands/cs_rbac.cpp index 03f35e6ba6..c28aa04175 100644 --- a/src/server/scripts/Commands/cs_rbac.cpp +++ b/src/server/scripts/Commands/cs_rbac.cpp @@ -49,28 +49,25 @@ class rbac_commandscript : public CommandScript public: rbac_commandscript() : CommandScript("rbac_commandscript") { } - ChatCommand* GetCommands() const + std::vector GetCommands() const { - static ChatCommand rbacAccountCommandTable[] = + static std::vector rbacAccountCommandTable = { - { "list", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_LIST, true, &HandleRBACPermListCommand, "", NULL }, - { "grant", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT, true, &HandleRBACPermGrantCommand, "", NULL }, - { "deny", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY, true, &HandleRBACPermDenyCommand, "", NULL }, - { "revoke", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE, true, &HandleRBACPermRevokeCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "list", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_LIST, true, &HandleRBACPermListCommand, "" }, + { "grant", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT, true, &HandleRBACPermGrantCommand, "" }, + { "deny", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY, true, &HandleRBACPermDenyCommand, "" }, + { "revoke", rbac::RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE, true, &HandleRBACPermRevokeCommand, "" }, }; - static ChatCommand rbacCommandTable[] = + static std::vector rbacCommandTable = { { "account", rbac::RBAC_PERM_COMMAND_RBAC_ACC, true, NULL, "", rbacAccountCommandTable }, - { "list", rbac::RBAC_PERM_COMMAND_RBAC_LIST, true, &HandleRBACListPermissionsCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "list", rbac::RBAC_PERM_COMMAND_RBAC_LIST, true, &HandleRBACListPermissionsCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "rbac", rbac::RBAC_PERM_COMMAND_RBAC, true, NULL, "", rbacCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 2863d2d4ed..44e34b8e2a 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -47,122 +47,119 @@ class reload_commandscript : public CommandScript public: reload_commandscript() : CommandScript("reload_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand reloadAllCommandTable[] = + static std::vector reloadAllCommandTable = { - { "achievement", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL }, - { "area", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL }, - { "gossips", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL }, - { "item", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL }, - { "locales", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL }, - { "loot", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL }, - { "npc", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL }, - { "quest", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL }, - { "scripts", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL }, - { "spell", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "achievement", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "" }, + { "area", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "" }, + { "gossips", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "" }, + { "item", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "" }, + { "locales", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "" }, + { "loot", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "" }, + { "npc", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "" }, + { "quest", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "" }, + { "scripts", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "" }, + { "spell", rbac::RBAC_PERM_COMMAND_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, &HandleReloadAllCommand, "" }, }; - static ChatCommand reloadCommandTable[] = + static std::vector reloadCommandTable = { - { "auctions", rbac::RBAC_PERM_COMMAND_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL }, - { "access_requirement", rbac::RBAC_PERM_COMMAND_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL }, - { "achievement_criteria_data", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL }, - { "achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL }, + { "auctions", rbac::RBAC_PERM_COMMAND_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "" }, + { "access_requirement", rbac::RBAC_PERM_COMMAND_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "" }, + { "achievement_criteria_data", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "" }, + { "achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "" }, { "all", rbac::RBAC_PERM_COMMAND_RELOAD_ALL, true, NULL, "", reloadAllCommandTable }, - { "areatrigger_involvedrelation", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL }, - { "areatrigger_tavern", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL }, - { "areatrigger_teleport", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL }, - { "autobroadcast", rbac::RBAC_PERM_COMMAND_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL }, - { "battleground_template", rbac::RBAC_PERM_COMMAND_RELOAD_BATTLEGROUND_TEMPLATE, true, &HandleReloadBattlegroundTemplate, "", NULL }, - { "broadcast_text", rbac::RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT, true, &HandleReloadBroadcastTextCommand, "", NULL }, - { "command", rbac::RBAC_PERM_COMMAND_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL }, - { "conditions", rbac::RBAC_PERM_COMMAND_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL }, - { "config", rbac::RBAC_PERM_COMMAND_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL }, - { "creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL }, - { "creature_questender", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL }, - { "creature_linked_respawn", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL }, - { "creature_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL }, - { "creature_onkill_reputation", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL }, - { "creature_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL }, - { "creature_summon_groups", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL }, - { "creature_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL }, - { "disables", rbac::RBAC_PERM_COMMAND_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL }, - { "disenchant_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL }, - { "event_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL }, - { "fishing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL }, - { "game_graveyard_zone", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL }, - { "game_tele", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL }, - { "gameobject_questender", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL }, - { "gameobject_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL }, - { "gameobject_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL }, - { "gm_tickets", rbac::RBAC_PERM_COMMAND_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL }, - { "gossip_menu", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL }, - { "gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL }, - { "item_enchantment_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL }, - { "item_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL }, - { "item_set_names", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "", NULL }, - { "lfg_dungeon_rewards", rbac::RBAC_PERM_COMMAND_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL }, - { "locales_achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL }, - { "locales_creature", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL }, - { "locales_creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL }, - { "locales_gameobject", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL }, - { "locales_gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL }, - { "locales_item", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL }, - { "locales_item_set_name", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "", NULL }, - { "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL }, - { "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL }, - { "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL }, - { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL }, - { "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL }, - { "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL }, - { "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL }, - { "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL }, - { "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL }, - { "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL }, - { "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL }, - { "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL }, - { "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL }, - { "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL }, - { "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL }, - { "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL }, - { "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL }, - { "reference_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL }, - { "reserved_name", rbac::RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL }, - { "reputation_reward_rate", rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL }, - { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL }, - { "skill_discovery_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL }, - { "skill_extra_item_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL }, - { "skill_fishing_base_level", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL }, - { "skinning_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL }, - { "smart_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL }, - { "spell_required", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL }, - { "spell_area", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL }, - { "spell_bonus_data", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL }, - { "spell_group", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL }, - { "spell_learn_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL }, - { "spell_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL }, - { "spell_linked_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL }, - { "spell_pet_auras", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL }, - { "spell_proc_event", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL }, - { "spell_proc", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL }, - { "spell_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL }, - { "spell_target_position", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL }, - { "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL }, - { "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL }, - { "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL }, - { "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL }, - { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL }, - { "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL }, - { "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL }, - { "vehicle_template_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "areatrigger_involvedrelation", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "" }, + { "areatrigger_tavern", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "" }, + { "areatrigger_teleport", rbac::RBAC_PERM_COMMAND_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "" }, + { "autobroadcast", rbac::RBAC_PERM_COMMAND_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "" }, + { "battleground_template", rbac::RBAC_PERM_COMMAND_RELOAD_BATTLEGROUND_TEMPLATE, true, &HandleReloadBattlegroundTemplate, "" }, + { "broadcast_text", rbac::RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT, true, &HandleReloadBroadcastTextCommand, "" }, + { "command", rbac::RBAC_PERM_COMMAND_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "" }, + { "conditions", rbac::RBAC_PERM_COMMAND_RELOAD_CONDITIONS, true, &HandleReloadConditions, "" }, + { "config", rbac::RBAC_PERM_COMMAND_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "" }, + { "creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "" }, + { "creature_questender", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "" }, + { "creature_linked_respawn", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "" }, + { "creature_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "" }, + { "creature_onkill_reputation", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "" }, + { "creature_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "" }, + { "creature_summon_groups", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "" }, + { "creature_template", rbac::RBAC_PERM_COMMAND_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "" }, + { "disables", rbac::RBAC_PERM_COMMAND_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "" }, + { "disenchant_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "" }, + { "event_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "" }, + { "fishing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "" }, + { "game_graveyard_zone", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "" }, + { "game_tele", rbac::RBAC_PERM_COMMAND_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "" }, + { "gameobject_questender", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "" }, + { "gameobject_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "" }, + { "gameobject_queststarter", rbac::RBAC_PERM_COMMAND_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "" }, + { "gm_tickets", rbac::RBAC_PERM_COMMAND_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "" }, + { "gossip_menu", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "" }, + { "gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "" }, + { "item_enchantment_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "" }, + { "item_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "" }, + { "item_set_names", rbac::RBAC_PERM_COMMAND_RELOAD_ITEM_SET_NAMES, true, &HandleReloadItemSetNamesCommand, "" }, + { "lfg_dungeon_rewards", rbac::RBAC_PERM_COMMAND_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "" }, + { "locales_achievement_reward", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "" }, + { "locales_creature", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "" }, + { "locales_creature_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "" }, + { "locales_gameobject", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "" }, + { "locales_gossip_menu_option", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "" }, + { "locales_item", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "" }, + { "locales_item_set_name", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_ITEM_SET_NAME, true, &HandleReloadLocalesItemSetNameCommand, "" }, + { "locales_npc_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "" }, + { "locales_page_text", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "" }, + { "locales_points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "" }, + { "locales_quest", rbac::RBAC_PERM_COMMAND_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "" }, + { "mail_level_reward", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "" }, + { "mail_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "" }, + { "milling_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "" }, + { "npc_spellclick_spells", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "" }, + { "npc_trainer", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "" }, + { "npc_vendor", rbac::RBAC_PERM_COMMAND_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "" }, + { "page_text", rbac::RBAC_PERM_COMMAND_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "" }, + { "pickpocketing_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "" }, + { "points_of_interest", rbac::RBAC_PERM_COMMAND_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "" }, + { "prospecting_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "" }, + { "quest_poi", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "" }, + { "quest_template", rbac::RBAC_PERM_COMMAND_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "" }, + { "rbac", rbac::RBAC_PERM_COMMAND_RELOAD_RBAC, true, &HandleReloadRBACCommand, "" }, + { "reference_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "" }, + { "reserved_name", rbac::RBAC_PERM_COMMAND_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "" }, + { "reputation_reward_rate", rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "" }, + { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "" }, + { "skill_discovery_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "" }, + { "skill_extra_item_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "" }, + { "skill_fishing_base_level", rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "" }, + { "skinning_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "" }, + { "smart_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "" }, + { "spell_required", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "" }, + { "spell_area", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "" }, + { "spell_bonus_data", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "" }, + { "spell_group", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "" }, + { "spell_learn_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "" }, + { "spell_loot_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "" }, + { "spell_linked_spell", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "" }, + { "spell_pet_auras", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "" }, + { "spell_proc_event", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "" }, + { "spell_proc", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "" }, + { "spell_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "" }, + { "spell_target_position", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "" }, + { "spell_threats", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "" }, + { "spell_group_stack_rules", rbac::RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "" }, + { "trinity_string", rbac::RBAC_PERM_COMMAND_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "" }, + { "warden_action", rbac::RBAC_PERM_COMMAND_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "" }, + { "waypoint_scripts", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "" }, + { "waypoint_data", rbac::RBAC_PERM_COMMAND_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "" }, + { "vehicle_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "" }, + { "vehicle_template_accessory", rbac::RBAC_PERM_COMMAND_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "reload", rbac::RBAC_PERM_COMMAND_RELOAD, true, NULL, "", reloadCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index b2bccfd884..d1c7421b76 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -35,23 +35,21 @@ class reset_commandscript : public CommandScript public: reset_commandscript() : CommandScript("reset_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand resetCommandTable[] = + static std::vector resetCommandTable = { - { "achievements", rbac::RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS, true, &HandleResetAchievementsCommand, "", NULL }, - { "honor", rbac::RBAC_PERM_COMMAND_RESET_HONOR, true, &HandleResetHonorCommand, "", NULL }, - { "level", rbac::RBAC_PERM_COMMAND_RESET_LEVEL, true, &HandleResetLevelCommand, "", NULL }, - { "spells", rbac::RBAC_PERM_COMMAND_RESET_SPELLS, true, &HandleResetSpellsCommand, "", NULL }, - { "stats", rbac::RBAC_PERM_COMMAND_RESET_STATS, true, &HandleResetStatsCommand, "", NULL }, - { "talents", rbac::RBAC_PERM_COMMAND_RESET_TALENTS, true, &HandleResetTalentsCommand, "", NULL }, - { "all", rbac::RBAC_PERM_COMMAND_RESET_ALL, true, &HandleResetAllCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "achievements", rbac::RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS, true, &HandleResetAchievementsCommand, "" }, + { "honor", rbac::RBAC_PERM_COMMAND_RESET_HONOR, true, &HandleResetHonorCommand, "" }, + { "level", rbac::RBAC_PERM_COMMAND_RESET_LEVEL, true, &HandleResetLevelCommand, "" }, + { "spells", rbac::RBAC_PERM_COMMAND_RESET_SPELLS, true, &HandleResetSpellsCommand, "" }, + { "stats", rbac::RBAC_PERM_COMMAND_RESET_STATS, true, &HandleResetStatsCommand, "" }, + { "talents", rbac::RBAC_PERM_COMMAND_RESET_TALENTS, true, &HandleResetTalentsCommand, "" }, + { "all", rbac::RBAC_PERM_COMMAND_RESET_ALL, true, &HandleResetAllCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "reset", rbac::RBAC_PERM_COMMAND_RESET, true, NULL, "", resetCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp index 57ea44a67b..b7165ed339 100644 --- a/src/server/scripts/Commands/cs_send.cpp +++ b/src/server/scripts/Commands/cs_send.cpp @@ -27,21 +27,19 @@ class send_commandscript : public CommandScript public: send_commandscript() : CommandScript("send_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand sendCommandTable[] = + static std::vector sendCommandTable = { - { "items", rbac::RBAC_PERM_COMMAND_SEND_ITEMS, true, &HandleSendItemsCommand, "", NULL }, - { "mail", rbac::RBAC_PERM_COMMAND_SEND_MAIL, true, &HandleSendMailCommand, "", NULL }, - { "message", rbac::RBAC_PERM_COMMAND_SEND_MESSAGE, true, &HandleSendMessageCommand, "", NULL }, - { "money", rbac::RBAC_PERM_COMMAND_SEND_MONEY, true, &HandleSendMoneyCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "items", rbac::RBAC_PERM_COMMAND_SEND_ITEMS, true, &HandleSendItemsCommand, "" }, + { "mail", rbac::RBAC_PERM_COMMAND_SEND_MAIL, true, &HandleSendMailCommand, "" }, + { "message", rbac::RBAC_PERM_COMMAND_SEND_MESSAGE, true, &HandleSendMessageCommand, "" }, + { "money", rbac::RBAC_PERM_COMMAND_SEND_MONEY, true, &HandleSendMoneyCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "send", rbac::RBAC_PERM_COMMAND_SEND, false, NULL, "", sendCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index fe5ae940f8..e41a7d161d 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -35,64 +35,57 @@ class server_commandscript : public CommandScript public: server_commandscript() : CommandScript("server_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand serverIdleRestartCommandTable[] = + static std::vector serverIdleRestartCommandTable = { - { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL }, - { "" , rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, &HandleServerIdleRestartCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "" }, + { "" , rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, &HandleServerIdleRestartCommand, "" }, }; - static ChatCommand serverIdleShutdownCommandTable[] = + static std::vector serverIdleShutdownCommandTable = { - { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL }, - { "" , rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, &HandleServerIdleShutDownCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "" }, + { "" , rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, &HandleServerIdleShutDownCommand, "" }, }; - static ChatCommand serverRestartCommandTable[] = + static std::vector serverRestartCommandTable = { - { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL }, - { "" , rbac::RBAC_PERM_COMMAND_SERVER_RESTART, true, &HandleServerRestartCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "" }, + { "" , rbac::RBAC_PERM_COMMAND_SERVER_RESTART, true, &HandleServerRestartCommand, "" }, }; - static ChatCommand serverShutdownCommandTable[] = + static std::vector serverShutdownCommandTable = { - { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL }, - { "" , rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, &HandleServerShutDownCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "cancel", rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "" }, + { "" , rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, &HandleServerShutDownCommand, "" }, }; - static ChatCommand serverSetCommandTable[] = + static std::vector serverSetCommandTable = { - { "difftime", rbac::RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME, true, &HandleServerSetDiffTimeCommand, "", NULL }, - { "loglevel", rbac::RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL, true, &HandleServerSetLogLevelCommand, "", NULL }, - { "motd", rbac::RBAC_PERM_COMMAND_SERVER_SET_MOTD, true, &HandleServerSetMotdCommand, "", NULL }, - { "closed", rbac::RBAC_PERM_COMMAND_SERVER_SET_CLOSED, true, &HandleServerSetClosedCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "difftime", rbac::RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME, true, &HandleServerSetDiffTimeCommand, "" }, + { "loglevel", rbac::RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL, true, &HandleServerSetLogLevelCommand, "" }, + { "motd", rbac::RBAC_PERM_COMMAND_SERVER_SET_MOTD, true, &HandleServerSetMotdCommand, "" }, + { "closed", rbac::RBAC_PERM_COMMAND_SERVER_SET_CLOSED, true, &HandleServerSetClosedCommand, "" }, }; - static ChatCommand serverCommandTable[] = + static std::vector serverCommandTable = { - { "corpses", rbac::RBAC_PERM_COMMAND_SERVER_CORPSES, true, &HandleServerCorpsesCommand, "", NULL }, - { "exit", rbac::RBAC_PERM_COMMAND_SERVER_EXIT, true, &HandleServerExitCommand, "", NULL }, + { "corpses", rbac::RBAC_PERM_COMMAND_SERVER_CORPSES, true, &HandleServerCorpsesCommand, "" }, + { "exit", rbac::RBAC_PERM_COMMAND_SERVER_EXIT, true, &HandleServerExitCommand, "" }, { "idlerestart", rbac::RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, NULL, "", serverIdleRestartCommandTable }, { "idleshutdown", rbac::RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, NULL, "", serverIdleShutdownCommandTable }, - { "info", rbac::RBAC_PERM_COMMAND_SERVER_INFO, true, &HandleServerInfoCommand, "", NULL }, - { "motd", rbac::RBAC_PERM_COMMAND_SERVER_MOTD, true, &HandleServerMotdCommand, "", NULL }, - { "plimit", rbac::RBAC_PERM_COMMAND_SERVER_PLIMIT, true, &HandleServerPLimitCommand, "", NULL }, + { "info", rbac::RBAC_PERM_COMMAND_SERVER_INFO, true, &HandleServerInfoCommand, "" }, + { "motd", rbac::RBAC_PERM_COMMAND_SERVER_MOTD, true, &HandleServerMotdCommand, "" }, + { "plimit", rbac::RBAC_PERM_COMMAND_SERVER_PLIMIT, true, &HandleServerPLimitCommand, "" }, { "restart", rbac::RBAC_PERM_COMMAND_SERVER_RESTART, true, NULL, "", serverRestartCommandTable }, { "shutdown", rbac::RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, NULL, "", serverShutdownCommandTable }, { "set", rbac::RBAC_PERM_COMMAND_SERVER_SET, true, NULL, "", serverSetCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "server", rbac::RBAC_PERM_COMMAND_SERVER, true, NULL, "", serverCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp index 8e82f9980d..9ea516f097 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -35,21 +35,19 @@ class tele_commandscript : public CommandScript public: tele_commandscript() : CommandScript("tele_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand teleCommandTable[] = + static std::vector teleCommandTable = { - { "add", rbac::RBAC_PERM_COMMAND_TELE_ADD, false, &HandleTeleAddCommand, "", NULL }, - { "del", rbac::RBAC_PERM_COMMAND_TELE_DEL, true, &HandleTeleDelCommand, "", NULL }, - { "name", rbac::RBAC_PERM_COMMAND_TELE_NAME, true, &HandleTeleNameCommand, "", NULL }, - { "group", rbac::RBAC_PERM_COMMAND_TELE_GROUP, false, &HandleTeleGroupCommand, "", NULL }, - { "", rbac::RBAC_PERM_COMMAND_TELE, false, &HandleTeleCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "add", rbac::RBAC_PERM_COMMAND_TELE_ADD, false, &HandleTeleAddCommand, "" }, + { "del", rbac::RBAC_PERM_COMMAND_TELE_DEL, true, &HandleTeleDelCommand, "" }, + { "name", rbac::RBAC_PERM_COMMAND_TELE_NAME, true, &HandleTeleNameCommand, "" }, + { "group", rbac::RBAC_PERM_COMMAND_TELE_GROUP, false, &HandleTeleGroupCommand, "" }, + { "", rbac::RBAC_PERM_COMMAND_TELE, false, &HandleTeleCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "tele", rbac::RBAC_PERM_COMMAND_TELE, false, NULL, "", teleCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index f7634381fc..9b771f734b 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -36,38 +36,35 @@ class ticket_commandscript : public CommandScript public: ticket_commandscript() : CommandScript("ticket_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand ticketResponseCommandTable[] = + static std::vector ticketResponseCommandTable = { - { "append", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND, true, &HandleGMTicketResponseAppendCommand, "", NULL }, - { "appendln", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN, true, &HandleGMTicketResponseAppendLnCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "append", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND, true, &HandleGMTicketResponseAppendCommand, "" }, + { "appendln", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN, true, &HandleGMTicketResponseAppendLnCommand, "" }, }; - static ChatCommand ticketCommandTable[] = + static std::vector ticketCommandTable = { - { "assign", rbac::RBAC_PERM_COMMAND_TICKET_ASSIGN, true, &HandleGMTicketAssignToCommand, "", NULL }, - { "close", rbac::RBAC_PERM_COMMAND_TICKET_CLOSE, true, &HandleGMTicketCloseByIdCommand, "", NULL }, - { "closedlist", rbac::RBAC_PERM_COMMAND_TICKET_CLOSEDLIST, true, &HandleGMTicketListClosedCommand, "", NULL }, - { "comment", rbac::RBAC_PERM_COMMAND_TICKET_COMMENT, true, &HandleGMTicketCommentCommand, "", NULL }, - { "complete", rbac::RBAC_PERM_COMMAND_TICKET_COMPLETE, true, &HandleGMTicketCompleteCommand, "", NULL }, - { "delete", rbac::RBAC_PERM_COMMAND_TICKET_DELETE, true, &HandleGMTicketDeleteByIdCommand, "", NULL }, - { "escalate", rbac::RBAC_PERM_COMMAND_TICKET_ESCALATE, true, &HandleGMTicketEscalateCommand, "", NULL }, - { "escalatedlist", rbac::RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST, true, &HandleGMTicketListEscalatedCommand, "", NULL }, - { "list", rbac::RBAC_PERM_COMMAND_TICKET_LIST, true, &HandleGMTicketListCommand, "", NULL }, - { "onlinelist", rbac::RBAC_PERM_COMMAND_TICKET_ONLINELIST, true, &HandleGMTicketListOnlineCommand, "", NULL }, - { "reset", rbac::RBAC_PERM_COMMAND_TICKET_RESET, true, &HandleGMTicketResetCommand, "", NULL }, + { "assign", rbac::RBAC_PERM_COMMAND_TICKET_ASSIGN, true, &HandleGMTicketAssignToCommand, "" }, + { "close", rbac::RBAC_PERM_COMMAND_TICKET_CLOSE, true, &HandleGMTicketCloseByIdCommand, "" }, + { "closedlist", rbac::RBAC_PERM_COMMAND_TICKET_CLOSEDLIST, true, &HandleGMTicketListClosedCommand, "" }, + { "comment", rbac::RBAC_PERM_COMMAND_TICKET_COMMENT, true, &HandleGMTicketCommentCommand, "" }, + { "complete", rbac::RBAC_PERM_COMMAND_TICKET_COMPLETE, true, &HandleGMTicketCompleteCommand, "" }, + { "delete", rbac::RBAC_PERM_COMMAND_TICKET_DELETE, true, &HandleGMTicketDeleteByIdCommand, "" }, + { "escalate", rbac::RBAC_PERM_COMMAND_TICKET_ESCALATE, true, &HandleGMTicketEscalateCommand, "" }, + { "escalatedlist", rbac::RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST, true, &HandleGMTicketListEscalatedCommand, "" }, + { "list", rbac::RBAC_PERM_COMMAND_TICKET_LIST, true, &HandleGMTicketListCommand, "" }, + { "onlinelist", rbac::RBAC_PERM_COMMAND_TICKET_ONLINELIST, true, &HandleGMTicketListOnlineCommand, "" }, + { "reset", rbac::RBAC_PERM_COMMAND_TICKET_RESET, true, &HandleGMTicketResetCommand, "" }, { "response", rbac::RBAC_PERM_COMMAND_TICKET_RESPONSE, true, NULL, "", ticketResponseCommandTable }, - { "togglesystem", rbac::RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM, true, &HandleToggleGMTicketSystem, "", NULL }, - { "unassign", rbac::RBAC_PERM_COMMAND_TICKET_UNASSIGN, true, &HandleGMTicketUnAssignCommand, "", NULL }, - { "viewid", rbac::RBAC_PERM_COMMAND_TICKET_VIEWID, true, &HandleGMTicketGetByIdCommand, "", NULL }, - { "viewname", rbac::RBAC_PERM_COMMAND_TICKET_VIEWNAME, true, &HandleGMTicketGetByNameCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "togglesystem", rbac::RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM, true, &HandleToggleGMTicketSystem, "" }, + { "unassign", rbac::RBAC_PERM_COMMAND_TICKET_UNASSIGN, true, &HandleGMTicketUnAssignCommand, "" }, + { "viewid", rbac::RBAC_PERM_COMMAND_TICKET_VIEWID, true, &HandleGMTicketGetByIdCommand, "" }, + { "viewname", rbac::RBAC_PERM_COMMAND_TICKET_VIEWNAME, true, &HandleGMTicketGetByNameCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "ticket", rbac::RBAC_PERM_COMMAND_TICKET, false, NULL, "", ticketCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp index 74a2f9f5aa..bc6027ce3c 100644 --- a/src/server/scripts/Commands/cs_titles.cpp +++ b/src/server/scripts/Commands/cs_titles.cpp @@ -33,25 +33,22 @@ class titles_commandscript : public CommandScript public: titles_commandscript() : CommandScript("titles_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand titlesSetCommandTable[] = + static std::vector titlesSetCommandTable = { - { "mask", rbac::RBAC_PERM_COMMAND_TITLES_SET_MASK, false, &HandleTitlesSetMaskCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "mask", rbac::RBAC_PERM_COMMAND_TITLES_SET_MASK, false, &HandleTitlesSetMaskCommand, "" }, }; - static ChatCommand titlesCommandTable[] = + static std::vector titlesCommandTable = { - { "add", rbac::RBAC_PERM_COMMAND_TITLES_ADD, false, &HandleTitlesAddCommand, "", NULL }, - { "current", rbac::RBAC_PERM_COMMAND_TITLES_CURRENT, false, &HandleTitlesCurrentCommand, "", NULL }, - { "remove", rbac::RBAC_PERM_COMMAND_TITLES_REMOVE, false, &HandleTitlesRemoveCommand, "", NULL }, + { "add", rbac::RBAC_PERM_COMMAND_TITLES_ADD, false, &HandleTitlesAddCommand, "" }, + { "current", rbac::RBAC_PERM_COMMAND_TITLES_CURRENT, false, &HandleTitlesCurrentCommand, "" }, + { "remove", rbac::RBAC_PERM_COMMAND_TITLES_REMOVE, false, &HandleTitlesRemoveCommand, "" }, { "set", rbac::RBAC_PERM_COMMAND_TITLES_SET, false, NULL, "", titlesSetCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "titles", rbac::RBAC_PERM_COMMAND_TITLES, false, NULL, "", titlesCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 9db1e5d68d..b35e71dbd5 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -34,23 +34,21 @@ class wp_commandscript : public CommandScript public: wp_commandscript() : CommandScript("wp_commandscript") { } - ChatCommand* GetCommands() const override + std::vector GetCommands() const override { - static ChatCommand wpCommandTable[] = + static std::vector wpCommandTable = { - { "add", rbac::RBAC_PERM_COMMAND_WP_ADD, false, &HandleWpAddCommand, "", NULL }, - { "event", rbac::RBAC_PERM_COMMAND_WP_EVENT, false, &HandleWpEventCommand, "", NULL }, - { "load", rbac::RBAC_PERM_COMMAND_WP_LOAD, false, &HandleWpLoadCommand, "", NULL }, - { "modify", rbac::RBAC_PERM_COMMAND_WP_MODIFY, false, &HandleWpModifyCommand, "", NULL }, - { "unload", rbac::RBAC_PERM_COMMAND_WP_UNLOAD, false, &HandleWpUnLoadCommand, "", NULL }, - { "reload", rbac::RBAC_PERM_COMMAND_WP_RELOAD, false, &HandleWpReloadCommand, "", NULL }, - { "show", rbac::RBAC_PERM_COMMAND_WP_SHOW, false, &HandleWpShowCommand, "", NULL }, - { NULL, 0, false, NULL, "", NULL } + { "add", rbac::RBAC_PERM_COMMAND_WP_ADD, false, &HandleWpAddCommand, "" }, + { "event", rbac::RBAC_PERM_COMMAND_WP_EVENT, false, &HandleWpEventCommand, "" }, + { "load", rbac::RBAC_PERM_COMMAND_WP_LOAD, false, &HandleWpLoadCommand, "" }, + { "modify", rbac::RBAC_PERM_COMMAND_WP_MODIFY, false, &HandleWpModifyCommand, "" }, + { "unload", rbac::RBAC_PERM_COMMAND_WP_UNLOAD, false, &HandleWpUnLoadCommand, "" }, + { "reload", rbac::RBAC_PERM_COMMAND_WP_RELOAD, false, &HandleWpReloadCommand, "" }, + { "show", rbac::RBAC_PERM_COMMAND_WP_SHOW, false, &HandleWpShowCommand, "" }, }; - static ChatCommand commandTable[] = + static std::vector commandTable = { { "wp", rbac::RBAC_PERM_COMMAND_WP, false, NULL, "", wpCommandTable }, - { NULL, 0, false, NULL, "", NULL } }; return commandTable; } diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp index ad9ae28f71..3901e17f9c 100644 --- a/src/server/worldserver/CommandLine/CliRunnable.cpp +++ b/src/server/worldserver/CommandLine/CliRunnable.cpp @@ -36,9 +36,9 @@ char* command_finder(const char* text, int state) { - static int idx, len; + static size_t idx, len; const char* ret; - ChatCommand* cmd = ChatHandler::getCommandTable(); + std::vector const& cmd = ChatHandler::getCommandTable(); if (!state) { @@ -46,20 +46,19 @@ char* command_finder(const char* text, int state) len = strlen(text); } - while ((ret = cmd[idx].Name)) + while (idx < cmd.size()) { + ret = cmd[idx].Name; if (!cmd[idx].AllowConsole) { - idx++; + ++idx; continue; } - idx++; + ++idx; //printf("Checking %s \n", cmd[idx].Name); if (strncmp(ret, text, len) == 0) return strdup(ret); - if (cmd[idx].Name == NULL) - break; } return ((char*)NULL); From 6264f25a982f5fd36b549d6a53b9d572b6f4f0e5 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Thu, 22 Oct 2015 22:49:27 +0200 Subject: [PATCH 189/524] DB/Path: Pathing for few rats in Dalaran --- sql/updates/world/2015_10_22_01_world.sql | 1006 +++++++++++++++++++++ 1 file changed, 1006 insertions(+) create mode 100644 sql/updates/world/2015_10_22_01_world.sql diff --git a/sql/updates/world/2015_10_22_01_world.sql b/sql/updates/world/2015_10_22_01_world.sql new file mode 100644 index 0000000000..ee7db3024a --- /dev/null +++ b/sql/updates/world/2015_10_22_01_world.sql @@ -0,0 +1,1006 @@ +-- Pathing for Monstrous Underbelly Rat Entry: 32466 'TDB FORMAT' +SET @NPC := 115709; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5838.242,`position_y`=727.3474,`position_z`=618.8483 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5838.242,727.3474,618.8483,0,58000,0,0,100,0), -- 17:24:07 +(@PATH,2,5838.957,727.3331,618.8483,0,0,0,0,100,0), -- 17:25:05 +(@PATH,3,5830.747,726.1935,618.8483,0,0,0,0,100,0), -- 17:25:09 +(@PATH,4,5824.448,723.9514,618.8483,0,20000,0,0,100,0), -- 17:25:11 +(@PATH,5,5824.13,723.7587,618.8483,0,0,0,0,100,0), -- 17:25:31 +(@PATH,6,5831.308,726.0686,618.8483,0,0,0,0,100,0); -- 17:25:33 + +-- Pathing for Underbelly Rat Entry: 32428 'TDB FORMAT' +SET @NPC := 112319; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5860.327,`position_y`=704.5416,`position_z`=609.4075 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5860.327,704.5416,609.4075,0,0,1,0,100,0), -- 17:41:04 +(@PATH,2,5848.26,705.7133,609.4075,0,0,1,0,100,0), -- 17:41:05 +(@PATH,3,5846.842,704.8635,609.5217,0,0,1,0,100,0), -- 17:41:07 +(@PATH,4,5836.342,691.6135,609.5217,0,0,1,0,100,0), -- 17:41:07 +(@PATH,5,5835.342,690.3635,610.0217,0,0,1,0,100,0), -- 17:41:07 +(@PATH,6,5833.592,688.1135,610.0217,0,0,1,0,100,0), -- 17:41:07 +(@PATH,7,5832.342,686.1135,610.0217,0,0,1,0,100,0), -- 17:41:07 +(@PATH,8,5831.625,685.5962,610.1531,0,0,1,0,100,0), -- 17:41:12 +(@PATH,9,5821.625,681.8462,610.1531,0,0,1,0,100,0), -- 17:41:12 +(@PATH,10,5817.857,678.2463,610.1359,0,0,1,0,100,0), -- 17:41:15 +(@PATH,11,5816.357,672.2463,610.1359,0,0,1,0,100,0), -- 17:41:15 +(@PATH,12,5815.969,667.8105,610.1359,0,0,1,0,100,0), -- 17:41:17 +(@PATH,13,5815.969,666.0605,610.1359,0,0,1,0,100,0), -- 17:41:17 +(@PATH,14,5815.719,663.5605,609.6359,0,0,1,0,100,0), -- 17:41:17 +(@PATH,15,5815.719,655.0605,609.6359,0,0,1,0,100,0), -- 17:41:17 +(@PATH,16,5815.719,653.8105,609.8859,0,0,1,0,100,0), -- 17:41:17 +(@PATH,17,5815.234,650.0985,610.0259,0,0,1,0,100,0), -- 17:41:21 +(@PATH,18,5813.234,651.0985,610.0259,0,0,1,0,100,0), -- 17:41:21 +(@PATH,19,5806.553,653.642,610.1359,0,0,1,0,100,0), -- 17:41:23 +(@PATH,20,5797.906,650.6086,610.1359,0,0,1,0,100,0), -- 17:41:24 +(@PATH,21,5793.906,647.1086,610.1359,0,0,1,0,100,0), -- 17:41:24 +(@PATH,22,5791.656,644.8586,610.1359,0,0,1,0,100,0), -- 17:41:24 +(@PATH,23,5790.859,644.0999,610.1359,0,0,1,0,100,0), -- 17:41:27 +(@PATH,24,5790.109,642.5999,610.1359,0,0,1,0,100,0), -- 17:41:27 +(@PATH,25,5787.335,632.4458,609.5217,0,0,1,0,100,0), -- 17:41:29 +(@PATH,26,5786.012,626.2661,609.6223,0,0,1,0,100,0), -- 17:41:30 +(@PATH,27,5785.262,623.5161,609.6223,0,0,1,0,100,0), -- 17:41:30 +(@PATH,28,5785.012,622.0161,610.1223,0,0,1,0,100,0), -- 17:41:30 +(@PATH,29,5784.012,618.7661,610.1223,0,0,1,0,100,0), -- 17:41:30 +(@PATH,30,5766.996,613.3734,610.1359,0,0,1,0,100,0), -- 17:41:37 +(@PATH,31,5764.289,614.7873,610.1359,0,0,1,0,100,0), -- 17:41:41 +(@PATH,32,5761.711,609.0067,610.1359,0,0,1,0,100,0), -- 17:41:43 +(@PATH,33,5762.814,602.2861,610.1359,0,0,1,0,100,0), -- 17:41:44 +(@PATH,34,5769.666,596.1545,610.1359,0,0,1,0,100,0), -- 17:41:47 +(@PATH,35,5779.668,590.0027,610.0217,0,0,1,0,100,0), -- 17:41:48 +(@PATH,36,5780.418,588.7527,609.5217,0,0,1,0,100,0), -- 17:41:48 +(@PATH,37,5782.172,585.9805,609.6359,0,0,1,0,100,0), -- 17:41:50 +(@PATH,38,5784.172,588.9805,609.6359,0,0,1,0,100,0), -- 17:41:50 +(@PATH,39,5784.672,589.7305,609.6359,0,0,1,0,100,0), -- 17:41:50 +(@PATH,40,5786.422,592.7305,610.1359,0,0,1,0,100,0), -- 17:41:50 +(@PATH,41,5788.172,595.2305,610.1359,0,0,1,0,100,0), -- 17:41:50 +(@PATH,42,5789.422,597.2305,610.1359,0,0,1,0,100,0), -- 17:41:50 +(@PATH,43,5791.422,599.9805,610.1359,0,0,1,0,100,0), -- 17:41:50 +(@PATH,44,5792.814,602.571,610.0217,0,0,1,0,100,0), -- 17:41:54 +(@PATH,45,5793.564,605.321,610.0217,0,0,1,0,100,0), -- 17:41:54 +(@PATH,46,5794.814,608.821,610.0217,0,0,1,0,100,0), -- 17:41:54 +(@PATH,47,5795.814,612.571,609.5217,0,0,1,0,100,0), -- 17:41:54 +(@PATH,48,5796.314,614.821,609.5217,0,0,1,0,100,0), -- 17:41:54 +(@PATH,49,5797.296,616.8961,609.5619,0,0,1,0,100,0), -- 17:41:58 +(@PATH,50,5800.046,619.1461,609.5619,0,0,1,0,100,0), -- 17:41:58 +(@PATH,51,5802.796,621.1461,609.5619,0,0,1,0,100,0), -- 17:41:58 +(@PATH,52,5804.796,622.6461,610.0619,0,0,1,0,100,0), -- 17:41:58 +(@PATH,53,5807.046,624.6461,610.0619,0,0,1,0,100,0), -- 17:41:58 +(@PATH,54,5809.546,626.3961,610.0619,0,0,1,0,100,0), -- 17:41:58 +(@PATH,55,5813.885,631.6583,610.1359,0,0,1,0,100,0), -- 17:42:02 +(@PATH,56,5814.885,632.6583,610.1359,0,0,1,0,100,0), -- 17:42:02 +(@PATH,57,5816.79,635.3191,610.0217,0,0,1,0,100,0), -- 17:42:03 +(@PATH,58,5818.29,638.0691,610.0217,0,0,1,0,100,0), -- 17:42:03 +(@PATH,59,5821.54,644.0691,610.0217,0,0,1,0,100,0), -- 17:42:03 +(@PATH,60,5822.54,646.3191,609.5217,0,0,1,0,100,0), -- 17:42:03 +(@PATH,61,5823.54,648.3191,609.5217,0,0,1,0,100,0), -- 17:42:03 +(@PATH,62,5823.962,648.8779,609.6245,0,0,1,0,100,0), -- 17:42:06 +(@PATH,63,5827.962,654.3779,609.6245,0,0,1,0,100,0), -- 17:42:06 +(@PATH,64,5828.962,655.6279,610.1245,0,0,1,0,100,0), -- 17:42:06 +(@PATH,65,5835.354,659.7132,610.0316,0,0,1,0,100,0), -- 17:42:09 +(@PATH,66,5829.279,655.8999,610.0217,0,0,1,0,100,0), -- 17:42:12 +(@PATH,67,5828.279,654.3999,609.5217,0,0,1,0,100,0), -- 17:42:12 +(@PATH,68,5816.525,665.3367,610.0217,0,0,1,0,100,0), -- 17:42:12 +(@PATH,69,5815.275,664.3367,609.5217,0,0,1,0,100,0), -- 17:42:12 +(@PATH,70,5821.443,644.0874,610.0221,0,0,1,0,100,0), -- 17:42:15 +(@PATH,71,5818.443,638.0874,610.0221,0,0,1,0,100,0), -- 17:42:15 +(@PATH,72,5814.938,632.898,610.1369,0,0,1,0,100,0), -- 17:42:17 +(@PATH,73,5814.188,631.898,610.1369,0,0,1,0,100,0), -- 17:42:17 +(@PATH,74,5807.222,624.6782,610.0217,0,0,1,0,100,0), -- 17:42:20 +(@PATH,75,5804.972,622.9282,610.0217,0,0,1,0,100,0), -- 17:42:20 +(@PATH,76,5802.972,621.4282,609.5217,0,0,1,0,100,0), -- 17:42:20 +(@PATH,77,5800.222,619.1782,609.5217,0,0,1,0,100,0), -- 17:42:20 +(@PATH,78,5797.37,616.6953,609.5106,0,0,1,0,100,0), -- 17:42:22 +(@PATH,79,5796.62,614.6953,609.5106,0,0,1,0,100,0), -- 17:42:22 +(@PATH,80,5796.37,613.4453,609.5106,0,0,1,0,100,0), -- 17:42:22 +(@PATH,81,5794.87,609.1953,610.0106,0,0,1,0,100,0), -- 17:42:22 +(@PATH,82,5793.87,605.1953,610.0106,0,0,1,0,100,0), -- 17:42:22 +(@PATH,83,5791.352,600.0093,610.0248,0,0,1,0,100,0), -- 17:42:26 +(@PATH,84,5789.602,597.2593,610.0248,0,0,1,0,100,0), -- 17:42:26 +(@PATH,85,5788.102,595.2593,610.0248,0,0,1,0,100,0), -- 17:42:26 +(@PATH,86,5786.602,592.7593,610.0248,0,0,1,0,100,0), -- 17:42:26 +(@PATH,87,5784.602,589.7593,609.5248,0,0,1,0,100,0), -- 17:42:26 +(@PATH,88,5784.102,589.0093,609.5248,0,0,1,0,100,0), -- 17:42:26 +(@PATH,89,5781.995,586.1212,609.5032,0,0,1,0,100,0), -- 17:42:30 +(@PATH,90,5780.495,588.8712,609.5032,0,0,1,0,100,0), -- 17:42:30 +(@PATH,91,5779.745,590.1212,610.0032,0,0,1,0,100,0), -- 17:42:30 +(@PATH,92,5777.245,594.3712,610.0032,0,0,1,0,100,0), -- 17:42:30 +(@PATH,93,5769.974,595.9542,610.1404,0,0,1,0,100,0), -- 17:42:32 +(@PATH,94,5768.724,595.7042,610.1404,0,0,1,0,100,0), -- 17:42:32 +(@PATH,95,5767.407,595.5968,610.1359,0,0,1,0,100,0), -- 17:42:35 +(@PATH,96,5763.157,601.5968,610.1359,0,0,1,0,100,0), -- 17:42:35 +(@PATH,97,5762.924,602.3074,610.1359,0,0,1,0,100,0), -- 17:42:36 +(@PATH,98,5763.78,614.1101,610.1359,0,0,1,0,100,0), -- 17:42:37 +(@PATH,99,5764.873,615.9689,610.1359,0,0,1,0,100,0), -- 17:42:38 +(@PATH,100,5766.873,613.2189,610.1359,0,0,1,0,100,0), -- 17:42:38 +(@PATH,101,5784.897,621.7813,610.0217,0,0,1,0,100,0), -- 17:42:43 +(@PATH,102,5785.397,623.5313,609.5217,0,0,1,0,100,0), -- 17:42:43 +(@PATH,103,5786.147,626.2813,609.5217,0,0,1,0,100,0), -- 17:42:43 +(@PATH,104,5786.897,629.0313,609.5217,0,0,1,0,100,0), -- 17:42:43 +(@PATH,105,5786.155,626.5582,609.6359,0,0,1,0,100,0), -- 17:42:49 +(@PATH,106,5786.905,629.0582,609.6359,0,0,1,0,100,0), -- 17:42:49 +(@PATH,107,5786.905,629.5582,609.6359,0,0,1,0,100,0), -- 17:42:49 +(@PATH,108,5787.155,632.0582,609.6359,0,0,1,0,100,0), -- 17:42:49 +(@PATH,109,5787.405,634.3082,610.1359,0,0,1,0,100,0), -- 17:42:49 +(@PATH,110,5790,642.3279,609.9437,0,0,1,0,100,0), -- 17:42:52 +(@PATH,111,5794.055,646.8982,610.1359,0,0,1,0,100,0), -- 17:42:53 +(@PATH,112,5797.555,650.6482,610.1359,0,0,1,0,100,0), -- 17:42:53 +(@PATH,113,5799.555,652.6482,610.1359,0,0,1,0,100,0), -- 17:42:53 +(@PATH,114,5801.444,654.5395,610.1359,0,0,1,0,100,0), -- 17:42:56 +(@PATH,115,5806.444,653.7895,610.1359,0,0,1,0,100,0), -- 17:42:56 +(@PATH,116,5807.512,653.4955,610.1359,0,0,1,0,100,0), -- 17:42:57 +(@PATH,117,5812.512,651.2455,610.1359,0,0,1,0,100,0), -- 17:42:57 +(@PATH,118,5815.426,653.1886,610.1359,0,0,1,0,100,0), -- 17:42:59 +(@PATH,119,5815.426,654.9386,609.6359,0,0,1,0,100,0), -- 17:42:59 +(@PATH,120,5815.676,663.6886,609.6359,0,0,1,0,100,0), -- 17:42:59 +(@PATH,121,5815.676,665.9386,610.1359,0,0,1,0,100,0), -- 17:42:59 +(@PATH,122,5815.676,667.6886,610.1359,0,0,1,0,100,0), -- 17:42:59 +(@PATH,123,5816.03,668.0648,610.0238,0,0,1,0,100,0), -- 17:43:03 +(@PATH,124,5816.03,670.0648,610.0238,0,0,1,0,100,0), -- 17:43:03 +(@PATH,125,5816.53,672.0648,610.0238,0,0,1,0,100,0), -- 17:43:03 +(@PATH,126,5817.53,678.0648,610.0238,0,0,1,0,100,0), -- 17:43:03 +(@PATH,127,5821.502,681.4215,610.1359,0,0,1,0,100,0), -- 17:43:05 +(@PATH,128,5835.538,690.3898,610.0217,0,0,1,0,100,0), -- 17:43:08 +(@PATH,129,5836.288,691.6398,609.5217,0,0,1,0,100,0), -- 17:43:08 +(@PATH,130,5849.831,706.8584,609.4108,0,0,1,0,100,0), -- 17:43:13 +(@PATH,131,5855.265,709.8666,609.4075,0,0,1,0,100,0), -- 17:43:15 +(@PATH,132,5866.013,703.9492,609.4075,0,0,1,0,100,0), -- 17:43:16 +(@PATH,133,5873.884,695.3582,609.4075,0,0,1,0,100,0), -- 17:43:19 +(@PATH,134,5874.632,694.2865,609.4949,0,0,1,0,100,0), -- 17:43:20 +(@PATH,135,5874.84,689.0822,609.9387,0,0,1,0,100,0), -- 17:43:21 +(@PATH,136,5874.09,687.0822,610.9387,0,0,1,0,100,0), -- 17:43:21 +(@PATH,137,5873.47,685.0145,610.9896,0,0,1,0,100,0), -- 17:43:23 +(@PATH,138,5871.47,683.0145,610.7396,0,0,1,0,100,0), -- 17:43:23 +(@PATH,139,5866.97,678.2645,610.9896,0,0,1,0,100,0), -- 17:43:23 +(@PATH,140,5865.97,677.2645,610.9896,0,0,1,0,100,0), -- 17:43:23 +(@PATH,141,5864.548,676.2894,610.9425,0,0,1,0,100,0), -- 17:43:25 +(@PATH,142,5863.548,676.5394,610.9425,0,0,1,0,100,0), -- 17:43:25 +(@PATH,143,5859.548,677.2894,610.1925,0,0,1,0,100,0), -- 17:43:25 +(@PATH,144,5848.772,675.0753,610.0875,0,0,1,0,100,0), -- 17:43:28 +(@PATH,145,5847.37,674.7904,610.0217,0,0,1,0,100,0), -- 17:43:29 +(@PATH,146,5844.12,673.7904,610.0217,0,0,1,0,100,0), -- 17:43:29 +(@PATH,147,5839.478,672.2452,610.1381,0,0,1,0,100,0), -- 17:43:30 +(@PATH,148,5839.478,669.2452,610.1381,0,0,1,0,100,0), -- 17:43:30 +(@PATH,149,5839.478,663.7452,610.1381,0,0,1,0,100,0), -- 17:43:30 +(@PATH,150,5839.195,669.4826,610.1359,0,0,1,0,100,0), -- 17:43:34 +(@PATH,151,5843.771,673.7661,610.1359,0,0,1,0,100,0), -- 17:43:35 +(@PATH,152,5846.521,674.7661,610.1359,0,0,1,0,100,0), -- 17:43:35 +(@PATH,153,5847.64,674.8135,610.0217,0,0,1,0,100,0), -- 17:43:36 +(@PATH,154,5848.64,674.8135,610.0217,0,0,1,0,100,0), -- 17:43:36 +(@PATH,155,5849.89,674.8135,609.5217,0,0,1,0,100,0), -- 17:43:36 +(@PATH,156,5866.708,676.1121,609.4492,0,0,1,0,100,0), -- 17:43:39 +(@PATH,157,5866.708,675.6121,609.4492,0,0,1,0,100,0), -- 17:43:39 +(@PATH,158,5864.833,676.2982,610.9387,0,0,1,0,100,0), -- 17:43:41 +(@PATH,159,5865.833,677.2982,610.9387,0,0,1,0,100,0), -- 17:43:41 +(@PATH,160,5866.833,678.2982,610.9387,0,0,1,0,100,0), -- 17:43:41 +(@PATH,161,5871.583,683.0482,610.9387,0,0,1,0,100,0), -- 17:43:41 +(@PATH,162,5874.132,686.8735,610.9503,0,0,1,0,100,0), -- 17:43:44 +(@PATH,163,5874.632,687.8735,610.4503,0,0,1,0,100,0), -- 17:43:44 +(@PATH,164,5875.144,689.2743,609.9451,0,0,1,0,100,0), -- 17:43:45 +(@PATH,165,5876.144,690.5243,609.6951,0,0,1,0,100,0), -- 17:43:45 +(@PATH,166,5874.644,694.2743,609.6951,0,0,1,0,100,0), -- 17:43:45 +(@PATH,167,5873.894,695.0243,609.6951,0,0,1,0,100,0), -- 17:43:45 +(@PATH,168,5866.658,703.6503,609.4075,0,0,1,0,100,0), -- 17:43:47 +(@PATH,169,5860.372,704.5635,609.4075,0,0,1,0,100,0); -- 17:43:50 + +-- Pathing for Underbelly Rat Entry: 32428 'TDB FORMAT' +SET @NPC := 112318; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5812.506,`position_y`=725.5436,`position_z`=624.4396 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5812.506,725.5436,624.4396,0,0,1,0,100,0), -- 17:45:05 +(@PATH,2,5811.401,724.5404,624.3019,0,0,1,0,100,0), -- 17:45:07 +(@PATH,3,5809.651,723.5404,623.8019,0,0,1,0,100,0), -- 17:45:07 +(@PATH,4,5805.687,715.0458,619.4795,0,0,1,0,100,0), -- 17:45:09 +(@PATH,5,5805.306,711.5175,619.0914,0,0,1,0,100,0), -- 17:45:10 +(@PATH,6,5805.056,711.0175,619.0914,0,0,1,0,100,0), -- 17:45:10 +(@PATH,7,5803.806,710.2675,619.3414,0,0,1,0,100,0), -- 17:45:10 +(@PATH,8,5798.439,709.6013,619.4612,0,0,1,0,100,0), -- 17:45:11 +(@PATH,9,5796.939,708.1013,619.7112,0,0,1,0,100,0), -- 17:45:11 +(@PATH,10,5796.189,707.3513,619.7112,0,0,1,0,100,0), -- 17:45:11 +(@PATH,11,5796.251,707.1489,619.6675,0,0,1,0,100,0), -- 17:45:12 +(@PATH,12,5794.501,705.6489,619.6675,0,0,1,0,100,0), -- 17:45:12 +(@PATH,13,5795.787,700.2144,619.2513,0,0,1,0,100,0), -- 17:45:14 +(@PATH,14,5796.287,698.9644,619.2513,0,0,1,0,100,0), -- 17:45:14 +(@PATH,15,5797.537,695.4644,619.0013,0,0,1,0,100,0), -- 17:45:14 +(@PATH,16,5798.287,692.4644,619.0013,0,0,1,0,100,0), -- 17:45:14 +(@PATH,17,5799.037,690.9644,619.2513,0,0,1,0,100,0), -- 17:45:14 +(@PATH,18,5799.537,689.4644,619.2513,0,0,1,0,100,0), -- 17:45:14 +(@PATH,19,5799.536,689.3114,619.3141,0,0,1,0,100,0), -- 17:45:16 +(@PATH,20,5800.036,688.0614,619.3141,0,0,1,0,100,0), -- 17:45:16 +(@PATH,21,5798.786,687.0614,619.3141,0,0,1,0,100,0), -- 17:45:16 +(@PATH,22,5794.159,683.7436,619.2207,0,0,1,0,100,0), -- 17:45:17 +(@PATH,23,5792.909,683.2436,619.2207,0,0,1,0,100,0), -- 17:45:17 +(@PATH,24,5791.659,682.7436,619.2207,0,0,1,0,100,0), -- 17:45:17 +(@PATH,25,5791.753,682.5482,619.214,0,0,1,0,100,0), -- 17:45:19 +(@PATH,26,5791.253,682.2982,618.964,0,0,1,0,100,0), -- 17:45:19 +(@PATH,27,5789.503,680.2982,618.964,0,0,1,0,100,0), -- 17:45:19 +(@PATH,28,5788.781,677.8862,619.2213,0,0,1,0,100,0), -- 17:45:20 +(@PATH,29,5789.031,675.3862,619.2213,0,0,1,0,100,0), -- 17:45:20 +(@PATH,30,5786.781,671.8862,619.2213,0,0,1,0,100,0), -- 17:45:20 +(@PATH,31,5785.09,669.5923,619.22,0,0,1,0,100,0), -- 17:45:21 +(@PATH,32,5782.34,670.0923,619.22,0,0,1,0,100,0), -- 17:45:21 +(@PATH,33,5781.488,670.0141,619.1985,0,0,1,0,100,0), -- 17:45:22 +(@PATH,34,5778.738,667.5141,618.9485,0,0,1,0,100,0), -- 17:45:22 +(@PATH,35,5776.889,665.7174,619.0254,0,0,1,0,100,0), -- 17:45:23 +(@PATH,36,5771.591,666.1527,618.715,0,0,1,0,100,0), -- 17:45:25 +(@PATH,37,5769.591,664.6527,618.715,0,0,1,0,100,0), -- 17:45:25 +(@PATH,38,5764.23,657.7101,618.679,0,0,1,0,100,0), -- 17:45:26 +(@PATH,39,5763.645,656.9364,618.9661,0,0,1,0,100,0), -- 17:45:27 +(@PATH,40,5762.145,655.9364,618.7161,0,0,1,0,100,0), -- 17:45:27 +(@PATH,41,5761.145,654.9364,618.7161,0,0,1,0,100,0), -- 17:45:27 +(@PATH,42,5759.645,653.9364,618.4661,0,0,1,0,100,0), -- 17:45:27 +(@PATH,43,5757.645,652.4364,618.4661,0,0,1,0,100,0), -- 17:45:27 +(@PATH,44,5758.634,650.1743,617.9124,0,0,1,0,100,0), -- 17:45:30 +(@PATH,45,5759.384,649.6743,617.6624,0,0,1,0,100,0), -- 17:45:30 +(@PATH,46,5760.884,648.9243,617.9124,0,0,1,0,100,0), -- 17:45:30 +(@PATH,47,5765.302,645.7458,617.7252,0,0,1,0,100,0), -- 17:45:31 +(@PATH,48,5766.552,645.2458,617.7252,0,0,1,0,100,0), -- 17:45:31 +(@PATH,49,5771.302,643.4958,617.7252,0,0,1,0,100,0), -- 17:45:31 +(@PATH,50,5772.802,642.7458,617.4752,0,0,1,0,100,0), -- 17:45:31 +(@PATH,51,5773.302,642.4958,617.4752,0,0,1,0,100,0), -- 17:45:31 +(@PATH,52,5774.802,640.9958,616.4752,0,0,1,0,100,0), -- 17:45:31 +(@PATH,53,5775.896,637.9182,614.7648,0,0,1,0,100,0), -- 17:45:34 +(@PATH,54,5777.396,635.9182,613.0148,0,0,1,0,100,0), -- 17:45:34 +(@PATH,55,5781.486,634.472,611.2208,0,0,1,0,100,0), -- 17:45:36 +(@PATH,56,5782.236,634.472,610.4708,0,0,1,0,100,0), -- 17:45:36 +(@PATH,57,5783.486,634.472,609.4708,0,0,1,0,100,0), -- 17:45:36 +(@PATH,58,5785.486,634.722,609.4708,0,0,1,0,100,0), -- 17:45:36 +(@PATH,59,5783.877,634.4684,609.5891,0,0,1,0,100,0), -- 17:45:37 +(@PATH,60,5785.627,634.7184,609.5891,0,0,1,0,100,0), -- 17:45:37 +(@PATH,61,5787.377,634.7184,610.3391,0,0,1,0,100,0), -- 17:45:37 +(@PATH,62,5791.627,635.2184,610.3391,0,0,1,0,100,0), -- 17:45:37 +(@PATH,63,5792.804,635.6805,610.0217,0,0,1,0,100,0), -- 17:45:38 +(@PATH,64,5804.054,638.4305,610.0217,0,0,1,0,100,0), -- 17:45:38 +(@PATH,65,5808.587,639.6121,610.1359,0,0,1,0,100,0), -- 17:45:41 +(@PATH,66,5816.692,643.6942,610.1359,0,0,1,0,100,0), -- 17:45:43 +(@PATH,67,5822.68,639.5682,609.7672,0,0,1,0,100,0), -- 17:45:45 +(@PATH,68,5823.43,639.5682,610.0172,0,0,1,0,100,0), -- 17:45:45 +(@PATH,69,5825.18,639.8182,610.0172,0,0,1,0,100,0), -- 17:45:45 +(@PATH,70,5824.43,638.3182,610.0172,0,0,1,0,100,0), -- 17:45:45 +(@PATH,71,5824.57,638.2134,610.1077,0,0,1,0,100,0), -- 17:45:47 +(@PATH,72,5823.57,636.9634,611.1077,0,0,1,0,100,0), -- 17:45:47 +(@PATH,73,5823.57,634.9634,611.6077,0,0,1,0,100,0), -- 17:45:47 +(@PATH,74,5824.07,633.7134,612.3577,0,0,1,0,100,0), -- 17:45:47 +(@PATH,75,5824.662,632.4669,612.8602,0,0,1,0,100,0), -- 17:45:48 +(@PATH,76,5826.162,630.2169,614.1102,0,0,1,0,100,0), -- 17:45:48 +(@PATH,77,5826.912,628.9669,614.8602,0,0,1,0,100,0), -- 17:45:48 +(@PATH,78,5827.492,628.314,614.7683,0,0,1,0,100,0), -- 17:45:49 +(@PATH,79,5828.242,627.314,615.2683,0,0,1,0,100,0), -- 17:45:49 +(@PATH,80,5828.742,626.064,616.0183,0,0,1,0,100,0), -- 17:45:49 +(@PATH,81,5829.492,624.314,616.0183,0,0,1,0,100,0), -- 17:45:49 +(@PATH,82,5830.492,622.564,616.2683,0,0,1,0,100,0), -- 17:45:49 +(@PATH,83,5829.866,624.0173,616.4043,0,0,1,0,100,0), -- 17:45:50 +(@PATH,84,5830.366,622.7673,616.6543,0,0,1,0,100,0), -- 17:45:50 +(@PATH,85,5832.866,624.2673,616.9043,0,0,1,0,100,0), -- 17:45:50 +(@PATH,86,5832.366,622.5173,617.4043,0,0,1,0,100,0), -- 17:45:50 +(@PATH,87,5832.366,621.2673,617.9043,0,0,1,0,100,0), -- 17:45:50 +(@PATH,88,5832.433,621.1912,618.1343,0,0,1,0,100,0), -- 17:45:52 +(@PATH,89,5832.183,618.6912,619.1343,0,0,1,0,100,0), -- 17:45:52 +(@PATH,90,5832.433,615.6912,620.8843,0,0,1,0,100,0), -- 17:45:52 +(@PATH,91,5832.683,614.6912,621.3843,0,0,1,0,100,0), -- 17:45:52 +(@PATH,92,5833.433,611.1912,622.1343,0,0,1,0,100,0), -- 17:45:52 +(@PATH,93,5833.683,609.6912,621.8843,0,0,1,0,100,0), -- 17:45:52 +(@PATH,94,5833.704,609.4901,622.2904,0,0,1,0,100,0), -- 17:45:54 +(@PATH,95,5833.954,607.4901,622.2904,0,0,1,0,100,0), -- 17:45:54 +(@PATH,96,5833.954,606.2401,622.5404,0,0,1,0,100,0), -- 17:45:54 +(@PATH,97,5833.704,600.7401,623.2904,0,0,1,0,100,0), -- 17:45:54 +(@PATH,98,5833.454,599.4901,624.0404,0,0,1,0,100,0), -- 17:45:54 +(@PATH,99,5833.538,598.366,623.9922,0,0,1,0,100,0), -- 17:45:56 +(@PATH,100,5832.038,596.866,624.4922,0,0,1,0,100,0), -- 17:45:56 +(@PATH,101,5830.538,595.116,624.7422,0,0,1,0,100,0), -- 17:45:56 +(@PATH,102,5828.975,593.5865,624.9868,0,0,1,0,100,0), -- 17:45:58 +(@PATH,103,5826.725,591.3365,625.4868,0,0,1,0,100,0), -- 17:45:58 +(@PATH,104,5825.521,588.7355,625.7487,0,0,1,0,100,0), -- 17:45:59 +(@PATH,105,5825.271,587.4855,625.9987,0,0,1,0,100,0), -- 17:45:59 +(@PATH,106,5822.575,582.8594,626.4241,0,0,1,0,100,0), -- 17:46:01 +(@PATH,107,5815.441,579.615,627.5906,0,0,1,0,100,0), -- 17:46:02 +(@PATH,108,5814.441,578.865,627.8406,0,0,1,0,100,0), -- 17:46:02 +(@PATH,109,5812.545,576.4588,628.457,0,0,1,0,100,0), -- 17:46:03 +(@PATH,110,5811.545,574.7088,628.707,0,0,1,0,100,0), -- 17:46:03 +(@PATH,111,5810.408,571.4939,629.276,0,0,1,0,100,0), -- 17:46:04 +(@PATH,112,5804.017,568.0781,629.6204,0,0,1,0,100,0), -- 17:46:06 +(@PATH,113,5803.017,566.5781,629.8704,0,0,1,0,100,0), -- 17:46:06 +(@PATH,114,5803.129,566.3809,629.8486,0,0,1,0,100,0), -- 17:46:07 +(@PATH,115,5801.879,564.8809,629.8486,0,0,1,0,100,0), -- 17:46:07 +(@PATH,116,5801.879,563.1309,629.8486,0,0,1,0,100,0), -- 17:46:07 +(@PATH,117,5801.629,561.8809,629.8486,0,0,1,0,100,0), -- 17:46:07 +(@PATH,118,5801.365,560.2042,630.7414,0,0,1,0,100,0), -- 17:46:08 +(@PATH,119,5796.325,553.0746,634.724,0,0,1,0,100,0), -- 17:46:09 +(@PATH,120,5793.369,549.6201,634.8419,0,0,1,0,100,0), -- 17:46:10 +(@PATH,121,5792.119,548.8701,634.8419,0,0,1,0,100,0), -- 17:46:10 +(@PATH,122,5791.119,548.3701,634.8419,0,0,1,0,100,0), -- 17:46:10 +(@PATH,123,5788.369,546.6201,636.8419,0,0,1,0,100,0), -- 17:46:10 +(@PATH,124,5785.869,545.1201,638.0919,0,0,1,0,100,0), -- 17:46:10 +(@PATH,125,5790.984,548.038,634.9894,0,0,1,0,100,0), -- 17:46:15 +(@PATH,126,5792.234,548.788,634.9894,0,0,1,0,100,0), -- 17:46:15 +(@PATH,127,5792.435,549.0204,634.8621,0,0,1,0,100,0), -- 17:46:17 +(@PATH,128,5793.435,549.7704,634.8621,0,0,1,0,100,0), -- 17:46:17 +(@PATH,129,5795.435,552.0204,634.8621,0,0,1,0,100,0), -- 17:46:17 +(@PATH,130,5796.685,553.2704,635.1121,0,0,1,0,100,0), -- 17:46:17 +(@PATH,131,5796.966,553.6017,634.8666,0,0,1,0,100,0), -- 17:46:18 +(@PATH,132,5797.216,554.1017,634.3666,0,0,1,0,100,0), -- 17:46:18 +(@PATH,133,5801.743,562.6663,630.2207,0,0,1,0,100,0), -- 17:46:20 +(@PATH,134,5801.743,564.9163,630.2207,0,0,1,0,100,0), -- 17:46:20 +(@PATH,135,5802.493,565.9163,630.2207,0,0,1,0,100,0), -- 17:46:20 +(@PATH,136,5804.158,567.8349,629.5902,0,0,1,0,100,0), -- 17:46:21 +(@PATH,137,5810.48,571.2711,629.313,0,0,1,0,100,0), -- 17:46:23 +(@PATH,138,5812.102,575.7954,628.5873,0,0,1,0,100,0), -- 17:46:24 +(@PATH,139,5812.102,576.5454,628.3373,0,0,1,0,100,0), -- 17:46:24 +(@PATH,140,5814.352,578.7954,628.0873,0,0,1,0,100,0), -- 17:46:24 +(@PATH,141,5814.542,578.6766,628.0162,0,0,1,0,100,0), -- 17:46:25 +(@PATH,142,5815.292,579.6766,627.7662,0,0,1,0,100,0), -- 17:46:25 +(@PATH,143,5816.792,579.6766,627.7662,0,0,1,0,100,0), -- 17:46:25 +(@PATH,144,5822.438,582.6847,626.7626,0,0,1,0,100,0), -- 17:46:26 +(@PATH,145,5823.438,583.9347,626.5126,0,0,1,0,100,0), -- 17:46:26 +(@PATH,146,5824.323,584.9958,626.1263,0,0,1,0,100,0), -- 17:46:27 +(@PATH,147,5825.073,587.2458,626.1263,0,0,1,0,100,0), -- 17:46:27 +(@PATH,148,5825.323,588.4958,626.1263,0,0,1,0,100,0), -- 17:46:27 +(@PATH,149,5826.115,590.5767,625.4272,0,0,1,0,100,0), -- 17:46:29 +(@PATH,150,5831.021,605.7319,623.0287,0,0,1,0,100,0), -- 17:46:29 +(@PATH,151,5829.021,599.4819,624.0287,0,0,1,0,100,0), -- 17:46:29 +(@PATH,152,5828.021,595.7319,624.5287,0,0,1,0,100,0), -- 17:46:29 +(@PATH,153,5827.271,592.9819,624.7787,0,0,1,0,100,0), -- 17:46:29 +(@PATH,154,5826.521,590.9819,625.5287,0,0,1,0,100,0), -- 17:46:29 +(@PATH,155,5831.989,596.5863,624.5801,0,0,1,0,100,0), -- 17:46:30 +(@PATH,156,5833.593,600.676,623.2581,0,0,1,0,100,0), -- 17:46:31 +(@PATH,157,5833.843,605.926,622.7581,0,0,1,0,100,0), -- 17:46:31 +(@PATH,158,5833.962,607.8434,622.0533,0,0,1,0,100,0), -- 17:46:32 +(@PATH,159,5833.712,609.3434,621.8033,0,0,1,0,100,0), -- 17:46:32 +(@PATH,160,5833.462,610.3434,622.0533,0,0,1,0,100,0), -- 17:46:32 +(@PATH,161,5832.712,614.5934,621.5533,0,0,1,0,100,0), -- 17:46:32 +(@PATH,162,5832.712,615.5934,621.0533,0,0,1,0,100,0), -- 17:46:32 +(@PATH,163,5832.212,618.0934,619.8033,0,0,1,0,100,0), -- 17:46:32 +(@PATH,164,5832.256,618.2179,619.4556,0,0,1,0,100,0), -- 17:46:35 +(@PATH,165,5832.006,618.7179,619.2056,0,0,1,0,100,0), -- 17:46:35 +(@PATH,166,5832.506,620.9679,618.2056,0,0,1,0,100,0), -- 17:46:35 +(@PATH,167,5832.756,622.4679,617.7056,0,0,1,0,100,0), -- 17:46:35 +(@PATH,168,5832.239,621.2859,617.7874,0,0,1,0,100,0), -- 17:46:36 +(@PATH,169,5832.489,622.5359,617.5374,0,0,1,0,100,0), -- 17:46:36 +(@PATH,170,5832.739,624.2859,617.0374,0,0,1,0,100,0), -- 17:46:36 +(@PATH,171,5832.239,624.5359,616.5374,0,0,1,0,100,0), -- 17:46:36 +(@PATH,172,5830.989,625.5359,616.2874,0,0,1,0,100,0), -- 17:46:36 +(@PATH,173,5829.739,626.7859,616.0374,0,0,1,0,100,0), -- 17:46:36 +(@PATH,174,5828.739,627.5359,615.5374,0,0,1,0,100,0), -- 17:46:36 +(@PATH,175,5826.31,630.0842,614.1038,0,0,1,0,100,0), -- 17:46:38 +(@PATH,176,5825.06,631.8342,613.3538,0,0,1,0,100,0), -- 17:46:38 +(@PATH,177,5824.81,632.0842,613.1038,0,0,1,0,100,0), -- 17:46:38 +(@PATH,178,5824.31,633.3342,612.6038,0,0,1,0,100,0), -- 17:46:38 +(@PATH,179,5824.213,633.7821,612.4078,0,0,1,0,100,0), -- 17:46:40 +(@PATH,180,5823.713,634.7821,611.6578,0,0,1,0,100,0), -- 17:46:40 +(@PATH,181,5824.463,636.7821,611.1578,0,0,1,0,100,0), -- 17:46:40 +(@PATH,182,5823.713,638.2821,610.6578,0,0,1,0,100,0), -- 17:46:40 +(@PATH,183,5825.163,639.6008,610.0427,0,0,1,0,100,0), -- 17:46:41 +(@PATH,184,5823.413,639.3508,610.0427,0,0,1,0,100,0), -- 17:46:41 +(@PATH,185,5822.913,639.3508,609.7927,0,0,1,0,100,0), -- 17:46:41 +(@PATH,186,5821.913,640.8508,610.2927,0,0,1,0,100,0), -- 17:46:41 +(@PATH,187,5821.71,641.128,610.0275,0,0,1,0,100,0), -- 17:46:42 +(@PATH,188,5820.21,642.878,610.0275,0,0,1,0,100,0), -- 17:46:42 +(@PATH,189,5816.96,643.628,610.0275,0,0,1,0,100,0), -- 17:46:42 +(@PATH,190,5813.353,644.3413,610.1364,0,0,1,0,100,0), -- 17:46:43 +(@PATH,191,5804.18,638.688,610.1359,0,0,1,0,100,0), -- 17:46:45 +(@PATH,192,5792.854,635.4862,610.1309,0,0,1,0,100,0), -- 17:46:48 +(@PATH,193,5786.168,634.7509,609.4952,0,0,1,0,100,0), -- 17:46:49 +(@PATH,194,5783.918,634.5009,609.4952,0,0,1,0,100,0), -- 17:46:49 +(@PATH,195,5782.418,634.5009,610.4952,0,0,1,0,100,0), -- 17:46:49 +(@PATH,196,5781.418,634.5009,610.9952,0,0,1,0,100,0), -- 17:46:49 +(@PATH,197,5782.23,634.389,610.3091,0,0,1,0,100,0), -- 17:46:51 +(@PATH,198,5781.23,634.389,611.0591,0,0,1,0,100,0), -- 17:46:51 +(@PATH,199,5779.23,634.389,612.0591,0,0,1,0,100,0), -- 17:46:51 +(@PATH,200,5778.23,635.389,612.5591,0,0,1,0,100,0), -- 17:46:51 +(@PATH,201,5775.73,637.889,614.8091,0,0,1,0,100,0), -- 17:46:51 +(@PATH,202,5773.956,639.8704,616.4454,0,0,1,0,100,0), -- 17:46:53 +(@PATH,203,5772.456,641.3704,616.9454,0,0,1,0,100,0), -- 17:46:53 +(@PATH,204,5772.206,641.6204,617.1954,0,0,1,0,100,0), -- 17:46:53 +(@PATH,205,5771.206,642.3704,617.6954,0,0,1,0,100,0), -- 17:46:53 +(@PATH,206,5766.706,645.1204,617.6954,0,0,1,0,100,0), -- 17:46:53 +(@PATH,207,5761.375,648.278,617.9376,0,0,1,0,100,0), -- 17:46:56 +(@PATH,208,5759.875,649.278,617.6876,0,0,1,0,100,0), -- 17:46:56 +(@PATH,209,5758.625,650.278,617.9376,0,0,1,0,100,0), -- 17:46:56 +(@PATH,210,5757.67,652.2993,618.3185,0,0,1,0,100,0), -- 17:46:58 +(@PATH,211,5759.17,653.2993,618.3185,0,0,1,0,100,0), -- 17:46:58 +(@PATH,212,5760.92,654.5493,618.5685,0,0,1,0,100,0), -- 17:46:58 +(@PATH,213,5762.17,655.5493,618.8185,0,0,1,0,100,0), -- 17:46:58 +(@PATH,214,5763.629,656.9517,618.8355,0,0,1,0,100,0), -- 17:46:59 +(@PATH,215,5765.379,661.2017,618.8355,0,0,1,0,100,0), -- 17:46:59 +(@PATH,216,5769.263,664.3608,618.6702,0,0,1,0,100,0), -- 17:47:01 +(@PATH,217,5773.755,666.7302,618.8483,0,0,1,0,100,0), -- 17:47:02 +(@PATH,218,5774.306,667.0947,618.7543,0,0,1,0,100,0), -- 17:47:03 +(@PATH,219,5776.306,666.0947,618.7543,0,0,1,0,100,0), -- 17:47:03 +(@PATH,220,5776.556,665.8447,619.0043,0,0,1,0,100,0), -- 17:47:03 +(@PATH,221,5778.556,667.5947,619.0043,0,0,1,0,100,0), -- 17:47:03 +(@PATH,222,5781.24,670.0711,619.0645,0,0,1,0,100,0), -- 17:47:04 +(@PATH,223,5786.377,671.8536,619.2012,0,0,1,0,100,0), -- 17:47:06 +(@PATH,224,5788.669,677.6926,619.214,0,0,1,0,100,0), -- 17:47:07 +(@PATH,225,5788.669,678.9426,619.214,0,0,1,0,100,0), -- 17:47:07 +(@PATH,226,5788.923,679.4878,619.0298,0,0,1,0,100,0), -- 17:47:08 +(@PATH,227,5789.673,680.2378,619.0298,0,0,1,0,100,0), -- 17:47:08 +(@PATH,228,5791.423,682.4878,619.0298,0,0,1,0,100,0), -- 17:47:08 +(@PATH,229,5792.423,682.9878,619.2798,0,0,1,0,100,0), -- 17:47:08 +(@PATH,230,5794.02,683.6155,619.2227,0,0,1,0,100,0), -- 17:47:09 +(@PATH,231,5798.77,686.8655,619.2227,0,0,1,0,100,0), -- 17:47:09 +(@PATH,232,5799.506,689.4122,619.0743,0,0,1,0,100,0), -- 17:47:10 +(@PATH,233,5799.006,690.9122,619.0743,0,0,1,0,100,0), -- 17:47:10 +(@PATH,234,5798.506,692.1622,619.0743,0,0,1,0,100,0), -- 17:47:10 +(@PATH,235,5797.256,695.1622,619.0743,0,0,1,0,100,0), -- 17:47:10 +(@PATH,236,5796.256,698.1622,619.0743,0,0,1,0,100,0), -- 17:47:10 +(@PATH,237,5795.756,699.6622,619.3243,0,0,1,0,100,0), -- 17:47:10 +(@PATH,238,5795.712,700.3739,619.2347,0,0,1,0,100,0), -- 17:47:13 +(@PATH,239,5795.462,702.8739,619.2347,0,0,1,0,100,0), -- 17:47:13 +(@PATH,240,5796.152,707.1231,619.7043,0,0,1,0,100,0), -- 17:47:15 +(@PATH,241,5796.652,708.1231,619.7043,0,0,1,0,100,0), -- 17:47:15 +(@PATH,242,5797.652,709.1231,619.4543,0,0,1,0,100,0), -- 17:47:15 +(@PATH,243,5798.298,709.5776,619.3361,0,0,1,0,100,0), -- 17:47:16 +(@PATH,244,5800.298,709.3276,619.3361,0,0,1,0,100,0), -- 17:47:16 +(@PATH,245,5805.703,712.6086,619.0933,0,0,1,0,100,0), -- 17:47:17 +(@PATH,246,5805.453,714.8586,619.0933,0,0,1,0,100,0), -- 17:47:17 +(@PATH,247,5805.453,716.1086,619.0933,0,0,1,0,100,0), -- 17:47:17 +(@PATH,248,5805.642,716.5522,619.5599,0,0,1,0,100,0), -- 17:47:18 +(@PATH,249,5805.642,717.0522,619.5599,0,0,1,0,100,0), -- 17:47:18 +(@PATH,250,5812.082,724.9027,624.3082,0,0,1,0,100,0), -- 17:47:20 +(@PATH,251,5812.286,725.2038,624.2163,0,0,1,0,100,0); -- 17:47:21 + +-- Pathing for Underbelly Rat Entry: 32428 'TDB FORMAT' +SET @NPC := 112316; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5650.283,`position_y`=859.0229,`position_z`=571.1886 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5650.283,859.0229,571.1886,0,0,1,0,100,0), -- 16:14:32 +(@PATH,2,5653.515,856.0323,571.1707,0,0,1,0,100,0), -- 16:14:35 +(@PATH,3,5670.484,841.5376,582.4416,0,0,1,0,100,0), -- 16:14:37 +(@PATH,4,5687.539,826.0508,591.1404,0,0,1,0,100,0), -- 16:14:43 +(@PATH,5,5701.289,812.3008,593.8904,0,0,1,0,100,0), -- 16:14:43 +(@PATH,6,5704.789,808.8008,594.8904,0,0,1,0,100,0), -- 16:14:43 +(@PATH,7,5710.128,803.3888,596.3097,0,0,1,0,100,0), -- 16:14:52 +(@PATH,8,5723.128,792.1388,599.5597,0,0,1,0,100,0), -- 16:14:52 +(@PATH,9,5724.628,790.8888,600.5597,0,0,1,0,100,0), -- 16:14:52 +(@PATH,10,5733.628,782.8888,608.0597,0,0,1,0,100,0), -- 16:14:52 +(@PATH,11,5737.265,778.5158,611.3041,0,0,1,0,100,0), -- 16:14:59 +(@PATH,12,5742.015,772.2658,613.8041,0,0,1,0,100,0), -- 16:14:59 +(@PATH,13,5746.515,766.5158,617.0541,0,0,1,0,100,0), -- 16:14:59 +(@PATH,14,5750.793,762.6057,619.7878,0,0,1,0,100,0), -- 16:15:04 +(@PATH,15,5753.543,760.8557,619.5378,0,0,1,0,100,0), -- 16:15:04 +(@PATH,16,5763.043,755.6057,620.7878,0,0,1,0,100,0), -- 16:15:04 +(@PATH,17,5764.293,755.1057,621.0378,0,0,1,0,100,0), -- 16:15:04 +(@PATH,18,5769.043,752.3557,621.2878,0,0,1,0,100,0), -- 16:15:04 +(@PATH,19,5770.268,751.4404,621.4811,0,0,1,0,100,0), -- 16:15:09 +(@PATH,20,5776.518,745.4404,620.9811,0,0,1,0,100,0), -- 16:15:09 +(@PATH,21,5776.768,744.6904,620.7311,0,0,1,0,100,0), -- 16:15:09 +(@PATH,22,5778.323,743.4258,620.5052,0,0,1,0,100,0), -- 16:15:11 +(@PATH,23,5780.823,741.4258,619.5052,0,0,1,0,100,0), -- 16:15:11 +(@PATH,24,5782.027,740.5856,619.0101,0,0,1,0,100,0), -- 16:15:13 +(@PATH,25,5783.527,742.3356,619.0101,0,0,1,0,100,0), -- 16:15:13 +(@PATH,26,5779.737,745.7886,618.8125,0,0,1,0,100,0), -- 16:15:14 +(@PATH,27,5787.284,745.8883,618.6033,0,0,1,0,100,0), -- 16:15:15 +(@PATH,28,5790.284,743.3883,618.8533,0,0,1,0,100,0), -- 16:15:15 +(@PATH,29,5795.118,739.8246,618.873,0,0,1,0,100,0), -- 16:15:18 +(@PATH,30,5792.629,737.5529,618.8592,0,0,1,0,100,0), -- 16:15:19 +(@PATH,31,5783.301,728.3273,618.8666,0,0,1,0,100,0), -- 16:15:20 +(@PATH,32,5783.337,728.0176,618.8483,0,0,1,0,100,0), -- 16:15:21 +(@PATH,33,5781.837,727.0176,618.8483,0,0,1,0,100,0), -- 16:15:21 +(@PATH,34,5781.337,724.0176,618.8483,0,0,1,0,100,0), -- 16:15:21 +(@PATH,35,5780.837,722.5176,618.8483,0,0,1,0,100,0), -- 16:15:21 +(@PATH,36,5780.337,720.0176,618.8483,0,0,1,0,100,0), -- 16:15:21 +(@PATH,37,5779.337,716.2676,618.8483,0,0,1,0,100,0), -- 16:15:21 +(@PATH,38,5774.164,714.2116,618.8179,0,0,1,0,100,0), -- 16:15:25 +(@PATH,39,5772.414,714.4616,618.8179,0,0,1,0,100,0), -- 16:15:25 +(@PATH,40,5769.005,714.0853,618.8335,0,0,1,0,100,0), -- 16:15:26 +(@PATH,41,5763.755,714.0853,618.5835,0,0,1,0,100,0), -- 16:15:26 +(@PATH,42,5759.819,713.6582,618.7951,0,0,1,0,100,0), -- 16:15:29 +(@PATH,43,5759.069,712.9082,618.7951,0,0,1,0,100,0), -- 16:15:29 +(@PATH,44,5755.638,710.6156,618.8008,0,0,1,0,100,0), -- 16:15:30 +(@PATH,45,5746.335,704.4907,618.808,0,0,1,0,100,0), -- 16:15:31 +(@PATH,46,5750.018,702.1482,618.8112,0,0,1,0,100,0), -- 16:15:32 +(@PATH,47,5758.679,708.1224,618.7933,0,0,1,0,100,0), -- 16:15:35 +(@PATH,48,5760.795,704.0508,618.7969,0,0,1,0,100,0), -- 16:15:36 +(@PATH,49,5761.01,699.34,618.8027,0,0,1,0,100,0), -- 16:15:37 +(@PATH,50,5755.76,692.84,618.8027,0,0,1,0,100,0), -- 16:15:37 +(@PATH,51,5754.76,692.09,618.8027,0,0,1,0,100,0), -- 16:15:37 +(@PATH,52,5753.962,691.2664,618.8077,0,0,1,0,100,0), -- 16:15:40 +(@PATH,53,5748.369,690.7922,618.833,0,0,1,0,100,0), -- 16:15:41 +(@PATH,54,5747.619,690.0422,618.833,0,0,1,0,100,0), -- 16:15:41 +(@PATH,55,5747.197,689.2921,618.8251,0,0,1,0,100,0), -- 16:15:42 +(@PATH,56,5750.266,681.3962,618.9155,0,0,1,0,100,0), -- 16:15:43 +(@PATH,57,5749.266,682.6462,618.9155,0,0,1,0,100,0), -- 16:15:43 +(@PATH,58,5743.016,688.8962,613.9155,0,0,1,0,100,0), -- 16:15:43 +(@PATH,59,5738.654,689.4673,613.6896,0,0,1,0,100,0), -- 16:15:47 +(@PATH,60,5737.154,689.4673,613.6896,0,0,1,0,100,0), -- 16:15:47 +(@PATH,61,5736.978,686.3589,613.4945,0,0,1,0,100,0), -- 16:15:48 +(@PATH,62,5733.56,684.1531,613.4932,0,0,1,0,100,0), -- 16:15:49 +(@PATH,63,5730.135,677.58,613.4932,0,0,1,0,100,0), -- 16:15:51 +(@PATH,64,5726.457,675.5121,613.4932,0,0,1,0,100,0), -- 16:15:52 +(@PATH,65,5724.421,667.7317,613.4932,0,0,1,0,100,0), -- 16:15:53 +(@PATH,66,5727.515,664.7499,613.4932,0,0,1,0,100,0), -- 16:15:54 +(@PATH,67,5734.917,671.2552,613.4932,0,0,1,0,100,0), -- 16:15:57 +(@PATH,68,5749.247,678.9826,613.4949,0,0,1,0,100,0), -- 16:15:59 +(@PATH,69,5751.447,678.4545,613.4927,0,0,1,0,100,0), -- 16:16:02 +(@PATH,70,5751.198,678.1135,613.2466,0,0,1,0,100,0), -- 16:16:05 +(@PATH,71,5746.315,680.7532,613.4939,0,0,1,0,100,0), -- 16:16:07 +(@PATH,72,5743.315,682.0032,613.4939,0,0,1,0,100,0), -- 16:16:07 +(@PATH,73,5743.031,682.0266,613.4927,0,0,1,0,100,0), -- 16:16:08 +(@PATH,74,5742.531,682.2766,613.4927,0,0,1,0,100,0), -- 16:16:08 +(@PATH,75,5734.784,669.1796,613.4932,0,0,1,0,100,0), -- 16:16:12 +(@PATH,76,5724.512,667.5809,613.4932,0,0,1,0,100,0), -- 16:16:14 +(@PATH,77,5722.986,670.8528,613.4932,0,0,1,0,100,0), -- 16:16:15 +(@PATH,78,5728.049,675.2232,613.4932,0,0,1,0,100,0), -- 16:16:16 +(@PATH,79,5729.3,679.3695,613.4932,0,0,1,0,100,0), -- 16:16:18 +(@PATH,80,5733.373,684.2302,613.4932,0,0,1,0,100,0), -- 16:16:19 +(@PATH,81,5737.212,689.38,613.487,0,0,1,0,100,0), -- 16:16:20 +(@PATH,82,5738.462,689.38,613.487,0,0,1,0,100,0), -- 16:16:20 +(@PATH,83,5742.366,689.6543,613.689,0,0,1,0,100,0), -- 16:16:21 +(@PATH,84,5743.116,688.9043,613.939,0,0,1,0,100,0), -- 16:16:21 +(@PATH,85,5749.116,682.6543,618.689,0,0,1,0,100,0), -- 16:16:21 +(@PATH,86,5751.858,684.0981,618.7845,0,0,1,0,100,0), -- 16:16:24 +(@PATH,87,5751.939,684.1434,618.7609,0,0,1,0,100,0), -- 16:16:25 +(@PATH,88,5752.439,685.1434,618.7609,0,0,1,0,100,0), -- 16:16:25 +(@PATH,89,5748.244,690.5693,618.8226,0,0,1,0,100,0), -- 16:16:26 +(@PATH,90,5749.485,692.1129,618.8344,0,0,1,0,100,0), -- 16:16:27 +(@PATH,91,5755.502,692.8773,618.8097,0,0,1,0,100,0), -- 16:16:29 +(@PATH,92,5761.164,699.276,618.8109,0,0,1,0,100,0), -- 16:16:30 +(@PATH,93,5760.932,703.9943,618.8033,0,0,1,0,100,0), -- 16:16:31 +(@PATH,94,5762.46,706.2981,618.8008,0,0,1,0,100,0), -- 16:16:32 +(@PATH,95,5758.46,708.2981,618.8008,0,0,1,0,100,0), -- 16:16:32 +(@PATH,96,5756.85,709.1187,618.791,0,0,1,0,100,0), -- 16:16:34 +(@PATH,97,5750.122,702.084,618.8142,0,0,1,0,100,0), -- 16:16:35 +(@PATH,98,5746.29,704.5815,618.8041,0,0,1,0,100,0), -- 16:16:36 +(@PATH,99,5759.648,713.4418,618.8074,0,0,1,0,100,0), -- 16:16:39 +(@PATH,100,5759.953,713.6576,618.5587,0,0,1,0,100,0), -- 16:16:40 +(@PATH,101,5760.703,714.1576,618.8087,0,0,1,0,100,0), -- 16:16:40 +(@PATH,102,5763.453,714.1576,618.8087,0,0,1,0,100,0), -- 16:16:40 +(@PATH,103,5773.857,714.0711,618.8163,0,0,1,0,100,0), -- 16:16:42 +(@PATH,104,5778.107,714.0711,618.8163,0,0,1,0,100,0), -- 16:16:42 +(@PATH,105,5777.944,714.274,618.8197,0,0,1,0,100,0), -- 16:16:43 +(@PATH,106,5778.444,714.274,618.8197,0,0,1,0,100,0), -- 16:16:43 +(@PATH,107,5778.944,716.274,618.8197,0,0,1,0,100,0), -- 16:16:43 +(@PATH,108,5779.944,720.024,618.8197,0,0,1,0,100,0), -- 16:16:43 +(@PATH,109,5780.444,722.274,618.8197,0,0,1,0,100,0), -- 16:16:43 +(@PATH,110,5780.944,724.024,618.8197,0,0,1,0,100,0), -- 16:16:43 +(@PATH,111,5781.226,724.3087,618.8374,0,0,1,0,100,0), -- 16:16:46 +(@PATH,112,5781.976,727.0587,618.8374,0,0,1,0,100,0), -- 16:16:46 +(@PATH,113,5783.476,728.0587,618.8374,0,0,1,0,100,0), -- 16:16:46 +(@PATH,114,5786.476,730.5587,618.8374,0,0,1,0,100,0), -- 16:16:46 +(@PATH,115,5792.619,737.4194,618.8751,0,0,1,0,100,0), -- 16:16:48 +(@PATH,116,5794.882,739.73,618.8389,0,0,1,0,100,0), -- 16:16:50 +(@PATH,117,5790.382,743.23,618.8389,0,0,1,0,100,0), -- 16:16:50 +(@PATH,118,5787.132,745.98,618.8389,0,0,1,0,100,0), -- 16:16:50 +(@PATH,119,5780.194,747.6804,618.821,0,0,1,0,100,0), -- 16:16:53 +(@PATH,120,5779.756,745.7902,618.8091,0,0,1,0,100,0), -- 16:16:54 +(@PATH,121,5780.814,741.4368,619.417,0,0,1,0,100,0), -- 16:16:56 +(@PATH,122,5779.314,742.9368,620.417,0,0,1,0,100,0), -- 16:16:56 +(@PATH,123,5778.416,743.634,620.3975,0,0,1,0,100,0), -- 16:16:57 +(@PATH,124,5776.916,744.634,620.6475,0,0,1,0,100,0), -- 16:16:57 +(@PATH,125,5764.335,754.9359,620.9836,0,0,1,0,100,0), -- 16:16:59 +(@PATH,126,5763.085,755.6859,620.7336,0,0,1,0,100,0), -- 16:16:59 +(@PATH,127,5753.585,760.9359,619.9836,0,0,1,0,100,0), -- 16:16:59 +(@PATH,128,5750.835,762.4359,619.9836,0,0,1,0,100,0), -- 16:16:59 +(@PATH,129,5746.658,766.3828,617.2808,0,0,1,0,100,0), -- 16:17:04 +(@PATH,130,5742.408,771.8828,614.0308,0,0,1,0,100,0), -- 16:17:04 +(@PATH,131,5737.908,777.6328,612.0308,0,0,1,0,100,0), -- 16:17:04 +(@PATH,132,5723.007,791.8114,599.489,0,0,1,0,100,0), -- 16:17:09 +(@PATH,133,5710.257,803.5614,596.239,0,0,1,0,100,0), -- 16:17:09 +(@PATH,134,5704.813,808.7985,594.8409,0,0,1,0,100,0), -- 16:17:17 +(@PATH,135,5701.313,812.2985,593.8409,0,0,1,0,100,0), -- 16:17:17 +(@PATH,136,5687.563,826.0485,591.3409,0,0,1,0,100,0), -- 16:17:17 +(@PATH,137,5682.813,830.7985,588.5909,0,0,1,0,100,0), -- 16:17:17 +(@PATH,138,5670.488,841.3165,582.2974,0,0,1,0,100,0), -- 16:17:25 +(@PATH,139,5650.221,859.0325,570.9788,0,0,1,0,100,0); -- 16:17:33 + +-- Pathing for Underbelly Rat Entry: 32428 'TDB FORMAT' +SET @NPC := 112317; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5932.637,`position_y`=560.9154,`position_z`=609.7726 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,5932.637,560.9154,609.7726,0,0,1,0,100,0), -- 17:52:18 +(@PATH,2,5929.887,559.4154,610.0226,0,0,1,0,100,0), -- 17:52:18 +(@PATH,3,5924.16,562.6399,610.0771,0,0,1,0,100,0), -- 17:52:19 +(@PATH,4,5923.41,563.6399,610.0771,0,0,1,0,100,0), -- 17:52:19 +(@PATH,5,5922.568,564.0256,610.0319,0,0,1,0,100,0), -- 17:52:21 +(@PATH,6,5920.568,563.7756,610.2819,0,0,1,0,100,0), -- 17:52:21 +(@PATH,7,5919.818,563.5256,610.2819,0,0,1,0,100,0), -- 17:52:21 +(@PATH,8,5919.068,562.0256,610.0319,0,0,1,0,100,0), -- 17:52:21 +(@PATH,9,5917.318,559.2756,610.0319,0,0,1,0,100,0), -- 17:52:21 +(@PATH,10,5912.753,557.5631,610.0347,0,0,1,0,100,0), -- 17:52:23 +(@PATH,11,5916.578,562.7064,609.9109,0,0,1,0,100,0), -- 17:52:24 +(@PATH,12,5917.078,563.7064,610.1609,0,0,1,0,100,0), -- 17:52:24 +(@PATH,13,5918.578,565.4564,610.1609,0,0,1,0,100,0), -- 17:52:24 +(@PATH,14,5918.574,565.3858,610.2579,0,0,1,0,100,0), -- 17:52:26 +(@PATH,15,5919.574,566.8858,610.2579,0,0,1,0,100,0), -- 17:52:26 +(@PATH,16,5915.942,569.4524,611.0398,0,0,1,0,100,0), -- 17:52:27 +(@PATH,17,5914.692,570.4524,611.0398,0,0,1,0,100,0), -- 17:52:27 +(@PATH,18,5913.692,571.9524,611.0398,0,0,1,0,100,0), -- 17:52:27 +(@PATH,19,5911.692,574.7024,611.7898,0,0,1,0,100,0), -- 17:52:27 +(@PATH,20,5910.942,575.7024,611.7898,0,0,1,0,100,0), -- 17:52:27 +(@PATH,21,5909.692,577.4524,611.7898,0,0,1,0,100,0), -- 17:52:27 +(@PATH,22,5908.942,578.7024,611.7898,0,0,1,0,100,0), -- 17:52:27 +(@PATH,23,5909.448,577.5765,611.9888,0,0,1,0,100,0), -- 17:52:29 +(@PATH,24,5908.698,578.8265,611.9888,0,0,1,0,100,0), -- 17:52:29 +(@PATH,25,5906.948,580.8265,612.4888,0,0,1,0,100,0), -- 17:52:29 +(@PATH,26,5898.948,586.3265,612.9888,0,0,1,0,100,0), -- 17:52:29 +(@PATH,27,5897.698,587.3265,613.2388,0,0,1,0,100,0), -- 17:52:29 +(@PATH,28,5888.133,593.8323,614.5677,0,0,1,0,100,0), -- 17:52:34 +(@PATH,29,5868.403,608.2256,616.2552,0,0,1,0,100,0), -- 17:52:39 +(@PATH,30,5867.403,608.9756,616.0052,0,0,1,0,100,0), -- 17:52:39 +(@PATH,31,5863.653,611.2256,617.2552,0,0,1,0,100,0), -- 17:52:39 +(@PATH,32,5867.005,608.8441,616.1553,0,0,1,0,100,0), -- 17:52:40 +(@PATH,33,5863.755,611.0941,617.1553,0,0,1,0,100,0), -- 17:52:40 +(@PATH,34,5863.005,611.5941,617.1553,0,0,1,0,100,0), -- 17:52:40 +(@PATH,35,5862.755,610.0941,617.4053,0,0,1,0,100,0), -- 17:52:40 +(@PATH,36,5862.716,609.9548,617.6683,0,0,1,0,100,0), -- 17:52:42 +(@PATH,37,5862.466,607.4548,617.9183,0,0,1,0,100,0), -- 17:52:42 +(@PATH,38,5861.716,605.4548,618.4183,0,0,1,0,100,0), -- 17:52:42 +(@PATH,39,5859.642,601.2751,619.6371,0,0,1,0,100,0), -- 17:52:43 +(@PATH,40,5859.803,596.2305,620.6752,0,0,1,0,100,0), -- 17:52:44 +(@PATH,41,5854.399,592.0137,622.5385,0,0,1,0,100,0), -- 17:52:45 +(@PATH,42,5853.606,591.7081,622.5364,0,0,1,0,100,0), -- 17:52:47 +(@PATH,43,5852.856,590.7081,622.7864,0,0,1,0,100,0), -- 17:52:47 +(@PATH,44,5852.356,590.2081,623.0364,0,0,1,0,100,0), -- 17:52:47 +(@PATH,45,5851.106,589.4581,623.2864,0,0,1,0,100,0), -- 17:52:47 +(@PATH,46,5848.088,586.9359,623.8063,0,0,1,0,100,0), -- 17:52:48 +(@PATH,47,5846.588,585.1859,624.0563,0,0,1,0,100,0), -- 17:52:48 +(@PATH,48,5838.51,583.7482,624.8914,0,0,1,0,100,0), -- 17:52:50 +(@PATH,49,5837.691,585.6058,625.1302,0,0,1,0,100,0), -- 17:52:52 +(@PATH,50,5837.691,586.8558,625.1302,0,0,1,0,100,0), -- 17:52:52 +(@PATH,51,5837.441,588.3558,624.8802,0,0,1,0,100,0), -- 17:52:52 +(@PATH,52,5836.941,589.3558,624.8802,0,0,1,0,100,0), -- 17:52:52 +(@PATH,53,5835.691,591.3558,624.6302,0,0,1,0,100,0), -- 17:52:52 +(@PATH,54,5834.941,592.1058,624.6302,0,0,1,0,100,0), -- 17:52:52 +(@PATH,55,5835.415,591.4377,624.7817,0,0,1,0,100,0), -- 17:52:53 +(@PATH,56,5834.665,592.1877,624.7817,0,0,1,0,100,0), -- 17:52:53 +(@PATH,57,5834.415,592.6877,624.7817,0,0,1,0,100,0), -- 17:52:53 +(@PATH,58,5831.665,592.9377,625.0317,0,0,1,0,100,0), -- 17:52:53 +(@PATH,59,5829.415,592.9377,625.0317,0,0,1,0,100,0), -- 17:52:53 +(@PATH,60,5831.489,593.141,624.9569,0,0,1,0,100,0), -- 17:52:54 +(@PATH,61,5828.989,593.141,624.9569,0,0,1,0,100,0), -- 17:52:54 +(@PATH,62,5827.989,593.391,624.9569,0,0,1,0,100,0), -- 17:52:54 +(@PATH,63,5826.489,594.891,624.7069,0,0,1,0,100,0), -- 17:52:54 +(@PATH,64,5824.989,596.141,624.7069,0,0,1,0,100,0), -- 17:52:54 +(@PATH,65,5823.989,597.141,624.7069,0,0,1,0,100,0), -- 17:52:54 +(@PATH,66,5823.284,602.2316,624.696,0,0,1,0,100,0), -- 17:52:56 +(@PATH,67,5824.034,603.4816,624.446,0,0,1,0,100,0), -- 17:52:56 +(@PATH,68,5825.496,604.9807,624.1569,0,0,1,0,100,0), -- 17:52:58 +(@PATH,69,5832.577,609.1123,622.6941,0,0,1,0,100,0), -- 17:52:59 +(@PATH,70,5832.577,610.3623,622.4441,0,0,1,0,100,0), -- 17:52:59 +(@PATH,71,5832.645,613.0908,621.8396,0,0,1,0,100,0), -- 17:53:00 +(@PATH,72,5833.895,614.5908,621.3396,0,0,1,0,100,0), -- 17:53:00 +(@PATH,73,5834.645,616.0908,620.5896,0,0,1,0,100,0), -- 17:53:00 +(@PATH,74,5835.895,618.0908,620.5896,0,0,1,0,100,0), -- 17:53:00 +(@PATH,75,5836.239,617.9567,620.214,0,0,1,0,100,0), -- 17:53:01 +(@PATH,76,5837.489,620.2067,619.964,0,0,1,0,100,0), -- 17:53:01 +(@PATH,77,5839.739,620.2067,619.464,0,0,1,0,100,0), -- 17:53:01 +(@PATH,78,5841.018,620.4529,619.0253,0,0,1,0,100,0), -- 17:53:03 +(@PATH,79,5842.768,621.4529,618.5253,0,0,1,0,100,0), -- 17:53:03 +(@PATH,80,5847.018,623.7029,617.7753,0,0,1,0,100,0), -- 17:53:03 +(@PATH,81,5850.018,625.4529,617.2753,0,0,1,0,100,0), -- 17:53:03 +(@PATH,82,5853.018,627.2029,616.7753,0,0,1,0,100,0), -- 17:53:03 +(@PATH,83,5855.821,630.0739,616.2969,0,0,1,0,100,0), -- 17:53:06 +(@PATH,84,5856.571,630.8239,616.2969,0,0,1,0,100,0), -- 17:53:06 +(@PATH,85,5857.947,632.9325,616.1628,0,0,1,0,100,0), -- 17:53:07 +(@PATH,86,5862.197,634.6825,615.9128,0,0,1,0,100,0), -- 17:53:07 +(@PATH,87,5863.447,635.9325,615.9128,0,0,1,0,100,0), -- 17:53:07 +(@PATH,88,5865.894,644.5748,615.8455,0,0,1,0,100,0), -- 17:53:10 +(@PATH,89,5865.894,645.5748,615.3455,0,0,1,0,100,0), -- 17:53:10 +(@PATH,90,5865.829,645.791,615.4341,0,0,1,0,100,0), -- 17:53:11 +(@PATH,91,5865.829,646.041,615.4341,0,0,1,0,100,0), -- 17:53:11 +(@PATH,92,5862.829,647.541,615.4341,0,0,1,0,100,0), -- 17:53:11 +(@PATH,93,5861.579,648.041,615.1841,0,0,1,0,100,0), -- 17:53:11 +(@PATH,94,5859.079,644.791,615.1841,0,0,1,0,100,0), -- 17:53:11 +(@PATH,95,5857.829,643.541,614.9341,0,0,1,0,100,0), -- 17:53:11 +(@PATH,96,5856.982,643.02,614.5778,0,0,1,0,100,0), -- 17:53:13 +(@PATH,97,5855.482,644.27,614.0778,0,0,1,0,100,0), -- 17:53:13 +(@PATH,98,5853.982,645.27,614.3278,0,0,1,0,100,0), -- 17:53:13 +(@PATH,99,5848.046,652.5363,610.8051,0,0,1,0,100,0), -- 17:53:15 +(@PATH,100,5847.546,653.0363,610.8051,0,0,1,0,100,0), -- 17:53:15 +(@PATH,101,5843.546,659.2863,609.5551,0,0,1,0,100,0), -- 17:53:15 +(@PATH,102,5842.796,660.2863,610.3051,0,0,1,0,100,0), -- 17:53:15 +(@PATH,103,5842.046,661.2863,610.3051,0,0,1,0,100,0), -- 17:53:15 +(@PATH,104,5842.085,661.6648,609.9584,0,0,1,0,100,0), -- 17:53:18 +(@PATH,105,5840.085,664.4148,609.9584,0,0,1,0,100,0), -- 17:53:18 +(@PATH,106,5843.085,670.6648,609.9584,0,0,1,0,100,0), -- 17:53:18 +(@PATH,107,5842.802,678.5958,610.1359,0,0,1,0,100,0), -- 17:53:21 +(@PATH,108,5839.953,683.5137,610.1359,0,0,1,0,100,0), -- 17:53:22 +(@PATH,109,5834.206,685.7982,610.136,0,0,1,0,100,0), -- 17:53:24 +(@PATH,110,5828.92,685.1238,610.1359,0,0,1,0,100,0), -- 17:53:26 +(@PATH,111,5826.984,682.3601,610.1359,0,0,1,0,100,0), -- 17:53:27 +(@PATH,112,5818.48,668.6338,610.1359,0,0,1,0,100,0), -- 17:53:28 +(@PATH,113,5816.1,665.4202,610.1359,0,0,1,0,100,0), -- 17:53:31 +(@PATH,114,5815.1,664.1702,609.6359,0,0,1,0,100,0), -- 17:53:31 +(@PATH,115,5810.1,657.9202,609.6359,0,0,1,0,100,0), -- 17:53:31 +(@PATH,116,5808.85,656.9202,610.1359,0,0,1,0,100,0), -- 17:53:31 +(@PATH,117,5806.85,653.9202,610.1359,0,0,1,0,100,0), -- 17:53:31 +(@PATH,118,5793.123,634.9679,610.1359,0,0,1,0,100,0), -- 17:53:37 +(@PATH,119,5790.14,631.1789,610.1359,0,0,1,0,100,0), -- 17:53:39 +(@PATH,120,5788.89,630.1789,609.6359,0,0,1,0,100,0), -- 17:53:39 +(@PATH,121,5787.39,628.9289,609.6359,0,0,1,0,100,0), -- 17:53:39 +(@PATH,122,5785.64,627.4289,609.6359,0,0,1,0,100,0), -- 17:53:39 +(@PATH,123,5782.89,625.1789,609.6359,0,0,1,0,100,0), -- 17:53:39 +(@PATH,124,5781.64,624.1789,610.1359,0,0,1,0,100,0), -- 17:53:39 +(@PATH,125,5779.79,623.2709,610.2906,0,0,1,0,100,0), -- 17:53:43 +(@PATH,126,5773.29,624.0209,610.2906,0,0,1,0,100,0), -- 17:53:43 +(@PATH,127,5771.79,624.7709,609.5406,0,0,1,0,100,0), -- 17:53:43 +(@PATH,128,5765.886,625.5369,612.6761,0,0,1,0,100,0), -- 17:53:45 +(@PATH,129,5764.136,626.5369,613.6761,0,0,1,0,100,0), -- 17:53:45 +(@PATH,130,5762.886,626.7869,614.1761,0,0,1,0,100,0), -- 17:53:45 +(@PATH,131,5761.386,627.7869,614.9261,0,0,1,0,100,0), -- 17:53:45 +(@PATH,132,5757.345,630.0953,616.8363,0,0,1,0,100,0), -- 17:53:48 +(@PATH,133,5752.345,634.3453,617.8363,0,0,1,0,100,0), -- 17:53:48 +(@PATH,134,5751.345,635.0953,617.3363,0,0,1,0,100,0), -- 17:53:48 +(@PATH,135,5748.116,637.8995,618.5641,0,0,1,0,100,0), -- 17:53:50 +(@PATH,136,5747.366,636.3995,618.8141,0,0,1,0,100,0), -- 17:53:50 +(@PATH,137,5746.008,632.8196,618.8812,0,0,1,0,100,0), -- 17:53:51 +(@PATH,138,5744.508,625.0696,618.8812,0,0,1,0,100,0), -- 17:53:51 +(@PATH,139,5744.258,623.3196,619.1312,0,0,1,0,100,0), -- 17:53:51 +(@PATH,140,5743.789,622.6664,619.2971,0,0,1,0,100,0), -- 17:53:54 +(@PATH,141,5742.789,621.6664,619.2971,0,0,1,0,100,0), -- 17:53:54 +(@PATH,142,5741.789,620.1664,619.2971,0,0,1,0,100,0), -- 17:53:54 +(@PATH,143,5739.586,617.3193,619.2029,0,0,1,0,100,0), -- 17:53:55 +(@PATH,144,5723.11,606.8483,618.9691,0,0,1,0,100,0), -- 17:53:59 +(@PATH,145,5722.5,607.3009,619.1648,0,0,1,0,100,0), -- 17:54:00 +(@PATH,146,5723.25,609.0509,619.1648,0,0,1,0,100,0), -- 17:54:00 +(@PATH,147,5725.919,612.6741,619.2623,0,0,1,0,100,0), -- 17:54:01 +(@PATH,148,5727.169,613.6741,619.2623,0,0,1,0,100,0), -- 17:54:01 +(@PATH,149,5727.833,613.9911,619.2798,0,0,1,0,100,0), -- 17:54:02 +(@PATH,150,5730.833,618.4911,619.2798,0,0,1,0,100,0), -- 17:54:02 +(@PATH,151,5732.083,620.7411,619.2798,0,0,1,0,100,0), -- 17:54:02 +(@PATH,152,5736.408,628.3324,619.2798,0,0,1,0,100,0), -- 17:54:05 +(@PATH,153,5738.975,629.0027,619.2798,0,0,1,0,100,0), -- 17:54:06 +(@PATH,154,5742.99,635.6492,619.2798,0,0,1,0,100,0), -- 17:54:07 +(@PATH,155,5743.467,641.7768,619.2798,0,0,1,0,100,0), -- 17:54:09 +(@PATH,156,5747.225,647.0936,619.0926,0,0,1,0,100,0), -- 17:54:10 +(@PATH,157,5748.225,647.5936,619.0926,0,0,1,0,100,0), -- 17:54:10 +(@PATH,158,5749.297,648.2242,618.9799,0,0,1,0,100,0), -- 17:54:11 +(@PATH,159,5749.047,649.2242,619.2299,0,0,1,0,100,0), -- 17:54:11 +(@PATH,160,5749.047,650.7242,619.2299,0,0,1,0,100,0), -- 17:54:11 +(@PATH,161,5749.047,654.2242,619.4799,0,0,1,0,100,0), -- 17:54:11 +(@PATH,162,5748.797,655.7242,619.4799,0,0,1,0,100,0), -- 17:54:11 +(@PATH,163,5749.192,655.6202,619.7116,0,0,1,0,100,0), -- 17:54:12 +(@PATH,164,5749.192,656.1202,619.7116,0,0,1,0,100,0), -- 17:54:12 +(@PATH,165,5750.442,657.8702,619.7116,0,0,1,0,100,0), -- 17:54:12 +(@PATH,166,5750.391,657.9781,619.7876,0,0,1,0,100,0), -- 17:54:13 +(@PATH,167,5751.891,659.9781,619.5376,0,0,1,0,100,0), -- 17:54:13 +(@PATH,168,5753.641,659.4781,619.5376,0,0,1,0,100,0), -- 17:54:13 +(@PATH,169,5759.179,661.2788,619.2548,0,0,1,0,100,0), -- 17:54:15 +(@PATH,170,5760.229,663.2921,619.3005,0,0,1,0,100,0), -- 17:54:16 +(@PATH,171,5760.479,666.2921,619.3005,0,0,1,0,100,0), -- 17:54:16 +(@PATH,172,5762.869,669.2735,619.6941,0,0,1,0,100,0), -- 17:54:17 +(@PATH,173,5764.619,671.0235,619.6941,0,0,1,0,100,0), -- 17:54:17 +(@PATH,174,5766.816,671.4822,619.3464,0,0,1,0,100,0), -- 17:54:18 +(@PATH,175,5771.566,670.7322,619.3464,0,0,1,0,100,0), -- 17:54:18 +(@PATH,176,5773.478,671.9761,619.1648,0,0,1,0,100,0), -- 17:54:19 +(@PATH,177,5772.978,676.9761,619.1648,0,0,1,0,100,0), -- 17:54:19 +(@PATH,178,5773.809,679.17,619.6726,0,0,1,0,100,0), -- 17:54:21 +(@PATH,179,5775.309,680.92,619.6726,0,0,1,0,100,0), -- 17:54:21 +(@PATH,180,5776.809,682.67,619.6726,0,0,1,0,100,0), -- 17:54:21 +(@PATH,181,5775.323,680.9807,619.6566,0,0,1,0,100,0), -- 17:54:22 +(@PATH,182,5776.823,682.7307,619.6566,0,0,1,0,100,0), -- 17:54:22 +(@PATH,183,5777.323,683.2307,619.4066,0,0,1,0,100,0), -- 17:54:22 +(@PATH,184,5780.438,683.3417,619.2777,0,0,1,0,100,0), -- 17:54:23 +(@PATH,185,5782.188,683.5917,619.2777,0,0,1,0,100,0), -- 17:54:23 +(@PATH,186,5783.188,683.5917,619.2777,0,0,1,0,100,0), -- 17:54:23 +(@PATH,187,5783.938,684.3417,619.2777,0,0,1,0,100,0), -- 17:54:23 +(@PATH,188,5783.903,684.5225,619.173,0,0,1,0,100,0), -- 17:54:24 +(@PATH,189,5784.653,685.2725,619.173,0,0,1,0,100,0), -- 17:54:24 +(@PATH,190,5784.403,686.5225,619.173,0,0,1,0,100,0), -- 17:54:24 +(@PATH,191,5783.903,690.0225,619.173,0,0,1,0,100,0), -- 17:54:24 +(@PATH,192,5783.28,683.6895,619.2,0,0,1,0,100,0), -- 17:54:26 +(@PATH,193,5783.134,683.567,619.218,0,0,1,0,100,0), -- 17:54:27 +(@PATH,194,5780.634,683.317,619.468,0,0,1,0,100,0), -- 17:54:27 +(@PATH,195,5778.134,683.567,619.468,0,0,1,0,100,0), -- 17:54:27 +(@PATH,196,5777.437,683.3219,619.3995,0,0,1,0,100,0), -- 17:54:28 +(@PATH,197,5775.437,680.8219,619.6495,0,0,1,0,100,0), -- 17:54:28 +(@PATH,198,5773.687,679.3219,619.6495,0,0,1,0,100,0), -- 17:54:28 +(@PATH,199,5772.959,678.2682,619.4105,0,0,1,0,100,0), -- 17:54:29 +(@PATH,200,5773.209,677.0182,619.1605,0,0,1,0,100,0), -- 17:54:29 +(@PATH,201,5773.709,673.0182,619.1605,0,0,1,0,100,0), -- 17:54:29 +(@PATH,202,5773.394,673.0062,619.2454,0,0,1,0,100,0), -- 17:54:31 +(@PATH,203,5773.644,672.0062,619.2454,0,0,1,0,100,0), -- 17:54:31 +(@PATH,204,5772.396,670.793,619.3744,0,0,1,0,100,0), -- 17:54:32 +(@PATH,205,5766.896,671.793,619.3744,0,0,1,0,100,0), -- 17:54:32 +(@PATH,206,5762.968,669.4083,619.7806,0,0,1,0,100,0), -- 17:54:33 +(@PATH,207,5760.729,666.238,619.5159,0,0,1,0,100,0), -- 17:54:34 +(@PATH,208,5760.479,663.488,619.2659,0,0,1,0,100,0), -- 17:54:34 +(@PATH,209,5759.131,661.6943,619.3143,0,0,1,0,100,0), -- 17:54:36 +(@PATH,210,5756.631,659.4443,619.3143,0,0,1,0,100,0), -- 17:54:36 +(@PATH,211,5753.881,659.9443,619.3143,0,0,1,0,100,0), -- 17:54:36 +(@PATH,212,5751.954,659.9012,619.4919,0,0,1,0,100,0), -- 17:54:37 +(@PATH,213,5750.454,658.1512,619.7419,0,0,1,0,100,0), -- 17:54:37 +(@PATH,214,5749.239,656.0627,619.7203,0,0,1,0,100,0), -- 17:54:38 +(@PATH,215,5749.239,654.0627,619.4703,0,0,1,0,100,0), -- 17:54:38 +(@PATH,216,5749.239,650.8127,619.2203,0,0,1,0,100,0), -- 17:54:38 +(@PATH,217,5749.489,649.3127,619.2203,0,0,1,0,100,0), -- 17:54:38 +(@PATH,218,5748.988,650.8058,619.2463,0,0,1,0,100,0), -- 17:54:39 +(@PATH,219,5749.238,649.3058,619.2463,0,0,1,0,100,0), -- 17:54:39 +(@PATH,220,5749.238,648.3058,618.9963,0,0,1,0,100,0), -- 17:54:39 +(@PATH,221,5747.238,647.3058,619.2463,0,0,1,0,100,0), -- 17:54:39 +(@PATH,222,5747.21,647.066,619.3192,0,0,1,0,100,0), -- 17:54:40 +(@PATH,223,5744.96,646.066,619.3192,0,0,1,0,100,0), -- 17:54:40 +(@PATH,224,5743.46,642.066,619.3192,0,0,1,0,100,0), -- 17:54:40 +(@PATH,225,5742.853,635.8711,619.2798,0,0,1,0,100,0), -- 17:54:43 +(@PATH,226,5767.506,624.4731,611.6431,0,0,1,0,100,0), -- 17:55:06 +(@PATH,227,5771.256,625.4731,610.1431,0,0,1,0,100,0), -- 17:55:06 +(@PATH,228,5772.006,625.2231,609.6431,0,0,1,0,100,0), -- 17:55:06 +(@PATH,229,5772.506,624.9731,609.6431,0,0,1,0,100,0), -- 17:55:06 +(@PATH,230,5775.756,624.4731,610.3931,0,0,1,0,100,0), -- 17:55:06 +(@PATH,231,5781.39,624.2626,610.0007,0,0,1,0,100,0), -- 17:55:08 +(@PATH,232,5782.64,625.2626,609.5007,0,0,1,0,100,0), -- 17:55:08 +(@PATH,233,5785.39,627.7626,609.5007,0,0,1,0,100,0), -- 17:55:08 +(@PATH,234,5787.14,628.7626,609.5007,0,0,1,0,100,0), -- 17:55:08 +(@PATH,235,5788.89,630.2626,609.5007,0,0,1,0,100,0), -- 17:55:08 +(@PATH,236,5790.14,631.2626,610.0007,0,0,1,0,100,0), -- 17:55:08 +(@PATH,237,5789.247,630.4788,609.5232,0,0,1,0,100,0), -- 17:55:11 +(@PATH,238,5790.497,631.4788,610.0232,0,0,1,0,100,0), -- 17:55:11 +(@PATH,239,5791.497,632.2288,610.0232,0,0,1,0,100,0), -- 17:55:11 +(@PATH,240,5792.497,634.2288,610.0232,0,0,1,0,100,0), -- 17:55:11 +(@PATH,241,5808.938,656.4456,610.1359,0,0,1,0,100,0), -- 17:55:15 +(@PATH,242,5809.938,657.6956,609.6359,0,0,1,0,100,0), -- 17:55:15 +(@PATH,243,5815.188,664.1956,609.6359,0,0,1,0,100,0), -- 17:55:15 +(@PATH,244,5816.188,665.4456,610.1359,0,0,1,0,100,0), -- 17:55:15 +(@PATH,245,5818.914,671.4957,610.0309,0,0,1,0,100,0), -- 17:55:21 +(@PATH,246,5820.774,678.6002,610.1359,0,0,1,0,100,0), -- 17:55:22 +(@PATH,247,5833.884,685.7383,610.1359,0,0,1,0,100,0), -- 17:55:25 +(@PATH,248,5839.521,683.5572,610.1359,0,0,1,0,100,0), -- 17:55:27 +(@PATH,249,5842.875,678.5269,610.1359,0,0,1,0,100,0), -- 17:55:28 +(@PATH,250,5842.727,670.9156,610.1359,0,0,1,0,100,0), -- 17:55:30 +(@PATH,251,5842.025,661.4012,610.2211,0,0,1,0,100,0), -- 17:55:32 +(@PATH,252,5842.775,660.4012,610.2211,0,0,1,0,100,0), -- 17:55:32 +(@PATH,253,5843.525,659.1512,609.4711,0,0,1,0,100,0), -- 17:55:32 +(@PATH,254,5847.025,653.9012,610.2211,0,0,1,0,100,0), -- 17:55:32 +(@PATH,255,5847.525,653.1512,610.7211,0,0,1,0,100,0), -- 17:55:32 +(@PATH,256,5848.025,652.6512,610.7211,0,0,1,0,100,0), -- 17:55:32 +(@PATH,257,5854.674,644.4988,613.7783,0,0,1,0,100,0), -- 17:55:37 +(@PATH,258,5858.877,645.0601,615.1895,0,0,1,0,100,0), -- 17:55:38 +(@PATH,259,5862.704,647.3643,615.3469,0,0,1,0,100,0), -- 17:55:39 +(@PATH,260,5866.175,643.2976,615.8401,0,0,1,0,100,0), -- 17:55:41 +(@PATH,261,5863.666,636.2874,615.6055,0,0,1,0,100,0), -- 17:55:42 +(@PATH,262,5858.989,633.2343,615.9945,0,0,1,0,100,0), -- 17:55:43 +(@PATH,263,5856.424,631.0151,616.6328,0,0,1,0,100,0), -- 17:55:44 +(@PATH,264,5855.924,630.0151,616.6328,0,0,1,0,100,0), -- 17:55:44 +(@PATH,265,5854.174,628.0151,616.8828,0,0,1,0,100,0), -- 17:55:44 +(@PATH,266,5852.924,627.2651,616.6328,0,0,1,0,100,0), -- 17:55:44 +(@PATH,267,5850.174,625.7651,617.1328,0,0,1,0,100,0), -- 17:55:44 +(@PATH,268,5847.174,624.0151,617.3828,0,0,1,0,100,0), -- 17:55:44 +(@PATH,269,5842.674,621.2651,618.3828,0,0,1,0,100,0), -- 17:55:44 +(@PATH,270,5839.754,620.274,619.3906,0,0,1,0,100,0), -- 17:55:48 +(@PATH,271,5837.754,620.024,619.6406,0,0,1,0,100,0), -- 17:55:48 +(@PATH,272,5836.254,618.024,620.1406,0,0,1,0,100,0), -- 17:55:48 +(@PATH,273,5834.754,616.274,620.3906,0,0,1,0,100,0), -- 17:55:48 +(@PATH,274,5833.754,614.774,621.3906,0,0,1,0,100,0), -- 17:55:48 +(@PATH,275,5832.755,613.1848,621.7224,0,0,1,0,100,0), -- 17:55:51 +(@PATH,276,5832.755,610.4348,622.2224,0,0,1,0,100,0), -- 17:55:51 +(@PATH,277,5831.282,608.2042,622.824,0,0,1,0,100,0), -- 17:55:52 +(@PATH,278,5829.532,606.7042,623.324,0,0,1,0,100,0), -- 17:55:52 +(@PATH,279,5824.087,603.5916,624.4519,0,0,1,0,100,0), -- 17:55:53 +(@PATH,280,5822.902,598.7023,625.1343,0,0,1,0,100,0), -- 17:55:55 +(@PATH,281,5823.652,597.7023,624.8843,0,0,1,0,100,0), -- 17:55:55 +(@PATH,282,5825.152,596.2023,624.6343,0,0,1,0,100,0), -- 17:55:55 +(@PATH,283,5826.152,594.7023,624.6343,0,0,1,0,100,0), -- 17:55:55 +(@PATH,284,5827.402,593.7023,624.6343,0,0,1,0,100,0), -- 17:55:55 +(@PATH,285,5825.07,596.038,624.6668,0,0,1,0,100,0), -- 17:55:56 +(@PATH,286,5826.57,594.788,624.6668,0,0,1,0,100,0), -- 17:55:56 +(@PATH,287,5827.82,593.538,624.6668,0,0,1,0,100,0), -- 17:55:56 +(@PATH,288,5827.82,593.288,624.9168,0,0,1,0,100,0), -- 17:55:56 +(@PATH,289,5829.07,593.288,624.9168,0,0,1,0,100,0), -- 17:55:56 +(@PATH,290,5830.82,593.038,624.9168,0,0,1,0,100,0), -- 17:55:56 +(@PATH,291,5829.417,592.9346,625.0922,0,0,1,0,100,0), -- 17:55:57 +(@PATH,292,5830.917,592.9346,624.8422,0,0,1,0,100,0), -- 17:55:57 +(@PATH,293,5834.417,592.6846,624.5922,0,0,1,0,100,0), -- 17:55:57 +(@PATH,294,5835.417,591.4346,624.8422,0,0,1,0,100,0), -- 17:55:57 +(@PATH,295,5836.917,589.6846,624.8422,0,0,1,0,100,0), -- 17:55:57 +(@PATH,296,5836.748,589.3402,624.8186,0,0,1,0,100,0), -- 17:55:58 +(@PATH,297,5837.498,588.5902,624.8186,0,0,1,0,100,0), -- 17:55:58 +(@PATH,298,5837.498,586.8402,625.0686,0,0,1,0,100,0), -- 17:55:58 +(@PATH,299,5837.748,585.8402,625.0686,0,0,1,0,100,0), -- 17:55:58 +(@PATH,300,5837.972,586.4098,624.9656,0,0,1,0,100,0), -- 17:55:59 +(@PATH,301,5837.972,585.4098,625.2156,0,0,1,0,100,0), -- 17:55:59 +(@PATH,302,5837.972,584.6598,625.2156,0,0,1,0,100,0), -- 17:55:59 +(@PATH,303,5847.725,586.5244,623.9159,0,0,1,0,100,0), -- 17:56:01 +(@PATH,304,5848.381,586.9231,623.4995,0,0,1,0,100,0), -- 17:56:03 +(@PATH,305,5850.881,589.1731,623.4995,0,0,1,0,100,0), -- 17:56:03 +(@PATH,306,5853.684,591.8207,622.5383,0,0,1,0,100,0), -- 17:56:04 +(@PATH,307,5859.724,595.9813,620.9481,0,0,1,0,100,0), -- 17:56:06 +(@PATH,308,5859.907,600.2466,619.8765,0,0,1,0,100,0), -- 17:56:07 +(@PATH,309,5859.657,600.9966,619.8765,0,0,1,0,100,0), -- 17:56:07 +(@PATH,310,5861.254,603.9108,618.8354,0,0,1,0,100,0), -- 17:56:08 +(@PATH,311,5861.504,605.1608,618.5854,0,0,1,0,100,0), -- 17:56:08 +(@PATH,312,5862.816,610.0886,617.6057,0,0,1,0,100,0), -- 17:56:09 +(@PATH,313,5862.816,611.5886,617.1057,0,0,1,0,100,0), -- 17:56:09 +(@PATH,314,5863.816,611.0886,617.1057,0,0,1,0,100,0), -- 17:56:09 +(@PATH,315,5866.566,609.3386,616.1057,0,0,1,0,100,0), -- 17:56:09 +(@PATH,316,5868.066,608.3386,616.6057,0,0,1,0,100,0), -- 17:56:09 +(@PATH,317,5871.561,606.3478,616.0399,0,0,1,0,100,0), -- 17:56:12 +(@PATH,318,5887.811,594.0978,614.7899,0,0,1,0,100,0), -- 17:56:12 +(@PATH,319,5897.243,587.3519,613.1742,0,0,1,0,100,0), -- 17:56:17 +(@PATH,320,5898.243,586.8519,613.1742,0,0,1,0,100,0), -- 17:56:17 +(@PATH,321,5909.608,577.4766,611.9065,0,0,1,0,100,0), -- 17:56:20 +(@PATH,322,5910.358,576.4766,611.9065,0,0,1,0,100,0), -- 17:56:20 +(@PATH,323,5911.358,575.2266,611.9065,0,0,1,0,100,0), -- 17:56:20 +(@PATH,324,5913.358,572.4766,611.4065,0,0,1,0,100,0), -- 17:56:20 +(@PATH,325,5914.358,570.9766,611.1565,0,0,1,0,100,0), -- 17:56:20 +(@PATH,326,5914.869,570.5132,611.2545,0,0,1,0,100,0), -- 17:56:23 +(@PATH,327,5916.025,569.2449,611.0331,0,0,1,0,100,0), -- 17:56:24 +(@PATH,328,5917.275,567.9949,611.0331,0,0,1,0,100,0), -- 17:56:24 +(@PATH,329,5918.775,566.9949,610.7831,0,0,1,0,100,0), -- 17:56:24 +(@PATH,330,5919.525,566.7449,610.2831,0,0,1,0,100,0), -- 17:56:24 +(@PATH,331,5918.525,565.7449,610.2831,0,0,1,0,100,0), -- 17:56:24 +(@PATH,332,5917.025,563.9949,610.2831,0,0,1,0,100,0), -- 17:56:24 +(@PATH,333,5916.275,562.7449,610.2831,0,0,1,0,100,0), -- 17:56:24 +(@PATH,334,5912.947,557.8387,609.8282,0,0,1,0,100,0), -- 17:56:26 +(@PATH,335,5912.697,557.5887,609.8282,0,0,1,0,100,0), -- 17:56:26 +(@PATH,336,5915.036,555.4799,609.9234,0,0,1,0,100,0), -- 17:56:28 +(@PATH,337,5917.036,559.4799,609.9234,0,0,1,0,100,0), -- 17:56:28 +(@PATH,338,5918.786,561.9799,609.9234,0,0,1,0,100,0), -- 17:56:28 +(@PATH,339,5919.535,563.3184,610.3263,0,0,1,0,100,0), -- 17:56:29 +(@PATH,340,5920.785,563.5684,610.3263,0,0,1,0,100,0), -- 17:56:29 +(@PATH,341,5922.832,564.0054,610.0492,0,0,1,0,100,0), -- 17:56:30 +(@PATH,342,5924.082,562.7554,610.0492,0,0,1,0,100,0), -- 17:56:30 +(@PATH,343,5929.893,559.5189,610.0414,0,0,1,0,100,0), -- 17:56:31 +(@PATH,344,5931.28,562.356,609.8469,0,0,1,0,100,0), -- 17:56:32 +(@PATH,345,5930.53,563.356,609.8469,0,0,1,0,100,0), -- 17:56:32 +(@PATH,346,5928.03,565.856,609.8469,0,0,1,0,100,0), -- 17:56:32 +(@PATH,347,5927.28,566.856,609.8469,0,0,1,0,100,0), -- 17:56:32 +(@PATH,348,5897.451,587.326,613.1277,0,0,1,0,100,0), -- 17:56:40 +(@PATH,349,5896.701,588.076,613.3777,0,0,1,0,100,0), -- 17:56:40 +(@PATH,350,5888.951,595.076,614.3777,0,0,1,0,100,0), -- 17:56:40 +(@PATH,351,5887.915,596.0313,614.4434,0,0,1,0,100,0), -- 17:56:43 +(@PATH,352,5868.819,610.8005,615.5193,0,0,1,0,100,0), -- 17:56:47 +(@PATH,353,5866.819,612.0505,615.7693,0,0,1,0,100,0), -- 17:56:47 +(@PATH,354,5865.069,613.3005,616.5193,0,0,1,0,100,0), -- 17:56:47 +(@PATH,355,5866.63,612.3472,615.9749,0,0,1,0,100,0), -- 17:56:50 +(@PATH,356,5865.13,613.5972,616.4749,0,0,1,0,100,0), -- 17:56:50 +(@PATH,357,5864.63,613.8472,616.7249,0,0,1,0,100,0), -- 17:56:50 +(@PATH,358,5864.38,615.5972,616.7249,0,0,1,0,100,0), -- 17:56:50 +(@PATH,359,5863.88,617.3472,616.4749,0,0,1,0,100,0), -- 17:56:50 +(@PATH,360,5863.63,618.5972,616.9749,0,0,1,0,100,0), -- 17:56:50 +(@PATH,361,5864.248,615.8065,616.6554,0,0,1,0,100,0), -- 17:56:51 +(@PATH,362,5863.998,617.8065,616.6554,0,0,1,0,100,0), -- 17:56:51 +(@PATH,363,5863.748,618.8065,616.9054,0,0,1,0,100,0), -- 17:56:51 +(@PATH,364,5863.498,618.8065,616.9054,0,0,1,0,100,0), -- 17:56:51 +(@PATH,365,5865.998,623.0565,616.1554,0,0,1,0,100,0), -- 17:56:51 +(@PATH,366,5866.748,624.0565,616.1554,0,0,1,0,100,0), -- 17:56:51 +(@PATH,367,5866.979,624.3248,616.2649,0,0,1,0,100,0), -- 17:56:52 +(@PATH,368,5869.412,631.2599,615.7915,0,0,1,0,100,0), -- 17:56:54 +(@PATH,369,5873.593,633.4036,615.6859,0,0,1,0,100,0), -- 17:56:55 +(@PATH,370,5872.663,634.2109,615.7021,0,0,1,0,100,0), -- 17:56:58 +(@PATH,371,5869.663,631.2109,615.7021,0,0,1,0,100,0), -- 17:56:58 +(@PATH,372,5866.861,624.7245,616.1404,0,0,1,0,100,0), -- 17:57:00 +(@PATH,373,5866.361,623.4745,616.3904,0,0,1,0,100,0), -- 17:57:00 +(@PATH,374,5864.396,615.572,616.6294,0,0,1,0,100,0), -- 17:57:02 +(@PATH,375,5864.646,614.072,616.8794,0,0,1,0,100,0), -- 17:57:02 +(@PATH,376,5866.896,612.322,615.8794,0,0,1,0,100,0), -- 17:57:02 +(@PATH,377,5868.146,611.572,615.6294,0,0,1,0,100,0), -- 17:57:02 +(@PATH,378,5869.896,610.322,615.8794,0,0,1,0,100,0), -- 17:57:02 +(@PATH,379,5875.009,606.331,615.4817,0,0,1,0,100,0), -- 17:57:06 +(@PATH,380,5896.355,588.4134,613.6219,0,0,1,0,100,0), -- 17:57:08 +(@PATH,381,5897.355,587.4134,613.3719,0,0,1,0,100,0), -- 17:57:08 +(@PATH,382,5898.605,586.1634,613.3719,0,0,1,0,100,0), -- 17:57:08 +(@PATH,383,5910.67,576.61,611.9646,0,0,1,0,100,0), -- 17:57:13 +(@PATH,384,5911.92,575.86,611.7146,0,0,1,0,100,0), -- 17:57:13 +(@PATH,385,5914.42,574.11,611.2146,0,0,1,0,100,0), -- 17:57:13 +(@PATH,386,5912.239,575.5333,611.792,0,0,1,0,100,0), -- 17:57:16 +(@PATH,387,5914.739,573.7833,611.042,0,0,1,0,100,0), -- 17:57:16 +(@PATH,388,5916.489,572.7833,610.792,0,0,1,0,100,0), -- 17:57:16 +(@PATH,389,5918.239,572.0333,611.042,0,0,1,0,100,0), -- 17:57:16 +(@PATH,390,5921.739,571.0333,610.792,0,0,1,0,100,0), -- 17:57:16 +(@PATH,391,5922.739,570.5333,610.542,0,0,1,0,100,0), -- 17:57:16 +(@PATH,392,5923.989,570.0333,610.292,0,0,1,0,100,0), -- 17:57:16 +(@PATH,393,5925.293,569.5073,610.2241,0,0,1,0,100,0), -- 17:57:18 +(@PATH,394,5927.293,566.7573,610.2241,0,0,1,0,100,0), -- 17:57:18 +(@PATH,395,5928.043,566.0073,610.2241,0,0,1,0,100,0), -- 17:57:18 +(@PATH,396,5930.543,563.2573,610.2241,0,0,1,0,100,0), -- 17:57:18 +(@PATH,397,5931.293,562.5073,609.9741,0,0,1,0,100,0); -- 17:57:18 From 81980ae58c2107ae0ac2fded2155c8580541a74e Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Fri, 23 Oct 2015 11:56:47 +0200 Subject: [PATCH 190/524] Core/Spells: fixed some rare stealth/prowl visual bugs after duel cd reset --- src/server/game/Spells/SpellHistory.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 3c157f0b17..ca0e8cc623 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -678,7 +678,8 @@ void SpellHistory::RestoreCooldownStateAfterDuel() Clock::time_point now = Clock::now(); uint32 cooldownDuration = itr->second.CooldownEnd > now ? std::chrono::duration_cast(itr->second.CooldownEnd - now).count() : 0; - if (cooldownDuration == 0) + // cooldownDuration must be between 0 and 10 minutes in order to avoid any visual bugs + if (cooldownDuration == 0 || cooldownDuration > 10 * MINUTE * IN_MILLISECONDS) continue; cooldowns[itr->first] = cooldownDuration; From 96b5bfd98550da756f01f17d08b8aa626487c19a Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 23 Oct 2015 18:12:42 +0200 Subject: [PATCH 191/524] Core/Commands: Fixed merge error --- src/server/scripts/Commands/cs_go.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index 33fc594a4c..a810106269 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -48,7 +48,7 @@ public: { "trigger", rbac::RBAC_PERM_COMMAND_GO_TRIGGER, false, &HandleGoTriggerCommand, "" }, { "zonexy", rbac::RBAC_PERM_COMMAND_GO_ZONEXY, false, &HandleGoZoneXYCommand, "" }, { "xyz", rbac::RBAC_PERM_COMMAND_GO_XYZ, false, &HandleGoXYZCommand, "" }, - { "bugticket", rbac::RBAC_PERM_COMMAND_GO_TICKET, false, &HandleGoTicketCommand, "" }, + { "ticket", rbac::RBAC_PERM_COMMAND_GO_TICKET, false, &HandleGoTicketCommand, "" }, { "", rbac::RBAC_PERM_COMMAND_GO, false, &HandleGoXYZCommand, "" }, }; From 1c519a74e2f620ac8a35a1b49c1a8010d9f76fca Mon Sep 17 00:00:00 2001 From: Rushor Date: Fri, 23 Oct 2015 18:59:16 +0200 Subject: [PATCH 192/524] DB/Creature: Zul'Farrak - Disable Movement for Trolls after Death * else the corescript moves the dead creatures --- sql/updates/world/2015_10_23_00_world.sql | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 sql/updates/world/2015_10_23_00_world.sql diff --git a/sql/updates/world/2015_10_23_00_world.sql b/sql/updates/world/2015_10_23_00_world.sql new file mode 100644 index 0000000000..ed83c4897e --- /dev/null +++ b/sql/updates/world/2015_10_23_00_world.sql @@ -0,0 +1,28 @@ +-- +-- Sandfury Cretin SAI +SET @ENTRY := 7789; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=2; +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 +(@ENTRY,0,2,0,6,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Cretin - On Just Died - Set Rooted On"); + +-- Sandfury Slave SAI +SET @ENTRY := 7787; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,6,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Slave - On Just Died - Set Rooted On"); + +-- Sandfury Drudge SAI +SET @ENTRY := 7788; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,6,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Drudge - On Just Died - Set Rooted On"); + +-- Sandfury Zealot SAI +SET @ENTRY := 8877; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=2; +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 +(@ENTRY,0,2,0,6,0,100,0,0,0,0,0,103,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sandfury Zealot - On Just Died - Set Rooted On"); From eae956c88da0f49e0c1d777f8785670b6bd52aeb Mon Sep 17 00:00:00 2001 From: Rushor Date: Fri, 23 Oct 2015 20:49:47 +0200 Subject: [PATCH 193/524] DB/Creature: Cenarion Circle Reputation closes #15759 --- sql/updates/world/2015_10_23_01_world.sql | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 sql/updates/world/2015_10_23_01_world.sql diff --git a/sql/updates/world/2015_10_23_01_world.sql b/sql/updates/world/2015_10_23_01_world.sql new file mode 100644 index 0000000000..01d4dd4206 --- /dev/null +++ b/sql/updates/world/2015_10_23_01_world.sql @@ -0,0 +1,32 @@ +-- Cenarion Circle Reputation +DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (15335, 15727); +INSERT INTO `creature_onkill_reputation` (`creature_id`, `RewOnKillRepFaction1`, `RewOnKillRepFaction2`, `MaxStanding1`, `IsTeamAward1`, `RewOnKillRepValue1`, `MaxStanding2`, `IsTeamAward2`, `RewOnKillRepValue2`, `TeamDependent`) VALUES +(15335, 609, 0, 7, 0, 6, 0, 0, 0, 0), +(15727, 609, 0, 7, 0, 1100, 0, 0, 0, 0); + +DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (15355, 15538, 15537, 15389, 15391, 15392, 15385, 15338, 15335, 15390, 15319, 15318, 15323, 15320, 15327, 15325, 15386, 15388, 15317, 15316, 15324, 15336); +INSERT INTO `creature_onkill_reputation` (`creature_id`, `RewOnKillRepFaction1`, `RewOnKillRepFaction2`, `MaxStanding1`, `IsTeamAward1`, `RewOnKillRepValue1`, `MaxStanding2`, `IsTeamAward2`, `RewOnKillRepValue2`, `TeamDependent`) VALUES +(15335, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15317, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15316, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15324, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15338, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15386, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15325, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15336, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15327, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15320, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15323, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15318, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15319, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15385, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15390, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15392, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15391, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15389, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15537, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15538, 609, 0, 7, 0, 10, 0, 0, 0, 0), +(15355, 609, 0, 7, 0, 10, 0, 0, 0, 0); + +UPDATE `creature_onkill_reputation` SET `RewOnKillRepValue1`=11 WHERE `creature_id` IN (15333, 15461, 15387, 15343); +UPDATE `creature_onkill_reputation` SET `RewOnKillRepFaction2`=609, `MaxStanding2`=7, `RewOnKillRepValue2`=73 WHERE `creature_id` IN (15276, 15275); From 641f34c78a41e3ebe1428c431dbbd2808a543cf9 Mon Sep 17 00:00:00 2001 From: Rushor Date: Fri, 23 Oct 2015 21:40:54 +0200 Subject: [PATCH 194/524] DB/Pathing: Azuremyst Isle Updates * by @Grz3s --- sql/updates/world/2015_10_23_02_world.sql | 394 ++++++++++++++++++++++ 1 file changed, 394 insertions(+) create mode 100644 sql/updates/world/2015_10_23_02_world.sql diff --git a/sql/updates/world/2015_10_23_02_world.sql b/sql/updates/world/2015_10_23_02_world.sql new file mode 100644 index 0000000000..3227d9b209 --- /dev/null +++ b/sql/updates/world/2015_10_23_02_world.sql @@ -0,0 +1,394 @@ +-- Azuremyst Isle + +-- Duplicates +DELETE FROM creature WHERE guid IN (57365,57401,57367,57392); +DELETE FROM creature_addon WHERE guid IN (57365,57401,57367,57392); +-- Vale Moth +UPDATE creature SET position_x = -4056.166748, position_y = -13679.827148, position_z = 70.195099, orientation = 2.894147 WHERE guid = 57400; +UPDATE creature SET position_x = -4009.254883, position_y = -13751.575195, position_z = 69.994392, orientation = 1.271510 WHERE guid = 57362; +UPDATE creature SET position_x = -4002.972168, position_y = -13721.668945, position_z = 66.997993, orientation = 5.467894 WHERE guid = 57364; + +-- Mutated Root Lasher +DELETE FROM creature_addon WHERE guid IN (SELECT guid FROM creature WHERE id = 16517); +UPDATE creature SET position_x = -4072.798828, position_y = -13457.387695, position_z = 53.739014, orientation = 0.767300 WHERE guid = 57304; + +-- Megelon +-- should kneel +DELETE FROM `creature_template_addon` WHERE `entry`=16475; +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(16475,0,0,8,1,0, ''); + +-- Red Crystal Bunny +UPDATE creature_template SET inhabittype = 4 WHERE entry = 17947; + +UPDATE creature SET spawndist = 0, MovementType = 0 WHERE guid IN (57429,57418,57435,57419,57417,57425,57431); +UPDATE creature SET position_x = -4494.916016, position_y = -13426.375977, position_z = 50.020802, orientation = 0.199758 WHERE guid = 57424; +UPDATE creature SET position_x = -4493.666016, position_y = -13412.100586, position_z = 49.711666, orientation = 5.910391 WHERE guid = 57426; +UPDATE creature SET position_x = -4489.001953, position_y = -13347.736328, position_z = 55.123600, spawndist = 5 WHERE guid = 57433; +UPDATE creature SET position_x = -4558.07, position_y = -13383, position_z = 84.0283, orientation = 0.980421, spawndist = 0, MovementType = 0 WHERE guid = 57415; +UPDATE creature SET position_x = -4561.61, position_y = -13332, position_z = 78.297, orientation = 4.36313, spawndist = 0, MovementType = 0 WHERE guid = 57438; +UPDATE creature SET position_x = -4495.072754, position_y = -13341.267578, position_z = 54.948174, orientation = 0.872046, spawndist = 0, MovementType = 2 WHERE guid = 57432; +UPDATE creature SET spawndist = 0, MovementType = 2 WHERE guid IN (57436,57420); + +SET @NPC := 57420; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -4570.33, -13342, 79.7079), +(@PATH, 2, -4572.42, -13338.7, 81.9836), +(@PATH, 3, -4573.8, -13332.1, 85.5403), +(@PATH, 4, -4573.62, -13325.4, 88.0573), +(@PATH, 5, -4571.77, -13319.3, 88.317), +(@PATH, 6, -4558.65, -13302.6, 85.9795), +(@PATH, 7, -4550.41, -13299, 82.8511), +(@PATH, 8, -4542.54, -13296.4, 79.706), +(@PATH, 9, -4551.81, -13299.4, 83.4887), +(@PATH, 10, -4558, -13302.1, 85.7307), +(@PATH, 11, -4569.98, -13314.4, 87.7967), +(@PATH, 12, -4574.35, -13325.8, 87.9575), +(@PATH, 13, -4574.1, -13333.5, 84.9354), +(@PATH, 14, -4572.79, -13338.5, 82.1879), +(@PATH, 15, -4570.21, -13342.1, 79.6678), +(@PATH, 16, -4565.7, -13343.3, 78.4452); + +SET @NPC := 57436; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -4537.6, -13317.9, 77.7301), +(@PATH, 2, -4531.29, -13317.2, 77.917), +(@PATH, 3, -4538.35, -13312.8, 77.9808), +(@PATH, 4, -4538.11, -13320.2, 77.6869), +(@PATH, 5, -4536.77, -13324.9, 77.5682), +(@PATH, 6, -4537, -13320.7, 77.6223), +(@PATH, 7, -4533.12, -13307.4, 77.7173), +(@PATH, 8, -4525.5, -13301.3, 77.8192), +(@PATH, 9, -4516, -13301.1, 76.9484), +(@PATH, 10, -4508.35, -13305, 74.2754), +(@PATH, 11, -4503.76, -13309.2, 70.6749), +(@PATH, 12, -4502.26, -13315, 68.1374), +(@PATH, 13, -4500.93, -13322.2, 64.4202), +(@PATH, 14, -4502.32, -13314.8, 68.1939), +(@PATH, 15, -4505.17, -13307.9, 71.7238), +(@PATH, 16, -4511.36, -13302.8, 75.8496), +(@PATH, 17, -4521.51, -13300.4, 77.5693), +(@PATH, 18, -4529.88, -13303.2, 77.7191), +(@PATH, 19, -4536.49, -13312.7, 77.9282), +(@PATH, 20, -4542.37, -13324.8, 77.5282), +(@PATH, 21, -4550.38, -13333.2, 77.7908), +(@PATH, 22, -4550.78, -13344.5, 78.0558), +(@PATH, 23, -4548.2, -13347.2, 77.6171), +(@PATH, 24, -4544.49, -13348.3, 76.6312), +(@PATH, 25, -4550.57, -13355.2, 78.4657), +(@PATH, 26, -4541.91, -13366.4, 75.7633), +(@PATH, 27, -4537.09, -13379.5, 72.2425), +(@PATH, 28, -4526.18, -13391.8, 63.0653), +(@PATH, 29, -4535.68, -13382.6, 70.6931), +(@PATH, 30, -4540.1, -13371.5, 74.4121), +(@PATH, 31, -4543.29, -13364.2, 76.4836), +(@PATH, 32, -4549.18, -13357.4, 78.4678), +(@PATH, 33, -4553.56, -13358.2, 78.9982), +(@PATH, 34, -4556.42, -13365.6, 82.0062), +(@PATH, 35, -4557.25, -13379.6, 84.2324), +(@PATH, 36, -4556.48, -13368.8, 83.0642), +(@PATH, 37, -4554.17, -13357.4, 78.9413), +(@PATH, 38, -4550.83, -13348.5, 78.0941), +(@PATH, 39, -4551.95, -13326, 78.1122), +(@PATH, 40, -4552.54, -13331.4, 77.8854), +(@PATH, 41, -4555.86, -13336.1, 77.8128), +(@PATH, 42, -4560.8, -13337.2, 77.8925), +(@PATH, 43, -4561.78, -13335, 78.0228), +(@PATH, 44, -4560.34, -13337.7, 77.8832), +(@PATH, 45, -4551.95, -13333.7, 77.7376), +(@PATH, 46, -4543.65, -13322.2, 77.7184); + +SET @NPC := 57432; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -4503.06, -13357.7, 54.1247), +(@PATH, 2, -4506.78, -13373.2, 53.7056), +(@PATH, 3, -4507.36, -13387, 53.8641), +(@PATH, 4, -4506.39, -13372.9, 53.7694), +(@PATH, 5, -4502.84, -13357.5, 54.1533), +(@PATH, 6, -4495.22, -13341.5, 54.8385); + +UPDATE creature SET spawndist = 0, MovementType = 0 WHERE guid IN (57473,57466,57319,57321,57468,57467,57320,57470,57472,57474,57471,57316,57457,57458,57450,57462,57318,57463,57465,57464,57461); +UPDATE creature SET position_x = -4471.007813, position_y = -14096.670898, position_z = 109.848373, orientation = 2.725909 WHERE guid = 57464; +UPDATE creature SET position_x = -4643.638672, position_y = -13940.991211, position_z = 85.342995, orientation = 5.246780 WHERE guid = 57474; +-- missing added - -- UDB free guid used + +DELETE FROM creature WHERE guid IN ( +75958, +75959, +75960, +75961, +75962, +75963, +75964, +75965, +75966, +75967); + +INSERT INTO creature (guid, id, map, spawnMask, phaseMask, modelid, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, spawndist, curhealth, curmana, MovementType) VALUES +(75958,16537,530,1,1,0,0,-4434.66,-13759.4,56.6934,6.16494,300,0,71,0,2), +(75959,16537,530,1,1,0,0,-4447.7,-13871.1,100.039,0.550673,300,0,71,0,2), +(75960,16537,530,1,1,0,0,-4589.24,-13965.9,82.7032,3.97444,300,0,71,0,2), +(75961,16537,530,1,1,0,0,-4594.7,-14003.5,86.0174,1.36692,300,0,71,0,2), +(75962,16537,530,1,1,0,0,-4654.6,-13981.2,85.2454,0.550101,300,5,71,0,1), + -- Nestlewwod Owlkin +(75963,16518,530,1,1,0,0,-4523.47,-14045.3,108.254,1.15354,300,0,86,0,2), +(75964,16518,530,1,1,0,0,-4622.08,-13980.5,83.0399,5.28298,300,0,86,0,0), +(75965,16518,530,1,1,0,0,-4637.72,-13935.3,86.0136,5.21538,300,0,71,0,0), +(75966,16518,530,1,1,0,0,-4667.34,-13966,87.076,5.68662,300,0,86,0,0), +(75967,16518,530,1,1,0,0,-4646.43,-14010,88.6244,2.11305,300,0,71,0,0); + +SET @NPC := 75961; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -4592.98, -13982.5, 84.4159), +(@PATH, 2, -4586.16, -13971.4, 82.9927), +(@PATH, 3, -4580.24, -13956.1, 83.3117), +(@PATH, 4, -4572.24, -13945.5, 83.977), +(@PATH, 5, -4553.06, -13927.5, 84.9424), +(@PATH, 6, -4540.27, -13916, 87.0233), +(@PATH, 7, -4533.76, -13907.4, 89.6782), +(@PATH, 8, -4526.08, -13901.9, 91.075), +(@PATH, 9, -4511.39, -13896.2, 93.3214), +(@PATH, 10, -4501.98, -13896, 95.7497), +(@PATH, 11, -4513.02, -13896.4, 92.8177), +(@PATH, 12, -4524.08, -13900.5, 91.1834), +(@PATH, 13, -4533.81, -13907.2, 89.7356), +(@PATH, 14, -4537.63, -13911.7, 87.7131), +(@PATH, 15, -4543.6, -13919.2, 87.4545), +(@PATH, 16, -4552.8, -13927.3, 84.9588), +(@PATH, 17, -4576.24, -13949, 83.6602), +(@PATH, 18, -4589.23, -13952, 83.2427), +(@PATH, 19, -4604.19, -13952, 83.5327), +(@PATH, 20, -4616.22, -13947.2, 83.8974), +(@PATH, 21, -4627.14, -13943.9, 84.4674), +(@PATH, 22, -4637.3, -13944.4, 85.009), +(@PATH, 23, -4649.9, -13949.8, 85.5586), +(@PATH, 24, -4657.77, -13959.4, 86.2783), +(@PATH, 25, -4664.29, -13969.3, 86.5976), +(@PATH, 26, -4662.94, -13981.2, 86.5135), +(@PATH, 27, -4659.69, -13991.1, 87.4205), +(@PATH, 28, -4659.05, -14002.6, 88.7217), +(@PATH, 29, -4658.11, -13991.3, 87.3414), +(@PATH, 30, -4652.72, -13982.8, 85.1681), +(@PATH, 31, -4644.96, -13980.1, 83.6062), +(@PATH, 32, -4629.25, -13979.6, 82.8775), +(@PATH, 33, -4612.33, -13973.1, 83.1243), +(@PATH, 34, -4597.79, -13975.3, 83.3084), +(@PATH, 35, -4592.27, -13985.8, 84.9837), +(@PATH, 36, -4594.39, -14003.7, 86.0171); + +SET @NPC := 75960; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -4592.27, -13969.7, 82.8063), +(@PATH, 2, -4598.27, -13970.8, 82.8528), +(@PATH, 3, -4602.71, -13969, 82.9031), +(@PATH, 4, -4605.37, -13963.2, 82.86), +(@PATH, 5, -4604.43, -13957.7, 82.9402), +(@PATH, 6, -4599.52, -13953.3, 83.2446), +(@PATH, 7, -4593.36, -13953.8, 83.11), +(@PATH, 8, -4588.46, -13958.5, 82.7968), +(@PATH, 9, -4588.68, -13965.4, 82.7122); + +SET @NPC := 75963; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -4517.82, -14036.6, 109.638), +(@PATH, 2, -4512.34, -14031.9, 111.705), +(@PATH, 3, -4504.76, -14032, 115.22), +(@PATH, 4, -4495.7, -14035, 120.769), +(@PATH, 5, -4485.96, -14035.7, 125.867), +(@PATH, 6, -4477.07, -14034.1, 130.216), +(@PATH, 7, -4468.08, -14026.7, 135.697), +(@PATH, 8, -4463.56, -14019.2, 139.389), +(@PATH, 9, -4462.25, -14008.6, 144.543), +(@PATH, 10, -4462.15, -13995.7, 151.398), +(@PATH, 11, -4459.33, -13989.3, 155.012), +(@PATH, 12, -4453.88, -13984, 158.884), +(@PATH, 13, -4442.96, -13977.9, 162.913), +(@PATH, 14, -4437.08, -13973.9, 163.54), +(@PATH, 15, -4442.83, -13978.1, 162.882), +(@PATH, 16, -4447.89, -13981.6, 160.698), +(@PATH, 17, -4454.41, -13984.3, 158.621), +(@PATH, 18, -4459.15, -13988.9, 155.249), +(@PATH, 19, -4462.06, -13995.7, 151.433), +(@PATH, 20, -4463.62, -14005.8, 145.88), +(@PATH, 21, -4464.5, -14015.9, 140.278), +(@PATH, 22, -4465.92, -14022.3, 137.806), +(@PATH, 23, -4473.41, -14032, 132.139), +(@PATH, 24, -4480.65, -14035.1, 128.564), +(@PATH, 25, -4489.53, -14035.6, 123.745), +(@PATH, 26, -4499.66, -14033.4, 118.385), +(@PATH, 27, -4509.38, -14031.3, 113.055), +(@PATH, 28, -4516.56, -14033.5, 110.339), +(@PATH, 29, -4522.55, -14042.1, 108.413), +(@PATH, 30, -4522.58, -14049.5, 108.513), +(@PATH, 31, -4511.73, -14069.1, 108.323), +(@PATH, 32, -4494.98, -14092.5, 108.716), +(@PATH, 33, -4480.21, -14106.9, 109.008), +(@PATH, 34, -4476.78, -14106.6, 109.331), +(@PATH, 35, -4480.54, -14107, 109.074), +(@PATH, 36, -4501.89, -14085, 108.471), +(@PATH, 37, -4513.44, -14066.2, 108.282), +(@PATH, 38, -4523.29, -14045.9, 108.31), +(@PATH, 39, -4531.47, -14045.2, 107.159), +(@PATH, 40, -4540.48, -14042.7, 104.373), +(@PATH, 41, -4545.76, -14038.1, 101.742), +(@PATH, 42, -4549.34, -14028.7, 97.4769), +(@PATH, 43, -4550.8, -14014.1, 91.238), +(@PATH, 44, -4549.57, -14028.6, 97.381), +(@PATH, 45, -4545.99, -14038.1, 101.736), +(@PATH, 46, -4540.46, -14042.4, 104.306), +(@PATH, 47, -4531.34, -14045, 107.178), +(@PATH, 48, -4522.13, -14050.4, 108.592), +(@PATH, 49, -4503.35, -14075.6, 108.32), +(@PATH, 50, -4475.96, -14095.1, 109.774), +(@PATH, 51, -4473.36, -14101.2, 109.944), +(@PATH, 52, -4474.57, -14105.7, 109.152), +(@PATH, 53, -4480.68, -14108, 109.006), +(@PATH, 54, -4502.26, -14085.2, 108.472), +(@PATH, 55, -4522.41, -14050.8, 108.626), +(@PATH, 56, -4522.98, -14042.5, 108.354); + +SET @NPC := 75959; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -4438.31, -13862.6, 91.776), +(@PATH, 2, -4431.32, -13855.8, 84.8948), +(@PATH, 3, -4426.89, -13851, 80.9621), +(@PATH, 4, -4425.11, -13841, 79.7135), +(@PATH, 5, -4425.27, -13831.5, 80.3198), +(@PATH, 6, -4428.9, -13821.8, 80.8588), +(@PATH, 7, -4431.14, -13808.6, 82.159), +(@PATH, 8, -4428.98, -13822, 80.8303), +(@PATH, 9, -4425.5, -13831.3, 80.3171), +(@PATH, 10, -4425.99, -13848.9, 80.3403), +(@PATH, 11, -4422.94, -13853.1, 79.9921), +(@PATH, 12, -4405.51, -13848.8, 71.1473), +(@PATH, 13, -4394.64, -13843.8, 69.9378), +(@PATH, 14, -4373.31, -13829.4, 69.2241), +(@PATH, 15, -4367.44, -13827.8, 69.2241), +(@PATH, 16, -4374.24, -13829.8, 69.2241), +(@PATH, 17, -4395.14, -13844.2, 69.9654), +(@PATH, 18, -4401.71, -13847.1, 70.3372), +(@PATH, 19, -4408.22, -13846.1, 70.6981), +(@PATH, 20, -4410.12, -13840.5, 68.5303), +(@PATH, 21, -4407.06, -13825, 62.3528), +(@PATH, 22, -4406.01, -13816.6, 60.4572), +(@PATH, 23, -4401.2, -13811.8, 58.4539), +(@PATH, 24, -4395.99, -13804.2, 55.897), +(@PATH, 25, -4401.33, -13812.3, 58.5553), +(@PATH, 26, -4405.57, -13815.9, 60.3377), +(@PATH, 27, -4407.42, -13829.5, 63.9209), +(@PATH, 28, -4409.96, -13840.7, 68.609), +(@PATH, 29, -4407.79, -13845.8, 70.5699), +(@PATH, 30, -4401.1, -13847.4, 70.3476), +(@PATH, 31, -4393.45, -13843.7, 69.9347), +(@PATH, 32, -4373.67, -13829.4, 69.2235), +(@PATH, 33, -4366.85, -13827.6, 69.2235), +(@PATH, 34, -4374.52, -13829.8, 69.228), +(@PATH, 35, -4397.51, -13845.3, 70.0348), +(@PATH, 36, -4405.96, -13849.2, 71.4118), +(@PATH, 37, -4420.98, -13853.4, 79.1551), +(@PATH, 38, -4425.01, -13851.3, 80.4895), +(@PATH, 39, -4426.2, -13842.6, 79.8567), +(@PATH, 40, -4425.92, -13830.4, 80.3672), +(@PATH, 41, -4429.15, -13820.9, 80.9154), +(@PATH, 42, -4431.09, -13808.4, 82.1788), +(@PATH, 43, -4429.49, -13822.1, 80.7973), +(@PATH, 44, -4425.68, -13831.3, 80.2927), +(@PATH, 45, -4425.49, -13843.3, 79.8208), +(@PATH, 46, -4426.59, -13851.3, 80.9487), +(@PATH, 47, -4431.98, -13856.3, 85.4742), +(@PATH, 48, -4438.4, -13862.8, 91.9377), +(@PATH, 49, -4446.83, -13869.7, 99.5607), +(@PATH, 50, -4450.92, -13879.3, 102.427), +(@PATH, 51, -4447.55, -13889, 107.062), +(@PATH, 52, -4439.39, -13901.1, 116.042), +(@PATH, 53, -4435.46, -13912.5, 124.001), +(@PATH, 54, -4434.29, -13919.4, 128.474), +(@PATH, 55, -4429.09, -13933.4, 138.171), +(@PATH, 56, -4429.81, -13941.6, 143.975), +(@PATH, 57, -4426.58, -13948.8, 149.331), +(@PATH, 58, -4424.46, -13957.5, 154.731), +(@PATH, 59, -4424.99, -13971.4, 161.606), +(@PATH, 60, -4425, -13966.8, 160.317), +(@PATH, 61, -4424.71, -13954.9, 153.1), +(@PATH, 62, -4426.49, -13948.2, 149.01), +(@PATH, 63, -4429.64, -13942, 144.229), +(@PATH, 64, -4429.46, -13931.9, 137.163), +(@PATH, 65, -4433.91, -13920.2, 129.02), +(@PATH, 66, -4436.84, -13906.8, 119.518), +(@PATH, 67, -4439.42, -13900.3, 115.63), +(@PATH, 68, -4445.36, -13893.5, 110.394), +(@PATH, 69, -4449.88, -13882.6, 103.797), +(@PATH, 70, -4450.84, -13875.1, 101.276), +(@PATH, 71, -4448.44, -13870.8, 100.18); + +SET @NPC := 75958; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -4397.45, -13759, 52.5403), +(@PATH, 2, -4387.6, -13750.7, 51.187), +(@PATH, 3, -4384.44, -13738.6, 50.5713), +(@PATH, 4, -4385.32, -13731.1, 50.4359), +(@PATH, 5, -4391.07, -13724.8, 50.5065), +(@PATH, 6, -4426.98, -13722.3, 51.7162), +(@PATH, 7, -4437.56, -13719.7, 51.5869), +(@PATH, 8, -4446.66, -13713.5, 49.9453), +(@PATH, 9, -4450.02, -13707.3, 48.3929), +(@PATH, 10, -4448.54, -13698.3, 47.5457), +(@PATH, 11, -4440.44, -13690.5, 45.7925), +(@PATH, 12, -4434.76, -13689.6, 45.5794), +(@PATH, 13, -4430.11, -13694, 46.9106), +(@PATH, 14, -4423.66, -13715.8, 51.0542), +(@PATH, 15, -4418.28, -13721.3, 51.1114), +(@PATH, 16, -4391.7, -13722.8, 50.4426), +(@PATH, 17, -4381.61, -13727.8, 50.2699), +(@PATH, 18, -4380.06, -13739.4, 50.4521), +(@PATH, 19, -4383.25, -13752.4, 50.4515), +(@PATH, 20, -4392.68, -13769.2, 52.2511), +(@PATH, 21, -4390.35, -13775.7, 52.1454), +(@PATH, 22, -4370.44, -13787.6, 52.2808), +(@PATH, 23, -4368.16, -13791.2, 52.3032), +(@PATH, 24, -4369.71, -13795.9, 52.4165), +(@PATH, 25, -4379.54, -13798.8, 52.1976), +(@PATH, 26, -4391, -13795.6, 53.3708), +(@PATH, 27, -4392.48, -13786.4, 52.7211), +(@PATH, 28, -4409.88, -13759.7, 53.5569), +(@PATH, 29, -4434.79, -13759.4, 56.6967); From 11f0c85bd48e7d487609c1a5a82d7e544ca8d84e Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Sun, 25 Oct 2015 18:21:08 +0200 Subject: [PATCH 195/524] Core/Quests: Fix a CMSG injection abuse. closes #15709 --- src/server/game/Handlers/QuestHandler.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 91bc8309b1..fd7c4439c8 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -124,8 +124,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) if (Player* playerQuestObject = object->ToPlayer()) { - if ((_player->GetDivider() && _player->GetDivider() != guid) || - ((object != _player && !playerQuestObject->CanShareQuest(questId)))) + if ((_player->GetDivider() && _player->GetDivider() != guid) || !playerQuestObject->CanShareQuest(questId)) { CLOSE_GOSSIP_CLEAR_DIVIDER(); return; From 1ef1d42d145c18579a7e7ca15cebb38485bc0cff Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Sun, 25 Oct 2015 18:22:57 +0200 Subject: [PATCH 196/524] Core/Player: Fix not being able to do seasonal quests(if already done in the past) --- src/server/game/Entities/Player/Player.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index bfcdb7a8f5..93e1b0c618 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15906,6 +15906,16 @@ bool Player::GetQuestRewardStatus(uint32 quest_id) const Quest const* qInfo = sObjectMgr->GetQuestTemplate(quest_id); if (qInfo) { + if (qInfo->IsSeasonal() && !qInfo->IsRepeatable()) + { + uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo); + if (m_seasonalquests.find(eventId) != m_seasonalquests.end()) + return m_seasonalquests.find(eventId)->second.find(quest_id) == m_seasonalquests.find(eventId)->second.end(); + + return false; + } + + // for repeatable quests: rewarded field is set after first reward only to prevent getting XP more than once if (!qInfo->IsRepeatable()) return m_RewardedQuests.find(quest_id) != m_RewardedQuests.end(); @@ -15924,8 +15934,17 @@ QuestStatus Player::GetQuestStatus(uint32 quest_id) const return itr->second.Status; if (Quest const* qInfo = sObjectMgr->GetQuestTemplate(quest_id)) + { + if (qInfo->IsSeasonal() && !qInfo->IsRepeatable()) + { + uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo); + if (m_seasonalquests.find(eventId) == m_seasonalquests.end() || m_seasonalquests.find(eventId)->second.find(quest_id) == m_seasonalquests.find(eventId)->second.end()) + return QUEST_STATUS_NONE; + } + if (!qInfo->IsRepeatable() && m_RewardedQuests.find(quest_id) != m_RewardedQuests.end()) return QUEST_STATUS_REWARDED; + } } return QUEST_STATUS_NONE; } From aea883d10b5bfa93b7a625f726833076a03cce47 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Sun, 25 Oct 2015 19:58:14 +0100 Subject: [PATCH 197/524] DB/Event: Add missing Hallow's End event spawns in Dalaran By @Kittnz & @Kilyana --- sql/updates/world/2015_10_23_03_world.sql | 859 ++++++++++++++++++++++ 1 file changed, 859 insertions(+) create mode 100644 sql/updates/world/2015_10_23_03_world.sql diff --git a/sql/updates/world/2015_10_23_03_world.sql b/sql/updates/world/2015_10_23_03_world.sql new file mode 100644 index 0000000000..c966be415f --- /dev/null +++ b/sql/updates/world/2015_10_23_03_world.sql @@ -0,0 +1,859 @@ +SET @OGUID:=77266; +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+430 AND `eventEntry`=12; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+430; +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,180415, 571, 1, 1, 5759.221, 574.9567, 649.9132, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+1,180415, 571, 1, 1, 5755.542, 570.8301, 650.9344, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+2,180415, 571, 1, 1, 5757.676, 573.3919, 650.1688, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+3,180415, 571, 1, 1, 5746.643, 578.5375, 650.8829, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+4,180415, 571, 1, 1, 5748.668, 581.0043, 650.151, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+5,180415, 571, 1, 1, 5749.933, 582.6556, 649.8248, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+6,180406, 571, 1, 1, 5728.36, 610.9005, 649.4632, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+7,180415, 571, 1, 1, 5715.421, 644.4554, 648.6602, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+8,180415, 571, 1, 1, 5715.515, 646.4188, 648.6602, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+9,180415, 571, 1, 1, 5753.461, 568.1178, 651.6292, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+10,180415, 571, 1, 1, 5744.647, 575.9879, 651.6357, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+11,180415, 571, 1, 1, 5715.134, 648.1215, 648.6602, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+12,180415, 571, 1, 1, 5751.013, 565.1844, 651.9471, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+13,180472, 571, 1, 1, 5732.004, 677.9211, 653.3353, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+14,180472, 571, 1, 1, 5728.826, 680.5181, 653.5024, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+15,180415, 571, 1, 1, 5741.146, 571.6998, 652.0657, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+16,180415, 571, 1, 1, 5714.502, 642.7459, 648.6602, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+17,180407, 571, 1, 1, 5732.993, 687.059, 647.7728, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+18,180406, 571, 1, 1, 5743.645, 693.545, 622.6204, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+19,180406, 571, 1, 1, 5731.452, 685.2674, 647.8353, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+20,180472, 571, 1, 1, 5767.736, 709.554, 623.3895, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+21,180415, 571, 1, 1, 5712.989, 641.5297, 648.6602, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+22,180415, 571, 1, 1, 5885.288, 649.3917, 648.3478, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+23,180415, 571, 1, 1, 5884.635, 650.209, 648.3451, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+24,180415, 571, 1, 1, 5857.195, 694.9765, 642.7598, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+25,180415, 571, 1, 1, 5884.362, 655.5961, 647.7375, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+26,180415, 571, 1, 1, 5884.462, 651.8329, 648.3445, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+27,180415, 571, 1, 1, 5884.962, 652.7103, 648.349, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+28,180415, 571, 1, 1, 5882.854, 654.217, 647.4544, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+29,180415, 571, 1, 1, 5882.08, 652.5934, 646.7969, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+30,180415, 571, 1, 1, 5881.939, 650.6448, 646.3702, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+31,180415, 571, 1, 1, 5887.319, 654.8732, 647.7352, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+32,180415, 571, 1, 1, 5872.773, 683.941, 643.9858, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+33,180415, 571, 1, 1, 5888.374, 653.126, 648.3439, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+34,180415, 571, 1, 1, 5888.698, 649.7112, 648.3463, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+35,180415, 571, 1, 1, 5886.394, 656.2161, 647.7482, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+36,180415, 571, 1, 1, 5887.868, 649.1268, 648.3483, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+37,180415, 571, 1, 1, 5887.483, 653.6826, 648.3387, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+38,180415, 571, 1, 1, 5887.04, 648.8273, 648.3465, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+39,180406, 571, 1, 1, 5867.473, 689.6141, 643.0695, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+40,180415, 571, 1, 1, 5885.699, 653.4232, 648.3426, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+41,180415, 571, 1, 1, 5853.894, 697.7454, 642.7382, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+42,180415, 571, 1, 1, 5886.554, 653.7294, 648.3412, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+43,180415, 571, 1, 1, 5886.262, 649.0009, 648.3515, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+44,180415, 571, 1, 1, 5868.731, 687.4305, 643.9653, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+45,180415, 571, 1, 1, 5859.763, 697.9153, 644.2113, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+46,180415, 571, 1, 1, 5870.243, 688.5043, 644.9064, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+47,180415, 571, 1, 1, 5856.464, 700.5812, 644.1898, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+48,180415, 571, 1, 1, 5889.053, 652.2928, 648.3411, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+49,180415, 571, 1, 1, 5889.22, 650.639, 648.3416, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+50,180415, 571, 1, 1, 5873.591, 685.6783, 644.8956, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+51,180415, 571, 1, 1, 5831.401, 719.1722, 641.9816, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+52,180415, 571, 1, 1, 5836.437, 717.9185, 642.9285, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+53,180415, 571, 1, 1, 5835.081, 716.1272, 642.0018, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+54,180415, 571, 1, 1, 5832.815, 720.7052, 642.9305, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+55,180472, 571, 1, 1, 5814.139, 724.2066, 628.9741, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+56,180411, 571, 1, 1, 5852.397, 719.2882, 645.0352, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+57,180411, 571, 1, 1, 5776.054, 717.1719, 621.5515, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+58,180407, 571, 1, 1, 5774.249, 718.1202, 624.7645, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+59,180407, 571, 1, 1, 5776.448, 568.1436, 650.5096, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+60,180415, 571, 1, 1, 5712.064, 650.5781, 648.6602, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+61,180415, 571, 1, 1, 5713.762, 649.6603, 648.6602, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+62,180415, 571, 1, 1, 5711.214, 640.9504, 648.6602, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+63,180415, 571, 1, 1, 5743.377, 555.9014, 652.7935, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+64,180415, 571, 1, 1, 5748.702, 562.2153, 652.2548, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+65,180415, 571, 1, 1, 5739.39, 569.5277, 652.2971, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+66,180415, 571, 1, 1, 5746.047, 559.1688, 652.5618, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+67,180415, 571, 1, 1, 5736.597, 566.2489, 652.5988, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+68,180415, 571, 1, 1, 5740.009, 551.746, 653.0452, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+69,180415, 571, 1, 1, 5733.646, 562.5793, 652.8564, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+70,180415, 571, 1, 1, 5703.292, 611.9144, 646.913, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+71,180415, 571, 1, 1, 5706.292, 643.5551, 648.6602, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+72,180415, 571, 1, 1, 5705.489, 608.3424, 646.913, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+73,180415, 571, 1, 1, 5707.491, 642.0325, 648.6602, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+74,180415, 571, 1, 1, 5709.232, 641.1325, 648.6602, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+75,180415, 571, 1, 1, 5730.303, 558.2949, 653.1008, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+76,180415, 571, 1, 1, 5727.385, 554.3962, 653.2108, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+77,180415, 571, 1, 1, 5736.26, 546.9634, 653.2068, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+78,180415, 571, 1, 1, 5710.064, 650.7815, 648.6602, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+79,180407, 571, 1, 1, 5819.17, 537.0236, 654.2689, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+80,180406, 571, 1, 1, 5825.69, 539.1132, 654.2733, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+81,180429, 571, 1, 1, 5890.736, 547.4893, 649.311, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4613) +(@OGUID+82,180406, 571, 1, 1, 5881.452, 527.659, 641.7739, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+83,180472, 571, 1, 1, 5858.2, 635.0283, 654.1966, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+84,180411, 571, 1, 1, 5843.23, 641.0156, 651.1626, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613) +(@OGUID+85,180472, 571, 1, 1, 5885.185, 523.5266, 649.183, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+86,180415, 571, 1, 1, 5883.065, 523.7357, 642.2219, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+87,180415, 571, 1, 1, 5884.091, 519.3121, 641.5697, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+88,180429, 571, 1, 1, 5900.888, 555.5231, 649.303, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4613) +(@OGUID+89,180415, 571, 1, 1, 5886.866, 524.562, 642.2232, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+90,180472, 571, 1, 1, 5885.981, 520.1681, 649.2055, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+91,180415, 571, 1, 1, 5881.253, 512.0975, 641.5697, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+92,180411, 571, 1, 1, 5851.213, 642.0174, 651.0532, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613) +(@OGUID+93,180415, 571, 1, 1, 5882.032, 509.4985, 641.5697, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+94,180415, 571, 1, 1, 5811.41, 654.3241, 647.392, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+95,180415, 571, 1, 1, 5860.809, 639.9338, 648.7387, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+96,180415, 571, 1, 1, 5857.7, 642.8248, 648.7574, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+97,180415, 571, 1, 1, 5821.589, 653.7233, 647.4023, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+98,180407, 571, 1, 1, 5874.733, 503.2205, 644.0117, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+99,180472, 571, 1, 1, 5854.177, 643.7856, 621.9326, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+100,180415, 571, 1, 1, 5887.842, 520.2131, 641.5697, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+101,180415, 571, 1, 1, 5882.763, 505.9572, 641.5697, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+102,180415, 571, 1, 1, 5806.485, 653.2708, 609.8859, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+103,180472, 571, 1, 1, 5911.032, 576.6434, 619.5021, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+104,180415, 571, 1, 1, 5908.835, 572.4176, 612.8084, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+105,180415, 571, 1, 1, 5909.355, 557.9609, 616.0233, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+106,180415, 571, 1, 1, 5914.888, 579.7658, 612.8085, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+107,180415, 571, 1, 1, 5917.828, 556.0546, 616.0338, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+108,180407, 571, 1, 1, 5922.737, 572.6234, 612.5124, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+109,180415, 571, 1, 1, 5857.261, 647.3333, 648.7574, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+110,180406, 571, 1, 1, 5861.599, 649.9679, 658.3734, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+111,180407, 571, 1, 1, 5861.045, 644.9129, 658.374, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+112,180472, 571, 1, 1, 5853.057, 649.1964, 665.2919, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+113,180415, 571, 1, 1, 5928.843, 579.6561, 616.0331, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+114,180407, 571, 1, 1, 5934.309, 611.9305, 652.9676, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+115,180415, 571, 1, 1, 5856.715, 651.5797, 648.7574, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+116,180415, 571, 1, 1, 5893.633, 514.4703, 641.5697, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+117,180411, 571, 1, 1, 5849.691, 655.1979, 651.0836, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613) +(@OGUID+118,180415, 571, 1, 1, 5934.673, 573.1963, 616.0229, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+119,180411, 571, 1, 1, 5841.72, 654.2864, 651.1182, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613) +(@OGUID+120,180415, 571, 1, 1, 5856.279, 656.2487, 648.7574, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+121,180415, 571, 1, 1, 5928.253, 556.8299, 616.0229, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+122,180415, 571, 1, 1, 5933.573, 563.7382, 616.0335, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+123,180415, 571, 1, 1, 5893.986, 512.0244, 641.5697, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+124,180415, 571, 1, 1, 5894.723, 508.7653, 641.5697, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+125,180415, 571, 1, 1, 5858.74, 659.7316, 648.7386, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+126,180415, 571, 1, 1, 5935.716, 564.6371, 610.6148, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+127,180415, 571, 1, 1, 5930.358, 557.245, 610.5422, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+128,180472, 571, 1, 1, 5846.67, 654.1088, 618.3235, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+129,180410, 571, 1, 1, 5850.755, 664.9973, 658.8376, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4613) +(@OGUID+130,180415, 571, 1, 1, 5841.599, 664.91, 609.8859, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+131,180472, 571, 1, 1, 5855.111, 663.9308, 654.1978, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+132,180407, 571, 1, 1, 5948.633, 614.5261, 650.6004, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+133,180415, 571, 1, 1, 5836.036, 660.7959, 609.8859, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+134,180406, 571, 1, 1, 5939.868, 564.8651, 612.0865, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+135,180410, 571, 1, 1, 5844.364, 664.4332, 647.9496, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4613) +(@OGUID+136,180411, 571, 1, 1, 5893.518, 492.6269, 644.5281, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4616) +(@OGUID+137,180407, 571, 1, 1, 5875.965, 497.4745, 657.2557, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616) +(@OGUID+138,180407, 571, 1, 1, 5863.621, 487.1664, 641.5697, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616) +(@OGUID+139,180406, 571, 1, 1, 5864.623, 480.571, 641.5697, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616) +(@OGUID+140,180406, 571, 1, 1, 5877.73, 489.3853, 657.3113, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616) +(@OGUID+141,180415, 571, 1, 1, 5892.837, 490.0521, 641.2783, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+142,180415, 571, 1, 1, 5891.826, 490.1104, 641.5697, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+143,180415, 571, 1, 1, 5895.737, 492.6667, 640.7758, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+144,180472, 571, 1, 1, 5864.557, 470.3632, 647.7255, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4616) +(@OGUID+145,180415, 571, 1, 1, 5893.601, 489.979, 641.0445, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+146,180415, 571, 1, 1, 5902.456, 493.8513, 640.7816, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+147,180415, 571, 1, 1, 5895.705, 475.3102, 641.3199, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+148,180415, 571, 1, 1, 5894.93, 474.8922, 641.5697, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+149,180407, 571, 1, 1, 5883.147, 462.4044, 657.2766, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616) +(@OGUID+150,180415, 571, 1, 1, 5896.422, 475.6479, 641.0445, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+151,180411, 571, 1, 1, 5899.214, 464.7854, 644.7711, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4616) +(@OGUID+152,180415, 571, 1, 1, 5906.314, 475.4718, 640.7803, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+153,180411, 571, 1, 1, 5880.079, 459.3812, 662.5659, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4616) +(@OGUID+154,180415, 571, 1, 1, 5899.555, 474.0015, 640.776, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+155,180415, 571, 1, 1, 5825.489, 463.355, 658.7728, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+156,180415, 571, 1, 1, 5820.489, 466.2061, 658.7727, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+157,180415, 571, 1, 1, 5814.865, 467.4187, 658.7726, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+158,180406, 571, 1, 1, 5877.546, 452.3022, 657.9406, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616) +(@OGUID+159,180415, 571, 1, 1, 5831.669, 453.8633, 658.7728, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+160,180415, 571, 1, 1, 5829.311, 459.1713, 658.7728, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+161,180410, 571, 1, 1, 5873.148, 451.0983, 642.2259, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4616) +(@OGUID+162,180410, 571, 1, 1, 5907.471, 449.2349, 642.2161, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4616) +(@OGUID+163,180415, 571, 1, 1, 5809.19, 466.7998, 658.7725, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+164,180415, 571, 1, 1, 5831.065, 442.6467, 658.7728, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+165,180415, 571, 1, 1, 5803.969, 464.4766, 658.7724, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+166,180415, 571, 1, 1, 5832.148, 448.1182, 658.7727, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+167,180415, 571, 1, 1, 5828.126, 437.6552, 658.7726, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+168,180406, 571, 1, 1, 5814.591, 573.3528, 649.9803, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+169,180406, 571, 1, 1, 5965.314, 596.2342, 650.6269, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616) +(@OGUID+170,180406, 571, 1, 1, 5943.678, 636.6887, 652.9681, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4616) +(@OGUID+171,180410, 571, 1, 1, 5851.691, 630.7206, 658.9904, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4616) +(@OGUID+172,180415, 571, 1, 1, 5849.42, 630.6858, 648.6568, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+173,180415, 571, 1, 1, 5850.446, 631.7395, 647.5121, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+174,180472, 571, 1, 1, 5845.358, 629.1765, 623.5621, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4616) +(@OGUID+175,180407, 571, 1, 1, 5979.741, 625.2219, 650.6269, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616) +(@OGUID+176,180410, 571, 1, 1, 5842.257, 636.217, 647.894, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4616) +(@OGUID+177,180415, 571, 1, 1, 5846.326, 633.0816, 648.738, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+178,180415, 571, 1, 1, 5847.134, 634.3536, 647.5121, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4616) +(@OGUID+179,180407, 571, 1, 1, 5818.687, 619.2923, 613.1467, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4616) +(@OGUID+180,180415, 571, 1, 1, 5820.354, 632.9934, 647.3919, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+181,180415, 571, 1, 1, 5814.812, 625.3407, 647.392, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+182,180406, 571, 1, 1, 5808.426, 620.7781, 649.5657, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+183,180415, 571, 1, 1, 5809.522, 628.6146, 647.392, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+184,180472, 571, 1, 1, 5835.432, 637.2127, 619.9534, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+185,180415, 571, 1, 1, 5816.108, 637.7375, 647.392, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+186,180415, 571, 1, 1, 5814.764, 643.3781, 647.3929, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+187,180415, 571, 1, 1, 5806.706, 634.3302, 648.2245, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+188,180415, 571, 1, 1, 5803.731, 634.0671, 648.2162, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+189,180415, 571, 1, 1, 5803.088, 629.0997, 647.3966, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+190,180415, 571, 1, 1, 5817.476, 648.9861, 647.392, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+191,180415, 571, 1, 1, 5798.526, 625.1855, 647.392, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+192,180415, 571, 1, 1, 5809.953, 641.7255, 648.2184, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+193,180407, 571, 1, 1, 5800.643, 620.0817, 649.5657, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+194,180415, 571, 1, 1, 5810.266, 638.7852, 648.2237, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+195,180415, 571, 1, 1, 5814.763, 631.7408, 609.8859, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+196,180415, 571, 1, 1, 5824.873, 659.8167, 647.4612, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+197,180415, 571, 1, 1, 5795.606, 621.2239, 647.3924, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+198,180415, 571, 1, 1, 5805.514, 645.3051, 648.2424, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+199,180415, 571, 1, 1, 5815.022, 659.305, 647.4066, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+200,180415, 571, 1, 1, 5817.596, 637.9969, 609.8859, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+201,180415, 571, 1, 1, 5806.178, 650.1483, 647.3949, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+202,180415, 571, 1, 1, 5799.287, 637.6236, 648.2151, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+203,180415, 571, 1, 1, 5799.006, 640.5789, 648.2176, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+204,180415, 571, 1, 1, 5809.311, 627.6649, 609.8859, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+205,180415, 571, 1, 1, 5802.596, 644.9901, 648.22, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+206,180406, 571, 1, 1, 5799.613, 575.9578, 633.1762, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+207,180415, 571, 1, 1, 5791.946, 630.3287, 647.392, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+208,180415, 571, 1, 1, 5794.709, 635.8553, 647.3961, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+209,180415, 571, 1, 1, 5816.86, 644.9385, 609.8859, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+210,180415, 571, 1, 1, 5793.807, 640.3995, 647.3958, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+211,180415, 571, 1, 1, 5801.429, 649.8392, 647.4017, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+212,180415, 571, 1, 1, 5789.164, 626.7645, 647.3924, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+213,180415, 571, 1, 1, 5819.923, 663.9031, 647.4847, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+214,180415, 571, 1, 1, 5802.309, 626.9839, 609.8859, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+215,180415, 571, 1, 1, 5790.742, 604.8807, 609.8859, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+216,180415, 571, 1, 1, 5812.88, 650.5403, 609.8859, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+217,180415, 571, 1, 1, 5796.077, 629.7592, 609.8859, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+218,180415, 571, 1, 1, 5787.88, 598.5773, 609.8859, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+219,180415, 571, 1, 1, 5788.278, 648.998, 647.2794, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+220,180415, 571, 1, 1, 5792.746, 654.9274, 647.4214, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+221,180415, 571, 1, 1, 5829.179, 660.076, 609.8859, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+222,180415, 571, 1, 1, 5822.864, 662.8907, 609.8859, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+223,180415, 571, 1, 1, 5790.068, 611.6815, 609.8859, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+224,180415, 571, 1, 1, 5844.557, 671.1918, 609.8859, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+225,180415, 571, 1, 1, 5782.394, 594.4963, 609.8859, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+226,180415, 571, 1, 1, 5799.559, 652.5767, 609.8859, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+227,180415, 571, 1, 1, 5785.96, 617.3203, 609.8859, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+228,180415, 571, 1, 1, 5818.826, 668.4368, 609.8859, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+229,180415, 571, 1, 1, 5791.192, 642.2432, 609.8859, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+230,180415, 571, 1, 1, 5791.933, 635.3745, 609.8859, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+231,180415, 571, 1, 1, 5818.045, 675.3859, 609.8859, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+232,180415, 571, 1, 1, 5794.031, 648.5314, 609.8859, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+233,180415, 571, 1, 1, 5843.832, 678.011, 609.8859, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+234,180415, 571, 1, 1, 5839.708, 683.6341, 609.8859, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+235,180415, 571, 1, 1, 5772.786, 619.4384, 609.8859, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+236,180415, 571, 1, 1, 5779.674, 620.1669, 609.8859, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+237,180415, 571, 1, 1, 5775.475, 593.8323, 609.8859, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+238,180415, 571, 1, 1, 5820.88, 681.6428, 609.8859, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+239,180415, 571, 1, 1, 5833.342, 686.4538, 609.8859, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+240,180406, 571, 1, 1, 5770.311, 581.2781, 619.9363, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+241,180415, 571, 1, 1, 5769.2, 596.6345, 609.8859, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+242,180407, 571, 1, 1, 5753.431, 594.8392, 619.9331, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+243,180415, 571, 1, 1, 5767.191, 615.3619, 609.8859, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+244,180415, 571, 1, 1, 5765.103, 602.2392, 609.8859, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+245,180415, 571, 1, 1, 5764.401, 609.0145, 609.8859, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+246,180415, 571, 1, 1, 5799.662, 460.6987, 658.7724, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598) +(@OGUID+247,180415, 571, 1, 1, 5796.819, 455.7213, 658.7723, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598) +(@OGUID+248,180415, 571, 1, 1, 5796.333, 444.3685, 658.772, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598) +(@OGUID+249,180415, 571, 1, 1, 5795.719, 450.095, 658.7721, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598) +(@OGUID+250,180415, 571, 1, 1, 5798.614, 439.1821, 658.7722, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598) +(@OGUID+251,180415, 571, 1, 1, 5818.679, 431.5019, 658.7725, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598) +(@OGUID+252,180415, 571, 1, 1, 5823.953, 433.8398, 658.7726, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4598) +(@OGUID+253,180415, 571, 1, 1, 5802.473, 434.9366, 658.7722, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4564) +(@OGUID+254,180415, 571, 1, 1, 5807.424, 432.0813, 658.7723, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4564) +(@OGUID+255,180415, 571, 1, 1, 5812.94, 430.9195, 658.7723, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4564) +(@OGUID+256,180415, 571, 1, 1, 5754.749, 614.3086, 650.5781, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+257,180415, 571, 1, 1, 5752.304, 612.6968, 650.5865, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+258,180415, 571, 1, 1, 5749.63, 613.0443, 650.5931, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+259,180415, 571, 1, 1, 5747.075, 615.2822, 650.555, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+260,180415, 571, 1, 1, 5744.621, 617.712, 649.0058, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+261,180472, 571, 1, 1, 5762.698, 626.3858, 622.6323, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+262,180472, 571, 1, 1, 5751.257, 635.6403, 625.4073, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+263,180472, 571, 1, 1, 5772.164, 641.6515, 625.404, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+264,180472, 571, 1, 1, 5780.46, 648.5278, 623.1652, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+265,180415, 571, 1, 1, 5699.396, 613.3456, 646.913, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+266,180406, 571, 1, 1, 5715.341, 537.7757, 654.431, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4567) +(@OGUID+267,180415, 571, 1, 1, 5694.938, 612.3784, 646.913, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+268,180415, 571, 1, 1, 5741.505, 643.7399, 648.7906, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+269,180415, 571, 1, 1, 5739.154, 636.8212, 648.0576, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+270,180407, 571, 1, 1, 5684.432, 627.8524, 647.1506, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4567) +(@OGUID+271,180415, 571, 1, 1, 5705.729, 645.3735, 648.6602, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+272,180415, 571, 1, 1, 5705.89, 647.2834, 648.6602, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+273,180415, 571, 1, 1, 5706.852, 649.0601, 648.6602, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+274,180415, 571, 1, 1, 5708.286, 650.1924, 648.6602, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+275,180415, 571, 1, 1, 5744.292, 647.872, 650.5656, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+276,180472, 571, 1, 1, 5759.925, 650.0181, 625.4079, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4567) +(@OGUID+277,180415, 571, 1, 1, 5747.346, 650.718, 650.5872, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+278,180415, 571, 1, 1, 5751.074, 649.3328, 650.5782, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4567) +(@OGUID+279,180472, 571, 1, 1, 5772.861, 661.1832, 625.4011, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4567) +(@OGUID+280,180411, 571, 1, 1, 5725.395, 683.3143, 650.6137, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613) +(@OGUID+281,180407, 571, 1, 1, 5718.163, 673.8229, 647.5087, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+282,180407, 571, 1, 1, 5778.422, 682.1052, 643.6171, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+283,180406, 571, 1, 1, 5702.005, 692.7043, 655.5365, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+284,180415, 571, 1, 1, 5783.094, 693.3018, 647.382, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+285,180415, 571, 1, 1, 5784.806, 690.4636, 647.4271, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+286,180407, 571, 1, 1, 5663.047, 663.5198, 654.332, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+287,180472, 571, 1, 1, 5697.199, 694.4003, 650.3392, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+288,180411, 571, 1, 1, 5705.412, 698.7116, 659.8047, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613) +(@OGUID+289,180406, 571, 1, 1, 5796.241, 685.36, 622.4468, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+290,180415, 571, 1, 1, 5782.856, 691.076, 619.1068, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+291,180407, 571, 1, 1, 5776.292, 694.8016, 620.0498, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+292,180406, 571, 1, 1, 5710.861, 703.6387, 655.5365, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+293,180415, 571, 1, 1, 5773.052, 697.6647, 618.808, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+294,180415, 571, 1, 1, 5770.577, 700.3301, 618.9056, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+295,180415, 571, 1, 1, 5777.162, 695.6837, 618.886, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+296,180411, 571, 1, 1, 5762.035, 699.783, 621.4487, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4613) +(@OGUID+297,180472, 571, 1, 1, 5695.049, 700.8595, 658.7589, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568) +(@OGUID+298,180472, 571, 1, 1, 5692.463, 698.1651, 646.9638, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568) +(@OGUID+299,180406, 571, 1, 1, 5656.161, 674.6107, 651.9675, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4568) +(@OGUID+300,180406, 571, 1, 1, 5673.89, 687.817, 654.3331, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4568) +(@OGUID+301,180407, 571, 1, 1, 5680.124, 714.1534, 653.8931, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568) +(@OGUID+302,180407, 571, 1, 1, 5643.794, 704.9396, 651.9927, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568) +(@OGUID+303,180472, 571, 1, 1, 5711.498, 710.7621, 658.8002, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568) +(@OGUID+304,180472, 571, 1, 1, 5682.352, 717.6917, 660.2382, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568) +(@OGUID+305,180472, 571, 1, 1, 5713.616, 713.4178, 659.8443, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568) +(@OGUID+306,180472, 571, 1, 1, 5707.959, 708.0295, 650.3406, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568) +(@OGUID+307,180472, 571, 1, 1, 5680.694, 719.1438, 648.2689, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568) +(@OGUID+308,180472, 571, 1, 1, 5701.399, 708.7687, 658.7588, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4568) +(@OGUID+309,180407, 571, 1, 1, 5672.957, 714.2048, 642.0627, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568) +(@OGUID+310,180406, 571, 1, 1, 5677.349, 729.4107, 653.3925, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4568) +(@OGUID+311,180407, 571, 1, 1, 5654.972, 745.8715, 643.2557, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568) +(@OGUID+312,180407, 571, 1, 1, 5629.459, 729.5208, 643.1681, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4568) +(@OGUID+313,180406, 571, 1, 1, 5647.172, 752.6823, 643.2747, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4568) +(@OGUID+314,180411, 571, 1, 1, 5740.034, 730.2188, 646.2493, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4568) +(@OGUID+315,180415, 571, 1, 1, 5757.258, 714.6268, 621.7719, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4568) +(@OGUID+316,180410, 571, 1, 1, 5754.624, 713.8906, 618.7103, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4568) +(@OGUID+317,180411, 571, 1, 1, 5759.559, 714.3611, 646.4409, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4568) +(@OGUID+318,180415, 571, 1, 1, 5760.468, 718.4333, 621.6825, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4568) +(@OGUID+319,180410, 571, 1, 1, 5760.893, 721.6644, 618.6522, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4568) +(@OGUID+320,180415, 571, 1, 1, 5783.688, 696.0384, 647.3867, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+321,180415, 571, 1, 1, 5785.933, 698.4983, 647.3533, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+322,180415, 571, 1, 1, 5788.838, 701.0469, 645.5853, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+323,180415, 571, 1, 1, 5787.46, 697.2659, 619.1364, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+324,180415, 571, 1, 1, 5782.752, 703.0441, 618.8907, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+325,180415, 571, 1, 1, 5790.956, 702.4618, 645.574, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+326,180415, 571, 1, 1, 5793.381, 703.7379, 645.5629, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+327,180415, 571, 1, 1, 5780.374, 706.554, 618.8164, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+328,180415, 571, 1, 1, 5777.6, 709.0973, 618.8805, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+329,180415, 571, 1, 1, 5798.407, 704.9445, 643.7188, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+330,180415, 571, 1, 1, 5798.076, 707.0781, 643.2503, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+331,180407, 571, 1, 1, 5796.173, 707.6254, 641.702, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+332,180415, 571, 1, 1, 5797.557, 709.8958, 642.1785, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+333,180406, 571, 1, 1, 5805.458, 708.4065, 641.4847, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+334,180415, 571, 1, 1, 5803.493, 707.8524, 643.1374, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+335,180415, 571, 1, 1, 5808.656, 705.1858, 645.5119, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+336,180406, 571, 1, 1, 5810.498, 684.2795, 613.1106, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+337,180415, 571, 1, 1, 5815.443, 686.139, 620.7764, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+338,180429, 571, 1, 1, 5820.363, 685.0911, 651.8358, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4613) +(@OGUID+339,180415, 571, 1, 1, 5814.018, 684.253, 620.7783, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+340,180415, 571, 1, 1, 5803.706, 705.5712, 643.6826, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+341,180415, 571, 1, 1, 5819.794, 694.0382, 647.324, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+342,180415, 571, 1, 1, 5818.243, 689.6962, 620.7728, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+343,180415, 571, 1, 1, 5813.675, 703.7327, 645.5302, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+344,180415, 571, 1, 1, 5811.034, 704.5538, 645.5168, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+345,180415, 571, 1, 1, 5816.901, 687.9096, 620.7746, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+346,180415, 571, 1, 1, 5803.448, 710.5295, 642.1144, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+347,180415, 571, 1, 1, 5821.086, 697.1408, 647.4297, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+348,180415, 571, 1, 1, 5817.18, 701.6979, 647.2963, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+349,180428, 571, 1, 1, 5770.154, 735.5269, 641.4877, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180428 (Area: 4613) +(@OGUID+350,180415, 571, 1, 1, 5819.856, 699.8424, 647.4349, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+351,180415, 571, 1, 1, 5826.483, 685.6487, 609.8859, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4613) +(@OGUID+352,180406, 571, 1, 1, 5759.826, 735.288, 619.8346, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+353,180408, 571, 1, 1, 5771.545, 737.5035, 643.0945, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4613) +(@OGUID+354,180472, 571, 1, 1, 5778.527, 742.8954, 628.8207, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4613) +(@OGUID+355,180406, 571, 1, 1, 5715.729, 758.2275, 641.7689, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+356,180407, 571, 1, 1, 5849.386, 695.0423, 618.1664, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+357,180407, 571, 1, 1, 5824.359, 760.3876, 640.3284, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4613) +(@OGUID+358,180406, 571, 1, 1, 5817.995, 795.4424, 636.5713, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4613) +(@OGUID+359,180411, 571, 1, 1, 5866.639, 738.9694, 644.7529, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4619) +(@OGUID+360,180415, 571, 1, 1, 5863.78, 735.2543, 640.5769, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619) +(@OGUID+361,180415, 571, 1, 1, 5863.101, 737.2114, 641.4838, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619) +(@OGUID+362,180415, 571, 1, 1, 5867.234, 738.8976, 641.493, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619) +(@OGUID+363,180415, 571, 1, 1, 5868.181, 737.1629, 640.6047, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619) +(@OGUID+364,180411, 571, 1, 1, 5866.184, 738.7732, 642.8267, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4619) +(@OGUID+365,180406, 571, 1, 1, 5868.594, 725.371, 639.2031, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4619) +(@OGUID+366,180407, 571, 1, 1, 5876.713, 739.0898, 639.2625, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4619) +(@OGUID+367,180415, 571, 1, 1, 5881.346, 740.5377, 641.2245, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619) +(@OGUID+368,180415, 571, 1, 1, 5881.581, 738.4108, 640.2767, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4619) +(@OGUID+369,180415, 571, 1, 1, 5885.815, 741.3719, 641.2227, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+370,180415, 571, 1, 1, 5886.161, 739.3089, 640.2971, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+371,180415, 571, 1, 1, 5894.53, 711.022, 642.7033, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+372,180415, 571, 1, 1, 5899.31, 745.5648, 641.9313, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+373,180415, 571, 1, 1, 5898.649, 743.8654, 640.9814, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+374,180415, 571, 1, 1, 5892.321, 708.2484, 643.9171, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+375,180415, 571, 1, 1, 5913.069, 726.2639, 642.1484, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+376,180415, 571, 1, 1, 5903.729, 744.6061, 642.0323, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+377,180411, 571, 1, 1, 5906.245, 742.7525, 644.4848, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+378,180415, 571, 1, 1, 5903.366, 742.7047, 641.1063, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+379,180415, 571, 1, 1, 5915.093, 726.1569, 643.0661, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+380,180415, 571, 1, 1, 5915.276, 730.6907, 643.0677, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+381,180415, 571, 1, 1, 5913.209, 731.0977, 642.1209, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+382,180415, 571, 1, 1, 5914.37, 712.4825, 643.2484, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+383,180415, 571, 1, 1, 5897.809, 708.4827, 642.675, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+384,180415, 571, 1, 1, 5912.41, 712.7233, 642.2968, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+385,180415, 571, 1, 1, 5912.094, 708.0308, 642.4371, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+386,180415, 571, 1, 1, 5914.194, 707.9479, 643.3494, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+387,180415, 571, 1, 1, 5895.294, 705.7078, 643.9164, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+388,180407, 571, 1, 1, 5899.475, 704.617, 641.8773, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+389,180411, 571, 1, 1, 5895.397, 691.5417, 647.283, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+390,180415, 571, 1, 1, 5897.531, 684.7337, 643.5082, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4560) +(@OGUID+391,180415, 571, 1, 1, 5900.777, 688.1335, 643.5274, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4560) +(@OGUID+392,180415, 571, 1, 1, 5899.163, 683.2125, 644.4352, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4560) +(@OGUID+393,180415, 571, 1, 1, 5902.085, 686.6057, 644.4786, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4560) +(@OGUID+394,180429, 571, 1, 1, 5951.905, 675.3125, 656.6282, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4570) +(@OGUID+395, 180405, 571, 1, 1, 5760.702, 701.1509, 624.7817, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+396, 180405, 571, 1, 1, 5775.396, 533.9785, 643.1385, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+397, 180405, 571, 1, 1, 5847.228, 553.8382, 655.0237, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+398, 180405, 571, 1, 1, 5722.783, 531.7375, 654.4309, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+399, 180405, 571, 1, 1, 5822.742, 502.0839, 657.3818, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+400, 180405, 571, 1, 1, 5869.858, 617.1184, 619.7509, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+401, 180405, 571, 1, 1, 5854.306, 634.2508, 647.5121, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+402, 180405, 571, 1, 1, 5886.771, 528.7459, 641.8399, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+403, 180405, 571, 1, 1, 5863.885, 640.6849, 647.049, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+404, 180405, 571, 1, 1, 5917.715, 566.2281, 612.521, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+405, 180405, 571, 1, 1, 5860.379, 654.9897, 658.3739, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+406, 180405, 571, 1, 1, 5899.553, 509.2794, 643.4328, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+407, 180405, 571, 1, 1, 5865.935, 488.1068, 657.8251, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4616) +(@OGUID+408, 180405, 571, 1, 1, 5899.716, 457.0769, 643.6509, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4616) +(@OGUID+409, 180405, 571, 1, 1, 5804.67, 572.4031, 650.2531, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4616) +(@OGUID+410, 180405, 571, 1, 1, 5952.642, 625.262, 650.6025, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4616) +(@OGUID+411, 180405, 571, 1, 1, 5779.202, 595.5325, 651.0052, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+412, 180405, 571, 1, 1, 5904.518, 662.9713, 643.8431, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+413, 180405, 571, 1, 1, 5764.936, 593.0349, 615.7024, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+414, 180405, 571, 1, 1, 5742.553, 629.7415, 648.2349, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+415, 180405, 571, 1, 1, 5795.288, 666.0266, 613.8831, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4567) +(@OGUID+416, 180405, 571, 1, 1, 5772.321, 675.5978, 643.5193, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+417, 180405, 571, 1, 1, 5715.069, 682.2311, 647.5992, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+418, 180405, 571, 1, 1, 5723.762, 693.092, 647.5992, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+419, 180405, 571, 1, 1, 5627.806, 677.0311, 651.9927, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568) +(@OGUID+420, 180405, 571, 1, 1, 5661.1, 685.0604, 651.9661, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568) +(@OGUID+421, 180405, 571, 1, 1, 5668.602, 719.249, 653.3779, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568) +(@OGUID+422, 180405, 571, 1, 1, 5688.877, 724.2303, 645.729, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568) +(@OGUID+423, 180405, 571, 1, 1, 5629.213, 732.0972, 643.1825, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568) +(@OGUID+424, 180405, 571, 1, 1, 5706.784, 747.1557, 641.7341, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4568) +(@OGUID+425, 180405, 571, 1, 1, 5783.512, 703.9484, 620.0486, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+426, 180405, 571, 1, 1, 5821.932, 693.4803, 643.1427, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+427, 180405, 571, 1, 1, 5771.341, 737.5543, 641.4539, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+428, 180405, 571, 1, 1, 5790.703, 741.6038, 623.3499, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4613) +(@OGUID+429, 180405, 571, 1, 1, 5862, 734.8575, 639.8586, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4619) +(@OGUID+430, 180405, 571, 1, 1, 5912.15, 721.3925, 641.4152, 4.97419, 0, 0, 0, 1, 120, 255, 1); -- 180405 (Area: 0) + +SET @OGUID:=77266; +INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES +(12, @OGUID+0), +(12, @OGUID+1), +(12, @OGUID+2), +(12, @OGUID+3), +(12, @OGUID+4), +(12, @OGUID+5), +(12, @OGUID+6), +(12, @OGUID+7), +(12, @OGUID+8), +(12, @OGUID+9), +(12, @OGUID+10), +(12, @OGUID+11), +(12, @OGUID+12), +(12, @OGUID+13), +(12, @OGUID+14), +(12, @OGUID+15), +(12, @OGUID+16), +(12, @OGUID+17), +(12, @OGUID+18), +(12, @OGUID+19), +(12, @OGUID+20), +(12, @OGUID+21), +(12, @OGUID+22), +(12, @OGUID+23), +(12, @OGUID+24), +(12, @OGUID+25), +(12, @OGUID+26), +(12, @OGUID+27), +(12, @OGUID+28), +(12, @OGUID+29), +(12, @OGUID+30), +(12, @OGUID+31), +(12, @OGUID+32), +(12, @OGUID+33), +(12, @OGUID+34), +(12, @OGUID+35), +(12, @OGUID+36), +(12, @OGUID+37), +(12, @OGUID+38), +(12, @OGUID+39), +(12, @OGUID+40), +(12, @OGUID+51), +(12, @OGUID+52), +(12, @OGUID+53), +(12, @OGUID+54), +(12, @OGUID+55), +(12, @OGUID+56), +(12, @OGUID+57), +(12, @OGUID+58), +(12, @OGUID+59), +(12, @OGUID+60), +(12, @OGUID+61), +(12, @OGUID+62), +(12, @OGUID+63), +(12, @OGUID+64), +(12, @OGUID+65), +(12, @OGUID+66), +(12, @OGUID+67), +(12, @OGUID+68), +(12, @OGUID+69), +(12, @OGUID+70), +(12, @OGUID+71), +(12, @OGUID+72), +(12, @OGUID+73), +(12, @OGUID+74), +(12, @OGUID+75), +(12, @OGUID+76), +(12, @OGUID+77), +(12, @OGUID+78), +(12, @OGUID+79), +(12, @OGUID+80), +(12, @OGUID+81), +(12, @OGUID+82), +(12, @OGUID+83), +(12, @OGUID+84), +(12, @OGUID+85), +(12, @OGUID+86), +(12, @OGUID+87), +(12, @OGUID+88), +(12, @OGUID+89), +(12, @OGUID+90), +(12, @OGUID+91), +(12, @OGUID+92), +(12, @OGUID+93), +(12, @OGUID+94), +(12, @OGUID+95), +(12, @OGUID+96), +(12, @OGUID+97), +(12, @OGUID+98), +(12, @OGUID+99), +(12, @OGUID+100), +(12, @OGUID+101), +(12, @OGUID+102), +(12, @OGUID+103), +(12, @OGUID+104), +(12, @OGUID+105), +(12, @OGUID+106), +(12, @OGUID+107), +(12, @OGUID+108), +(12, @OGUID+109), +(12, @OGUID+110), +(12, @OGUID+111), +(12, @OGUID+112), +(12, @OGUID+113), +(12, @OGUID+114), +(12, @OGUID+115), +(12, @OGUID+116), +(12, @OGUID+117), +(12, @OGUID+118), +(12, @OGUID+119), +(12, @OGUID+120), +(12, @OGUID+121), +(12, @OGUID+122), +(12, @OGUID+123), +(12, @OGUID+124), +(12, @OGUID+125), +(12, @OGUID+126), +(12, @OGUID+127), +(12, @OGUID+128), +(12, @OGUID+129), +(12, @OGUID+130), +(12, @OGUID+131), +(12, @OGUID+132), +(12, @OGUID+133), +(12, @OGUID+134), +(12, @OGUID+135), +(12, @OGUID+136), +(12, @OGUID+137), +(12, @OGUID+138), +(12, @OGUID+139), +(12, @OGUID+140), +(12, @OGUID+141), +(12, @OGUID+142), +(12, @OGUID+143), +(12, @OGUID+144), +(12, @OGUID+145), +(12, @OGUID+146), +(12, @OGUID+147), +(12, @OGUID+148), +(12, @OGUID+149), +(12, @OGUID+150), +(12, @OGUID+151), +(12, @OGUID+152), +(12, @OGUID+153), +(12, @OGUID+154), +(12, @OGUID+155), +(12, @OGUID+156), +(12, @OGUID+157), +(12, @OGUID+158), +(12, @OGUID+159), +(12, @OGUID+160), +(12, @OGUID+161), +(12, @OGUID+162), +(12, @OGUID+163), +(12, @OGUID+164), +(12, @OGUID+165), +(12, @OGUID+166), +(12, @OGUID+167), +(12, @OGUID+168), +(12, @OGUID+169), +(12, @OGUID+170), +(12, @OGUID+171), +(12, @OGUID+172), +(12, @OGUID+173), +(12, @OGUID+174), +(12, @OGUID+175), +(12, @OGUID+176), +(12, @OGUID+177), +(12, @OGUID+178), +(12, @OGUID+179), +(12, @OGUID+180), +(12, @OGUID+181), +(12, @OGUID+182), +(12, @OGUID+183), +(12, @OGUID+184), +(12, @OGUID+185), +(12, @OGUID+186), +(12, @OGUID+187), +(12, @OGUID+188), +(12, @OGUID+189), +(12, @OGUID+190), +(12, @OGUID+191), +(12, @OGUID+192), +(12, @OGUID+193), +(12, @OGUID+194), +(12, @OGUID+195), +(12, @OGUID+196), +(12, @OGUID+197), +(12, @OGUID+198), +(12, @OGUID+199), +(12, @OGUID+200), +(12, @OGUID+201), +(12, @OGUID+202), +(12, @OGUID+203), +(12, @OGUID+204), +(12, @OGUID+205), +(12, @OGUID+206), +(12, @OGUID+207), +(12, @OGUID+208), +(12, @OGUID+209), +(12, @OGUID+210), +(12, @OGUID+211), +(12, @OGUID+212), +(12, @OGUID+213), +(12, @OGUID+214), +(12, @OGUID+215), +(12, @OGUID+216), +(12, @OGUID+217), +(12, @OGUID+218), +(12, @OGUID+219), +(12, @OGUID+220), +(12, @OGUID+221), +(12, @OGUID+222), +(12, @OGUID+223), +(12, @OGUID+224), +(12, @OGUID+225), +(12, @OGUID+226), +(12, @OGUID+227), +(12, @OGUID+228), +(12, @OGUID+229), +(12, @OGUID+230), +(12, @OGUID+231), +(12, @OGUID+232), +(12, @OGUID+233), +(12, @OGUID+234), +(12, @OGUID+235), +(12, @OGUID+236), +(12, @OGUID+237), +(12, @OGUID+238), +(12, @OGUID+239), +(12, @OGUID+240), +(12, @OGUID+241), +(12, @OGUID+242), +(12, @OGUID+243), +(12, @OGUID+244), +(12, @OGUID+245), +(12, @OGUID+246), +(12, @OGUID+247), +(12, @OGUID+248), +(12, @OGUID+249), +(12, @OGUID+250), +(12, @OGUID+251), +(12, @OGUID+252), +(12, @OGUID+253), +(12, @OGUID+254), +(12, @OGUID+255), +(12, @OGUID+256), +(12, @OGUID+257), +(12, @OGUID+258), +(12, @OGUID+259), +(12, @OGUID+260), +(12, @OGUID+261), +(12, @OGUID+262), +(12, @OGUID+263), +(12, @OGUID+264), +(12, @OGUID+265), +(12, @OGUID+266), +(12, @OGUID+267), +(12, @OGUID+268), +(12, @OGUID+269), +(12, @OGUID+270), +(12, @OGUID+271), +(12, @OGUID+272), +(12, @OGUID+273), +(12, @OGUID+274), +(12, @OGUID+275), +(12, @OGUID+276), +(12, @OGUID+277), +(12, @OGUID+278), +(12, @OGUID+279), +(12, @OGUID+280), +(12, @OGUID+281), +(12, @OGUID+282), +(12, @OGUID+283), +(12, @OGUID+284), +(12, @OGUID+285), +(12, @OGUID+286), +(12, @OGUID+287), +(12, @OGUID+288), +(12, @OGUID+289), +(12, @OGUID+290), +(12, @OGUID+291), +(12, @OGUID+292), +(12, @OGUID+293), +(12, @OGUID+294), +(12, @OGUID+295), +(12, @OGUID+296), +(12, @OGUID+297), +(12, @OGUID+298), +(12, @OGUID+299), +(12, @OGUID+300), +(12, @OGUID+301), +(12, @OGUID+302), +(12, @OGUID+303), +(12, @OGUID+304), +(12, @OGUID+305), +(12, @OGUID+306), +(12, @OGUID+307), +(12, @OGUID+308), +(12, @OGUID+309), +(12, @OGUID+310), +(12, @OGUID+311), +(12, @OGUID+312), +(12, @OGUID+313), +(12, @OGUID+314), +(12, @OGUID+315), +(12, @OGUID+316), +(12, @OGUID+317), +(12, @OGUID+318), +(12, @OGUID+319), +(12, @OGUID+320), +(12, @OGUID+321), +(12, @OGUID+322), +(12, @OGUID+323), +(12, @OGUID+324), +(12, @OGUID+325), +(12, @OGUID+326), +(12, @OGUID+327), +(12, @OGUID+328), +(12, @OGUID+329), +(12, @OGUID+330), +(12, @OGUID+331), +(12, @OGUID+332), +(12, @OGUID+333), +(12, @OGUID+334), +(12, @OGUID+335), +(12, @OGUID+336), +(12, @OGUID+337), +(12, @OGUID+338), +(12, @OGUID+339), +(12, @OGUID+340), +(12, @OGUID+341), +(12, @OGUID+342), +(12, @OGUID+343), +(12, @OGUID+344), +(12, @OGUID+345), +(12, @OGUID+346), +(12, @OGUID+347), +(12, @OGUID+348), +(12, @OGUID+349), +(12, @OGUID+350), +(12, @OGUID+351), +(12, @OGUID+352), +(12, @OGUID+353), +(12, @OGUID+354), +(12, @OGUID+355), +(12, @OGUID+356), +(12, @OGUID+357), +(12, @OGUID+358), +(12, @OGUID+359), +(12, @OGUID+360), +(12, @OGUID+361), +(12, @OGUID+362), +(12, @OGUID+363), +(12, @OGUID+364), +(12, @OGUID+365), +(12, @OGUID+366), +(12, @OGUID+367), +(12, @OGUID+368), +(12, @OGUID+369), +(12, @OGUID+370), +(12, @OGUID+371), +(12, @OGUID+372), +(12, @OGUID+373), +(12, @OGUID+374), +(12, @OGUID+375), +(12, @OGUID+376), +(12, @OGUID+377), +(12, @OGUID+378), +(12, @OGUID+379), +(12, @OGUID+380), +(12, @OGUID+381), +(12, @OGUID+382), +(12, @OGUID+383), +(12, @OGUID+384), +(12, @OGUID+385), +(12, @OGUID+386), +(12, @OGUID+387), +(12, @OGUID+388), +(12, @OGUID+389), +(12, @OGUID+390), +(12, @OGUID+391), +(12, @OGUID+392), +(12, @OGUID+393), +(12, @OGUID+394), +(12, @OGUID+395), +(12, @OGUID+396), +(12, @OGUID+397), +(12, @OGUID+398), +(12, @OGUID+399), +(12, @OGUID+400), +(12, @OGUID+401), +(12, @OGUID+402), +(12, @OGUID+403), +(12, @OGUID+404), +(12, @OGUID+405), +(12, @OGUID+406), +(12, @OGUID+407), +(12, @OGUID+408), +(12, @OGUID+409), +(12, @OGUID+410), +(12, @OGUID+411), +(12, @OGUID+412), +(12, @OGUID+413), +(12, @OGUID+414), +(12, @OGUID+415), +(12, @OGUID+416), +(12, @OGUID+417), +(12, @OGUID+418), +(12, @OGUID+419), +(12, @OGUID+420), +(12, @OGUID+421), +(12, @OGUID+422), +(12, @OGUID+423), +(12, @OGUID+424), +(12, @OGUID+425), +(12, @OGUID+426), +(12, @OGUID+427), +(12, @OGUID+428), +(12, @OGUID+429), +(12, @OGUID+430); From 577fcf356e9cd54fb0490069d7aa26894e9b5db3 Mon Sep 17 00:00:00 2001 From: treeston Date: Thu, 8 Oct 2015 20:11:19 +0200 Subject: [PATCH 198/524] Scripts/Naxxramas: Faerlina cleanup: - Move greeting to areatrigger instead of MoveInLineOfSight hack - Clean up add spawn handling to prevent various glitching with combinations of evade state and add aggro - Ensure all adds are always pulled alongside the boss and vice versa - Add missing texts. - Fix a bug in the core that prevents castable-while-dead spells (such as Widow's Embrace) from appearing on possess bars. --- sql/updates/world/2015_10_08_faerlina.sql | 34 +++++ src/server/game/Entities/Unit/Unit.cpp | 4 +- .../Northrend/Naxxramas/boss_faerlina.cpp | 130 ++++++++++++------ .../Naxxramas/instance_naxxramas.cpp | 8 +- .../scripts/Northrend/Naxxramas/naxxramas.h | 2 + 5 files changed, 135 insertions(+), 43 deletions(-) create mode 100644 sql/updates/world/2015_10_08_faerlina.sql diff --git a/sql/updates/world/2015_10_08_faerlina.sql b/sql/updates/world/2015_10_08_faerlina.sql new file mode 100644 index 0000000000..b3f3f2e900 --- /dev/null +++ b/sql/updates/world/2015_10_08_faerlina.sql @@ -0,0 +1,34 @@ +-- farlina cleanup +-- areatrigger for greeting +DELETE FROM `areatrigger_scripts` WHERE `entry`=4115; +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(4115,"at_faerlina_entrance"); + +DELETE FROM `creature_text` WHERE `entry`=15953 AND `groupid` IN (4,5); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(15953,4,0,"%s is affected by Widow's Embrace!",41,100,31019,3,"Faerlina EMOTE_WIDOW_EMBRACE"), +(15953,5,0,"%s goes into a frenzy!",41,100,2384,3,"Faerlina EMOTE_FRENZY"); + +-- remove some random spiders that aren't there on retail +DELETE FROM `creature` WHERE `guid` IN (127961,127962); +-- move followers to summon groups to avoid buggy respawn behavior of minions +DELETE FROM `creature` WHERE `guid` IN (128061,128062,128063,128064); +DELETE FROM `linked_respawn` WHERE `guid` IN (128061,128062,128063,128064); +DELETE FROM `creature_summon_groups` WHERE `summonerId`=15953; +INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`) VALUES +(15953,0,1,16506,3362.66 ,-3620.97,261.08,4.57276,8), +(15953,0,1,16506,3356.71 ,-3620.05,261.08,4.57276,8), +(15953,0,2,16505,3359.685,-3620.51,261.08,4.57276,8), +(15953,0,1,16506,3344.3 ,-3618.31,261.08,4.69494,8), +(15953,0,1,16506,3350.26 ,-3619.11,261.08,4.69494,8), +(15953,0,2,16505,3347.28 ,-3618.71,261.08,4.69494,8); + +-- adds' fireball spell +DELETE FROM `spelldifficulty_dbc` WHERE `id`=54095; +INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`) VALUES +(54095,54095,54096); + +-- naxxramas follower SAI changes +DELETE FROM `smart_scripts` WHERE `entryorguid`=16505 AND `source_type`=0 AND `id`=2; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`event_type`,`event_chance`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`target_type`,`comment`) VALUES +(16505,0,2,4,100,39,75,0,0,0, "Naxxramas Follower - On Aggro - Call For Help (75yd)"); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f085bab165..f01828661a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13769,7 +13769,7 @@ void CharmInfo::InitPossessCreateSpells() { uint32 spellId = _unit->ToCreature()->m_spells[i]; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - if (spellInfo && !spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD)) + if (spellInfo) { if (spellInfo->IsPassive()) _unit->CastSpell(_unit, spellInfo, true); @@ -13797,7 +13797,7 @@ void CharmInfo::InitCharmCreateSpells() uint32 spellId = _unit->ToCreature()->m_spells[x]; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - if (!spellInfo || spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD)) + if (!spellInfo) { _charmspells[x].SetActionAndType(spellId, ACT_DISABLED); continue; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index a87501e885..dd9061603c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -18,14 +18,20 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "naxxramas.h" +#include "Player.h" +#include "SpellAuras.h" #include "SpellInfo.h" enum Yells { - SAY_GREET = 0, - SAY_AGGRO = 1, - SAY_SLAY = 2, - SAY_DEATH = 3 + SAY_GREET = 0, + SAY_AGGRO = 1, + SAY_SLAY = 2, + SAY_DEATH = 3, + + EMOTE_WIDOW_EMBRACE = 4, + EMOTE_FRENZY = 5 + }; enum Spells @@ -33,7 +39,9 @@ enum Spells SPELL_POISON_BOLT_VOLLEY = 28796, SPELL_RAIN_OF_FIRE = 28794, SPELL_FRENZY = 28798, - SPELL_WIDOWS_EMBRACE = 28732 + SPELL_WIDOWS_EMBRACE = 28732, + + SPELL_ADD_FIREBALL = 54095 // 25-man: 54096 }; #define SPELL_WIDOWS_EMBRACE_HELPER RAID_MODE(28732, 54097) @@ -45,6 +53,12 @@ enum Events EVENT_FRENZY = 3 }; +enum SummonGroups +{ + SUMMON_GROUP_WORSHIPPERS = 1, + SUMMON_GROUP_FOLLOWERS = 2 +}; + enum Misc { DATA_FRENZY_DISPELS = 1 @@ -57,39 +71,46 @@ class boss_faerlina : public CreatureScript struct boss_faerlinaAI : public BossAI { - boss_faerlinaAI(Creature* creature) : BossAI(creature, BOSS_FAERLINA), - _frenzyDispels(0), _introDone(false), _delayFrenzy(false) + boss_faerlinaAI(Creature* creature) : BossAI(creature, BOSS_FAERLINA), _frenzyDispels(0) { } + + void SummonAdds() { + me->SummonCreatureGroup(SUMMON_GROUP_WORSHIPPERS); + if (Is25ManRaid()) + me->SummonCreatureGroup(SUMMON_GROUP_FOLLOWERS); } + void InitializeAI() override + { + if (!me->isDead()) + { + Reset(); + SummonAdds(); + } + } + + void JustReachedHome() override + { + _JustReachedHome(); + SummonAdds(); + } void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_POISON, urand(10000, 15000)); - events.ScheduleEvent(EVENT_FIRE, urand(6000, 18000)); - events.ScheduleEvent(EVENT_FRENZY, urand(60000, 80000)); + summons.DoZoneInCombat(); + events.ScheduleEvent(EVENT_POISON, urand(10 * IN_MILLISECONDS, 15 * IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_FIRE, urand(6 * IN_MILLISECONDS, 18 * IN_MILLISECONDS)); + events.ScheduleEvent(EVENT_FRENZY, urand(60 * IN_MILLISECONDS, 80 * IN_MILLISECONDS)); } void Reset() override { _Reset(); - _delayFrenzy = false; _frenzyDispels = 0; } - void MoveInLineOfSight(Unit* who) override - { - if (!_introDone && who->GetTypeId() == TYPEID_PLAYER) - { - Talk(SAY_GREET); - _introDone = true; - } - - BossAI::MoveInLineOfSight(who); - } - void KilledUnit(Unit* /*victim*/) override { if (!urand(0, 2)) @@ -106,9 +127,8 @@ class boss_faerlina : public CreatureScript { if (spell->Id == SPELL_WIDOWS_EMBRACE_HELPER) { - /// @todo Add Text ++_frenzyDispels; - _delayFrenzy = true; + Talk(EMOTE_WIDOW_EMBRACE, caster); me->Kill(caster); } } @@ -126,12 +146,6 @@ class boss_faerlina : public CreatureScript if (!UpdateVictim()) return; - if (_delayFrenzy && !me->HasAura(SPELL_WIDOWS_EMBRACE_HELPER)) - { - _delayFrenzy = false; - DoCast(me, SPELL_FRENZY, true); - } - events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) @@ -152,13 +166,14 @@ class boss_faerlina : public CreatureScript events.ScheduleEvent(EVENT_FIRE, urand(6000, 18000)); break; case EVENT_FRENZY: - /// @todo Add Text - if (!me->HasAura(SPELL_WIDOWS_EMBRACE_HELPER)) - DoCast(me, SPELL_FRENZY); + if (Aura* widowsEmbrace = me->GetAura(SPELL_WIDOWS_EMBRACE_HELPER)) + events.ScheduleEvent(EVENT_FRENZY, widowsEmbrace->GetDuration()+1 * IN_MILLISECONDS); else - _delayFrenzy = true; - - events.ScheduleEvent(EVENT_FRENZY, urand(60000, 80000)); + { + DoCast(SPELL_FRENZY); + Talk(EMOTE_FRENZY); + events.ScheduleEvent(EVENT_FRENZY, urand(60 * IN_MILLISECONDS, 80 * IN_MILLISECONDS)); + } break; } } @@ -168,8 +183,6 @@ class boss_faerlina : public CreatureScript private: uint32 _frenzyDispels; - bool _introDone; - bool _delayFrenzy; }; CreatureAI* GetAI(Creature* creature) const override @@ -192,19 +205,36 @@ class npc_faerlina_add : public CreatureScript void Reset() override { - if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) { + if (!Is25ManRaid()) { me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_BIND, true); me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CHARM, true); } } + void EnterCombat(Unit* /*who*/) override + { + if (Creature* faerlina = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FAERLINA))) + faerlina->AI()->DoZoneInCombat(nullptr, 250.0f); + } + void JustDied(Unit* /*killer*/) override { - if (_instance && GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) + if (!Is25ManRaid()) if (Creature* faerlina = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_FAERLINA))) DoCast(faerlina, SPELL_WIDOWS_EMBRACE); } + void UpdateAI(uint32 /*diff*/) override + { + if (!UpdateVictim()) + return; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + DoCastVictim(SPELL_ADD_FIREBALL); + DoMeleeAttackIfReady(); // this will only happen if the fireball cast fails for some reason + } + private: InstanceScript* const _instance; }; @@ -226,9 +256,29 @@ class achievement_momma_said_knock_you_out : public AchievementCriteriaScript } }; +class at_faerlina_entrance : public AreaTriggerScript +{ + public: + at_faerlina_entrance() : AreaTriggerScript("at_faerlina_entrance") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + { + InstanceScript* instance = player->GetInstanceScript(); + if (!instance || instance->GetData(DATA_HAD_FAERLINA_GREET) || instance->GetBossState(BOSS_FAERLINA) != NOT_STARTED) + return true; + + if (Creature* faerlina = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_FAERLINA))) + faerlina->AI()->Talk(SAY_GREET); + instance->SetData(DATA_HAD_FAERLINA_GREET, 1u); + + return true; + } +}; + void AddSC_boss_faerlina() { new boss_faerlina(); new npc_faerlina_add(); + new at_faerlina_entrance(); new achievement_momma_said_knock_you_out(); } diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 3a431ab3ac..1d7c7a2794 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -60,7 +60,6 @@ DoorData const doorData[] = MinionData const minionData[] = { - { NPC_FOLLOWER_WORSHIPPER, BOSS_FAERLINA }, { NPC_DK_UNDERSTUDY, BOSS_RAZUVIOUS }, { NPC_SIR, BOSS_HORSEMEN }, { NPC_THANE, BOSS_HORSEMEN }, @@ -125,6 +124,7 @@ class instance_naxxramas : public InstanceMapScript minHorsemenDiedTime = 0; maxHorsemenDiedTime = 0; AbominationCount = 0; + hadFaerlinaGreet = false; CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT; playerDied = 0; @@ -319,6 +319,9 @@ class instance_naxxramas : public InstanceMapScript case DATA_ABOMINATION_KILLED: AbominationCount = value; break; + case DATA_HAD_FAERLINA_GREET: + hadFaerlinaGreet = (value == 1u); + break; } } @@ -328,6 +331,8 @@ class instance_naxxramas : public InstanceMapScript { case DATA_ABOMINATION_KILLED: return AbominationCount; + case DATA_HAD_FAERLINA_GREET: + return (uint32)hadFaerlinaGreet; default: break; } @@ -635,6 +640,7 @@ class instance_naxxramas : public InstanceMapScript ObjectGuid KelthuzadDoorGUID; ObjectGuid LichKingGUID; uint8 AbominationCount; + bool hadFaerlinaGreet; uint8 CurrentWingTaunt; /* The Immortal / The Undying */ diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index 459903c4c8..6795e2cc33 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -47,6 +47,8 @@ enum Data DATA_GOTHIK_GATE, DATA_SAPPHIRON_BIRTH, + DATA_HAD_FAERLINA_GREET, + DATA_HORSEMEN0, DATA_HORSEMEN1, DATA_HORSEMEN2, From 56b27711a4db7b56c5e6246426c89cd99e8c8cd4 Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Mon, 26 Oct 2015 20:15:18 +0200 Subject: [PATCH 199/524] Core/Player: Fix copy/paste mistake in 1ef1d42d145c18579a7e7ca15cebb38485bc0cff --- 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 93e1b0c618..2e163f43de 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15910,7 +15910,7 @@ bool Player::GetQuestRewardStatus(uint32 quest_id) const { uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo); if (m_seasonalquests.find(eventId) != m_seasonalquests.end()) - return m_seasonalquests.find(eventId)->second.find(quest_id) == m_seasonalquests.find(eventId)->second.end(); + return m_seasonalquests.find(eventId)->second.find(quest_id) != m_seasonalquests.find(eventId)->second.end(); return false; } From b96f2e11ca76319888f641d2b38dcefce710221f Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 27 Oct 2015 22:00:45 +0000 Subject: [PATCH 200/524] DB/Misc: Knot Thimblejack Only valid for 3.3.5 as since catacylsm recipe is learnt and mats for suit reduced to one ogre tanin * gordok ogre suit learned using gossip option instead of on gossip hello * Script for Free Knot including making it so quest can only be returned once per run --- sql/updates/world/2015_10_27_00_world335.sql | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 sql/updates/world/2015_10_27_00_world335.sql diff --git a/sql/updates/world/2015_10_27_00_world335.sql b/sql/updates/world/2015_10_27_00_world335.sql new file mode 100644 index 0000000000..36583239a4 --- /dev/null +++ b/sql/updates/world/2015_10_27_00_world335.sql @@ -0,0 +1,31 @@ +DELETE FROM `gossip_menu_option` WHERE `menu_id`=5667; +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 +(5667, 0, 0, 'Hey Knot - I''m a Leatherworker. Think you could teach me how to make the ogre suit?', 9403, 1, 1, 0, 0, 0, 0, '', 0), +(5667, 1, 0, 'Hey Knot - I''m a Tailor. Think you could teach me how to make the ogre suit?', 9404, 1, 1, 0, 0, 0, 0, '', 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=5667; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 5667, 0, 0, 0, 7, 0, 165, 275, 0, 0, 0, 0, '', 'Only show gossip option if player has Leatherworking with skill level 275'), +(15, 5667, 1, 0, 0, 7, 0, 197, 275, 0, 0, 0, 0, '', 'Only show gossip option if player has Tailoring with skill level 275'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=14338 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=1433800 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 +(14338, 0, 0, 0, 20, 0, 100, 1, 5525, 0, 0, 0, 80, 1433800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Free Knot! Reward - run script'), +(14338, 0, 1, 0, 20, 0, 100, 1, 7429, 0, 0, 0, 80, 1433800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Free Knot! Reward - run script'), +(14338, 0, 2, 0, 34, 0, 100, 0, 0, 1, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Point Reached - Despawn'), +(14338, 0, 3, 0, 25, 0, 100, 0, 0, 0, 0, 0, 50, 179511, 43200, 0, 0, 0, 0, 8, 0, 0, 0, 581.241, 524.321, -25.4027, -2.79252, 'Knot - On Reset - Spawn Ball and Chain'), +(14338, 0, 4, 6, 62, 0, 100, 0, 5667, 0, 0, 0, 85, 22816, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Gossip Select - Cast Gordok Ogre Suit'), +(14338, 0, 5, 6, 62, 0, 100, 0, 5667, 1, 0, 0, 85, 22814, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Gossip Select - Cast Gordok Ogre Suit'), +(14338, 0, 6, 0, 61, 0, 100, 0, 5667, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Knot - On Gossip Select - Close Gossip'), + +(1433800, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Knot - Script - Say 0'), +(1433800, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 83, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Knot - Script - Remove npc flag'), +(1433800, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 70, 43200, 0, 0, 0, 0, 0, 20, 179511, 10, 0, 0, 0, 0, 0, 'Knot - Script - Despawn Ball and Chain'), +(1433800, 9, 3, 0, 0, 0, 100, 0, 500, 500, 0, 0, 50, 179501, 43200, 0, 0, 0, 0, 8, 0, 0, 0, 583.6, 523.44, -25.4, 3.1848, 'Knot - Script - Spawn Cache'), +(1433800, 9, 4, 0, 0, 0, 100, 0, 1500, 1500, 0, 0, 69, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 500.42, 540.966, -25.3194, 2.72271, 'Knot - Script - Move Point'); + +DELETE FROM `creature_text` WHERE `entry`=14338; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(14338, 0, 0, '$n, I\'ll make sure all my friends in the Cartel know that you\'ve saved my life today. Here - I\'m going to need to be able to travel light, so please help yourself to my cache of tailoring and leatherworking supplies! Thanks again - see ya!', 12, 0, 0, 0, 0, 0, 9346, 0, 'Knot'); From cb48f454fa9b01e7a0ca0175ed7b948f69ca5ba4 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 27 Oct 2015 22:28:17 +0000 Subject: [PATCH 201/524] DB/Misc: Fallen Hero's Spirit Script http://www.wowhead.com/npc=32149/fallen-heros-spirit#comments --- sql/updates/world/ 2015_10_27_01_world.sql | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 sql/updates/world/ 2015_10_27_01_world.sql diff --git a/sql/updates/world/ 2015_10_27_01_world.sql b/sql/updates/world/ 2015_10_27_01_world.sql new file mode 100644 index 0000000000..4e3986e5ca --- /dev/null +++ b/sql/updates/world/ 2015_10_27_01_world.sql @@ -0,0 +1,25 @@ + UPDATE `smart_scripts` SET `event_phase_mask`=1 WHERE `entryorguid`=32257 AND `source_type`=0 AND `id` in(0,1,2); + + + DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=32257 AND `id`>2; + DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=3225700; + DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=3214901; + + DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=32149 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 + (32257, 0, 3, 0, 1, 0, 100, 0, 5000, 5000, 5000, 5000, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Scourge Converter - OOC - Set Phase 2'), + (32257, 0, 4, 0, 4, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Scourge Converter - On Agro - Set Phase 1'), + (32257, 0, 5, 0, 75, 2,33, 0, 0, 32149, 40, 120000, 80, 3225700, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Scourge Converter - On Fallen Heros Spirit within 30 yards (Phase 2/5% Chance) - Run Script'), + (32149, 0, 1, 0, 8, 0, 100, 1, 60231, 0, 0, 0, 80, 3214901, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fallen Hero\'s Spirit - On Spellhit "Grip of the Scourge" - Run Script'), + (3214901, 9, 0, 0, 0, 0, 100, 0, 10, 10, 0, 0, 75, 60231, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fallen Heros Spirit - Script - Add Aura Grip of the Scourge'), + (3214901, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fallen Heros Spirit - Script - Turn random movement off'), + + (3214901, 9, 2, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 7464.0068, 2445.8369, 384.2378, 0, 'Fallen Heros Spirit - Script - Move to Position'), + (3214901, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 10000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fallen Heros Spirit - Script - Despawn'), + (3225700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 60212, 64, 0, 0, 0, 0, 19, 32149, 0, 0, 0, 0, 0, 0, 'Scourge Converter - Script - Cast Grip of the Scourge'); + + DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry`=66719 AND `ConditionTypeOrReference`=1; + + INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES + (17, 0, 66719, 0, 0, 1, 1, 60231, 0, 0, 1, 0, 0, '', 'Blessing of Peace cannot be cast on unit with Grip of the Scourge'); From c3fe637306bdd3d5aecf882756c4999e0bf91d68 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 27 Oct 2015 23:38:59 +0100 Subject: [PATCH 202/524] DB/Event: Add missing Hallow's End event spawns in Shattrath Thanks to @Kittnz --- sql/updates/world/2015_10_27_02_world.sql | 648 ++++++++++++++++++++++ 1 file changed, 648 insertions(+) create mode 100644 sql/updates/world/2015_10_27_02_world.sql diff --git a/sql/updates/world/2015_10_27_02_world.sql b/sql/updates/world/2015_10_27_02_world.sql new file mode 100644 index 0000000000..6df624989d --- /dev/null +++ b/sql/updates/world/2015_10_27_02_world.sql @@ -0,0 +1,648 @@ +SET @OGUID:=77697; +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+325 AND `eventEntry`=12; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+325; +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, 180431, 530, 1, 1, -1534.655, 5289.483, 11.84585, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1) +(@OGUID+1, 180431, 530, 1, 1, -1551.18, 5096.325, -18.82875, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1) +(@OGUID+2, 180431, 530, 1, 1, -1995.255, 5121.023, 8.559834, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1) +(@OGUID+3, 180408, 530, 1, 1, -1827.292, 5290.855, -12.42814, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: -1) +(@OGUID+4, 180431, 530, 1, 1, -1885.991, 4967.481, -21.06316, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1) +(@OGUID+5, 180431, 530, 1, 1, -2215.704, 5421.465, 51.26691, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1) +(@OGUID+6, 180431, 530, 1, 1, -2170.908, 5149.174, -19.88593, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: -1) +(@OGUID+7, 185434, 530, 1, 1, -1730.203, 5241.882, -48.3983, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 185434 (Area: 3899) +(@OGUID+8, 180415, 530, 1, 1, -1713.155, 5189.252, -40.20916, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+9, 180407, 530, 1, 1, -1726.565, 5195.366, -40.20916, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899) +(@OGUID+10, 180472, 530, 1, 1, -1711.832, 5189.654, -35.45917, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3899) +(@OGUID+11, 185434, 530, 1, 1, -1695.124, 5272.625, -50.12435, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 185434 (Area: 3899) +(@OGUID+12, 180415, 530, 1, 1, -1668.301, 5242.631, -51.47162, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+13, 180415, 530, 1, 1, -1746.134, 5166.982, -35.90804, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+14, 180407, 530, 1, 1, -1694.59, 5185.016, -40.20916, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899) +(@OGUID+15, 180415, 530, 1, 1, -1746.674, 5164.065, -35.90804, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+16, 180415, 530, 1, 1, -1767.908, 5170.395, -38.40183, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+17, 180415, 530, 1, 1, -1665.969, 5242.099, -51.50999, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+18, 180415, 530, 1, 1, -1697.149, 5183.031, -40.20916, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+19, 180415, 530, 1, 1, -1746.348, 5166.079, -35.90804, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+20, 180415, 530, 1, 1, -1666.871, 5242.716, -51.67263, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+21, 180415, 530, 1, 1, -1749.273, 5163.449, -37.20491, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+22, 180405, 530, 1, 1, -1666.335, 5238.355, -50.38025, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3899) +(@OGUID+23, 180415, 530, 1, 1, -1754.351, 5174.463, -38.41282, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+24, 180415, 530, 1, 1, -1721.349, 5167.382, -40.20916, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+25, 180415, 530, 1, 1, -1746.573, 5164.723, -35.90804, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+26, 180415, 530, 1, 1, -1664.876, 5241.221, -51.22554, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+27, 180415, 530, 1, 1, -1746.429, 5165.326, -35.90803, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+28, 180415, 530, 1, 1, -1726.724, 5175.467, -40.20916, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+29, 180415, 530, 1, 1, -1731.426, 5173.524, -40.20916, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+30, 180406, 530, 1, 1, -1771.68, 5173.339, -40.20917, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899) +(@OGUID+31, 180415, 530, 1, 1, -1746.179, 5167.779, -35.90804, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+32, 180415, 530, 1, 1, -1663.543, 5236.966, -50.02916, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+33, 180415, 530, 1, 1, -1790.927, 5177.194, -41.12518, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+34, 180415, 530, 1, 1, -1701.983, 5172.746, -40.20916, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+35, 180415, 530, 1, 1, -1663.604, 5235.882, -49.77483, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+36, 180415, 530, 1, 1, -1792.114, 5174.076, -40.86684, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+37, 180415, 530, 1, 1, -1663.852, 5235.025, -49.56621, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+38, 180407, 530, 1, 1, -1739.737, 5159.344, -34.7813, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899) +(@OGUID+39, 180415, 530, 1, 1, -1664.292, 5240.016, -50.89723, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+40, 180415, 530, 1, 1, -1745.957, 5161.741, -35.90803, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+41, 180415, 530, 1, 1, -1706.435, 5167.831, -40.20916, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+42, 180415, 530, 1, 1, -1737.001, 5157.635, -36.06097, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+43, 180415, 530, 1, 1, -1748.725, 5161.841, -37.20491, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+44, 180415, 530, 1, 1, -1663.867, 5238.99, -50.61524, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+45, 180415, 530, 1, 1, -1745.184, 5160.036, -35.90804, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+46, 180415, 530, 1, 1, -1739.258, 5162.583, -36.06791, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+47, 180415, 530, 1, 1, -1663.598, 5238.002, -50.30962, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+48, 180415, 530, 1, 1, -1744.431, 5157.619, -35.90803, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+49, 180415, 530, 1, 1, -1770.254, 5159.312, -35.90804, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+50, 180415, 530, 1, 1, -1768.823, 5157.79, -35.90805, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+51, 180415, 530, 1, 1, -1691.969, 5171.893, -40.20916, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+52, 180415, 530, 1, 1, -1742.25, 5152.299, -35.90804, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+53, 180415, 530, 1, 1, -1766.36, 5158.437, -37.20492, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+54, 180415, 530, 1, 1, -1769.767, 5158.846, -35.90805, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+55, 180415, 530, 1, 1, -1765.703, 5156.897, -37.20491, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+56, 180415, 530, 1, 1, -1743.057, 5154.369, -35.90804, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+57, 180415, 530, 1, 1, -1778.556, 5162.756, -40.20917, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+58, 180415, 530, 1, 1, -1678.028, 5180.92, -40.20916, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+59, 180415, 530, 1, 1, -1769.271, 5158.336, -35.90804, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+60, 180415, 530, 1, 1, -1768.123, 5155.603, -35.90804, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+61, 180415, 530, 1, 1, -1771.096, 5160.236, -35.90804, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+62, 180415, 530, 1, 1, -1746.076, 5154.508, -37.2049, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+63, 180415, 530, 1, 1, -1743.914, 5156.47, -35.90803, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+64, 180415, 530, 1, 1, -1770.592, 5159.727, -35.90804, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+65, 180415, 530, 1, 1, -1745.323, 5152.098, -37.20491, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+66, 180415, 530, 1, 1, -1680.046, 5182.063, -40.20916, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+67, 180415, 530, 1, 1, -1743.301, 5155.08, -35.90803, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+68, 180415, 530, 1, 1, -1663.519, 5293.407, -49.5914, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+69, 180415, 530, 1, 1, -1767.19, 5150.615, -35.90804, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+70, 180415, 530, 1, 1, -1797.811, 5163.908, -40.20916, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+71, 180415, 530, 1, 1, -1763.264, 5146.753, -37.20491, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+72, 180415, 530, 1, 1, -1664.684, 5293.219, -49.66723, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+73, 180415, 530, 1, 1, -1766.92, 5149.255, -35.90804, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+74, 180415, 530, 1, 1, -1763.881, 5149.05, -37.20491, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+75, 180415, 530, 1, 1, -1781.224, 5155.466, -40.20916, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+76, 180415, 530, 1, 1, -1766.588, 5147.896, -35.90804, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+77, 180415, 530, 1, 1, -1774.051, 5152.581, -36.06793, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+78, 180415, 530, 1, 1, -1767.712, 5153.141, -35.90804, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+79, 180406, 530, 1, 1, -1727.872, 5151.118, -34.72747, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899) +(@OGUID+80, 180415, 530, 1, 1, -1647.858, 5322.972, -40.20916, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+81, 180415, 530, 1, 1, -1653.098, 5316.989, -40.20916, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+82, 180415, 530, 1, 1, -1623.009, 5353.79, -39.90628, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+83, 180415, 530, 1, 1, -1650.696, 5301.975, -40.15569, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+84, 180415, 530, 1, 1, -1627.55, 5350.804, -39.69448, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+85, 180415, 530, 1, 1, -1649.128, 5294.073, -40.33651, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+86, 180415, 530, 1, 1, -1656.347, 5308.329, -40.20916, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+87, 180415, 530, 1, 1, -1640.815, 5324.775, -40.0241, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+88, 180415, 530, 1, 1, -1630.996, 5346.603, -39.8759, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+89, 180415, 530, 1, 1, -1650.263, 5289.858, -40.64635, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+90, 180415, 530, 1, 1, -1640.641, 5328.2, -40.13517, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+91, 180415, 530, 1, 1, -1604.216, 5327.811, -40.20916, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+92, 180415, 530, 1, 1, -1620.229, 5273.603, -40.8573, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+93, 180415, 530, 1, 1, -1615.813, 5287.19, -40.76569, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+94, 180415, 530, 1, 1, -1643.108, 5261.086, -41.00774, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+95, 180415, 530, 1, 1, -1610.787, 5322.729, -40.20916, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+96, 180415, 530, 1, 1, -1614.804, 5285.652, -40.81396, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+97, 180415, 530, 1, 1, -1641.931, 5257.188, -40.93716, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+98, 180415, 530, 1, 1, -1618.817, 5355.966, -40.20382, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+99, 180415, 530, 1, 1, -1614.204, 5284.298, -40.8007, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+100, 180415, 530, 1, 1, -1604.152, 5341.309, -40.20916, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+101, 180415, 530, 1, 1, -1616.99, 5277.182, -40.82001, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+102, 180415, 530, 1, 1, -1616.733, 5288.768, -40.65269, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+103, 180415, 530, 1, 1, -1615.797, 5268.268, -40.774, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+104, 180407, 530, 1, 1, -1620.341, 5252.917, -40.79367, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899) +(@OGUID+105, 180415, 530, 1, 1, -1615.02, 5261.716, -40.74166, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+106, 180415, 530, 1, 1, -1593.996, 5360.147, -40.20916, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+107, 180415, 530, 1, 1, -1600.158, 5344.43, -40.20916, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+108, 180407, 530, 1, 1, -1592.862, 5307.45, -38.57781, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899) +(@OGUID+109, 180415, 530, 1, 1, -1594.889, 5261.762, -13.97506, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+110, 180415, 530, 1, 1, -1597.819, 5264.682, -14.05011, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+111, 180415, 530, 1, 1, -1597.493, 5366.856, -40.20916, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+112, 180406, 530, 1, 1, -1592.3, 5357.065, -40.20916, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899) +(@OGUID+113, 180415, 530, 1, 1, -1596.895, 5263.488, -14.02306, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+114, 180415, 530, 1, 1, -1612.543, 5247.093, -40.65835, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+115, 180415, 530, 1, 1, -1622.793, 5243.489, -40.80069, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+116, 180415, 530, 1, 1, -1595.962, 5262.593, -13.99772, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+117, 180415, 530, 1, 1, -1616.154, 5244.095, -40.70304, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+118, 180415, 530, 1, 1, -1620.814, 5239.755, -40.75924, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+119, 180431, 530, 1, 1, -1688.561, 5666.329, 130.5969, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 3899) +(@OGUID+120, 180415, 530, 1, 1, -1593.098, 5260.721, -13.94664, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+121, 180410, 530, 1, 1, -1617.977, 5403.792, -38.17708, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3899) +(@OGUID+122, 180405, 530, 1, 1, -1612.946, 5424.752, -38.85912, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+123, 180415, 530, 1, 1, -1614.504, 5415.917, -38.86249, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+124, 180415, 530, 1, 1, -1614.682, 5413.557, -38.85962, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+125, 180415, 530, 1, 1, -1614.065, 5412.168, -38.85929, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+126, 180415, 530, 1, 1, -1614.54, 5414.432, -38.86086, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+127, 180415, 530, 1, 1, -1615.161, 5408.31, -39.67566, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+128, 180415, 530, 1, 1, -1615.594, 5407.222, -40.56182, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+129, 180415, 530, 1, 1, -1613.32, 5410.315, -38.85626, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+130, 180415, 530, 1, 1, -1617.042, 5407.143, -41.05295, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+131, 180415, 530, 1, 1, -1614.408, 5409.302, -38.85281, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+132, 180415, 530, 1, 1, -1613.731, 5407.422, -39.67501, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+133, 180410, 530, 1, 1, -1618.031, 5406.084, -37.86068, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+134, 180472, 530, 1, 1, -1648.206, 5544.745, 15.57858, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+135, 180431, 530, 1, 1, -1822.676, 5698.866, 129.1411, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+136, 180431, 530, 1, 1, -1910.552, 5698.088, 124.9568, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+137, 180405, 530, 1, 1, -1648.345, 5544.776, 16.72861, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+138, 185434, 530, 1, 1, -1598.392, 5396.745, -40.17126, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 185434 (Area: 0) +(@OGUID+139, 185455, 530, 1, 1, -1709.808, 5632.51, 127.9465, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 185455 (Area: 3899) +(@OGUID+140, 180415, 530, 1, 1, -1710.33, 5634.917, 127.9465, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+141, 180415, 530, 1, 1, -1711.769, 5633.732, 127.9465, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+142, 180429, 530, 1, 1, -1707.317, 5645.849, 130.3365, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 3899) +(@OGUID+143, 180415, 530, 1, 1, -1591.131, 5260.113, -13.96355, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+144, 180407, 530, 1, 1, -1650.866, 5190.316, -38.87681, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3899) +(@OGUID+145, 180406, 530, 1, 1, -1645.201, 5199.991, -38.8768, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899) +(@OGUID+146, 180415, 530, 1, 1, -1618.823, 5181.593, -33.82702, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+147, 180415, 530, 1, 1, -1601.915, 5171.649, -30.58988, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+148, 180415, 530, 1, 1, -1608.95, 5160.993, -30.56009, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+149, 180415, 530, 1, 1, -1624.757, 5172.668, -33.79735, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+150, 180415, 530, 1, 1, -1602.198, 5152.721, -28.87143, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+151, 180415, 530, 1, 1, -1591.732, 5168.822, -28.87342, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+152, 180406, 530, 1, 1, -1723.19, 5136.492, -35.09916, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899) +(@OGUID+153, 180415, 530, 1, 1, -1584.816, 5160.914, -27.39262, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+154, 180411, 530, 1, 1, -1742.706, 5137.688, -30.48351, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3899) +(@OGUID+155, 180415, 530, 1, 1, -1593.068, 5148.36, -27.30097, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+156, 180415, 530, 1, 1, -1566.594, 5148.008, -23.49201, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+157, 180415, 530, 1, 1, -1575.762, 5134.228, -23.58824, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+158, 185434, 530, 1, 1, -1744.142, 5123.62, -35.82451, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 185434 (Area: 0) +(@OGUID+159, 180411, 530, 1, 1, -1758.289, 5131.851, -30.40018, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+160, 180415, 530, 1, 1, -1766.187, 5145.766, -35.90804, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+161, 180405, 530, 1, 1, -1756.477, 5130.035, -36.26126, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+162, 180415, 530, 1, 1, -1773.81, 5148.538, -36.06519, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+163, 180415, 530, 1, 1, -1772.502, 5143.563, -36.23128, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+164, 180415, 530, 1, 1, -1774.292, 5139.007, -36.21167, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+165, 180415, 530, 1, 1, -1775.087, 5137.319, -36.26489, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+166, 180405, 530, 1, 1, -1777.374, 5136.409, -34.72696, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+167, 180405, 530, 1, 1, -1773.338, 5121.479, -35.0905, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+168, 180415, 530, 1, 1, -1769.995, 5125.528, -36.02662, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+169, 180415, 530, 1, 1, -1772.336, 5122.282, -35.83616, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+170, 180415, 530, 1, 1, -1787.647, 5148.141, -40.20916, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+171, 180415, 530, 1, 1, -1781.443, 5131.746, -34.77077, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+172, 180415, 530, 1, 1, -1771.183, 5123.882, -35.90277, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+173, 180415, 530, 1, 1, -1782.792, 5132.561, -34.69776, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+174, 180415, 530, 1, 1, -1776.1, 5136.846, -35.92095, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+175, 180415, 530, 1, 1, -1778.352, 5124.249, -34.69559, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+176, 180415, 530, 1, 1, -1800.136, 5141.807, -40.20917, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+177, 180415, 530, 1, 1, -1804.512, 5157.381, -40.20917, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+178, 180415, 530, 1, 1, -1779.405, 5125.828, -34.73515, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+179, 180407, 530, 1, 1, -1798.805, 5132.179, -40.20916, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+180, 180415, 530, 1, 1, -1793.893, 5143.439, -40.20916, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+181, 180415, 530, 1, 1, -1853.723, 5200.164, -40.20916, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+182, 180406, 530, 1, 1, -1829.19, 5132.753, -36.21552, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+183, 180415, 530, 1, 1, -1852.917, 5204.884, -40.20917, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+184, 180415, 530, 1, 1, -1846.027, 5211.841, -40.20916, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+185, 180407, 530, 1, 1, -1830.194, 5129.449, -36.20708, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+186, 180415, 530, 1, 1, -1849.075, 5210.507, -40.20917, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+187, 180405, 530, 1, 1, -1828.722, 5136.165, -36.61174, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+188, 180407, 530, 1, 1, -1845.585, 5181.297, -48.83864, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+189, 180415, 530, 1, 1, -1802.642, 5133.133, -40.20916, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+190, 180415, 530, 1, 1, -1851.821, 5208.425, -40.20916, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+191, 180415, 530, 1, 1, -1857.086, 5210.439, -40.20916, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+192, 180415, 530, 1, 1, -1859.659, 5207.607, -40.20916, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+193, 180415, 530, 1, 1, -1856.036, 5214.328, -40.20916, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+194, 180415, 530, 1, 1, -1848.79, 5084.666, -33.83941, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+195, 180410, 530, 1, 1, -1913.184, 5138.171, -37.93413, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+196, 180407, 530, 1, 1, -1874.145, 5136.215, -40.20916, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+197, 180411, 530, 1, 1, -1879.563, 5125.416, -28.39666, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+198, 180406, 530, 1, 1, -1896.112, 5150.331, -38.65614, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+199, 180415, 530, 1, 1, -1859.411, 5085.3, -33.84349, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+200, 180415, 530, 1, 1, -1848.927, 5065.024, -30.60378, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+201, 180415, 530, 1, 1, -1865.414, 5055.882, -28.88485, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+202, 180407, 530, 1, 1, -1908.842, 5158.162, -40.20916, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+203, 180472, 530, 1, 1, -1924.396, 5137.794, -30.42237, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+204, 180415, 530, 1, 1, -1846.269, 5054.519, -28.83364, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+205, 180415, 530, 1, 1, -1910.569, 5159.94, -40.20916, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+206, 180472, 530, 1, 1, -1924.554, 5144.456, -30.56359, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+207, 180415, 530, 1, 1, -1912.345, 5164.043, -40.20916, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+208, 180410, 530, 1, 1, -1922.556, 5136.9, -37.5277, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+209, 180415, 530, 1, 1, -1862.386, 5205.07, -40.20916, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+210, 180415, 530, 1, 1, -1861.724, 5065.828, -30.52389, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+211, 180415, 530, 1, 1, -1849.668, 5044.827, -27.33423, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+212, 180410, 530, 1, 1, -1933.896, 5139.628, -36.7346, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+213, 180410, 530, 1, 1, -1933.745, 5142.19, -36.79674, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+214, 180415, 530, 1, 1, -1946.493, 5150.041, -40.20916, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+215, 180407, 530, 1, 1, -1932.899, 5165.837, -40.20917, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+216, 180415, 530, 1, 1, -1864.642, 5045.729, -27.34014, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+217, 180415, 530, 1, 1, -1935.678, 5168, -40.20916, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+218, 180405, 530, 1, 1, -1946.298, 5152.045, 19.95769, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+219, 180415, 530, 1, 1, -1851.71, 5022.643, -23.50557, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+220, 180415, 530, 1, 1, -1868.281, 5023.652, -23.48158, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+221, 180339, 530, 1, 1, -1837.953, 4921.162, -18.875, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0) +(@OGUID+222, 180338, 530, 1, 1, -1783.58, 4937.418, -22.87706, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+223, 180415, 530, 1, 1, -1956.957, 5150.171, -40.20916, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+224, 180415, 530, 1, 1, -1956.558, 5153.624, -40.20916, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+225, 180415, 530, 1, 1, -1946.968, 5183.813, -40.20916, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+226, 180415, 530, 1, 1, -1976.524, 5163.211, -37.86652, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+227, 180406, 530, 1, 1, -1964.799, 5158.828, 20.03405, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+228, 180405, 530, 1, 1, -1966.638, 5166.105, -38.13643, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+229, 180415, 530, 1, 1, -1960.333, 5168.675, -37.84088, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+230, 180406, 530, 1, 1, -2002.535, 5178.877, -40.20916, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+231, 180415, 530, 1, 1, -1975.752, 5182.889, -40.20917, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+232, 180415, 530, 1, 1, -1966.224, 5179.32, -37.85986, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+233, 180415, 530, 1, 1, -1990.585, 5176.176, -40.20916, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+234, 180415, 530, 1, 1, -1984.641, 5181.01, -40.20916, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+235, 180415, 530, 1, 1, -1975.384, 5162.208, -37.85071, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+236, 180415, 530, 1, 1, -2019.362, 5190.989, -35.6937, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+237, 180415, 530, 1, 1, -2021.95, 5196.345, -35.69493, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+238, 180415, 530, 1, 1, -1940.617, 5186.5, -40.20917, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+239, 180415, 530, 1, 1, -2010.293, 5209.039, -35.69574, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+240, 180407, 530, 1, 1, -2004.333, 5223.759, -35.69689, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+241, 180415, 530, 1, 1, -2002.867, 5221.198, -35.69662, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+242, 180415, 530, 1, 1, -2007.341, 5224.245, -35.697, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+243, 180431, 530, 1, 1, -1746.621, 5620.082, 127.9465, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+244, 180405, 530, 1, 1, -2040.23, 5272.147, -39.39414, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+245, 180472, 530, 1, 1, -2037.333, 5278.771, -34.47883, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+246, 180415, 530, 1, 1, -2063.034, 5263.798, -38.4651, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+247, 180415, 530, 1, 1, -2047.227, 5279.073, -38.46528, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+248, 180415, 530, 1, 1, -2049.917, 5283.648, -38.46651, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+249, 180472, 530, 1, 1, -2061.579, 5254.934, -33.4444, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+250, 180415, 530, 1, 1, -2066.363, 5251.825, -38.46505, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+251, 180415, 530, 1, 1, -2094.274, 5197.883, -30.58273, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+252, 180415, 530, 1, 1, -2088.683, 5180.594, -29.04385, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+253, 180415, 530, 1, 1, -2072.257, 5204.007, -33.86522, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+254, 180415, 530, 1, 1, -2080.019, 5211.397, -33.80571, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+255, 180415, 530, 1, 1, -2075.596, 5271.93, -37.32354, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+256, 180415, 530, 1, 1, -2084.991, 5189.033, -30.6074, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+257, 180415, 530, 1, 1, -2076.316, 5273.985, -37.32354, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+258, 180415, 530, 1, 1, -2098.523, 5174.088, -27.32298, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+259, 180415, 530, 1, 1, -2126.393, 5169.769, -23.65068, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+260, 180415, 530, 1, 1, -2114.375, 5158.421, -23.51009, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+261, 180415, 530, 1, 1, -2109.443, 5184.435, -27.30091, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+262, 180415, 530, 1, 1, -2103.463, 5192.882, -28.88327, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+263, 180415, 530, 1, 1, -2051.785, 5314.479, -39.39214, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+264, 180406, 530, 1, 1, -2051.922, 5310.453, -38.68298, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3899) +(@OGUID+265, 180415, 530, 1, 1, -2071.595, 5291.309, -37.32354, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+266, 180415, 530, 1, 1, -2067.464, 5305.053, -37.32354, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+267, 180415, 530, 1, 1, -2051.43, 5296.361, -38.53338, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+268, 180415, 530, 1, 1, -2084.633, 5291.633, -37.32354, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3899) +(@OGUID+269, 180415, 530, 1, 1, -2074.696, 5328.799, -37.32354, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+270, 180415, 530, 1, 1, -2068.033, 5319.889, -37.32354, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+271, 180415, 530, 1, 1, -2093.221, 5313.236, -37.32355, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+272, 180472, 530, 1, 1, -2066.37, 5326.438, -32.57355, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+273, 180415, 530, 1, 1, -2070.872, 5322.3, -37.32354, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+274, 180415, 530, 1, 1, -2087.761, 5329.484, -34.30538, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+275, 180405, 530, 1, 1, -2097.77, 5327.023, -35.3358, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+276, 180415, 530, 1, 1, -2073.631, 5338.689, -37.32354, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+277, 180472, 530, 1, 1, -2087.516, 5309.336, -32.71938, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+278, 180415, 530, 1, 1, -2097.917, 5305.059, -37.32355, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+279, 180407, 530, 1, 1, -2104.679, 5301.78, -37.32354, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+280, 180415, 530, 1, 1, -2104.488, 5299.115, -37.32354, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+281, 180415, 530, 1, 1, -2075.449, 5347.141, -37.23588, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+282, 180472, 530, 1, 1, -2290.313, 5517.61, 69.03755, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+283, 180472, 530, 1, 1, -2302.897, 5520.82, 68.41949, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3898) +(@OGUID+284, 180407, 530, 1, 1, -2268.796, 5537.234, 66.99442, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3898) +(@OGUID+285, 180410, 530, 1, 1, -2244.775, 5558.765, 83.47392, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+286, 180472, 530, 1, 1, -2209.612, 5545.717, 74.61052, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+287, 180410, 530, 1, 1, -2245.656, 5556.635, 83.39277, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+288, 180410, 530, 1, 1, -2248.23, 5552.896, 83.42593, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+289, 180410, 530, 1, 1, -2246.702, 5554.45, 83.38676, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+290, 180472, 530, 1, 1, -2314.44, 5528.929, 68.49589, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+291, 180410, 530, 1, 1, -2244.457, 5563.03, 83.45087, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+292, 180410, 530, 1, 1, -2244.639, 5560.766, 83.45145, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+293, 180415, 530, 1, 1, -2271.303, 5563.579, 101.4032, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+294, 180415, 530, 1, 1, -2269.602, 5568.494, 101.4043, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+295, 180415, 530, 1, 1, -2284.665, 5565.351, 101.7906, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+296, 180415, 530, 1, 1, -2289.344, 5567.648, 100.985, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+297, 180415, 530, 1, 1, -2268.372, 5565.401, 105.0102, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+298, 180415, 530, 1, 1, -2290.393, 5569.944, 100.9936, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+299, 180415, 530, 1, 1, -2281.353, 5575.188, 101.7809, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+300, 180407, 530, 1, 1, -2225.354, 5587.122, 64.07227, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+301, 180415, 530, 1, 1, -2290.132, 5572.43, 100.9957, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+302, 180415, 530, 1, 1, -2288.95, 5574.736, 100.9939, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+303, 180415, 530, 1, 1, -2286.49, 5576.088, 100.9853, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+304, 180405, 530, 1, 1, -2241.581, 5617.456, 64.07227, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+305, 180406, 530, 1, 1, -2306.073, 5572.37, 64.07227, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+306, 180472, 530, 1, 1, -2299.912, 5575.924, 73.04609, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+307, 180405, 530, 1, 1, -2302.336, 5582.462, 64.07227, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+308, 180472, 530, 1, 1, -2313.528, 5589.7, 68.47504, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+309, 180472, 530, 1, 1, -2299.703, 5602.162, 69.12782, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+310, 185455, 530, 1, 1, -1931.683, 5771.58, 130.6861, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 185455 (Area: 0) +(@OGUID+311, 180429, 530, 1, 1, -1897.193, 5764.772, 132.3861, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 0) +(@OGUID+312, 180429, 530, 1, 1, -1754.127, 5644.799, 130.0099, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 0) +(@OGUID+313, 180415, 530, 1, 1, -1754.441, 5844.208, 146.4398, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+314, 180429, 530, 1, 1, -1759.247, 5830.715, 151.03, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 0) +(@OGUID+315, 185455, 530, 1, 1, -1752.689, 5842.345, 146.4398, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 185455 (Area: 0) +(@OGUID+316, 180415, 530, 1, 1, -1755.557, 5841.976, 146.4398, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+317, 180407, 530, 1, 1, -1694.201, 5803.418, 150.5294, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+318, 180406, 530, 1, 1, -1682.232, 5716.45, 132.2278, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+319, 180471, 530, 1, 1, -1660.319, 5724.346, 138.4462, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 0) +(@OGUID+320, 180471, 530, 1, 1, -1661.021, 5725.675, 138.5542, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 0) +(@OGUID+321, 180407, 530, 1, 1, -1664.092, 5696.812, 129.5579, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+322, 180405, 530, 1, 1, -1652.332, 5660.17, 132.697, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+323, 180415, 530, 1, 1, -1656.486, 5683.149, 132.9795, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+324, 180411, 530, 1, 1, -1657.563, 5686.755, 135.8198, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+325, 180429, 530, 1, 1, -1647.701, 5660.5, 134.0306, 0.4712385, 0, 0, 0, 1, 120, 255, 1); -- 180429 (Area: 0) + +INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES +(12, @OGUID+0), +(12, @OGUID+1), +(12, @OGUID+2), +(12, @OGUID+3), +(12, @OGUID+4), +(12, @OGUID+5), +(12, @OGUID+6), +(12, @OGUID+7), +(12, @OGUID+8), +(12, @OGUID+9), +(12, @OGUID+10), +(12, @OGUID+11), +(12, @OGUID+12), +(12, @OGUID+13), +(12, @OGUID+14), +(12, @OGUID+15), +(12, @OGUID+16), +(12, @OGUID+17), +(12, @OGUID+18), +(12, @OGUID+19), +(12, @OGUID+20), +(12, @OGUID+21), +(12, @OGUID+22), +(12, @OGUID+23), +(12, @OGUID+24), +(12, @OGUID+25), +(12, @OGUID+26), +(12, @OGUID+27), +(12, @OGUID+28), +(12, @OGUID+29), +(12, @OGUID+30), +(12, @OGUID+31), +(12, @OGUID+32), +(12, @OGUID+33), +(12, @OGUID+34), +(12, @OGUID+35), +(12, @OGUID+36), +(12, @OGUID+37), +(12, @OGUID+38), +(12, @OGUID+39), +(12, @OGUID+40), +(12, @OGUID+51), +(12, @OGUID+52), +(12, @OGUID+53), +(12, @OGUID+54), +(12, @OGUID+55), +(12, @OGUID+56), +(12, @OGUID+57), +(12, @OGUID+58), +(12, @OGUID+59), +(12, @OGUID+60), +(12, @OGUID+61), +(12, @OGUID+62), +(12, @OGUID+63), +(12, @OGUID+64), +(12, @OGUID+65), +(12, @OGUID+66), +(12, @OGUID+67), +(12, @OGUID+68), +(12, @OGUID+69), +(12, @OGUID+70), +(12, @OGUID+71), +(12, @OGUID+72), +(12, @OGUID+73), +(12, @OGUID+74), +(12, @OGUID+75), +(12, @OGUID+76), +(12, @OGUID+77), +(12, @OGUID+78), +(12, @OGUID+79), +(12, @OGUID+80), +(12, @OGUID+81), +(12, @OGUID+82), +(12, @OGUID+83), +(12, @OGUID+84), +(12, @OGUID+85), +(12, @OGUID+86), +(12, @OGUID+87), +(12, @OGUID+88), +(12, @OGUID+89), +(12, @OGUID+90), +(12, @OGUID+91), +(12, @OGUID+92), +(12, @OGUID+93), +(12, @OGUID+94), +(12, @OGUID+95), +(12, @OGUID+96), +(12, @OGUID+97), +(12, @OGUID+98), +(12, @OGUID+99), +(12, @OGUID+100), +(12, @OGUID+101), +(12, @OGUID+102), +(12, @OGUID+103), +(12, @OGUID+104), +(12, @OGUID+105), +(12, @OGUID+106), +(12, @OGUID+107), +(12, @OGUID+108), +(12, @OGUID+109), +(12, @OGUID+110), +(12, @OGUID+111), +(12, @OGUID+112), +(12, @OGUID+113), +(12, @OGUID+114), +(12, @OGUID+115), +(12, @OGUID+116), +(12, @OGUID+117), +(12, @OGUID+118), +(12, @OGUID+119), +(12, @OGUID+120), +(12, @OGUID+121), +(12, @OGUID+122), +(12, @OGUID+123), +(12, @OGUID+124), +(12, @OGUID+125), +(12, @OGUID+126), +(12, @OGUID+127), +(12, @OGUID+128), +(12, @OGUID+129), +(12, @OGUID+130), +(12, @OGUID+131), +(12, @OGUID+132), +(12, @OGUID+133), +(12, @OGUID+134), +(12, @OGUID+135), +(12, @OGUID+136), +(12, @OGUID+137), +(12, @OGUID+138), +(12, @OGUID+139), +(12, @OGUID+140), +(12, @OGUID+141), +(12, @OGUID+142), +(12, @OGUID+143), +(12, @OGUID+144), +(12, @OGUID+145), +(12, @OGUID+146), +(12, @OGUID+147), +(12, @OGUID+148), +(12, @OGUID+149), +(12, @OGUID+150), +(12, @OGUID+151), +(12, @OGUID+152), +(12, @OGUID+153), +(12, @OGUID+154), +(12, @OGUID+155), +(12, @OGUID+156), +(12, @OGUID+157), +(12, @OGUID+158), +(12, @OGUID+159), +(12, @OGUID+160), +(12, @OGUID+161), +(12, @OGUID+162), +(12, @OGUID+163), +(12, @OGUID+164), +(12, @OGUID+165), +(12, @OGUID+166), +(12, @OGUID+167), +(12, @OGUID+168), +(12, @OGUID+169), +(12, @OGUID+170), +(12, @OGUID+171), +(12, @OGUID+172), +(12, @OGUID+173), +(12, @OGUID+174), +(12, @OGUID+175), +(12, @OGUID+176), +(12, @OGUID+177), +(12, @OGUID+178), +(12, @OGUID+179), +(12, @OGUID+180), +(12, @OGUID+181), +(12, @OGUID+182), +(12, @OGUID+183), +(12, @OGUID+184), +(12, @OGUID+185), +(12, @OGUID+186), +(12, @OGUID+187), +(12, @OGUID+188), +(12, @OGUID+189), +(12, @OGUID+190), +(12, @OGUID+191), +(12, @OGUID+192), +(12, @OGUID+193), +(12, @OGUID+194), +(12, @OGUID+195), +(12, @OGUID+196), +(12, @OGUID+197), +(12, @OGUID+198), +(12, @OGUID+199), +(12, @OGUID+200), +(12, @OGUID+201), +(12, @OGUID+202), +(12, @OGUID+203), +(12, @OGUID+204), +(12, @OGUID+205), +(12, @OGUID+206), +(12, @OGUID+207), +(12, @OGUID+208), +(12, @OGUID+209), +(12, @OGUID+210), +(12, @OGUID+211), +(12, @OGUID+212), +(12, @OGUID+213), +(12, @OGUID+214), +(12, @OGUID+215), +(12, @OGUID+216), +(12, @OGUID+217), +(12, @OGUID+218), +(12, @OGUID+219), +(12, @OGUID+220), +(12, @OGUID+221), +(12, @OGUID+222), +(12, @OGUID+223), +(12, @OGUID+224), +(12, @OGUID+225), +(12, @OGUID+226), +(12, @OGUID+227), +(12, @OGUID+228), +(12, @OGUID+229), +(12, @OGUID+230), +(12, @OGUID+231), +(12, @OGUID+232), +(12, @OGUID+233), +(12, @OGUID+234), +(12, @OGUID+235), +(12, @OGUID+236), +(12, @OGUID+237), +(12, @OGUID+238), +(12, @OGUID+239), +(12, @OGUID+240), +(12, @OGUID+241), +(12, @OGUID+242), +(12, @OGUID+243), +(12, @OGUID+244), +(12, @OGUID+245), +(12, @OGUID+246), +(12, @OGUID+247), +(12, @OGUID+248), +(12, @OGUID+249), +(12, @OGUID+250), +(12, @OGUID+251), +(12, @OGUID+252), +(12, @OGUID+253), +(12, @OGUID+254), +(12, @OGUID+255), +(12, @OGUID+256), +(12, @OGUID+257), +(12, @OGUID+258), +(12, @OGUID+259), +(12, @OGUID+260), +(12, @OGUID+261), +(12, @OGUID+262), +(12, @OGUID+263), +(12, @OGUID+264), +(12, @OGUID+265), +(12, @OGUID+266), +(12, @OGUID+267), +(12, @OGUID+268), +(12, @OGUID+269), +(12, @OGUID+270), +(12, @OGUID+271), +(12, @OGUID+272), +(12, @OGUID+273), +(12, @OGUID+274), +(12, @OGUID+275), +(12, @OGUID+276), +(12, @OGUID+277), +(12, @OGUID+278), +(12, @OGUID+279), +(12, @OGUID+280), +(12, @OGUID+281), +(12, @OGUID+282), +(12, @OGUID+283), +(12, @OGUID+284), +(12, @OGUID+285), +(12, @OGUID+286), +(12, @OGUID+287), +(12, @OGUID+288), +(12, @OGUID+289), +(12, @OGUID+290), +(12, @OGUID+291), +(12, @OGUID+292), +(12, @OGUID+293), +(12, @OGUID+294), +(12, @OGUID+295), +(12, @OGUID+296), +(12, @OGUID+297), +(12, @OGUID+298), +(12, @OGUID+299), +(12, @OGUID+300), +(12, @OGUID+301), +(12, @OGUID+302), +(12, @OGUID+303), +(12, @OGUID+304), +(12, @OGUID+305), +(12, @OGUID+306), +(12, @OGUID+307), +(12, @OGUID+308), +(12, @OGUID+309), +(12, @OGUID+310), +(12, @OGUID+311), +(12, @OGUID+312), +(12, @OGUID+313), +(12, @OGUID+314), +(12, @OGUID+315), +(12, @OGUID+316), +(12, @OGUID+317), +(12, @OGUID+318), +(12, @OGUID+319), +(12, @OGUID+320), +(12, @OGUID+321), +(12, @OGUID+322), +(12, @OGUID+323), +(12, @OGUID+324), +(12, @OGUID+325); From f36d76e953b8c1d00d58daee764f192339dc5be0 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 27 Oct 2015 22:58:03 +0000 Subject: [PATCH 203/524] Rename 2015_10_27_01_world.sql to 2015_10_27_01_world.sql --- .../world/{ 2015_10_27_01_world.sql => 2015_10_27_01_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{ 2015_10_27_01_world.sql => 2015_10_27_01_world.sql} (100%) diff --git a/sql/updates/world/ 2015_10_27_01_world.sql b/sql/updates/world/2015_10_27_01_world.sql similarity index 100% rename from sql/updates/world/ 2015_10_27_01_world.sql rename to sql/updates/world/2015_10_27_01_world.sql From f5781ec3af1e0958f505d5d4b3e452cb10f1a70c Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sun, 18 Oct 2015 20:13:41 +0200 Subject: [PATCH 204/524] Scripts/DuelReset: - impemented health and mana reset - do not reset anything when duel is interrupted --- src/server/game/Entities/Player/Player.h | 10 ++++ src/server/game/World/World.cpp | 1 + src/server/game/World/World.h | 1 + src/server/scripts/World/duel_reset.cpp | 57 +++++++++++++++++--- src/server/worldserver/worldserver.conf.dist | 7 +++ 5 files changed, 70 insertions(+), 6 deletions(-) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1717678608..1eda4dc636 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1946,6 +1946,12 @@ class Player : public Unit, public GridObject uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const; void SetHonorPoints(uint32 value); void SetArenaPoints(uint32 value); + + // duel health and mana reset methods + void SaveHealthBeforeDuel() { healthBeforeDuel = GetHealth(); } + void SaveManaBeforeDuel() { manaBeforeDuel = GetPower(POWER_MANA); } + void RestoreHealthAfterDuel() { SetHealth(healthBeforeDuel); } + void RestoreManaAfterDuel() { SetPower(POWER_MANA, manaBeforeDuel); } //End of PvP System @@ -2631,6 +2637,10 @@ class Player : public Unit, public GridObject uint32 _activeCheats; + // variables to save health and mana before duel and restore them after duel + uint32 healthBeforeDuel; + uint32 manaBeforeDuel; + WorldLocation _corpseLocation; }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 1c401be97c..2fe286c547 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1192,6 +1192,7 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_START_ALL_SPELLS] = sConfigMgr->GetBoolDefault("PlayerStart.AllSpells", false); m_int_configs[CONFIG_HONOR_AFTER_DUEL] = sConfigMgr->GetIntDefault("HonorPointsAfterDuel", 0); m_bool_configs[CONFIG_RESET_DUEL_COOLDOWNS] = sConfigMgr->GetBoolDefault("ResetDuelCooldowns", false); + m_bool_configs[CONFIG_RESET_DUEL_HEALTH_MANA] = sConfigMgr->GetBoolDefault("ResetDuelHealthMana", false); m_bool_configs[CONFIG_START_ALL_EXPLORED] = sConfigMgr->GetBoolDefault("PlayerStart.MapsExplored", false); m_bool_configs[CONFIG_START_ALL_REP] = sConfigMgr->GetBoolDefault("PlayerStart.AllReputation", false); m_bool_configs[CONFIG_ALWAYS_MAXSKILL] = sConfigMgr->GetBoolDefault("AlwaysMaxWeaponSkill", false); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 7c7af77d19..6b0a63f5b2 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -162,6 +162,7 @@ enum WorldBoolConfigs CONFIG_CALCULATE_CREATURE_ZONE_AREA_DATA, CONFIG_CALCULATE_GAMEOBJECT_ZONE_AREA_DATA, CONFIG_RESET_DUEL_COOLDOWNS, + CONFIG_RESET_DUEL_HEALTH_MANA, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp index f08469d5bd..f7d7201c56 100644 --- a/src/server/scripts/World/duel_reset.cpp +++ b/src/server/scripts/World/duel_reset.cpp @@ -26,6 +26,7 @@ class DuelResetScript : public PlayerScript // Called when a duel starts (after 3s countdown) void OnDuelStart(Player* player1, Player* player2) override { + // Cooldowns reset if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) { player1->GetSpellHistory()->SaveCooldownStateBeforeDuel(); @@ -34,18 +35,62 @@ class DuelResetScript : public PlayerScript player1->RemoveArenaSpellCooldowns(true); player2->RemoveArenaSpellCooldowns(true); } + + // Health and mana reset + if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_HEALTH_MANA)) + { + player1->SaveHealthBeforeDuel(); + player1->SetHealth(player1->GetMaxHealth()); + + player2->SaveHealthBeforeDuel(); + player2->SetHealth(player2->GetMaxHealth()); + + // check if player1 class uses mana + if (player1->getPowerType() == POWER_MANA) + { + player1->SaveManaBeforeDuel(); + player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA)); + } + + // check if player2 class uses mana + if (player2->getPowerType() == POWER_MANA) + { + player2->SaveManaBeforeDuel(); + player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA)); + } + } } // Called when a duel ends - void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType /*type*/) override + void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType type) override { - if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) + // do not reset anything if DUEL_INTERRUPTED + if (type != DUEL_INTERRUPTED) { - winner->RemoveArenaSpellCooldowns(true); - loser->RemoveArenaSpellCooldowns(true); + // Cooldown restore + if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) + { + winner->RemoveArenaSpellCooldowns(true); + loser->RemoveArenaSpellCooldowns(true); - winner->GetSpellHistory()->RestoreCooldownStateAfterDuel(); - loser->GetSpellHistory()->RestoreCooldownStateAfterDuel(); + winner->GetSpellHistory()->RestoreCooldownStateAfterDuel(); + loser->GetSpellHistory()->RestoreCooldownStateAfterDuel(); + } + + // Health and mana restore + if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_HEALTH_MANA)) + { + winner->RestoreHealthAfterDuel(); + loser->RestoreHealthAfterDuel(); + + // check if player1 class uses mana + if (winner->getPowerType() == POWER_MANA) + winner->RestoreManaAfterDuel(); + + // check if player2 class uses mana + if (loser->getPowerType() == POWER_MANA) + loser->RestoreManaAfterDuel(); + } } } }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 221fea1239..a48df5ae46 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2622,6 +2622,13 @@ HonorPointsAfterDuel = 0 ResetDuelCooldowns = 0 +# ResetDuelHealthMana +# Description: Reset health and mana before duel starts and restore them when duel ends. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +ResetDuelHealthMana = 0 + # # AlwaysMaxWeaponSkill # Description: Players will automatically gain max weapon/defense skill when logging in, From b774aedd93a229fd3cbcd17a09ac195a9c0c47c6 Mon Sep 17 00:00:00 2001 From: GigaDev90 Date: Sun, 25 Oct 2015 16:23:51 +0100 Subject: [PATCH 205/524] Scripts/DuelReset: - fixed druid mana restoration - fixed bug when a player accepts duel with a spel on onHold true (like when stealth of rogue/druid is active) --- src/server/game/Spells/SpellHistory.cpp | 27 ++++++++------------ src/server/scripts/World/duel_reset.cpp | 34 +++++++++++++++++++------ 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index ca0e8cc623..c76c454564 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -652,23 +652,16 @@ void SpellHistory::RestoreCooldownStateAfterDuel() SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); if (spellInfo->RecoveryTime > 10 * MINUTE * IN_MILLISECONDS || - spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS) + spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS) _spellCooldownsBeforeDuel[itr->first] = _spellCooldowns[itr->first]; } - - _spellCooldowns = _spellCooldownsBeforeDuel; - - // update the client: clear all cooldowns - std::vector resetCooldowns; - resetCooldowns.reserve(_spellCooldowns.size()); - - for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end(); ++itr) - resetCooldowns.push_back(itr->first); - - if (resetCooldowns.empty()) - return; - - SendClearCooldowns(resetCooldowns); + //check for spell with onHold active before and during the duel + for (auto itr = _spellCooldownsBeforeDuel.begin(); itr != _spellCooldownsBeforeDuel.end(); ++itr) + { + if (!itr->second.OnHold) + if (!_spellCooldowns[itr->first].OnHold) + _spellCooldowns[itr->first] = _spellCooldownsBeforeDuel[itr->first]; + } // update the client: restore old cooldowns PacketCooldowns cooldowns; @@ -679,14 +672,14 @@ void SpellHistory::RestoreCooldownStateAfterDuel() uint32 cooldownDuration = itr->second.CooldownEnd > now ? std::chrono::duration_cast(itr->second.CooldownEnd - now).count() : 0; // cooldownDuration must be between 0 and 10 minutes in order to avoid any visual bugs - if (cooldownDuration == 0 || cooldownDuration > 10 * MINUTE * IN_MILLISECONDS) + if (cooldownDuration <= 0 || cooldownDuration > 10 * MINUTE * IN_MILLISECONDS || itr->second.OnHold) continue; cooldowns[itr->first] = cooldownDuration; } WorldPacket data; - BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, cooldowns); + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_INCLUDE_EVENT_COOLDOWNS, cooldowns); player->SendDirectMessage(&data); } } diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp index f7d7201c56..593906074c 100644 --- a/src/server/scripts/World/duel_reset.cpp +++ b/src/server/scripts/World/duel_reset.cpp @@ -17,6 +17,7 @@ #include "ScriptMgr.h" #include "Player.h" +#include "Pet.h" class DuelResetScript : public PlayerScript { @@ -32,8 +33,9 @@ class DuelResetScript : public PlayerScript player1->GetSpellHistory()->SaveCooldownStateBeforeDuel(); player2->GetSpellHistory()->SaveCooldownStateBeforeDuel(); - player1->RemoveArenaSpellCooldowns(true); - player2->RemoveArenaSpellCooldowns(true); + + ResetSpellCooldowns(player1, true); + ResetSpellCooldowns(player2, true); } // Health and mana reset @@ -46,14 +48,14 @@ class DuelResetScript : public PlayerScript player2->SetHealth(player2->GetMaxHealth()); // check if player1 class uses mana - if (player1->getPowerType() == POWER_MANA) + if (player1->getPowerType() == POWER_MANA || player1->getClass() == CLASS_DRUID) { player1->SaveManaBeforeDuel(); player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA)); } // check if player2 class uses mana - if (player2->getPowerType() == POWER_MANA) + if (player2->getPowerType() == POWER_MANA || player2->getClass() == CLASS_DRUID) { player2->SaveManaBeforeDuel(); player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA)); @@ -70,8 +72,9 @@ class DuelResetScript : public PlayerScript // Cooldown restore if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) { - winner->RemoveArenaSpellCooldowns(true); - loser->RemoveArenaSpellCooldowns(true); + + ResetSpellCooldowns(winner, true); + ResetSpellCooldowns(loser, true); winner->GetSpellHistory()->RestoreCooldownStateAfterDuel(); loser->GetSpellHistory()->RestoreCooldownStateAfterDuel(); @@ -84,15 +87,30 @@ class DuelResetScript : public PlayerScript loser->RestoreHealthAfterDuel(); // check if player1 class uses mana - if (winner->getPowerType() == POWER_MANA) + if (winner->getPowerType() == POWER_MANA || winner->getClass() == CLASS_DRUID) winner->RestoreManaAfterDuel(); // check if player2 class uses mana - if (loser->getPowerType() == POWER_MANA) + if (loser->getPowerType() == POWER_MANA || loser->getClass() == CLASS_DRUID) loser->RestoreManaAfterDuel(); } } } + + void ResetSpellCooldowns(Player* player, bool removeActivePetCooldowns) + { + // remove cooldowns on spells that have < 10 min CD and has no onHold + player->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool + { + SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); + return spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS && spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS && !itr->second.OnHold; + }, true); + + // pet cooldowns + if (removeActivePetCooldowns) + if (Pet* pet = player->GetPet()) + pet->GetSpellHistory()->ResetAllCooldowns(); + } }; void AddSC_duel_reset() From fa1cad2020e5c2d54fe06ec9cd90d8e6a44daa5b Mon Sep 17 00:00:00 2001 From: Kittnz Date: Wed, 28 Oct 2015 20:18:06 +0100 Subject: [PATCH 206/524] DB/Event: Fix for Dalaran & Shattrath Hallow's End spawns --- sql/updates/world/2015_10_28_00_world.sql | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 sql/updates/world/2015_10_28_00_world.sql diff --git a/sql/updates/world/2015_10_28_00_world.sql b/sql/updates/world/2015_10_28_00_world.sql new file mode 100644 index 0000000000..d414c3b7fc --- /dev/null +++ b/sql/updates/world/2015_10_28_00_world.sql @@ -0,0 +1,29 @@ +-- Fix for DB/Event: Add missing Hallow's End event spawns in Dalaran +SET @OGUID:=77307; +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+9 AND `eventEntry`=12; +INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES +(12, @OGUID+0), +(12, @OGUID+1), +(12, @OGUID+2), +(12, @OGUID+3), +(12, @OGUID+4), +(12, @OGUID+5), +(12, @OGUID+6), +(12, @OGUID+7), +(12, @OGUID+8), +(12, @OGUID+9); + +-- Fix for DB/Event: Add missing Hallow's End event spawns in Shattrath +SET @OGUID:=77697; +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+9 AND `eventEntry`=12; +INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES +(12, @OGUID+0), +(12, @OGUID+1), +(12, @OGUID+2), +(12, @OGUID+3), +(12, @OGUID+4), +(12, @OGUID+5), +(12, @OGUID+6), +(12, @OGUID+7), +(12, @OGUID+8), +(12, @OGUID+9); From d380c12c562800b4b073cc0ec49808c256789519 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Mon, 19 Oct 2015 13:44:36 +0200 Subject: [PATCH 207/524] Core/Battleground: implement deserters tracker feature --- sql/base/characters_database.sql | 16 +++++++++++++++- .../characters/2015_10_28_00_characters.sql | 6 ++++++ .../Implementation/CharacterDatabase.cpp | 3 +++ .../Database/Implementation/CharacterDatabase.h | 2 ++ src/server/game/Battlegrounds/Battleground.cpp | 9 +++++++++ src/server/game/Battlegrounds/Battleground.h | 9 +++++++++ .../game/Battlegrounds/BattlegroundQueue.cpp | 10 ++++++++++ src/server/game/Entities/Player/Player.cpp | 10 ++++++++++ src/server/game/Handlers/BattleGroundHandler.cpp | 10 ++++++++++ src/server/game/Server/WorldSession.cpp | 9 +++++++++ src/server/game/World/World.cpp | 1 + src/server/game/World/World.h | 1 + src/server/worldserver/worldserver.conf.dist | 8 ++++++++ 13 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 sql/updates/characters/2015_10_28_00_characters.sql diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 8ecf61f546..9f32e0f6fc 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -239,6 +239,20 @@ LOCK TABLES `banned_addons` WRITE; /*!40000 ALTER TABLE `banned_addons` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `battleground_deserters` +-- + +DROP TABLE IF EXISTS `battleground_deserters`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `battleground_deserters` ( + `guid` int(10) unsigned NOT NULL COMMENT 'characters.guid', + `type` tinyint(3) unsigned NOT NULL COMMENT 'type of the desertion', + `datetime` datetime NOT NULL COMMENT 'datetime of the desertion' +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `bugreport` -- @@ -2511,7 +2525,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql', '16842FDD7E8547F2260D3312F53EFF8761EFAB35', 'ARCHIVED', '2015-10-06 16:06:38', 0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/2015_10_28_00_characters.sql b/sql/updates/characters/2015_10_28_00_characters.sql new file mode 100644 index 0000000000..9d353773a3 --- /dev/null +++ b/sql/updates/characters/2015_10_28_00_characters.sql @@ -0,0 +1,6 @@ +DROP TABLE IF EXISTS `battleground_deserters`; +CREATE TABLE `battleground_deserters` ( + `guid` INT(10) UNSIGNED NOT NULL COMMENT 'characters.guid', + `type` TINYINT(3) UNSIGNED NOT NULL COMMENT 'type of the desertion', + `datetime` DATETIME NOT NULL COMMENT 'datetime of the desertion' +); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index b41ba41bcf..4557dcab99 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -611,4 +611,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE, "UPDATE quest_tracker SET completed_by_gm = 1 WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME, "UPDATE quest_tracker SET quest_complete_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME, "UPDATE quest_tracker SET quest_abandon_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC); + + // DeserterTracker + PrepareStatement(CHAR_INS_DESERTER_TRACK, "INSERT INTO battleground_deserters (guid, type, datetime) VALUES (?, ?, NOW())", CONNECTION_ASYNC); } diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index c76c584a0a..f920a8c3d1 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -531,6 +531,8 @@ enum CharacterDatabaseStatements CHAR_UPD_QUEST_TRACK_COMPLETE_TIME, CHAR_UPD_QUEST_TRACK_ABANDON_TIME, + CHAR_INS_DESERTER_TRACK, + MAX_CHARACTERDATABASE_STATEMENTS }; diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 0e44925cd5..d368b347a0 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -306,6 +306,15 @@ inline void Battleground::_ProcessOfflineQueue() { if (itr->second.OfflineRemoveTime <= sWorld->GetGameTime()) { + if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) && + (GetStatus() == STATUS_IN_PROGRESS || GetStatus() == STATUS_WAIT_JOIN)) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); + stmt->setUInt32(0, itr->first.GetCounter()); + stmt->setUInt8(1, BG_DESERTION_TYPE_OFFLINE); + CharacterDatabase.Execute(stmt); + } + RemovePlayerAtLeave(itr->first, true, true);// remove player from BG m_OfflineQueue.pop_front(); // remove from offline queue //do not use itr for anything, because it is erased in RemovePlayerAtLeave() diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 0813429856..471da9846b 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -40,6 +40,15 @@ class BattlegroundMap; struct PvPDifficultyEntry; struct WorldSafeLocsEntry; +enum BattlegroundDesertionType +{ + BG_DESERTION_TYPE_LEAVE_BG = 0, // player leaves the BG + BG_DESERTION_TYPE_OFFLINE = 1, // player is kicked from BG because offline + BG_DESERTION_TYPE_LEAVE_QUEUE = 2, // player is invited to join and refuses to do it + BG_DESERTION_TYPE_NO_ENTER_BUTTON = 3, // player is invited to join and do nothing (time expires) + BG_DESERTION_TYPE_INVITE_LOGOUT = 4, // player is invited to join and logs out +}; + enum BattlegroundCriteriaId { BG_CRITERIA_CHECK_RESILIENT_VICTORY, diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index 162122ab4d..87e07e1519 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -1068,6 +1068,16 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) BattlegroundQueue &bgQueue = sBattlegroundMgr->GetBattlegroundQueue(m_BgQueueTypeId); if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime)) { + // track if player leaves the BG by not clicking enter button + if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) && + (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN)) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); + stmt->setUInt32(0, player->GetGUID().GetCounter()); + stmt->setUInt8(1, BG_DESERTION_TYPE_NO_ENTER_BUTTON); + CharacterDatabase.Execute(stmt); + } + TC_LOG_DEBUG("bg.battleground", "Battleground: removing player %u from bg queue for instance %u because of not pressing enter battle in time.", player->GetGUID().GetCounter(), m_BgInstanceGUID); player->RemoveBattlegroundQueueId(m_BgQueueTypeId); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index bfcdb7a8f5..fcd7b8707c 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -22031,6 +22031,16 @@ void Player::LeaveBattleground(bool teleportToEntryPoint) CastSpell(this, 26013, true); // Deserter } } + + // track if player leaves the BG while inside it + if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) && + (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN)) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); + stmt->setUInt32(0, GetGUID().GetCounter()); + stmt->setUInt8(1, BG_DESERTION_TYPE_LEAVE_BG); + CharacterDatabase.Execute(stmt); + } } } diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index fec0b8e0d4..d4291e34df 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -506,6 +506,16 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) sBattlegroundMgr->ScheduleQueueUpdate(ginfo.ArenaMatchmakerRating, ginfo.ArenaType, bgQueueTypeId, bgTypeId, bracketEntry->GetBracketId()); SendPacket(&data); TC_LOG_DEBUG("bg.battleground", "Battleground: player %s (%u) left queue for bgtype %u, queue type %u.", _player->GetName().c_str(), _player->GetGUID().GetCounter(), bg->GetTypeID(), bgQueueTypeId); + + // track if player refuses to join the BG after being invited + if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) && + (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN)) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); + stmt->setUInt8(1, BG_DESERTION_TYPE_LEAVE_QUEUE); + CharacterDatabase.Execute(stmt); + } } } diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index b4bb7541be..c99346cdb7 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -483,6 +483,15 @@ void WorldSession::LogoutPlayer(bool save) { if (BattlegroundQueueTypeId bgQueueTypeId = _player->GetBattlegroundQueueTypeId(i)) { + // track if player logs out after invited to join BG + if (_player->IsInvitedForBattlegroundQueueType(bgQueueTypeId) && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS)) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); + stmt->setUInt32(0, _player->GetGUID().GetCounter()); + stmt->setUInt8(1, BG_DESERTION_TYPE_INVITE_LOGOUT); + CharacterDatabase.Execute(stmt); + } + _player->RemoveBattlegroundQueueId(bgQueueTypeId); BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId); queue.RemovePlayer(_player->GetGUID(), true); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 1c401be97c..6a3dafd0e1 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1038,6 +1038,7 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE] = sConfigMgr->GetBoolDefault("Battleground.QueueAnnouncer.Enable", false); m_bool_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY] = sConfigMgr->GetBoolDefault("Battleground.QueueAnnouncer.PlayerOnly", false); m_bool_configs[CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE] = sConfigMgr->GetBoolDefault("Battleground.StoreStatistics.Enable", false); + m_bool_configs[CONFIG_BATTLEGROUND_TRACK_DESERTERS] = sConfigMgr->GetBoolDefault("Battleground.TrackDeserters.Enable", false); m_int_configs[CONFIG_BATTLEGROUND_INVITATION_TYPE] = sConfigMgr->GetIntDefault ("Battleground.InvitationType", 0); m_int_configs[CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER] = sConfigMgr->GetIntDefault ("Battleground.PrematureFinishTimer", 5 * MINUTE * IN_MILLISECONDS); m_int_configs[CONFIG_BATTLEGROUND_PREMADE_GROUP_WAIT_FOR_MATCH] = sConfigMgr->GetIntDefault ("Battleground.PremadeGroupWaitForMatch", 30 * MINUTE * IN_MILLISECONDS); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 7c7af77d19..e655a64776 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -124,6 +124,7 @@ enum WorldBoolConfigs CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE, CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY, CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE, + CONFIG_BATTLEGROUND_TRACK_DESERTERS, CONFIG_BG_XP_FOR_KILL, CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS, CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE, diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 221fea1239..13b6b22bed 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2198,6 +2198,14 @@ Battleground.QueueAnnouncer.PlayerOnly = 0 Battleground.StoreStatistics.Enable = 0 +# +# Battleground.TrackDeserters.Enable +# Description: Track deserters of Battlegrounds. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.TrackDeserters.Enable = 0 + # # Battleground.InvitationType # Description: Set Battleground invitation type. From 20b4e6f03adc29e486e20866222a42e8935704b4 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 28 Oct 2015 21:43:44 +0100 Subject: [PATCH 208/524] Core/Corpses: Fixed leaking corpses Closes #15765 (cherry picked from commit bd16520ecc91d827abae7f0447cc292fe9e843e9) --- src/server/game/Entities/Corpse/Corpse.cpp | 23 ++----------- src/server/game/Entities/Corpse/Corpse.h | 7 ++-- src/server/game/Entities/Player/Player.cpp | 5 +-- src/server/game/Maps/Map.cpp | 40 +++++++++++++++++----- src/server/game/Maps/Map.h | 1 + 5 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index ca808ad15a..b744914988 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -61,7 +61,6 @@ void Corpse::RemoveFromWorld() bool Corpse::Create(ObjectGuid::LowType guidlow, Map* map) { - SetMap(map); Object::_Create(guidlow, 0, HighGuid::Corpse); return true; } @@ -79,16 +78,12 @@ bool Corpse::Create(ObjectGuid::LowType guidlow, Player* owner) return false; } - //we need to assign owner's map for corpse - //in other way we will get a crash in Corpse::SaveToDB() - SetMap(owner->GetMap()); - WorldObject::_Create(guidlow, HighGuid::Corpse, owner->GetPhaseMask()); SetObjectScale(1.0f); SetGuidValue(CORPSE_FIELD_OWNER, owner->GetGUID()); - _gridCoord = Trinity::ComputeGridCoord(GetPositionX(), GetPositionY()); + _cellCoord = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()); return true; } @@ -123,20 +118,6 @@ void Corpse::SaveToDB() CharacterDatabase.CommitTransaction(trans); } -void Corpse::DeleteBonesFromWorld() -{ - ASSERT(GetType() == CORPSE_BONES); - Corpse* corpse = ObjectAccessor::GetCorpse(*this, GetGUID()); - - if (!corpse) - { - TC_LOG_ERROR("entities.player", "Bones %u not found in world.", GetGUID().GetCounter()); - return; - } - - AddObjectToRemoveList(); -} - void Corpse::DeleteFromDB(SQLTransaction& trans) { DeleteFromDB(GetOwnerGUID(), trans); @@ -192,7 +173,7 @@ bool Corpse::LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields) return false; } - _gridCoord = Trinity::ComputeGridCoord(GetPositionX(), GetPositionY()); + _cellCoord = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()); return true; } diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index be2cb435ac..c135548bee 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -61,7 +61,6 @@ class Corpse : public WorldObject, public GridObject void SaveToDB(); bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields); - void DeleteBonesFromWorld(); void DeleteFromDB(SQLTransaction& trans); static void DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans); @@ -71,8 +70,8 @@ class Corpse : public WorldObject, public GridObject void ResetGhostTime() { m_time = time(NULL); } CorpseType GetType() const { return m_type; } - GridCoord const& GetGridCoord() const { return _gridCoord; } - void SetGridCoord(GridCoord const& gridCoord) { _gridCoord = gridCoord; } + CellCoord const& GetCellCoord() const { return _cellCoord; } + void SetCellCoord(CellCoord const& cellCoord) { _cellCoord = cellCoord; } Loot loot; // remove insignia ONLY at BG Player* lootRecipient; @@ -83,6 +82,6 @@ class Corpse : public WorldObject, public GridObject private: CorpseType m_type; time_t m_time; - GridCoord _gridCoord; // gride for corpse position for fast search + CellCoord _cellCoord; }; #endif diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 450c605614..5df5fa9057 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5164,12 +5164,13 @@ Corpse* Player::CreateCorpse() } } + // register for player, but not show + GetMap()->AddCorpse(corpse); + // we do not need to save corpses for BG/arenas if (!GetMap()->IsBattlegroundOrArena()) corpse->SaveToDB(); - // register for player, but not show - GetMap()->AddCorpse(corpse); return corpse; } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 7ab83d51c7..a9ef590f84 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -1601,6 +1601,13 @@ void Map::UnloadAll() RemoveFromMap(transport, true); } + + for (auto& cellCorpsePair : _corpsesByCell) + for (Corpse* corpse : cellCorpsePair.second) + delete corpse; + + _corpsesByCell.clear(); + _corpsesByPlayer.clear(); } // ***************************** @@ -3575,14 +3582,16 @@ void Map::AddCorpse(Corpse* corpse) { corpse->SetMap(this); - CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY()); - _corpsesByCell[cellCoord.GetId()].insert(corpse); - _corpsesByPlayer[corpse->GetOwnerGUID()] = corpse; + _corpsesByCell[corpse->GetCellCoord().GetId()].insert(corpse); + if (corpse->GetType() != CORPSE_BONES) + _corpsesByPlayer[corpse->GetOwnerGUID()] = corpse; + else + _corpseBones.insert(corpse); } void Map::RemoveCorpse(Corpse* corpse) { - ASSERT(corpse && corpse->GetType() != CORPSE_BONES); + ASSERT(corpse); corpse->DestroyForNearbyPlayers(); if (corpse->IsInGrid()) @@ -3593,9 +3602,11 @@ void Map::RemoveCorpse(Corpse* corpse) corpse->ResetMap(); } - CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY()); - _corpsesByCell[cellCoord.GetId()].erase(corpse); - _corpsesByPlayer.erase(corpse->GetOwnerGUID()); + _corpsesByCell[corpse->GetCellCoord().GetId()].erase(corpse); + if (corpse->GetType() != CORPSE_BONES) + _corpsesByPlayer.erase(corpse->GetOwnerGUID()); + else + _corpseBones.erase(corpse); } Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= false*/) @@ -3626,7 +3637,7 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type bones->SetUInt32Value(i, corpse->GetUInt32Value(i)); - bones->SetGridCoord(corpse->GetGridCoord()); + bones->SetCellCoord(corpse->GetCellCoord()); bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation()); bones->SetPhaseMask(corpse->GetPhaseMask(), false); @@ -3637,6 +3648,8 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= if (corpse->GetUInt32Value(CORPSE_FIELD_ITEM + i)) bones->SetUInt32Value(CORPSE_FIELD_ITEM + i, 0); + AddCorpse(bones); + // add bones in grid store if grid loaded where corpse placed AddToMap(bones); } @@ -3660,6 +3673,17 @@ void Map::RemoveOldCorpses() for (ObjectGuid const& ownerGuid : corpses) ConvertCorpseToBones(ownerGuid); + + std::vector expiredBones; + for (Corpse* bones : _corpseBones) + if (bones->IsExpired(now)) + expiredBones.push_back(bones); + + for (Corpse* bones : expiredBones) + { + RemoveCorpse(bones); + delete bones; + } } void Map::SendZoneDynamicInfo(Player* player) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 184f1f9a42..c658d60f08 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -733,6 +733,7 @@ class Map : public GridRefManager GameObjectBySpawnIdContainer _gameobjectBySpawnIdStore; std::unordered_map> _corpsesByCell; std::unordered_map _corpsesByPlayer; + std::unordered_set _corpseBones; std::unordered_set _updateObjects; }; From 3f32307d377d53f31ed92f068fdc4db8069a3b6c Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 29 Oct 2015 17:20:03 +0100 Subject: [PATCH 209/524] DB/Objects: Add some missing objects on Eversong Woods --- sql/updates/world/2015_10_29_00_world.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sql/updates/world/2015_10_29_00_world.sql diff --git a/sql/updates/world/2015_10_29_00_world.sql b/sql/updates/world/2015_10_29_00_world.sql new file mode 100644 index 0000000000..dd80ebe8ec --- /dev/null +++ b/sql/updates/world/2015_10_29_00_world.sql @@ -0,0 +1,10 @@ +-- +SET @OGUID:=17765; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+5; +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, 180643, 530, 1, 1, 10362.4, -6414.424, 163.4537, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180643 (Area: 3431) +(@OGUID+1, 181325, 530, 1, 1, 6810.514, -7413.837, 47.01349, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181325 (Area: 3517) +(@OGUID+2, 184803, 530, 1, 1, 9748.917, -7075.639, 16.75368, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 184803 (Area: -1) +(@OGUID+3, 184804, 530, 1, 1, 9749.188, -7075.547, 16.75464, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 184804 (Area: -1) +(@OGUID+4, 186406, 530, 1, 1, 6738.535, -7607.16, 126.1211, 2.862331, 0, 0, 0, 1, 120, 255, 1), -- 186406 (Area: 3507) +(@OGUID+5, 186407, 530, 1, 1, 6795.697, -7574.934, 126.9773, 3.324856, 0, 0, 0, 1, 120, 255, 1); -- 186407 (Area: 3517) From 7dcddd90be6e49281ca04239de5839e757ef3f7a Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 29 Oct 2015 17:55:57 +0100 Subject: [PATCH 210/524] Core/Spells: Improved spell category cooldown handling * Category cooldown is stored with the spell that started the cooldown (and only resetting cooldown on that spell will clear cooldowns on entire category - this fully mirrors client behavior) * This significantly reduces the amount of data saved to database for cooldowns * Spell casts from items that have a different category specified than on spell will now check for cooldown during the cast (cherry picked from commit 1efb3f08e278530f59d681f676b031a7fc6db3ac) Closes #15766 Closes #15137 Closes #14837 --- sql/base/characters_database.sql | 4 + .../2015_10_29_00_characters_335.sql | 7 + .../Implementation/CharacterDatabase.cpp | 8 +- src/server/game/DataStores/DBCStores.cpp | 7 - src/server/game/DataStores/DBCStores.h | 1 - src/server/game/DataStores/DBCStructure.h | 2 - src/server/game/Entities/Player/Player.cpp | 4 +- src/server/game/Globals/ObjectMgr.cpp | 9 - src/server/game/Spells/Auras/SpellAuras.cpp | 2 +- src/server/game/Spells/Spell.cpp | 2 +- src/server/game/Spells/SpellHistory.cpp | 219 ++++++++++-------- src/server/game/Spells/SpellHistory.h | 29 ++- 12 files changed, 155 insertions(+), 139 deletions(-) create mode 100644 sql/updates/characters/2015_10_29_00_characters_335.sql diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 9f32e0f6fc..d8f3c792c2 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1154,6 +1154,8 @@ CREATE TABLE `character_spell_cooldown` ( `spell` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell Identifier', `item` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Item Identifier', `time` int(10) unsigned NOT NULL DEFAULT '0', + `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id', + `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0'; PRIMARY KEY (`guid`,`spell`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; @@ -2301,6 +2303,8 @@ CREATE TABLE `pet_spell_cooldown` ( `guid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier, Low part', `spell` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell Identifier', `time` int(10) unsigned NOT NULL DEFAULT '0', + `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id', + `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0'; PRIMARY KEY (`guid`,`spell`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/sql/updates/characters/2015_10_29_00_characters_335.sql b/sql/updates/characters/2015_10_29_00_characters_335.sql new file mode 100644 index 0000000000..94c9066c6a --- /dev/null +++ b/sql/updates/characters/2015_10_29_00_characters_335.sql @@ -0,0 +1,7 @@ +ALTER TABLE `character_spell_cooldown` + ADD `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id' AFTER `time`, + ADD `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0' AFTER `categoryId`; + +ALTER TABLE `pet_spell_cooldown` + ADD `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id' AFTER `time`, + ADD `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0' AFTER `categoryId`; diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 4557dcab99..afc8c783ca 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -105,7 +105,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_MAIL_COUNT, "SELECT COUNT(*) FROM mail WHERE receiver = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHARACTER_SOCIALLIST, "SELECT friend, flags, note FROM character_social JOIN characters ON characters.guid = character_social.friend WHERE character_social.guid = ? AND deleteinfos_name IS NULL LIMIT 255", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time, categoryId, categoryEnd FROM character_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_GUILD_MEMBER, "SELECT guildid, rank FROM guild_member WHERE guid = ?", CONNECTION_BOTH); PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gr.rname, gr.rid, gm.pnote, gm.offnote " @@ -498,7 +498,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_CHAR_TITLES_FACTION_CHANGE, "UPDATE characters SET knownTitles = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_RES_CHAR_TITLES_FACTION_CHANGE, "UPDATE characters SET chosenTitle = 0 WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_SPELL_COOLDOWNS, "DELETE FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CHAR_SPELL_COOLDOWN, "INSERT INTO character_spell_cooldown (guid, spell, item, time) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHAR_SPELL_COOLDOWN, "INSERT INTO character_spell_cooldown (guid, spell, item, time, categoryId, categoryEnd) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHARACTER, "DELETE FROM characters WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_ACTION, "DELETE FROM character_action WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_AURA, "DELETE FROM character_aura WHERE guid = ?", CONNECTION_ASYNC); @@ -578,12 +578,12 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_INS_CHAR_PET_DECLINEDNAME, "INSERT INTO character_pet_declinedname (id, owner, genitive, dative, accusative, instrumental, prepositional) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PET_AURA, "SELECT casterGuid, spell, effectMask, recalculateMask, stackCount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2, maxDuration, remainTime, remainCharges FROM pet_aura WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_PET_SPELL, "SELECT spell, active FROM pet_spell WHERE guid = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_PET_SPELL_COOLDOWN, "SELECT spell, time FROM pet_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_PET_SPELL_COOLDOWN, "SELECT spell, time, categoryId, categoryEnd FROM pet_spell_cooldown WHERE guid = ? AND time > UNIX_TIMESTAMP()", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_PET_DECLINED_NAME, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_pet_declinedname WHERE owner = ? AND id = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_DEL_PET_AURAS, "DELETE FROM pet_aura WHERE guid = ?", CONNECTION_BOTH); PrepareStatement(CHAR_DEL_PET_SPELLS, "DELETE FROM pet_spell WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_PET_SPELL_COOLDOWNS, "DELETE FROM pet_spell_cooldown WHERE guid = ?", CONNECTION_BOTH); - PrepareStatement(CHAR_INS_PET_SPELL_COOLDOWN, "INSERT INTO pet_spell_cooldown (guid, spell, time) VALUES (?, ?, ?)", CONNECTION_BOTH); + PrepareStatement(CHAR_INS_PET_SPELL_COOLDOWN, "INSERT INTO pet_spell_cooldown (guid, spell, time, categoryId, categoryEnd) VALUES (?, ?, ?, ?, ?)", CONNECTION_BOTH); PrepareStatement(CHAR_DEL_PET_SPELL_BY_SPELL, "DELETE FROM pet_spell WHERE guid = ? and spell = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_PET_SPELL, "INSERT INTO pet_spell (guid, spell, active) VALUES (?, ?, ?)", CONNECTION_BOTH); PrepareStatement(CHAR_INS_PET_AURA, "INSERT INTO pet_aura (guid, casterGuid, spell, effectMask, recalculateMask, stackCount, amount0, amount1, amount2, " diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index e268b376b3..14e4631548 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -163,7 +163,6 @@ DBCStorage sSoundEntriesStore(SoundEntriesfmt); DBCStorage sSpellItemEnchantmentStore(SpellItemEnchantmentfmt); DBCStorage sSpellItemEnchantmentConditionStore(SpellItemEnchantmentConditionfmt); DBCStorage sSpellStore(SpellEntryfmt); -SpellCategoryStore sSpellsByCategoryStore; PetFamilySpellsStore sPetFamilySpellsStore; DBCStorage sSpellCastTimesStore(SpellCastTimefmt); @@ -430,12 +429,6 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sSkillTiersStore, dbcPath, "SkillTiers.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sSoundEntriesStore, dbcPath, "SoundEntries.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sSpellStore, dbcPath, "Spell.dbc", &CustomSpellEntryfmt, &CustomSpellEntryIndex); - for (uint32 i = 1; i < sSpellStore.GetNumRows(); ++i) - { - SpellEntry const* spell = sSpellStore.LookupEntry(i); - if (spell && spell->Category) - sSpellsByCategoryStore[spell->Category].insert(i); - } for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) { diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index d955e9581a..858cd33f8f 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -165,7 +165,6 @@ extern DBCStorage sSpellDurationStore; extern DBCStorage sSpellFocusObjectStore; extern DBCStorage sSpellItemEnchantmentStore; extern DBCStorage sSpellItemEnchantmentConditionStore; -extern SpellCategoryStore sSpellsByCategoryStore; extern PetFamilySpellsStore sPetFamilySpellsStore; extern DBCStorage sSpellRadiusStore; extern DBCStorage sSpellRangeStore; diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 092ef71414..72317a196c 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1737,8 +1737,6 @@ struct SpellEntry //uint32 SpellDifficultyId; // 233 3.3.0 }; -typedef std::set SpellCategorySet; -typedef std::map SpellCategoryStore; typedef std::set PetFamilySpellsSet; typedef std::map PetFamilySpellsStore; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5df5fa9057..26f2e91272 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15912,7 +15912,7 @@ bool Player::GetQuestRewardStatus(uint32 quest_id) const uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo); if (m_seasonalquests.find(eventId) != m_seasonalquests.end()) return m_seasonalquests.find(eventId)->second.find(quest_id) != m_seasonalquests.find(eventId)->second.end(); - + return false; } @@ -22723,7 +22723,7 @@ void Player::ApplyEquipCooldown(Item* pItem) continue; // Don't replace longer cooldowns by equip cooldown if we have any. - if (GetSpellHistory()->GetRemainingCooldown(spellData.SpellId) > 30 * IN_MILLISECONDS) + if (GetSpellHistory()->GetRemainingCooldown(sSpellMgr->EnsureSpellInfo(spellData.SpellId)) > 30 * IN_MILLISECONDS) continue; GetSpellHistory()->AddCooldown(spellData.SpellId, pItem->GetEntry(), std::chrono::seconds(30)); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index db352ec80d..b9547070a7 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2715,15 +2715,6 @@ void ObjectMgr::LoadItemTemplates() TC_LOG_ERROR("sql.sql", "Item (Entry: %u) has broken spell in spellid_%d (%d)", entry, j+1, itemTemplate.Spells[j].SpellId); itemTemplate.Spells[j].SpellId = 0; } - - if (spellInfo && itemTemplate.Spells[j].SpellCategory - && itemTemplate.Spells[j].SpellCategory != SPELL_CATEGORY_FOOD) - { - bool added = sSpellsByCategoryStore[itemTemplate.Spells[j].SpellCategory].insert(itemTemplate.Spells[j].SpellId).second; - if (added) - TC_LOG_DEBUG("sql.sql", "Item(Entry: %u) spellid_%d (%d) category %u added to sSpellsByCategoryStore", - entry, j + 1, itemTemplate.Spells[j].SpellId, itemTemplate.Spells[j].SpellCategory); - } } } } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index e42f66c6ff..9313301832 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1487,7 +1487,7 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b { // This additional check is needed to add a minimal delay before cooldown in in effect // to allow all bubbles broken by a single damage source proc mana return - if (caster->GetSpellHistory()->GetRemainingCooldown(aura->GetId()) <= 11) + if (caster->GetSpellHistory()->GetRemainingCooldown(aura->GetSpellInfo()) <= 11) break; } else // and add if needed diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index e1302d48d2..4e98efe10d 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4668,7 +4668,7 @@ SpellCastResult Spell::CheckCast(bool strict) return SPELL_FAILED_NOT_READY; } - if (!m_caster->GetSpellHistory()->IsReady(m_spellInfo)) + if (!m_caster->GetSpellHistory()->IsReady(m_spellInfo, m_castItemEntry)) { if (m_triggeredByAuraSpell) return SPELL_FAILED_DONT_REPORT; diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index ca0e8cc623..13d1c6f50b 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -43,6 +43,8 @@ struct SpellHistory::PersistenceHelper cooldownEntry->CooldownEnd = Clock::from_time_t(time_t(fields[2].GetUInt32())); cooldownEntry->ItemId = fields[1].GetUInt32(); + cooldownEntry->CategoryId = fields[3].GetUInt32(); + cooldownEntry->CategoryEnd = Clock::from_time_t(time_t(fields[4].GetUInt32())); return true; } @@ -51,6 +53,8 @@ struct SpellHistory::PersistenceHelper stmt->setUInt32(index++, cooldown.first); stmt->setUInt32(index++, cooldown.second.ItemId); stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CooldownEnd))); + stmt->setUInt32(index++, cooldown.second.CategoryId); + stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CategoryEnd))); } }; @@ -70,6 +74,8 @@ struct SpellHistory::PersistenceHelper cooldownEntry->CooldownEnd = Clock::from_time_t(time_t(fields[1].GetUInt32())); cooldownEntry->ItemId = 0; + cooldownEntry->CategoryId = fields[2].GetUInt32(); + cooldownEntry->CategoryEnd = Clock::from_time_t(time_t(fields[3].GetUInt32())); return true; } @@ -77,6 +83,8 @@ struct SpellHistory::PersistenceHelper { stmt->setUInt32(index++, cooldown.first); stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CooldownEnd))); + stmt->setUInt32(index++, cooldown.second.CategoryId); + stmt->setUInt32(index++, uint32(Clock::to_time_t(cooldown.second.CategoryEnd))); } }; @@ -92,7 +100,11 @@ void SpellHistory::LoadFromDB(PreparedQueryResult cooldownsResult) uint32 spellId; CooldownEntry cooldown; if (StatementInfo::ReadCooldown(cooldownsResult->Fetch(), &spellId, &cooldown)) + { _spellCooldowns[spellId] = cooldown; + if (cooldown.CategoryId) + _categoryCooldowns[cooldown.CategoryId] = &_spellCooldowns[spellId]; + } } while (cooldownsResult->NextRow()); } @@ -125,40 +137,56 @@ void SpellHistory::Update() { SQLTransaction t; Clock::time_point now = Clock::now(); + for (auto itr = _categoryCooldowns.begin(); itr != _categoryCooldowns.end();) + { + if (itr->second->CategoryEnd < now) + itr = _categoryCooldowns.erase(itr); + else + ++itr; + } + for (auto itr = _spellCooldowns.begin(); itr != _spellCooldowns.end();) { if (itr->second.CooldownEnd < now) - itr = _spellCooldowns.erase(itr); + itr = EraseCooldown(itr); else ++itr; } } void SpellHistory::HandleCooldowns(SpellInfo const* spellInfo, Item const* item, Spell* spell /*= nullptr*/) +{ + HandleCooldowns(spellInfo, item ? item->GetEntry() : 0, spell); +} + +void SpellHistory::HandleCooldowns(SpellInfo const* spellInfo, uint32 itemID, Spell* spell /*= nullptr*/) { if (Player* player = _owner->ToPlayer()) { // potions start cooldown until exiting combat - if (item && (item->IsPotion() || spellInfo->IsCooldownStartedOnEvent())) + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemID)) { - player->SetLastPotionId(item->GetEntry()); - return; + if (itemTemplate->IsPotion() || spellInfo->IsCooldownStartedOnEvent()) + { + player->SetLastPotionId(itemID); + return; + } } } if (spellInfo->IsCooldownStartedOnEvent() || spellInfo->IsPassive() || (spell && spell->IsIgnoringCooldowns())) return; - StartCooldown(spellInfo, item ? item->GetEntry() : 0, spell); + StartCooldown(spellInfo, itemID, spell); } -bool SpellHistory::IsReady(SpellInfo const* spellInfo) const +bool SpellHistory::IsReady(SpellInfo const* spellInfo, uint32 itemId /*= 0*/) const { if (spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE) if (IsSchoolLocked(spellInfo->GetSchoolMask())) return false; - if (HasCooldown(spellInfo->Id)) + if (HasCooldown(spellInfo->Id, itemId)) return false; return true; @@ -168,42 +196,33 @@ template<> void SpellHistory::WritePacket(WorldPacket& packet) const { Clock::time_point now = Clock::now(); - + uint8 cooldownsCount = _spellCooldowns.size(); packet << uint8(cooldownsCount); for (auto const& spellCooldown : _spellCooldowns) { - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellCooldown.first); - if (!spellInfo) - { - packet << uint32(0); - packet << uint16(0); - packet << uint32(0); - packet << uint32(0); - continue; - } - - packet << uint32(spellCooldown.first); // spell ID - packet << uint16(spellInfo->GetCategory()); // spell category + packet << uint32(spellCooldown.first); // spell ID + packet << uint16(spellCooldown.second.CategoryId); // spell category if (!spellCooldown.second.OnHold) { - uint32 cooldownDuration = spellCooldown.second.CooldownEnd > now ? std::chrono::duration_cast(spellCooldown.second.CooldownEnd - now).count() : 0; - if (cooldownDuration <= 0) + std::chrono::milliseconds cooldownDuration = std::chrono::duration_cast(spellCooldown.second.CooldownEnd - now); + if (cooldownDuration.count() <= 0) { packet << uint32(0); packet << uint32(0); continue; } - if (spellInfo->GetCategory()) + std::chrono::milliseconds categoryDuration = std::chrono::duration_cast(spellCooldown.second.CategoryEnd - now); + if (categoryDuration.count() > 0) { packet << uint32(0); - packet << uint32(cooldownDuration); + packet << uint32(categoryDuration.count()); } else { - packet << uint32(cooldownDuration); + packet << uint32(cooldownDuration.count()); packet << uint32(0); } } @@ -216,23 +235,13 @@ void SpellHistory::WritePacket(WorldPacket& packet) const Clock::time_point now = Clock::now(); Clock::time_point infTime = now + InfinityCooldownDelayCheck; - uint16 cooldownsCount = _spellCooldowns.size(); - size_t dataPos = packet.wpos(); - packet << uint16(cooldownsCount); + packet << uint16(_spellCooldowns.size()); for (auto const& spellCooldown : _spellCooldowns) { - SpellInfo const* sEntry = sSpellMgr->GetSpellInfo(spellCooldown.first); - if (!sEntry) - { - --cooldownsCount; - continue; - } - packet << uint32(spellCooldown.first); - packet << uint16(spellCooldown.second.ItemId); // cast item id - packet << uint16(sEntry->GetCategory()); // spell category + packet << uint16(spellCooldown.second.CategoryId); // spell category // send infinity cooldown in special format if (spellCooldown.second.CooldownEnd >= infTime) @@ -242,21 +251,26 @@ void SpellHistory::WritePacket(WorldPacket& packet) const continue; } - uint32 cooldownDuration = spellCooldown.second.CooldownEnd > now ? std::chrono::duration_cast(spellCooldown.second.CooldownEnd - now).count() : 0; + std::chrono::milliseconds cooldownDuration = std::chrono::duration_cast(spellCooldown.second.CooldownEnd - now); + if (cooldownDuration.count() <= 0) + { + packet << uint32(0); + packet << uint32(0); + continue; + } - if (sEntry->GetCategory()) // may be wrong, but anyway better than nothing... + std::chrono::milliseconds categoryDuration = std::chrono::duration_cast(spellCooldown.second.CategoryEnd - now); + if (categoryDuration.count() >= 0) { packet << uint32(0); // cooldown - packet << uint32(cooldownDuration); // category cooldown + packet << uint32(categoryDuration.count()); // category cooldown } else { - packet << uint32(cooldownDuration); // cooldown + packet << uint32(cooldownDuration.count()); // cooldown packet << uint32(0); // category cooldown } } - - packet.put(dataPos, cooldownsCount); } void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spell* spell /*= nullptr*/, bool onHold /*= false*/) @@ -351,7 +365,7 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel // self spell cooldown if (recTime != curTime) { - AddCooldown(spellInfo->Id, itemId, recTime, onHold); + AddCooldown(spellInfo->Id, itemId, recTime, categoryId, catrecTime, onHold); if (needsCooldownPacket) { @@ -363,22 +377,6 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel } } } - - // category spells - if (categoryId && catrecTime != curTime) - { - SpellCategoryStore::const_iterator i_scstore = sSpellsByCategoryStore.find(categoryId); - if (i_scstore != sSpellsByCategoryStore.end()) - { - for (SpellCategorySet::const_iterator i_scset = i_scstore->second.begin(); i_scset != i_scstore->second.end(); ++i_scset) - { - if (*i_scset == spellInfo->Id) // skip main spell, already handled above - continue; - - AddCooldown(*i_scset, itemId, catrecTime, onHold); - } - } - } } void SpellHistory::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= nullptr*/, bool startCooldown /*= true*/) @@ -387,49 +385,27 @@ void SpellHistory::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId / if (startCooldown) StartCooldown(spellInfo, itemId, spell); + // Send activate cooldown timer (possible 0) at client side if (Player* player = GetPlayerOwner()) { - // Send activate cooldown timer (possible 0) at client side WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8); data << uint32(spellInfo->Id); data << uint64(_owner->GetGUID()); player->SendDirectMessage(&data); - - uint32 category = spellInfo->GetCategory(); - if (category && spellInfo->CategoryRecoveryTime) - { - SpellCategoryStore::const_iterator ct = sSpellsByCategoryStore.find(category); - if (ct != sSpellsByCategoryStore.end()) - { - for (auto const& cooldownPair : _spellCooldowns) - { - uint32 categorySpell = cooldownPair.first; - if (!ct->second.count(categorySpell)) - continue; - - if (categorySpell == spellInfo->Id) // skip main spell, already handled above - continue; - - SpellInfo const* spellInfo2 = sSpellMgr->EnsureSpellInfo(categorySpell); - if (!spellInfo2->IsCooldownStartedOnEvent()) - continue; - - data.Initialize(SMSG_COOLDOWN_EVENT, 4 + 8); - data << uint32(categorySpell); - data << uint64(_owner->GetGUID()); - player->SendDirectMessage(&data); - } - } - } } } -void SpellHistory::AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, bool onHold /*= false*/) +void SpellHistory::AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, uint32 categoryId, Clock::time_point categoryEnd, bool onHold /*= false*/) { CooldownEntry& cooldownEntry = _spellCooldowns[spellId]; cooldownEntry.CooldownEnd = cooldownEnd; cooldownEntry.ItemId = itemId; + cooldownEntry.CategoryId = categoryId; + cooldownEntry.CategoryEnd = categoryEnd; cooldownEntry.OnHold = onHold; + + if (categoryId) + _categoryCooldowns[categoryId] = &cooldownEntry; } void SpellHistory::ModifyCooldown(uint32 spellId, int32 cooldownModMs) @@ -443,7 +419,7 @@ void SpellHistory::ModifyCooldown(uint32 spellId, int32 cooldownModMs) if (itr->second.CooldownEnd + offset > now) itr->second.CooldownEnd += offset; else - _spellCooldowns.erase(itr); + EraseCooldown(itr); if (Player* playerOwner = GetPlayerOwner()) { @@ -477,7 +453,7 @@ void SpellHistory::ResetCooldown(CooldownStorageType::iterator& itr, bool update } } - itr = _spellCooldowns.erase(itr); + itr = EraseCooldown(itr); } void SpellHistory::ResetAllCooldowns() @@ -492,31 +468,69 @@ void SpellHistory::ResetAllCooldowns() SendClearCooldowns(cooldowns); } + _categoryCooldowns.clear(); _spellCooldowns.clear(); } -bool SpellHistory::HasCooldown(uint32 spellId) const +bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/) const { - return _spellCooldowns.count(spellId) != 0; + if (_spellCooldowns.count(spellInfo->Id) != 0) + return true; + + uint32 category = 0; + if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId)) + { + for (uint32 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) + { + if (itemTemplate->Spells[i].SpellId == spellInfo->Id) + { + category = itemTemplate->Spells[i].SpellCategory; + break; + } + } + } + + if (!category) + category = spellInfo->GetCategory(); + + if (!category) + return false; + + return _categoryCooldowns.count(category) != 0; } -uint32 SpellHistory::GetRemainingCooldown(uint32 spellId) const +bool SpellHistory::HasCooldown(uint32 spellId, uint32 itemId /*= 0*/) const { - auto itr = _spellCooldowns.find(spellId); - if (itr == _spellCooldowns.end()) - return 0; + return HasCooldown(sSpellMgr->EnsureSpellInfo(spellId), itemId); +} + +uint32 SpellHistory::GetRemainingCooldown(SpellInfo const* spellInfo) const +{ + Clock::time_point end; + auto itr = _spellCooldowns.find(spellInfo->Id); + if (itr != _spellCooldowns.end()) + end = itr->second.CooldownEnd; + else + { + auto catItr = _categoryCooldowns.find(spellInfo->GetCategory()); + if (catItr == _categoryCooldowns.end()) + return 0; + + end = catItr->second->CategoryEnd; + } Clock::time_point now = Clock::now(); - if (itr->second.CooldownEnd < now) + if (end < now) return 0; - Clock::duration remaining = itr->second.CooldownEnd - now; + Clock::duration remaining = end - now; return uint32(std::chrono::duration_cast(remaining).count()); } void SpellHistory::LockSpellSchool(SpellSchoolMask schoolMask, uint32 lockoutTime) { - Clock::time_point lockoutEnd = Clock::now() + std::chrono::duration_cast(std::chrono::milliseconds(lockoutTime)); + Clock::time_point now = Clock::now(); + Clock::time_point lockoutEnd = now + std::chrono::duration_cast(std::chrono::milliseconds(lockoutTime)); for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i) if (SpellSchoolMask(1 << i) & schoolMask) _schoolLockouts[i] = lockoutEnd; @@ -553,10 +567,10 @@ void SpellHistory::LockSpellSchool(SpellSchoolMask schoolMask, uint32 lockoutTim if (spellInfo->PreventionType != SPELL_PREVENTION_TYPE_SILENCE) continue; - if ((schoolMask & spellInfo->GetSchoolMask()) && GetRemainingCooldown(spellId) < lockoutTime) + if ((schoolMask & spellInfo->GetSchoolMask()) && GetRemainingCooldown(spellInfo) < lockoutTime) { cooldowns[spellId] = lockoutTime; - AddCooldown(spellId, 0, lockoutEnd); + AddCooldown(spellId, 0, lockoutEnd, 0, now); } } @@ -644,6 +658,7 @@ void SpellHistory::SaveCooldownStateBeforeDuel() void SpellHistory::RestoreCooldownStateAfterDuel() { + // category cooldows are not preserved. if (Player* player = _owner->ToPlayer()) { // add all profession CDs created while in duel (if any) diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h index 86737ec7da..572f407da9 100644 --- a/src/server/game/Spells/SpellHistory.h +++ b/src/server/game/Spells/SpellHistory.h @@ -38,15 +38,15 @@ public: struct CooldownEntry { - CooldownEntry() : ItemId(0), OnHold(false) { } - CooldownEntry(Clock::time_point endTime, uint32 itemId) : CooldownEnd(endTime), ItemId(itemId), OnHold(false) { } - Clock::time_point CooldownEnd; - uint32 ItemId; - bool OnHold; + uint32 ItemId = 0; + uint32 CategoryId = 0; + Clock::time_point CategoryEnd; + bool OnHold = false; }; typedef std::unordered_map CooldownStorageType; + typedef std::unordered_map CategoryCooldownStorageType; typedef std::unordered_map GlobalCooldownStorageType; explicit SpellHistory(Unit* owner) : _owner(owner), _schoolLockouts() { } @@ -60,7 +60,8 @@ public: void Update(); void HandleCooldowns(SpellInfo const* spellInfo, Item const* item, Spell* spell = nullptr); - bool IsReady(SpellInfo const* spellInfo) const; + void HandleCooldowns(SpellInfo const* spellInfo, uint32 itemID, Spell* spell = nullptr); + bool IsReady(SpellInfo const* spellInfo, uint32 itemId = 0) const; template void WritePacket(WorldPacket& packet) const; @@ -74,10 +75,11 @@ public: template void AddCooldown(uint32 spellId, uint32 itemId, std::chrono::duration cooldownDuration) { - AddCooldown(spellId, itemId, Clock::now() + std::chrono::duration_cast(cooldownDuration)); + Clock::time_point now = Clock::now(); + AddCooldown(spellId, itemId, now + std::chrono::duration_cast(cooldownDuration), 0, now); } - void AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, bool onHold = false); + void AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, uint32 categoryId, Clock::time_point categoryEnd, bool onHold = false); void ModifyCooldown(uint32 spellId, int32 cooldownModMs); void ResetCooldown(uint32 spellId, bool update = false); void ResetCooldown(CooldownStorageType::iterator& itr, bool update = false); @@ -102,8 +104,9 @@ public: } void ResetAllCooldowns(); - bool HasCooldown(uint32 spellId) const; - uint32 GetRemainingCooldown(uint32 spellId) const; + bool HasCooldown(SpellInfo const* spellInfo, uint32 itemId = 0) const; + bool HasCooldown(uint32 spellId, uint32 itemId = 0) const; + uint32 GetRemainingCooldown(SpellInfo const* spellInfo) const; // School lockouts void LockSpellSchool(SpellSchoolMask schoolMask, uint32 lockoutTime); @@ -123,6 +126,11 @@ public: private: Player* GetPlayerOwner() const; void SendClearCooldowns(std::vector const& cooldowns) const; + CooldownStorageType::iterator EraseCooldown(CooldownStorageType::iterator itr) + { + _categoryCooldowns.erase(itr->second.CategoryId); + return _spellCooldowns.erase(itr); + } typedef std::unordered_map PacketCooldowns; void BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns) const; @@ -130,6 +138,7 @@ private: Unit* _owner; CooldownStorageType _spellCooldowns; CooldownStorageType _spellCooldownsBeforeDuel; + CategoryCooldownStorageType _categoryCooldowns; Clock::time_point _schoolLockouts[MAX_SPELL_SCHOOL]; GlobalCooldownStorageType _globalCooldowns; From 1d17475791cae66beafda1e2c3198a66d355086f Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 29 Oct 2015 18:46:37 +0100 Subject: [PATCH 211/524] Core/Corpses: Fixed map crash happening during map unload when there are corpses inside --- src/server/game/Entities/Corpse/Corpse.cpp | 2 +- src/server/game/Entities/Corpse/Corpse.h | 2 +- src/server/game/Maps/Map.cpp | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index b744914988..ea6fbd3481 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -59,7 +59,7 @@ void Corpse::RemoveFromWorld() WorldObject::RemoveFromWorld(); } -bool Corpse::Create(ObjectGuid::LowType guidlow, Map* map) +bool Corpse::Create(ObjectGuid::LowType guidlow) { Object::_Create(guidlow, 0, HighGuid::Corpse); return true; diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index c135548bee..7f2608e4bf 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -55,7 +55,7 @@ class Corpse : public WorldObject, public GridObject void AddToWorld() override; void RemoveFromWorld() override; - bool Create(ObjectGuid::LowType guidlow, Map* map); + bool Create(ObjectGuid::LowType guidlow); bool Create(ObjectGuid::LowType guidlow, Player* owner); void SaveToDB(); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index a9ef590f84..2b60ae53c9 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -1603,11 +1603,18 @@ void Map::UnloadAll() } for (auto& cellCorpsePair : _corpsesByCell) + { for (Corpse* corpse : cellCorpsePair.second) + { + corpse->RemoveFromWorld(); + corpse->ResetMap(); delete corpse; + } + } _corpsesByCell.clear(); _corpsesByPlayer.clear(); + _corpseBones.clear(); } // ***************************** @@ -3632,7 +3639,7 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= { // Create bones, don't change Corpse bones = new Corpse(); - bones->Create(corpse->GetGUID().GetCounter(), this); + bones->Create(corpse->GetGUID().GetCounter()); for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type bones->SetUInt32Value(i, corpse->GetUInt32Value(i)); From 079c6b47f941af2e3aa710705f022741b5c15b54 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Thu, 29 Oct 2015 18:50:07 +0100 Subject: [PATCH 212/524] Core/Player: remove unused method prototypes (cherry picked from commit 9617da72492953fcbbc6f100079c3241e0c3a096) --- src/server/game/Entities/Player/Player.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1717678608..4cfe6a3697 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2370,7 +2370,6 @@ class Player : public Unit, public GridObject void _LoadGroup(PreparedQueryResult result); void _LoadSkills(PreparedQueryResult result); void _LoadSpells(PreparedQueryResult result); - void _LoadFriendList(PreparedQueryResult result); bool _LoadHomeBind(PreparedQueryResult result); void _LoadDeclinedNames(PreparedQueryResult result); void _LoadArenaTeamInfo(PreparedQueryResult result); From 31cf5ea305c471b8086f582879c25f9fa9777005 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 27 Oct 2015 22:55:57 +0100 Subject: [PATCH 213/524] Core/Misc: Removed manually defined ObjectGuid copy/move constructors. This will cause the compiler to automatically generate trivial constructors allowing them to be treated as simple integers (cherry picked from commit 3fd15ed22a23af1c5bb2cf037f93c1bce5f1e243) --- src/server/game/Entities/Object/ObjectGuid.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 697ee3835f..372a31307d 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -130,11 +130,6 @@ class ObjectGuid explicit ObjectGuid(uint64 guid) : _guid(guid) { } ObjectGuid(HighGuid hi, uint32 entry, LowType counter) : _guid(counter ? uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48) : 0) { } ObjectGuid(HighGuid hi, LowType counter) : _guid(counter ? uint64(counter) | (uint64(hi) << 48) : 0) { } - ObjectGuid(ObjectGuid const& r) : _guid(r._guid) { } - ObjectGuid(ObjectGuid&& r) : _guid(r._guid) { } - - ObjectGuid& operator=(ObjectGuid const& r) { _guid = r._guid; return *this; } - ObjectGuid& operator=(ObjectGuid&& r) { _guid = r._guid; return *this; } operator uint64() const { return _guid; } PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); } From 5736deb8549da301cec076fba4d3c1aeedb4227a Mon Sep 17 00:00:00 2001 From: Naios Date: Mon, 12 Oct 2015 00:58:11 +0200 Subject: [PATCH 214/524] Core/Build: Never overwrite the msvc cxx flags in the cache * Setting all compiler flags in the cache led to circular bloating of msvc cxx parameters (was visible in console) which caused MSVC to rebuild the whole solution even on a small CMake change. It's not neccessary anyway to set the cxx parameters to the cache to take effect. * I'm not sure if the workarround is still needed for MSVC 12+. * Cleaning the CMake cache is recommended! * ref #15671 (cherry picked from commit 0946fcf2aa35ebe0b8db07813315e3d6546b9d31) --- cmake/compiler/msvc/settings.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/compiler/msvc/settings.cmake b/cmake/compiler/msvc/settings.cmake index 2810434b3b..be8028da02 100644 --- a/cmake/compiler/msvc/settings.cmake +++ b/cmake/compiler/msvc/settings.cmake @@ -78,7 +78,7 @@ endif() # Fixes a compiler-problem when using PCH - the /Ym flag is adjusted by the compiler in MSVC2012, hence we need to set an upper limit with /Zm to avoid discrepancies) # (And yes, this is a verified , unresolved bug with MSVC... *sigh*) string(REGEX REPLACE "/Zm[0-9]+ *" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm500" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm500") # Enable and treat as errors the following warnings to easily detect virtual function signature failures: # 'function' : member function does not override any base class virtual member function From d96db56f03726afa3236ac04cda5d8dc0c1d1aa2 Mon Sep 17 00:00:00 2001 From: Naios Date: Mon, 12 Oct 2015 14:13:50 +0200 Subject: [PATCH 215/524] Core/Tools: Fix brutal linking in mmaps extractor. * caused warnings with shared linking * ref #15671 (cherry picked from commit 13654bac2c41b2971915e706b5304a3ce6089a47) --- .../Collision/Management/VMapManager2.cpp | 5 ++ .../Collision/Management/VMapManager2.h | 2 +- src/common/Collision/Maps/MapTree.cpp | 6 ++ src/common/Collision/Models/ModelInstance.h | 3 +- src/common/Collision/Models/WorldModel.cpp | 19 +++++ src/common/Collision/Models/WorldModel.h | 10 ++- src/tools/mmaps_generator/VMapExtensions.cpp | 70 ------------------- 7 files changed, 36 insertions(+), 79 deletions(-) delete mode 100644 src/tools/mmaps_generator/VMapExtensions.cpp diff --git a/src/common/Collision/Management/VMapManager2.cpp b/src/common/Collision/Management/VMapManager2.cpp index 9594951196..a63eac1b93 100644 --- a/src/common/Collision/Management/VMapManager2.cpp +++ b/src/common/Collision/Management/VMapManager2.cpp @@ -326,4 +326,9 @@ namespace VMAP return StaticMapTree::CanLoadMap(std::string(basePath), mapId, x, y); } + void VMapManager2::getInstanceMapTree(InstanceTreeMap &instanceMapTree) + { + instanceMapTree = iInstanceMapTrees; + } + } // namespace VMAP diff --git a/src/common/Collision/Management/VMapManager2.h b/src/common/Collision/Management/VMapManager2.h index a5891e9642..c2e1aee1ff 100644 --- a/src/common/Collision/Management/VMapManager2.h +++ b/src/common/Collision/Management/VMapManager2.h @@ -128,7 +128,7 @@ namespace VMAP return getMapFileName(mapId); } virtual bool existsMap(const char* basePath, unsigned int mapId, int x, int y) override; - public: + void getInstanceMapTree(InstanceTreeMap &instanceMapTree); typedef uint32(*GetLiquidFlagsFn)(uint32 liquidType); diff --git a/src/common/Collision/Maps/MapTree.cpp b/src/common/Collision/Maps/MapTree.cpp index b493ec18f5..e374da4f1b 100644 --- a/src/common/Collision/Maps/MapTree.cpp +++ b/src/common/Collision/Maps/MapTree.cpp @@ -474,4 +474,10 @@ namespace VMAP } iLoadedTiles.erase(tile); } + + void StaticMapTree::getModelInstances(ModelInstance* &models, uint32 &count) + { + models = iTreeValues; + count = iNTreeValues; + } } diff --git a/src/common/Collision/Models/ModelInstance.h b/src/common/Collision/Models/ModelInstance.h index dfdb001db0..f8bbfa4fa7 100644 --- a/src/common/Collision/Models/ModelInstance.h +++ b/src/common/Collision/Models/ModelInstance.h @@ -70,12 +70,11 @@ namespace VMAP void intersectPoint(const G3D::Vector3& p, AreaInfo &info) const; bool GetLocationInfo(const G3D::Vector3& p, LocationInfo &info) const; bool GetLiquidLevel(const G3D::Vector3& p, LocationInfo &info, float &liqHeight) const; + WorldModel* getWorldModel() { return iModel; } protected: G3D::Matrix3 iInvRot; float iInvScale; WorldModel* iModel; - public: - WorldModel* getWorldModel(); }; } // namespace VMAP diff --git a/src/common/Collision/Models/WorldModel.cpp b/src/common/Collision/Models/WorldModel.cpp index 86ab9366c7..087abfcd09 100644 --- a/src/common/Collision/Models/WorldModel.cpp +++ b/src/common/Collision/Models/WorldModel.cpp @@ -249,6 +249,13 @@ namespace VMAP return result; } + void WmoLiquid::getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const + { + tilesX = iTilesX; + tilesY = iTilesY; + corner = iCorner; + } + // ===================== GroupModel ================================== GroupModel::GroupModel(const GroupModel &other): @@ -409,6 +416,13 @@ namespace VMAP return 0; } + void GroupModel::getMeshData(std::vector &vertices, std::vector &triangles, WmoLiquid* &liquid) + { + vertices = this->vertices; + triangles = this->triangles; + liquid = iLiquid; + } + // ===================== WorldModel ================================== void WorldModel::setGroupModels(std::vector &models) @@ -582,4 +596,9 @@ namespace VMAP fclose(rf); return result; } + + void WorldModel::getGroupModels(std::vector &groupModels) + { + groupModels = this->groupModels; + } } diff --git a/src/common/Collision/Models/WorldModel.h b/src/common/Collision/Models/WorldModel.h index 6a901a59fd..4d46915678 100644 --- a/src/common/Collision/Models/WorldModel.h +++ b/src/common/Collision/Models/WorldModel.h @@ -58,6 +58,7 @@ namespace VMAP uint32 GetFileSize(); bool writeToFile(FILE* wf); static bool readFromFile(FILE* rf, WmoLiquid* &liquid); + void getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const; private: WmoLiquid() : iTilesX(0), iTilesY(0), iCorner(), iType(0), iHeight(NULL), iFlags(NULL) { } uint32 iTilesX; //!< number of tiles in x direction, each @@ -66,8 +67,6 @@ namespace VMAP uint32 iType; //!< liquid type float *iHeight; //!< (tilesX + 1)*(tilesY + 1) height values uint8 *iFlags; //!< info if liquid tile is used - public: - void getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const; }; /*! holding additional info for WMO group files */ @@ -92,6 +91,7 @@ namespace VMAP const G3D::AABox& GetBound() const { return iBound; } uint32 GetMogpFlags() const { return iMogpFlags; } uint32 GetWmoID() const { return iGroupWMOID; } + void getMeshData(std::vector &vertices, std::vector &triangles, WmoLiquid* &liquid); protected: G3D::AABox iBound; uint32 iMogpFlags;// 0x8 outdor; 0x2000 indoor @@ -100,9 +100,8 @@ namespace VMAP std::vector triangles; BIH meshTree; WmoLiquid* iLiquid; - public: - void getMeshData(std::vector &vertices, std::vector &triangles, WmoLiquid* &liquid); }; + /*! Holds a model (converted M2 or WMO) in its original coordinate space */ class WorldModel { @@ -117,12 +116,11 @@ namespace VMAP bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, LocationInfo &info) const; bool writeFile(const std::string &filename); bool readFile(const std::string &filename); + void getGroupModels(std::vector &groupModels); protected: uint32 RootWMOID; std::vector groupModels; BIH groupTree; - public: - void getGroupModels(std::vector &groupModels); }; } // namespace VMAP diff --git a/src/tools/mmaps_generator/VMapExtensions.cpp b/src/tools/mmaps_generator/VMapExtensions.cpp deleted file mode 100644 index 63c8e52454..0000000000 --- a/src/tools/mmaps_generator/VMapExtensions.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2008-2015 TrinityCore - * Copyright (C) 2005-2011 MaNGOS - * - * 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 -#include "MapTree.h" -#include "VMapManager2.h" -#include "WorldModel.h" -#include "ModelInstance.h" - -namespace VMAP -{ - // Need direct access to encapsulated VMAP data, so we add functions for MMAP generator - // maybe add MapBuilder as friend to all of the below classes would be better? - - // declared in src/shared/vmap/MapTree.h - void StaticMapTree::getModelInstances(ModelInstance* &models, uint32 &count) - { - models = iTreeValues; - count = iNTreeValues; - } - - // declared in src/shared/vmap/VMapManager2.h - void VMapManager2::getInstanceMapTree(InstanceTreeMap &instanceMapTree) - { - instanceMapTree = iInstanceMapTrees; - } - - // declared in src/shared/vmap/WorldModel.h - void WorldModel::getGroupModels(std::vector &groupModels) - { - groupModels = this->groupModels; - } - - // declared in src/shared/vmap/WorldModel.h - void GroupModel::getMeshData(std::vector &vertices, std::vector &triangles, WmoLiquid* &liquid) - { - vertices = this->vertices; - triangles = this->triangles; - liquid = iLiquid; - } - - // declared in src/shared/vmap/ModelInstance.h - WorldModel* ModelInstance::getWorldModel() - { - return iModel; - } - - // declared in src/shared/vmap/WorldModel.h - void WmoLiquid::getPosInfo(uint32 &tilesX, uint32 &tilesY, G3D::Vector3 &corner) const - { - tilesX = iTilesX; - tilesY = iTilesY; - corner = iCorner; - } -} From b1b72dafd05fac354df42583c325099cc34ad575 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 17 Oct 2015 16:35:37 +0200 Subject: [PATCH 216/524] Warning fixes (cherry picked from commit 82db416b5d4825f24da1ad92e771d6567750f649) --- src/common/Collision/Models/WorldModel.cpp | 10 +++++----- src/common/Collision/Models/WorldModel.h | 4 ++-- src/server/game/Entities/Creature/CreatureGroups.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/common/Collision/Models/WorldModel.cpp b/src/common/Collision/Models/WorldModel.cpp index 087abfcd09..7f4d76b244 100644 --- a/src/common/Collision/Models/WorldModel.cpp +++ b/src/common/Collision/Models/WorldModel.cpp @@ -416,10 +416,10 @@ namespace VMAP return 0; } - void GroupModel::getMeshData(std::vector &vertices, std::vector &triangles, WmoLiquid* &liquid) + void GroupModel::getMeshData(std::vector& outVertices, std::vector& outTriangles, WmoLiquid*& liquid) { - vertices = this->vertices; - triangles = this->triangles; + outVertices = vertices; + outTriangles = triangles; liquid = iLiquid; } @@ -597,8 +597,8 @@ namespace VMAP return result; } - void WorldModel::getGroupModels(std::vector &groupModels) + void WorldModel::getGroupModels(std::vector& outGroupModels) { - groupModels = this->groupModels; + outGroupModels = groupModels; } } diff --git a/src/common/Collision/Models/WorldModel.h b/src/common/Collision/Models/WorldModel.h index 4d46915678..afa9d15b26 100644 --- a/src/common/Collision/Models/WorldModel.h +++ b/src/common/Collision/Models/WorldModel.h @@ -91,7 +91,7 @@ namespace VMAP const G3D::AABox& GetBound() const { return iBound; } uint32 GetMogpFlags() const { return iMogpFlags; } uint32 GetWmoID() const { return iGroupWMOID; } - void getMeshData(std::vector &vertices, std::vector &triangles, WmoLiquid* &liquid); + void getMeshData(std::vector& outVertices, std::vector& outTriangles, WmoLiquid*& liquid); protected: G3D::AABox iBound; uint32 iMogpFlags;// 0x8 outdor; 0x2000 indoor @@ -116,7 +116,7 @@ namespace VMAP bool GetLocationInfo(const G3D::Vector3 &p, const G3D::Vector3 &down, float &dist, LocationInfo &info) const; bool writeFile(const std::string &filename); bool readFile(const std::string &filename); - void getGroupModels(std::vector &groupModels); + void getGroupModels(std::vector& outGroupModels); protected: uint32 RootWMOID; std::vector groupModels; diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h index e4b2f63c1a..3de1370379 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.h +++ b/src/server/game/Entities/Creature/CreatureGroups.h @@ -32,8 +32,8 @@ struct FormationInfo float follow_dist; float follow_angle; uint8 groupAI; - uint16 point_1; - uint16 point_2; + uint32 point_1; + uint32 point_2; }; typedef std::unordered_map CreatureGroupInfoType; From c7bad70e55e02fa4270f225e2dc42fd080db4abd Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 15 Oct 2015 23:29:19 +0200 Subject: [PATCH 217/524] Core/Players: Check if player can enter the instance during login before trying to add him to map * Fixes name displaying as "Unknown" (cherry picked from commit 45994a177c128dc83ea01b0697377f7b74b5c4ba) --- src/server/game/Entities/Player/Player.cpp | 16 +++++++--------- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Handlers/CharacterHandler.cpp | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 26f2e91272..6730d1545f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17453,7 +17453,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) } else if (map->IsDungeon()) // if map is dungeon... { - if (!((InstanceMap*)map)->CanEnter(this)) // ... and can't enter map, then look for entry point. + if (!((InstanceMap*)map)->CanEnter(this) || !CheckInstanceLoginValid(map)) // ... and can't enter map, then look for entry point. { areaTrigger = sObjectMgr->GetGoBackTrigger(mapId); check = true; @@ -17480,6 +17480,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) { TC_LOG_ERROR("entities.player", "Player %s %s Map: %u, X: %f, Y: %f, Z: %f, O: %f. Areatrigger not found.", m_name.c_str(), guid.ToString().c_str(), mapId, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); + RelocateToHomebind(); map = NULL; } } @@ -19010,15 +19011,12 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report return true; } -bool Player::CheckInstanceLoginValid() +bool Player::CheckInstanceLoginValid(Map* map) { - if (!FindMap()) - return false; - - if (!GetMap()->IsDungeon() || IsGameMaster()) + if (!map->IsDungeon() || IsGameMaster()) return true; - if (GetMap()->IsRaid()) + if (map->IsRaid()) { // cannot be in raid instance without a group if (!GetGroup()) @@ -19027,12 +19025,12 @@ bool Player::CheckInstanceLoginValid() else { // cannot be in normal instance without a group and more players than 1 in instance - if (!GetGroup() && GetMap()->GetPlayersCountExceptGMs() > 1) + if (!GetGroup() && map->GetPlayersCountExceptGMs() > 1) return false; } // do checks for satisfy accessreqs, instance full, encounter in progress (raid), perm bind group != perm bind player - return sMapMgr->CanPlayerEnter(GetMap()->GetId(), this, true); + return sMapMgr->CanPlayerEnter(map->GetId(), this, true); } bool Player::CheckInstanceCount(uint32 instanceId) const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 4cfe6a3697..0fc8e716ad 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2198,7 +2198,7 @@ class Player : public Unit, public GridObject void SendSavedInstances(); static void ConvertInstancesToGroup(Player* player, Group* group, bool switchLeader); bool Satisfy(AccessRequirement const* ar, uint32 target_map, bool report = false); - bool CheckInstanceLoginValid(); + bool CheckInstanceLoginValid(Map* map); bool CheckInstanceCount(uint32 instanceId) const; void AddInstanceEnterTime(uint32 instanceId, time_t enterTime); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 29761ead70..cea45039e8 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -887,7 +887,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) } } - if (!pCurrChar->GetMap()->AddPlayerToMap(pCurrChar) || !pCurrChar->CheckInstanceLoginValid()) + if (!pCurrChar->GetMap()->AddPlayerToMap(pCurrChar)) { AreaTrigger const* at = sObjectMgr->GetGoBackTrigger(pCurrChar->GetMapId()); if (at) From 38c7a375302b7edf116b8e77ddd673dfb67b853e Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 16 Oct 2015 00:50:49 +0200 Subject: [PATCH 218/524] Core/Crash reporting: Fixed windows version detection for 8.1 and newer (cherry picked from commit 4c866a0af0ffe1828c5694de7ef7007cefb46966) --- .../Debugging/WheatyExceptionReport.cpp | 72 ++++++++++++++----- src/common/Debugging/WheatyExceptionReport.h | 4 ++ 2 files changed, 60 insertions(+), 16 deletions(-) diff --git a/src/common/Debugging/WheatyExceptionReport.cpp b/src/common/Debugging/WheatyExceptionReport.cpp index 7cf109b407..5b9a1b1bd6 100644 --- a/src/common/Debugging/WheatyExceptionReport.cpp +++ b/src/common/Debugging/WheatyExceptionReport.cpp @@ -63,6 +63,8 @@ std::stack WheatyExceptionReport::symbolDetails; bool WheatyExceptionReport::stackOverflowException; bool WheatyExceptionReport::alreadyCrashed; std::mutex WheatyExceptionReport::alreadyCrashedLock; +WheatyExceptionReport::pRtlGetVersion WheatyExceptionReport::RtlGetVersion; + // Declare global instance of class WheatyExceptionReport g_WheatyExceptionReport; @@ -76,6 +78,7 @@ WheatyExceptionReport::WheatyExceptionReport() // Constructor m_hProcess = GetCurrentProcess(); stackOverflowException = false; alreadyCrashed = false; + RtlGetVersion = (pRtlGetVersion)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "RtlGetVersion"); if (!IsDebuggerPresent()) { _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); @@ -207,21 +210,36 @@ BOOL WheatyExceptionReport::_GetProcessorName(TCHAR* sProcessorName, DWORD maxco return TRUE; } +template +void ToTchar(wchar_t const* src, TCHAR (&dst)[size], std::true_type) +{ + wcstombs_s(nullptr, dst, src, size); +} + +template +void ToTchar(wchar_t const* src, TCHAR (&dst)[size], std::false_type) +{ + wcscpy_s(dst, src); +} + BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax) { // Try calling GetVersionEx using the OSVERSIONINFOEX structure. // If that fails, try using the OSVERSIONINFO structure. - OSVERSIONINFOEX osvi = { 0 }; - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - BOOL bOsVersionInfoEx; - bOsVersionInfoEx = ::GetVersionEx((LPOSVERSIONINFO)(&osvi)); - if (!bOsVersionInfoEx) + RTL_OSVERSIONINFOEXW osvi = { 0 }; + osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW); + NTSTATUS bVersionEx = RtlGetVersion((PRTL_OSVERSIONINFOW)&osvi); + if (bVersionEx < 0) { - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - if (!::GetVersionEx((OSVERSIONINFO*)&osvi)) + osvi.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW); + if (!RtlGetVersion((PRTL_OSVERSIONINFOW)&osvi)) return FALSE; } *szVersion = _T('\0'); + + TCHAR szCSDVersion[256]; + ToTchar(osvi.szCSDVersion, szCSDVersion, std::is_same::type()); + TCHAR wszTmp[128]; switch (osvi.dwPlatformId) { @@ -237,17 +255,28 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax) #endif // WINVER < 0x0500 // Test for the specific product family. - if (osvi.dwMajorVersion == 6) + if (osvi.dwMajorVersion == 10) + { + if (productType == VER_NT_WORKSTATION) + _tcsncat(szVersion, _T("Windows 10 "), cntMax); + else + _tcsncat(szVersion, _T("Windows Server 2016 "), cntMax); + } + else if (osvi.dwMajorVersion == 6) { if (productType == VER_NT_WORKSTATION) { - if (osvi.dwMinorVersion == 2) + if (osvi.dwMinorVersion == 3) + _tcsncat(szVersion, _T("Windows 8.1 "), cntMax); + else if (osvi.dwMinorVersion == 2) _tcsncat(szVersion, _T("Windows 8 "), cntMax); else if (osvi.dwMinorVersion == 1) _tcsncat(szVersion, _T("Windows 7 "), cntMax); else _tcsncat(szVersion, _T("Windows Vista "), cntMax); } + else if (osvi.dwMinorVersion == 3) + _tcsncat(szVersion, _T("Windows Server 2012 R2 "), cntMax); else if (osvi.dwMinorVersion == 2) _tcsncat(szVersion, _T("Windows Server 2012 "), cntMax); else if (osvi.dwMinorVersion == 1) @@ -265,7 +294,7 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax) _tcsncat(szVersion, _T("Microsoft Windows NT "), cntMax); // Test for specific product on Windows NT 4.0 SP6 and later. - if (bOsVersionInfoEx) + if (bVersionEx >= 0) { // Test for the workstation type. if (productType == VER_NT_WORKSTATION) @@ -282,7 +311,18 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax) // Test for the server type. else if (productType == VER_NT_SERVER) { - if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) + if (osvi.dwMajorVersion == 6 || osvi.dwMajorVersion == 10) + { + if (suiteMask & VER_SUITE_SMALLBUSINESS_RESTRICTED) + _tcsncat(szVersion, _T("Essentials "), cntMax); + else if (suiteMask & VER_SUITE_DATACENTER) + _tcsncat(szVersion, _T("Datacenter "), cntMax); + else if (suiteMask & VER_SUITE_ENTERPRISE) + _tcsncat(szVersion, _T("Enterprise "), cntMax); + else + _tcsncat(szVersion, _T("Standard "), cntMax); + } + else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) { if (suiteMask & VER_SUITE_DATACENTER) _tcsncat(szVersion, _T("Datacenter Edition "), cntMax); @@ -313,7 +353,7 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax) } // Display service pack (if any) and build number. - if (osvi.dwMajorVersion == 4 && _tcsicmp(osvi.szCSDVersion, _T("Service Pack 6")) == 0) + if (osvi.dwMajorVersion == 4 && _tcsicmp(szCSDVersion, _T("Service Pack 6")) == 0) { HKEY hKey; LONG lRet; @@ -329,26 +369,26 @@ BOOL WheatyExceptionReport::_GetWindowsVersion(TCHAR* szVersion, DWORD cntMax) else // Windows NT 4.0 prior to SP6a { _stprintf(wszTmp, _T("%s (Version %d.%d, Build %d)"), - osvi.szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF); + szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF); _tcsncat(szVersion, wszTmp, cntMax); } ::RegCloseKey(hKey); } else // Windows NT 3.51 and earlier or Windows 2000 and later { - if (!_tcslen(osvi.szCSDVersion)) + if (!_tcslen(szCSDVersion)) _stprintf(wszTmp, _T("(Version %d.%d, Build %d)"), osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF); else _stprintf(wszTmp, _T("%s (Version %d.%d, Build %d)"), - osvi.szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF); + szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF); _tcsncat(szVersion, wszTmp, cntMax); } break; } default: _stprintf(wszTmp, _T("%s (Version %d.%d, Build %d)"), - osvi.szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF); + szCSDVersion, osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.dwBuildNumber & 0xFFFF); _tcsncat(szVersion, wszTmp, cntMax); break; } diff --git a/src/common/Debugging/WheatyExceptionReport.h b/src/common/Debugging/WheatyExceptionReport.h index 8c2479d523..eb62d8bcee 100644 --- a/src/common/Debugging/WheatyExceptionReport.h +++ b/src/common/Debugging/WheatyExceptionReport.h @@ -3,6 +3,8 @@ #if PLATFORM == PLATFORM_WINDOWS && !defined(__MINGW32__) +#include +#include #include #include #include @@ -197,6 +199,8 @@ class WheatyExceptionReport static bool stackOverflowException; static bool alreadyCrashed; static std::mutex alreadyCrashedLock; + typedef NTSTATUS(NTAPI* pRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInformation); + static pRtlGetVersion RtlGetVersion; static char* PushSymbolDetail(char* pszCurrBuffer); static char* PopSymbolDetail(char* pszCurrBuffer); From 4a368501675a5892c181ff77b59ec7483601d51a Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 5 Oct 2015 15:06:27 +0200 Subject: [PATCH 219/524] Core/World: Store account id in CharacterInfo to reduce the amount of database queries (cherry picked from commit aaaa1c34410c160c7b0382f5ecdb39fa01ba007c) --- .../Implementation/CharacterDatabase.cpp | 1 - .../Implementation/CharacterDatabase.h | 1 - src/server/game/Entities/Corpse/Corpse.cpp | 2 +- src/server/game/Entities/Player/Player.cpp | 8 +- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Globals/ObjectMgr.cpp | 17 +--- src/server/game/Globals/ObjectMgr.h | 2 +- src/server/game/Handlers/CharacterHandler.cpp | 20 ++--- src/server/game/Handlers/QueryHandler.cpp | 10 +-- src/server/game/Tools/PlayerDump.cpp | 2 +- src/server/game/World/World.cpp | 86 +++++++++---------- src/server/game/World/World.h | 30 ++++--- src/server/scripts/Commands/cs_arena.cpp | 4 +- src/server/scripts/Commands/cs_character.cpp | 4 +- 14 files changed, 88 insertions(+), 101 deletions(-) diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index afc8c783ca..31c4605902 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -157,7 +157,6 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_GIFT, "DELETE FROM character_gifts WHERE item_guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM, "SELECT entry, flags FROM character_gifts WHERE item_guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_ACCOUNT_BY_NAME, "SELECT account FROM characters WHERE name = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_ACCOUNT_BY_GUID, "SELECT account FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHARACTER_DATA_BY_GUID, "SELECT account, name, level FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES, "DELETE FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES, "INSERT INTO account_instance_times (accountId, instanceId, releaseTime) VALUES (?, ?, ?)", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index f920a8c3d1..3382430d69 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -143,7 +143,6 @@ enum CharacterDatabaseStatements CHAR_DEL_GIFT, CHAR_SEL_CHARACTER_GIFT_BY_ITEM, CHAR_SEL_ACCOUNT_BY_NAME, - CHAR_SEL_ACCOUNT_BY_GUID, CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES, CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES, CHAR_SEL_CHARACTER_NAME_CLASS, diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index ea6fbd3481..ce4e94b8ea 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -180,7 +180,7 @@ bool Corpse::LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields) bool Corpse::IsExpired(time_t t) const { // Deleted character - if (!sWorld->GetCharacterNameData(GetOwnerGUID())) + if (!sWorld->GetCharacterInfo(GetOwnerGUID())) return true; if (m_type == CORPSE_BONES) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6730d1545f..669619b30e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4528,14 +4528,14 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe if (deleteFinally) charDelete_method = CHAR_DELETE_REMOVE; - else if (CharacterNameData const* nameData = sWorld->GetCharacterNameData(playerguid)) // To avoid a query, we select loaded data. If it doesn't exist, return. + else if (CharacterInfo const* nameData = sWorld->GetCharacterInfo(playerguid)) // To avoid a query, we select loaded data. If it doesn't exist, return. { // Define the required variables - uint32 charDelete_minLvl = sWorld->getIntConfig(nameData->m_class != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL); + uint32 charDelete_minLvl = sWorld->getIntConfig(nameData->Class != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL); // if we want to finalize the character removal or the character does not meet the level requirement of either heroic or non-heroic settings, // we set it to mode CHAR_DELETE_REMOVE - if (nameData->m_level < charDelete_minLvl) + if (nameData->Level < charDelete_minLvl) charDelete_method = CHAR_DELETE_REMOVE; } @@ -4862,7 +4862,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe if (updateRealmChars) sWorld->UpdateRealmCharCount(accountId); - sWorld->DeleteCharacterNameData(playerguid); + sWorld->DeleteCharacterInfo(playerguid); } /** diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9ced65b56c..78e65da975 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13429,7 +13429,7 @@ void Unit::SetLevel(uint8 lvl) if (player->GetGroup()) player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_LEVEL); - sWorld->UpdateCharacterNameDataLevel(GetGUID(), lvl); + sWorld->UpdateCharacterInfoLevel(GetGUID(), lvl); } } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index b9547070a7..16c96ca742 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2192,23 +2192,10 @@ uint32 ObjectMgr::GetPlayerTeamByGUID(ObjectGuid guid) const uint32 ObjectMgr::GetPlayerAccountIdByGUID(ObjectGuid guid) const { - // prevent DB access for online player - if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) - { - return player->GetSession()->GetAccountId(); - } + if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid)) + return characterInfo->AccountId; - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_BY_GUID); - stmt->setUInt32(0, guid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) - { - uint32 acc = (*result)[0].GetUInt32(); - return acc; - } return 0; } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index cdd974fa01..b84d95973c 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -778,7 +778,7 @@ class ObjectMgr * If the player is online, the name is retrieved immediately otherwise * a database query is done. * - * @remark Use sWorld->GetCharacterNameData because it doesn't require a database query when player is offline + * @remark Use sWorld->GetCharacterInfo because it doesn't require a database query when player is offline * * @param guid player full guid * @param name returned name diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index cea45039e8..d4594be132 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -231,8 +231,8 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) if (!(*result)[20].GetUInt32()) _legitCharacters.insert(guid); - if (!sWorld->HasCharacterNameData(guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. - sWorld->AddCharacterNameData(guid, (*result)[1].GetString(), (*result)[4].GetUInt8(), (*result)[2].GetUInt8(), (*result)[3].GetUInt8(), (*result)[7].GetUInt8()); + if (!sWorld->HasCharacterInfo(guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. + sWorld->AddCharacterInfo(guid, GetAccountId(), (*result)[1].GetString(), (*result)[4].GetUInt8(), (*result)[2].GetUInt8(), (*result)[3].GetUInt8(), (*result)[7].GetUInt8()); ++num; } } @@ -645,7 +645,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().GetCounter()); sScriptMgr->OnPlayerCreate(&newChar); - sWorld->AddCharacterNameData(newChar.GetGUID(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel()); + sWorld->AddCharacterInfo(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel()); newChar.CleanupsBeforeDelete(); delete createInfo; @@ -1157,7 +1157,7 @@ void WorldSession::HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult resu SendCharRename(RESPONSE_SUCCESS, *renameInfo); - sWorld->UpdateCharacterNameData(renameInfo->Guid, renameInfo->Name); + sWorld->UpdateCharacterInfo(renameInfo->Guid, renameInfo->Name); } void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) @@ -1447,7 +1447,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) CharacterDatabase.CommitTransaction(trans); - sWorld->UpdateCharacterNameData(customizeInfo.Guid, customizeInfo.Name, customizeInfo.Gender); + sWorld->UpdateCharacterInfo(customizeInfo.Guid, customizeInfo.Name, customizeInfo.Gender); SendCharCustomize(RESPONSE_SUCCESS, customizeInfo); } @@ -1596,16 +1596,16 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) ObjectGuid::LowType lowGuid = factionChangeInfo.Guid.GetCounter(); // get the players old (at this moment current) race - CharacterNameData const* nameData = sWorld->GetCharacterNameData(factionChangeInfo.Guid); + CharacterInfo const* nameData = sWorld->GetCharacterInfo(factionChangeInfo.Guid); if (!nameData) { SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo); return; } - uint8 oldRace = nameData->m_race; - uint8 playerClass = nameData->m_class; - uint8 level = nameData->m_level; + uint8 oldRace = nameData->Race; + uint8 playerClass = nameData->Class; + uint8 level = nameData->Level; // TO Do: Make async PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_AT_LOGIN_TITLES); @@ -1695,7 +1695,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) stmt->setUInt32(0, lowGuid); trans->Append(stmt); - sWorld->UpdateCharacterNameData(factionChangeInfo.Guid, factionChangeInfo.Name, factionChangeInfo.Gender, factionChangeInfo.Race); + sWorld->UpdateCharacterInfo(factionChangeInfo.Guid, factionChangeInfo.Name, factionChangeInfo.Gender, factionChangeInfo.Race); if (oldRace != factionChangeInfo.Race) { diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 6d896bee26..1211a1338d 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -31,7 +31,7 @@ void WorldSession::SendNameQueryOpcode(ObjectGuid guid) { Player* player = ObjectAccessor::FindConnectedPlayer(guid); - CharacterNameData const* nameData = sWorld->GetCharacterNameData(guid); + CharacterInfo const* nameData = sWorld->GetCharacterInfo(guid); WorldPacket data(SMSG_NAME_QUERY_RESPONSE, (8+1+1+1+1+1+10)); data << guid.WriteAsPacked(); @@ -43,11 +43,11 @@ void WorldSession::SendNameQueryOpcode(ObjectGuid guid) } data << uint8(0); // name known - data << nameData->m_name; // played name + data << nameData->Name; // played name data << uint8(0); // realm name - only set for cross realm interaction (such as Battlegrounds) - data << uint8(nameData->m_race); - data << uint8(nameData->m_gender); - data << uint8(nameData->m_class); + data << uint8(nameData->Race); + data << uint8(nameData->Sex); + data << uint8(nameData->Class); if (DeclinedName const* names = (player ? player->GetDeclinedNames() : NULL)) { diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 1657b6cd02..43fb6c16c0 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -677,7 +677,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s CharacterDatabase.CommitTransaction(trans); // in case of name conflict player has to rename at login anyway - sWorld->AddCharacterNameData(ObjectGuid(HighGuid::Player, guid), name, gender, race, playerClass, level); + sWorld->AddCharacterInfo(ObjectGuid(HighGuid::Player, guid), account, name, gender, race, playerClass, level); sObjectMgr->GetGenerator().Set(sObjectMgr->GetGenerator().GetNextAfterMaxUsed() + items.size()); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 6a3dafd0e1..8cf3d53f55 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1882,7 +1882,7 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Calculate guild limitation(s) reset time..."); InitGuildResetTime(); - LoadCharacterNameData(); + LoadCharacterInfoStore(); uint32 startupDuration = GetMSTimeDiffToNow(startupBegin); @@ -3173,6 +3173,15 @@ void World::ProcessQueryCallbacks() } } +CharacterInfo const* World::GetCharacterInfo(ObjectGuid const& guid) const +{ + CharacterInfoContainer::const_iterator itr = _characterInfoStore.find(guid); + if (itr != _characterInfoStore.end()) + return &itr->second; + + return nullptr; +} + /** * @brief Loads several pieces of information on server startup with the GUID * There is no further database query necessary. @@ -3182,87 +3191,78 @@ void World::ProcessQueryCallbacks() * @return Name, Gender, Race, Class and Level of player character * Example Usage: * @code -* CharacterNameData const* nameData = sWorld->GetCharacterNameData(GUID); -* if (!nameData) +* CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(GUID); +* if (!characterInfo) * return; * -* std::string playerName = nameData->m_name; -* uint8 playerGender = nameData->m_gender; -* uint8 playerRace = nameData->m_race; -* uint8 playerClass = nameData->m_class; -* uint8 playerLevel = nameData->m_level; +* std::string playerName = characterInfo->Name; +* uint8 playerGender = characterInfo->Sex; +* uint8 playerRace = characterInfo->Race; +* uint8 playerClass = characterInfo->Class; +* uint8 playerLevel = characterInfo->Level; * @endcode **/ -void World::LoadCharacterNameData() +void World::LoadCharacterInfoStore() { - TC_LOG_INFO("server.loading", "Loading character name data"); + TC_LOG_INFO("server.loading", "Loading character info store"); - QueryResult result = CharacterDatabase.Query("SELECT guid, name, race, gender, class, level FROM characters WHERE deleteDate IS NULL"); + _characterInfoStore.clear(); + + QueryResult result = CharacterDatabase.Query("SELECT guid, name, account, race, gender, class, level FROM characters"); if (!result) { TC_LOG_INFO("server.loading", "No character name data loaded, empty query"); return; } - uint32 count = 0; - do { Field* fields = result->Fetch(); - AddCharacterNameData(ObjectGuid(HighGuid::Player, fields[0].GetUInt32()), fields[1].GetString(), - fields[3].GetUInt8() /*gender*/, fields[2].GetUInt8() /*race*/, fields[4].GetUInt8() /*class*/, fields[5].GetUInt8() /*level*/); - ++count; + AddCharacterInfo(ObjectGuid::Create(fields[0].GetUInt32()), fields[2].GetUInt32(), fields[1].GetString(), + fields[4].GetUInt8() /*gender*/, fields[3].GetUInt8() /*race*/, fields[5].GetUInt8() /*class*/, fields[6].GetUInt8() /*level*/); } while (result->NextRow()); - TC_LOG_INFO("server.loading", "Loaded name data for %u characters", count); + TC_LOG_INFO("server.loading", "Loaded character infos for " SZFMTD " characters", _characterInfoStore.size()); } -void World::AddCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level) +void World::AddCharacterInfo(ObjectGuid const& guid, uint32 accountId, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level) { - CharacterNameData& data = _characterNameDataMap[guid]; - data.m_name = name; - data.m_race = race; - data.m_gender = gender; - data.m_class = playerClass; - data.m_level = level; + CharacterInfo& data = _characterInfoStore[guid]; + data.Name = name; + data.AccountId = accountId; + data.Race = race; + data.Sex = gender; + data.Class = playerClass; + data.Level = level; } -void World::UpdateCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender /*= GENDER_NONE*/, uint8 race /*= RACE_NONE*/) +void World::UpdateCharacterInfo(ObjectGuid const& guid, std::string const& name, uint8 gender /*= GENDER_NONE*/, uint8 race /*= RACE_NONE*/) { - std::map::iterator itr = _characterNameDataMap.find(guid); - if (itr == _characterNameDataMap.end()) + CharacterInfoContainer::iterator itr = _characterInfoStore.find(guid); + if (itr == _characterInfoStore.end()) return; - itr->second.m_name = name; + itr->second.Name = name; if (gender != GENDER_NONE) - itr->second.m_gender = gender; + itr->second.Sex = gender; if (race != RACE_NONE) - itr->second.m_race = race; + itr->second.Race = race; WorldPacket data(SMSG_INVALIDATE_PLAYER, 8); data << guid; SendGlobalMessage(&data); } -void World::UpdateCharacterNameDataLevel(ObjectGuid guid, uint8 level) +void World::UpdateCharacterInfoLevel(ObjectGuid const& guid, uint8 level) { - std::map::iterator itr = _characterNameDataMap.find(guid); - if (itr == _characterNameDataMap.end()) + CharacterInfoContainer::iterator itr = _characterInfoStore.find(guid); + if (itr == _characterInfoStore.end()) return; - itr->second.m_level = level; -} - -CharacterNameData const* World::GetCharacterNameData(ObjectGuid guid) const -{ - std::map::const_iterator itr = _characterNameDataMap.find(guid); - if (itr != _characterNameDataMap.end()) - return &itr->second; - else - return NULL; + itr->second.Level = level; } void World::ReloadRBAC() diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index e655a64776..b8ffc94661 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -525,13 +525,14 @@ private: typedef std::unordered_map SessionMap; -struct CharacterNameData +struct CharacterInfo { - std::string m_name; - uint8 m_class; - uint8 m_race; - uint8 m_gender; - uint8 m_level; + std::string Name; + uint32 AccountId; + uint8 Class; + uint8 Race; + uint8 Sex; + uint8 Level; }; /// The World @@ -751,12 +752,12 @@ class World void UpdateAreaDependentAuras(); - CharacterNameData const* GetCharacterNameData(ObjectGuid guid) const; - void AddCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level); - void UpdateCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender = GENDER_NONE, uint8 race = RACE_NONE); - void UpdateCharacterNameDataLevel(ObjectGuid guid, uint8 level); - void DeleteCharacterNameData(ObjectGuid guid) { _characterNameDataMap.erase(guid); } - bool HasCharacterNameData(ObjectGuid guid) { return _characterNameDataMap.find(guid) != _characterNameDataMap.end(); } + CharacterInfo const* GetCharacterInfo(ObjectGuid const& guid) const; + void AddCharacterInfo(ObjectGuid const& guid, uint32 accountId, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level); + void DeleteCharacterInfo(ObjectGuid const& guid) { _characterInfoStore.erase(guid); } + bool HasCharacterInfo(ObjectGuid const& guid) { return _characterInfoStore.find(guid) != _characterInfoStore.end(); } + void UpdateCharacterInfo(ObjectGuid const& guid, std::string const& name, uint8 gender = GENDER_NONE, uint8 race = RACE_NONE); + void UpdateCharacterInfoLevel(ObjectGuid const& guid, uint8 level); uint32 GetCleaningFlags() const { return m_CleaningFlags; } void SetCleaningFlags(uint32 flags) { m_CleaningFlags = flags; } @@ -863,8 +864,9 @@ class World typedef std::map AutobroadcastsWeightMap; AutobroadcastsWeightMap m_AutobroadcastsWeights; - std::map _characterNameDataMap; - void LoadCharacterNameData(); + typedef std::unordered_map CharacterInfoContainer; + CharacterInfoContainer _characterInfoStore; + void LoadCharacterInfoStore(); void ProcessQueryCallbacks(); std::deque> m_realmCharCallbacks; diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp index f6b355a8db..71657d51e7 100644 --- a/src/server/scripts/Commands/cs_arena.cpp +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -273,14 +273,14 @@ public: arena->SetCaptain(targetGuid); - CharacterNameData const* oldCaptainNameData = sWorld->GetCharacterNameData(arena->GetCaptain()); + CharacterInfo const* oldCaptainNameData = sWorld->GetCharacterInfo(arena->GetCaptain()); if (!oldCaptainNameData) { handler->SetSentErrorMessage(true); return false; } - handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainNameData->m_name.c_str(), target->GetName().c_str()); + handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainNameData->Name.c_str(), target->GetName().c_str()); if (handler->GetSession()) TC_LOG_DEBUG("bg.arena", "GameMaster: %s [GUID: %u] promoted player: %s [GUID: %u] to leader of arena team \"%s\"[Id: %u]", handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().GetCounter(), target->GetName().c_str(), target->GetGUID().GetCounter(), arena->GetName().c_str(), arena->GetId()); diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 1582d465b8..230d407b71 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -222,7 +222,7 @@ public: stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_NAME_DATA); stmt->setUInt32(0, delInfo.guid.GetCounter()); if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) - sWorld->AddCharacterNameData(delInfo.guid, delInfo.name, (*result)[2].GetUInt8(), (*result)[0].GetUInt8(), (*result)[1].GetUInt8(), (*result)[3].GetUInt8()); + sWorld->AddCharacterInfo(delInfo.guid, delInfo.accountId, delInfo.name, (*result)[2].GetUInt8(), (*result)[0].GetUInt8(), (*result)[1].GetUInt8(), (*result)[3].GetUInt8()); } static void HandleCharacterLevel(Player* player, ObjectGuid playerGuid, uint32 oldLevel, uint32 newLevel, ChatHandler* handler) @@ -382,7 +382,7 @@ public: CharacterDatabase.Execute(stmt); } - sWorld->UpdateCharacterNameData(targetGuid, newName); + sWorld->UpdateCharacterInfo(targetGuid, newName); handler->PSendSysMessage(LANG_RENAME_PLAYER_WITH_NEW_NAME, playerOldName.c_str(), newName.c_str()); From fdb1110e67c62453d45cd2073a5d6f6740b2810c Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 30 Oct 2015 01:39:57 +0100 Subject: [PATCH 220/524] DB/Quest: The Thane of Voldrune Closes #1006 --- sql/updates/world/2015_10_30_00_world.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 sql/updates/world/2015_10_30_00_world.sql diff --git a/sql/updates/world/2015_10_30_00_world.sql b/sql/updates/world/2015_10_30_00_world.sql new file mode 100644 index 0000000000..84247a8597 --- /dev/null +++ b/sql/updates/world/2015_10_30_00_world.sql @@ -0,0 +1,16 @@ +-- +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=27292; +DELETE FROM `smart_scripts` WHERE `entryorguid`=27292 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 +(27292,0,0,1,62,0,100,0,9512,0,0,0,11,48606,0,0,0,0,0,7,0,0,0,0,0,0,0,'Flamebringer - On gossip select - Spellcast'), +(27292,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,'Flamebringer - On gossip select - Close gossip'), +(27292,0,2,3,54,0,100,0,0,0,0,0,83,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flamebringer - On summon - Remove npcflag'), +(27292,0,3,4,61,0,100,0,0,0,0,0,85,46598,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flamebringer - On summon - Spellcast'), +(27292,0,4,0,61,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flamebringer - Linked with previous Event -Set Passive'), +(27292,0,5,0,28,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Flamebringer - On passenger removed - Despawn'); +DELETE FROM `creature_template_addon` WHERE `entry`=27292; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(27292, 0, 0, 33554432, 0, 0, '55971'); +DELETE FROM `creature_addon` WHERE `guid`=110538; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(110538,0,0,0,1,0,''); From b72e723acef97781c82c50094532ae8296391329 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 30 Oct 2015 02:00:56 +0100 Subject: [PATCH 221/524] DB/Creature: Fix wrong Dynamicflag for Winterskorn Rune-Seer Fix a DB error Closes #15774 --- sql/updates/world/2015_10_30_01_world_335.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2015_10_30_01_world_335.sql diff --git a/sql/updates/world/2015_10_30_01_world_335.sql b/sql/updates/world/2015_10_30_01_world_335.sql new file mode 100644 index 0000000000..3656563894 --- /dev/null +++ b/sql/updates/world/2015_10_30_01_world_335.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature_template` SET `dynamicflags`=0 WHERE `entry`=23667; +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 14338; From 4245c2c59dd7923b3c607ed16bb6b0976e16e12d Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 08:15:01 +0100 Subject: [PATCH 222/524] SQL: syntax fix in characters_database.sql --- sql/base/characters_database.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index d8f3c792c2..2ebb8c25d0 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1155,7 +1155,7 @@ CREATE TABLE `character_spell_cooldown` ( `item` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Item Identifier', `time` int(10) unsigned NOT NULL DEFAULT '0', `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id', - `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0'; + `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`guid`,`spell`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; @@ -2304,7 +2304,7 @@ CREATE TABLE `pet_spell_cooldown` ( `spell` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell Identifier', `time` int(10) unsigned NOT NULL DEFAULT '0', `categoryId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Spell category Id', - `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0'; + `categoryEnd` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`guid`,`spell`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; From a94bdd00a9f31dcd9e4134987531937ca57975d6 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 17:51:19 +0100 Subject: [PATCH 223/524] Core/Corpses: Prevent deleting corpses by ObjectGridUnloader, fixes accessing freed memory in multiple places due to the corpse still being registered in Map containers Closes #15775 Closes #15781 --- src/server/game/Grids/ObjectGridLoader.cpp | 9 +++++++-- src/server/game/Grids/ObjectGridLoader.h | 1 + src/server/game/Maps/Map.h | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index efbbf1abf7..2c292c4378 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -152,7 +152,12 @@ void ObjectWorldLoader::Visit(CorpseMapType& /*m*/) for (Corpse* corpse : *corpses) { corpse->AddToWorld(); - i_grid.GetGridType(i_cell.CellX(), i_cell.CellY()).AddWorldObject(corpse); + GridType& cell = i_grid.GetGridType(i_cell.CellX(), i_cell.CellY()); + if (corpse->IsWorldObject()) + cell.AddWorldObject(corpse); + else + cell.AddGridObject(corpse); + ++i_corpses; } } @@ -230,7 +235,7 @@ void ObjectGridCleaner::Visit(GridRefManager &m) template void ObjectGridUnloader::Visit(CreatureMapType &); template void ObjectGridUnloader::Visit(GameObjectMapType &); template void ObjectGridUnloader::Visit(DynamicObjectMapType &); -template void ObjectGridUnloader::Visit(CorpseMapType &); + template void ObjectGridCleaner::Visit(CreatureMapType &); template void ObjectGridCleaner::Visit(GameObjectMapType &); template void ObjectGridCleaner::Visit(DynamicObjectMapType &); diff --git a/src/server/game/Grids/ObjectGridLoader.h b/src/server/game/Grids/ObjectGridLoader.h index 54dadaefdb..9abbcce4c3 100644 --- a/src/server/game/Grids/ObjectGridLoader.h +++ b/src/server/game/Grids/ObjectGridLoader.h @@ -82,6 +82,7 @@ class ObjectGridCleaner class ObjectGridUnloader { public: + void Visit(CorpseMapType& m) { } // corpses are deleted with Map template void Visit(GridRefManager &m); }; #endif diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index c658d60f08..0962bcc9d6 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -561,7 +561,7 @@ class Map : public GridRefManager { _updateObjects.insert(obj); } - + void RemoveUpdateObject(Object* obj) { _updateObjects.erase(obj); From 8c9ea7782a4eb251933f43d57bf8271c11a0e6a6 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 17:53:00 +0100 Subject: [PATCH 224/524] Core/Corpses: Fixed a crash happening when a corpse is added to a grid that was not yet fully loaded Closes #15684 --- src/server/game/Maps/Map.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 2b60ae53c9..5054ff36bf 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -299,6 +299,25 @@ void Map::AddToGrid(DynamicObject* obj, Cell const& cell) obj->SetCurrentCell(cell); } +template<> +void Map::AddToGrid(Corpse* obj, Cell const& cell) +{ + NGridType* grid = getNGrid(cell.GridX(), cell.GridY()); + if (obj->IsWorldObject()) + { + // Corpses are a special object type - they can be added to grid via a call to AddToMap + // or loaded through ObjectGridLoader. + // Both corpses loaded from database and these freshly generated by Player::CreateCoprse are added to _corpsesByCell + // ObjectGridLoader loads all corpses from _corpsesByCell even if they were already added to grid before it was loaded + // so we need to explicitly check it here (Map::AddToGrid is only called from Player::BuildPlayerRepop, not from ObjectGridLoader) + // to avoid failing an assertion in GridObject::AddToGrid + if (grid->isGridObjectDataLoaded()) + grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj); + } + else + grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj); // bones. nothing special here +} + template void Map::SwitchGridContainers(T* /*obj*/, bool /*on*/) { } From dffcebdd05fc8411053da161c779116160e21f0e Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 30 Oct 2015 17:57:13 +0100 Subject: [PATCH 225/524] DB/Creature: Fix Spell Click for Dead Mage Hunter Replace ride spell for Flamebringer by the correct one Closes #15783 --- sql/updates/world/2015_10_30_02_world.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 sql/updates/world/2015_10_30_02_world.sql diff --git a/sql/updates/world/2015_10_30_02_world.sql b/sql/updates/world/2015_10_30_02_world.sql new file mode 100644 index 0000000000..5d9407ef62 --- /dev/null +++ b/sql/updates/world/2015_10_30_02_world.sql @@ -0,0 +1,8 @@ +-- +UPDATE `npc_spellclick_spells` SET `cast_flags`=1 WHERE `npc_entry`=26477 AND `spell_id`=61832; + +UPDATE smart_scripts SET action_param1=48600 WHERE entryorguid=27292 AND source_type=0 AND id=3; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=48600; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `Comment`) VALUES +(13, 1, 48600, 31, 0, 3, 27292, "Ride Flamebringer effect only on Flamebringer"); From 2e2bdec28f5a65bf5d0c75d2e666dfdce2785512 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 18:20:05 +0100 Subject: [PATCH 226/524] Travis fix. --- sql/base/characters_database.sql | 2 +- src/server/game/Grids/ObjectGridLoader.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 2ebb8c25d0..5f4258a3ae 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2529,7 +2529,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0),('2015_10_29_00_characters_335.sql','4555A7F35C107E54C13D74D20F141039ED42943E','RELEASED','2015-10-29 17:05:43',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/src/server/game/Grids/ObjectGridLoader.h b/src/server/game/Grids/ObjectGridLoader.h index 9abbcce4c3..126ebd0d0a 100644 --- a/src/server/game/Grids/ObjectGridLoader.h +++ b/src/server/game/Grids/ObjectGridLoader.h @@ -82,7 +82,7 @@ class ObjectGridCleaner class ObjectGridUnloader { public: - void Visit(CorpseMapType& m) { } // corpses are deleted with Map + void Visit(CorpseMapType& /*m*/) { } // corpses are deleted with Map template void Visit(GridRefManager &m); }; #endif From e62f091a4ba2eb80f8e94ab9a0e17877a17ef0ce Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 18:32:01 +0100 Subject: [PATCH 227/524] Core/Misc: Warning fix --- src/server/game/Spells/SpellHistory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 13d1c6f50b..07905253b0 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -482,7 +482,7 @@ bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/ { for (uint32 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) { - if (itemTemplate->Spells[i].SpellId == spellInfo->Id) + if (int32(itemTemplate->Spells[i].SpellId) == spellInfo->Id) { category = itemTemplate->Spells[i].SpellCategory; break; From 53d56551bedefc8409b75bbea8fdd4d89e50c682 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 18:32:49 +0100 Subject: [PATCH 228/524] Travis: Added -k flag to make call so as many errors as possible are displayed instead of failing after the first one --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 17d703a2f8..8b1e828849 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,4 +32,4 @@ script: - cat sql/updates/world/*.sql | mysql -utrinity -ptrinity world - mysql -uroot < sql/create/drop_mysql.sql - cd bin - - make -j 10 + - make -j 10 -k From 61094c911ddf719c9f9a6264236bcedf028817c4 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 18:40:29 +0100 Subject: [PATCH 229/524] Core/Misc: Warning fix --- src/server/game/Spells/SpellHistory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 07905253b0..d2cf03dc93 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -482,7 +482,7 @@ bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/ { for (uint32 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) { - if (int32(itemTemplate->Spells[i].SpellId) == spellInfo->Id) + if (uint32(itemTemplate->Spells[i].SpellId) == spellInfo->Id) { category = itemTemplate->Spells[i].SpellCategory; break; From ba3c54323bc6a53539dbf4bfba9a50aa2c307d6f Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 19:23:16 +0100 Subject: [PATCH 230/524] Travis: Upgrade clang to 3.5 --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8b1e828849..23c378a116 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,10 +9,13 @@ before_install: - echo "yes" | sudo add-apt-repository ppa:kalakris/cmake - echo "yes" | sudo add-apt-repository ppa:boost-latest/ppa - echo "yes" | sudo add-apt-repository ppa:ubuntu-toolchain-r/test + - echo "yes" | sudo add-apt-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise-3.5 main' + - wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add - - sudo apt-get -qq update - - sudo apt-get -qq install build-essential libtool gcc-4.8 g++-4.8 make cmake openssl + - sudo apt-get -qq install build-essential libtool gcc-4.8 g++-4.8 make cmake openssl clang-3.5 - sudo apt-get -qq install libssl-dev libmysqlclient-dev libmysql++-dev libreadline6-dev zlib1g-dev libbz2-dev - sudo apt-get -qq install libboost1.55-dev libboost-thread1.55-dev libboost-filesystem1.55-dev libboost-system1.55-dev libboost-program-options1.55-dev libboost-iostreams1.55-dev + - export CC=clang-3.5 CXX=clang++-3.5 install: - mysql -uroot -e 'create database test_mysql;' @@ -23,6 +26,7 @@ install: - sudo chmod +x contrib/check_updates.sh script: + - $CXX --version - mysql -uroot < sql/create/create_mysql.sql - mysql -utrinity -ptrinity auth < sql/base/auth_database.sql - ./contrib/check_updates.sh auth auth From 144c545e36d6c8c7ade2e40a1065994b5cb75aad Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 30 Oct 2015 23:25:55 +0100 Subject: [PATCH 231/524] DB/Creature: Fix some wrong models Closes #15371 Closes #15770 --- sql/updates/world/2015_10_30_03_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2015_10_30_03_world.sql diff --git a/sql/updates/world/2015_10_30_03_world.sql b/sql/updates/world/2015_10_30_03_world.sql new file mode 100644 index 0000000000..3b419524c5 --- /dev/null +++ b/sql/updates/world/2015_10_30_03_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature_model_info` SET `DisplayID_Other_Gender`=0 WHERE `DisplayID` IN (16046, 3258, 14533); +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|128 WHERE `entry` IN (22434,22435,22447,22383); From 3c82b498cc694d9ed04e29079a4c61d68dc7741e Mon Sep 17 00:00:00 2001 From: Kittnz Date: Fri, 30 Oct 2015 23:57:23 +0100 Subject: [PATCH 232/524] Core/Player: Set correct Gender by Modelid An example: You are a blood elf female, you use [Iron Boot Flask], you turn into a male dwarf, you use [Orb of the Sin'dorei] and it will turn you into a blood elf male. This is the correct behavior like retail. --- src/server/game/Entities/Unit/Unit.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 78e65da975..49c99dd035 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14652,6 +14652,9 @@ bool Unit::IsPolymorphed() const void Unit::SetDisplayId(uint32 modelId) { SetUInt32Value(UNIT_FIELD_DISPLAYID, modelId); + // Set Gender by modelId + if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId)) + SetByteValue(UNIT_FIELD_BYTES_0, 2, minfo->gender); } void Unit::RestoreDisplayId() From 16f9d4ceebe9c4688214df2643fd74c1932e901d Mon Sep 17 00:00:00 2001 From: Kittnz Date: Sat, 31 Oct 2015 00:03:38 +0100 Subject: [PATCH 233/524] Core/Player: Fixed tab issues --- src/server/game/Entities/Unit/Unit.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 49c99dd035..fae612af7c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14652,9 +14652,9 @@ bool Unit::IsPolymorphed() const void Unit::SetDisplayId(uint32 modelId) { SetUInt32Value(UNIT_FIELD_DISPLAYID, modelId); - // Set Gender by modelId - if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId)) - SetByteValue(UNIT_FIELD_BYTES_0, 2, minfo->gender); + // Set Gender by modelId + if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId)) + SetByteValue(UNIT_FIELD_BYTES_0, 2, minfo->gender); } void Unit::RestoreDisplayId() From 6c53f820ae0349a556085f54caa9dff86bba4d1b Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 31 Oct 2015 12:30:22 +0100 Subject: [PATCH 234/524] Core/Players: Fixed saving players with incorrect gender --- 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 669619b30e..a21960fc2b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -19143,7 +19143,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setString(index++, GetName()); stmt->setUInt8(index++, getRace()); stmt->setUInt8(index++, getClass()); - stmt->setUInt8(index++, getGender()); + stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_3, 0)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt->setUInt8(index++, getLevel()); stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP)); stmt->setUInt32(index++, GetMoney()); @@ -19248,7 +19248,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setString(index++, GetName()); stmt->setUInt8(index++, getRace()); stmt->setUInt8(index++, getClass()); - stmt->setUInt8(index++, getGender()); + stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_3, 0)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt->setUInt8(index++, getLevel()); stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP)); stmt->setUInt32(index++, GetMoney()); From 5e28a8e37578767fc5c75144419b2638f686a91d Mon Sep 17 00:00:00 2001 From: joschiwald Date: Fri, 6 Mar 2015 04:16:12 +0100 Subject: [PATCH 235/524] Core/PlayerDump: cherry picked refactoring from commit e49462fc1e7b5515977da03dbc3806ef639b983b) Fixed reguiding items in character_equipmentsets on pdump load --- src/server/game/Tools/PlayerDump.cpp | 261 +++++++++++++-------------- src/server/game/Tools/PlayerDump.h | 17 +- 2 files changed, 138 insertions(+), 140 deletions(-) diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 43fb6c16c0..e3a0246633 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -21,6 +21,7 @@ #include "DatabaseEnv.h" #include "UpdateFields.h" #include "ObjectMgr.h" +#include "Player.h" #include "AccountMgr.h" #include "World.h" @@ -63,11 +64,15 @@ static DumpTable dumpTables[DUMP_TABLE_COUNT] = }; // Low level functions -static bool findtoknth(std::string &str, int n, std::string::size_type &s, std::string::size_type &e) +static bool FindTokNth(std::string const& str, uint32 n, std::string::size_type& s, std::string::size_type& e) { - int i; s = e = 0; - std::string::size_type size = str.size(); - for (i = 1; s < size && i < n; s++) if (str[s] == ' ') ++i; + s = e = 0; + + uint32 i = 1; + for (; s < str.size() && i < n; ++s) + if (str[s] == ' ') + ++i; + if (i < n) return false; @@ -76,80 +81,86 @@ static bool findtoknth(std::string &str, int n, std::string::size_type &s, std:: return e != std::string::npos; } -std::string gettoknth(std::string &str, int n) +std::string GetTokNth(std::string const& str, uint32 n) { std::string::size_type s = 0, e = 0; - if (!findtoknth(str, n, s, e)) + if (!FindTokNth(str, n, s, e)) return ""; - return str.substr(s, e-s); + return str.substr(s, e - s); } -bool findnth(std::string &str, int n, std::string::size_type &s, std::string::size_type &e) +bool FindNth(std::string const& str, uint32 n, std::string::size_type& s, std::string::size_type& e) { - s = str.find("VALUES ('")+9; - if (s == std::string::npos) return false; + s = str.find("VALUES ('") + 9; + if (s == std::string::npos) + return false; do { e = str.find('\'', s); - if (e == std::string::npos) return false; - } while (str[e-1] == '\\'); + if (e == std::string::npos) + return false; + } while (str[e - 1] == '\\'); - for (int i = 1; i < n; ++i) + for (uint32 i = 1; i < n; ++i) { do { - s = e+4; + s = e + 4; e = str.find('\'', s); - if (e == std::string::npos) return false; - } while (str[e-1] == '\\'); + if (e == std::string::npos) + return false; + } while (str[e - 1] == '\\'); } return true; } -std::string gettablename(std::string &str) +std::string GetTableName(std::string const& str) { - std::string::size_type s = 13; + static std::string::size_type const s = 13; std::string::size_type e = str.find(_TABLE_SIM_, s); if (e == std::string::npos) return ""; - return str.substr(s, e-s); + return str.substr(s, e - s); } -bool changenth(std::string &str, int n, char const* with, bool insert = false, bool nonzero = false) +bool ChangeNth(std::string& str, uint32 n, char const* with, bool insert = false, bool allowZero = false) { std::string::size_type s, e; - if (!findnth(str, n, s, e)) + if (!FindNth(str, n, s, e)) return false; - if (nonzero && str.substr(s, e-s) == "0") + if (allowZero && str.substr(s, e - s) == "0") return true; // not an error + if (!insert) - str.replace(s, e-s, with); + str.replace(s, e - s, with); else str.insert(s, with); return true; } -std::string getnth(std::string &str, int n) +std::string GetNth(std::string& str, uint32 n) { std::string::size_type s, e; - if (!findnth(str, n, s, e)) + if (!FindNth(str, n, s, e)) return ""; return str.substr(s, e-s); } -bool changetoknth(std::string &str, int n, char const* with, bool insert = false, bool nonzero = false) +bool ChangeTokNth(std::string& str, uint32 n, char const* with, bool insert = false, bool allowZero = false) { std::string::size_type s = 0, e = 0; - if (!findtoknth(str, n, s, e)) + if (!FindTokNth(str, n, s, e)) return false; - if (nonzero && str.substr(s, e-s) == "0") + + if (allowZero && str.substr(s, e - s) == "0") return true; // not an error + if (!insert) str.replace(s, e-s, with); else @@ -158,41 +169,28 @@ bool changetoknth(std::string &str, int n, char const* with, bool insert = false return true; } -ObjectGuid::LowType registerNewGuid(ObjectGuid::LowType oldGuid, std::map &guidMap, ObjectGuid::LowType hiGuid) +ObjectGuid::LowType RegisterNewGuid(ObjectGuid::LowType oldGuid, PlayerDump::DumpGuidMap& guidMap, ObjectGuid::LowType guidOffset) { - std::map::const_iterator itr = guidMap.find(oldGuid); + PlayerDumpWriter::DumpGuidMap::const_iterator itr = guidMap.find(oldGuid); if (itr != guidMap.end()) return itr->second; - ObjectGuid::LowType newguid = hiGuid + guidMap.size(); + ObjectGuid::LowType newguid = guidOffset + guidMap.size(); guidMap[oldGuid] = newguid; return newguid; } -bool changeGuid(std::string &str, int n, std::map &guidMap, ObjectGuid::LowType hiGuid, bool nonzero = false) +bool ChangeGuid(std::string& str, uint32 n, PlayerDump::DumpGuidMap& guidMap, ObjectGuid::LowType guidOffset, bool allowZero = false) { - char chritem[20]; - ObjectGuid::LowType oldGuid = atoi(getnth(str, n).c_str()); - if (nonzero && oldGuid == 0) + ObjectGuid::LowType oldGuid = strtoull(GetNth(str, n).c_str(), nullptr, 10); + if (allowZero && !oldGuid) return true; // not an error - ObjectGuid::LowType newGuid = registerNewGuid(oldGuid, guidMap, hiGuid); - snprintf(chritem, 20, "%u", newGuid); - - return changenth(str, n, chritem, false, nonzero); -} - -bool changetokGuid(std::string &str, int n, std::map &guidMap, ObjectGuid::LowType hiGuid, bool nonzero = false) -{ char chritem[20]; - ObjectGuid::LowType oldGuid = atoi(gettoknth(str, n).c_str()); - if (nonzero && oldGuid == 0) - return true; // not an error - - ObjectGuid::LowType newGuid = registerNewGuid(oldGuid, guidMap, hiGuid); + ObjectGuid::LowType newGuid = RegisterNewGuid(oldGuid, guidMap, guidOffset); snprintf(chritem, 20, "%u", newGuid); - return changetoknth(str, n, chritem, false, nonzero); + return ChangeNth(str, n, chritem, false, allowZero); } std::string CreateDumpString(char const* tableName, QueryResult result) @@ -223,29 +221,26 @@ std::string PlayerDumpWriter::GenerateWhereStr(char const* field, ObjectGuid::Lo return wherestr.str(); } -std::string PlayerDumpWriter::GenerateWhereStr(char const* field, GUIDs const& guids, GUIDs::const_iterator& itr) +std::string PlayerDumpWriter::GenerateWhereStr(char const* field, DumpGuidSet const& guids, DumpGuidSet::const_iterator& itr) { std::ostringstream wherestr; wherestr << field << " IN ('"; - for (; itr != guids.end(); ++itr) + for (; itr != guids.end();) { wherestr << *itr; + ++itr; if (wherestr.str().size() > MAX_QUERY_LEN - 50) // near to max query - { - ++itr; break; - } - GUIDs::const_iterator itr2 = itr; - if (++itr2 != guids.end()) + if (itr != guids.end()) wherestr << "', '"; } wherestr << "')"; return wherestr.str(); } -void StoreGUID(QueryResult result, uint32 field, std::set& guids) +void StoreGUID(QueryResult result, uint32 field, PlayerDump::DumpGuidSet &guids) { Field* fields = result->Fetch(); ObjectGuid::LowType guid = fields[field].GetUInt32(); @@ -253,20 +248,20 @@ void StoreGUID(QueryResult result, uint32 field, std::set& guids.insert(guid); } -void StoreGUID(QueryResult result, uint32 data, uint32 field, std::set& guids) +void StoreGUID(QueryResult result, uint32 data, uint32 field, PlayerDump::DumpGuidSet& guids) { Field* fields = result->Fetch(); std::string dataStr = fields[data].GetString(); - ObjectGuid::LowType guid = atoi(gettoknth(dataStr, field).c_str()); + ObjectGuid::LowType guid = strtoull(GetTokNth(dataStr, field).c_str(), nullptr, 10); if (guid) guids.insert(guid); } // Writing - High-level functions -bool PlayerDumpWriter::DumpTable(std::string& dump, ObjectGuid::LowType guid, char const*tableFrom, char const*tableTo, DumpTableType type) +bool PlayerDumpWriter::DumpTable(std::string& dump, ObjectGuid::LowType guid, char const* tableFrom, char const* tableTo, DumpTableType type) { - GUIDs const* guids = NULL; - char const* fieldname = NULL; + DumpGuidSet const* guids = nullptr; + char const* fieldname = nullptr; switch (type) { @@ -281,20 +276,20 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, ObjectGuid::LowType guid, ch // for guid set stop if set is empty if (guids && guids->empty()) - return true; // nothing to do + return true; // nothing to do // setup for guids case start position - GUIDs::const_iterator guids_itr; + DumpGuidSet::const_iterator guidsItr; if (guids) - guids_itr = guids->begin(); + guidsItr = guids->begin(); do { std::string wherestr; - if (guids) // set case, get next guids string - wherestr = GenerateWhereStr(fieldname, *guids, guids_itr); - else // not set case, get single guid string + if (guids) // set case, get next guids string + wherestr = GenerateWhereStr(fieldname, *guids, guidsItr); + else // not set case, get single guid string wherestr = GenerateWhereStr(fieldname, guid); QueryResult result = CharacterDatabase.PQuery("SELECT * FROM %s WHERE %s", tableFrom, wherestr.c_str()); @@ -336,7 +331,7 @@ bool PlayerDumpWriter::DumpTable(std::string& dump, ObjectGuid::LowType guid, ch } while (result->NextRow()); } - while (guids && guids_itr != guids->end()); // not set case iterate single time, set case iterate for all guids + while (guids && guidsItr != guids->end()); // not set case iterate single time, set case iterate for all guids return true; } @@ -345,7 +340,7 @@ bool PlayerDumpWriter::GetDump(ObjectGuid::LowType guid, std::string &dump) dump = "IMPORTANT NOTE: THIS DUMPFILE IS MADE FOR USE WITH THE 'PDUMP' COMMAND ONLY - EITHER THROUGH INGAME CHAT OR ON CONSOLE!\n"; dump += "IMPORTANT NOTE: DO NOT apply it directly - it will irreversibly DAMAGE and CORRUPT your database! You have been warned!\n\n"; - for (int i = 0; i < DUMP_TABLE_COUNT; ++i) + for (uint8 i = 0; i < DUMP_TABLE_COUNT; ++i) if (!DumpTable(dump, guid, dumpTables[i].name, dumpTables[i].name, dumpTables[i].type)) return false; @@ -360,12 +355,14 @@ DumpReturn PlayerDumpWriter::WriteDump(const std::string& file, ObjectGuid::LowT if (sWorld->getBoolConfig(CONFIG_PDUMP_NO_PATHS)) if (strstr(file.c_str(), "\\") || strstr(file.c_str(), "/")) return DUMP_FILE_OPEN_ERROR; + if (sWorld->getBoolConfig(CONFIG_PDUMP_NO_OVERWRITE)) if (FILE* f = fopen(file.c_str(), "r")) { fclose(f); return DUMP_FILE_OPEN_ERROR; } + FILE* fout = fopen(file.c_str(), "w"); if (!fout) return DUMP_FILE_OPEN_ERROR; @@ -383,9 +380,9 @@ DumpReturn PlayerDumpWriter::WriteDump(const std::string& file, ObjectGuid::LowT // Reading - High-level functions #define ROLLBACK(DR) {fclose(fin); return (DR);} -void fixNULLfields(std::string &line) +void fixNULLfields(std::string& line) { - std::string nullString("'NULL'"); + static std::string const nullString("'NULL'"); size_t pos = line.find(nullString); while (pos != std::string::npos) { @@ -404,7 +401,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s if (!fin) return DUMP_FILE_OPEN_ERROR; - char newguid[20], chraccount[20], newpetid[20], currpetid[20], lastpetid[20]; + char newguid[20], chraccount[20]; // make sure the same guid doesn't already exist and is safe to use bool incHighest = true; @@ -418,7 +415,8 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s if (result) guid = sObjectMgr->GetGenerator().GetNextAfterMaxUsed(); // use first free if exists - else incHighest = false; + else + incHighest = false; } else guid = sObjectMgr->GetGenerator().GetNextAfterMaxUsed(); @@ -444,22 +442,22 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s snprintf(newguid, 20, "%u", guid); snprintf(chraccount, 20, "%u", account); - snprintf(newpetid, 20, "%u", sObjectMgr->GeneratePetNumber()); - snprintf(lastpetid, 20, "%s", ""); - std::map items; - std::map mails; - char buf[32000] = ""; + DumpGuidMap items; + DumpGuidMap mails; + char buf[32000]; + memset(buf, 0, sizeof(buf)); - typedef std::map PetIds; // old->new petid relation - typedef PetIds::value_type PetIdsPair; - PetIds petids; + typedef std::map PetIds; + PetIds petIds; uint8 gender = GENDER_NONE; uint8 race = RACE_NONE; uint8 playerClass = 0; uint8 level = 1; + ObjectGuid::LowType itemLowGuidOffset = sObjectMgr->GetGenerator().GetNextAfterMaxUsed(); + SQLTransaction trans = CharacterDatabase.BeginTransaction(); while (!feof(fin)) { @@ -495,7 +493,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s */ // determine table name and load type - std::string tn = gettablename(line); + std::string tn = GetTableName(line); if (tn.empty()) { TC_LOG_ERROR("misc", "LoadPlayerDump: Can't extract table name from line: '%s'!", line.c_str()); @@ -524,142 +522,139 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s { case DTT_CHARACTER: { - if (!changenth(line, 1, newguid)) // characters.guid update + if (!ChangeNth(line, 1, newguid)) // characters.guid update ROLLBACK(DUMP_FILE_BROKEN); - if (!changenth(line, 2, chraccount)) // characters.account update + if (!ChangeNth(line, 2, chraccount)) // characters.account update ROLLBACK(DUMP_FILE_BROKEN); - race = uint8(atoul(getnth(line, 4).c_str())); - playerClass = uint8(atoul(getnth(line, 5).c_str())); - gender = uint8(atoul(getnth(line, 6).c_str())); - level = uint8(atoul(getnth(line, 7).c_str())); + race = uint8(atoul(GetNth(line, 4).c_str())); + playerClass = uint8(atoul(GetNth(line, 5).c_str())); + gender = uint8(atoul(GetNth(line, 6).c_str())); + level = uint8(atoul(GetNth(line, 7).c_str())); if (name.empty()) { // check if the original name already exists - name = getnth(line, 3); + name = GetNth(line, 3); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME); stmt->setString(0, name); PreparedQueryResult result = CharacterDatabase.Query(stmt); if (result) - if (!changenth(line, 37, "1")) // characters.at_login set to "rename on login" + if (!ChangeNth(line, 37, "1")) // characters.at_login set to "rename on login" ROLLBACK(DUMP_FILE_BROKEN); } - else if (!changenth(line, 3, name.c_str())) // characters.name + else if (!ChangeNth(line, 3, name.c_str())) // characters.name ROLLBACK(DUMP_FILE_BROKEN); const char null[5] = "NULL"; - if (!changenth(line, 69, null)) // characters.deleteInfos_Account + if (!ChangeNth(line, 69, null)) // characters.deleteInfos_Account ROLLBACK(DUMP_FILE_BROKEN); - if (!changenth(line, 70, null)) // characters.deleteInfos_Name + if (!ChangeNth(line, 70, null)) // characters.deleteInfos_Name ROLLBACK(DUMP_FILE_BROKEN); - if (!changenth(line, 71, null)) // characters.deleteDate + if (!ChangeNth(line, 71, null)) // characters.deleteDate ROLLBACK(DUMP_FILE_BROKEN); break; } case DTT_CHAR_TABLE: { - if (!changenth(line, 1, newguid)) // character_*.guid update + if (!ChangeNth(line, 1, newguid)) // character_*.guid update ROLLBACK(DUMP_FILE_BROKEN); break; } case DTT_EQSET_TABLE: { - if (!changenth(line, 1, newguid)) + if (!ChangeNth(line, 1, newguid)) ROLLBACK(DUMP_FILE_BROKEN); // character_equipmentsets.guid char newSetGuid[24]; snprintf(newSetGuid, 24, UI64FMTD, sObjectMgr->GenerateEquipmentSetGuid()); - if (!changenth(line, 2, newSetGuid)) + if (!ChangeNth(line, 2, newSetGuid)) ROLLBACK(DUMP_FILE_BROKEN); // character_equipmentsets.setguid + + for (uint8 slot = 0; slot < EQUIPMENT_SLOT_END; ++slot) + if (!ChangeGuid(line, 7 + slot, items, itemLowGuidOffset, true)) + ROLLBACK(DUMP_FILE_BROKEN); // character_equipmentsets.item break; } case DTT_INVENTORY: { - if (!changenth(line, 1, newguid)) // character_inventory.guid update + if (!ChangeNth(line, 1, newguid)) // character_inventory.guid update ROLLBACK(DUMP_FILE_BROKEN); - if (!changeGuid(line, 2, items,sObjectMgr->GetGenerator().GetNextAfterMaxUsed(), true)) + if (!ChangeGuid(line, 2, items, itemLowGuidOffset, true)) ROLLBACK(DUMP_FILE_BROKEN); // character_inventory.bag update - if (!changeGuid(line, 4, items, sObjectMgr->GetGenerator().GetNextAfterMaxUsed())) + if (!ChangeGuid(line, 4, items, itemLowGuidOffset)) ROLLBACK(DUMP_FILE_BROKEN); // character_inventory.item update break; } case DTT_MAIL: // mail { - if (!changeGuid(line, 1, mails, sObjectMgr->_mailId)) + if (!ChangeGuid(line, 1, mails, sObjectMgr->_mailId)) ROLLBACK(DUMP_FILE_BROKEN); // mail.id update - if (!changenth(line, 6, newguid)) // mail.receiver update + if (!ChangeNth(line, 6, newguid)) // mail.receiver update ROLLBACK(DUMP_FILE_BROKEN); break; } case DTT_MAIL_ITEM: // mail_items { - if (!changeGuid(line, 1, mails, sObjectMgr->_mailId)) + if (!ChangeGuid(line, 1, mails, sObjectMgr->_mailId)) ROLLBACK(DUMP_FILE_BROKEN); // mail_items.id - if (!changeGuid(line, 2, items, sObjectMgr->GetGenerator().GetNextAfterMaxUsed())) + if (!ChangeGuid(line, 2, items, itemLowGuidOffset)) ROLLBACK(DUMP_FILE_BROKEN); // mail_items.item_guid - if (!changenth(line, 3, newguid)) // mail_items.receiver + if (!ChangeNth(line, 3, newguid)) // mail_items.receiver ROLLBACK(DUMP_FILE_BROKEN); break; } case DTT_ITEM: { // item, owner, data field:item, owner guid - if (!changeGuid(line, 1, items, sObjectMgr->GetGenerator().GetNextAfterMaxUsed())) + if (!ChangeGuid(line, 1, items, itemLowGuidOffset)) ROLLBACK(DUMP_FILE_BROKEN); // item_instance.guid update - if (!changenth(line, 3, newguid)) // item_instance.owner_guid update + if (!ChangeNth(line, 3, newguid)) // item_instance.owner_guid update ROLLBACK(DUMP_FILE_BROKEN); break; } case DTT_ITEM_GIFT: { - if (!changenth(line, 1, newguid)) // character_gifts.guid update + if (!ChangeNth(line, 1, newguid)) // character_gifts.guid update ROLLBACK(DUMP_FILE_BROKEN); - if (!changeGuid(line, 2, items, sObjectMgr->GetGenerator().GetNextAfterMaxUsed())) + if (!ChangeGuid(line, 2, items, itemLowGuidOffset)) ROLLBACK(DUMP_FILE_BROKEN); // character_gifts.item_guid update break; } case DTT_PET: { - //store a map of old pet id to new inserted pet id for use by type 5 tables - snprintf(currpetid, 20, "%s", getnth(line, 1).c_str()); - if (*lastpetid == '\0') - snprintf(lastpetid, 20, "%s", currpetid); - if (strcmp(lastpetid, currpetid) != 0) - { - snprintf(newpetid, 20, "%u", sObjectMgr->GeneratePetNumber()); - snprintf(lastpetid, 20, "%s", currpetid); - } + // store a map of old pet id to new inserted pet id for use by DTT_PET_TABLE tables + std::string petIdStr = GetNth(line, 1); - std::map :: const_iterator petids_iter = petids.find(atoi(currpetid)); + uint32 currentPetId = atoul(petIdStr.c_str()); - if (petids_iter == petids.end()) - { - petids.insert(PetIdsPair(atoi(currpetid), atoi(newpetid))); - } - - if (!changenth(line, 1, newpetid)) // character_pet.id update + PetIds::const_iterator petIdsItr = petIds.find(currentPetId); + if (petIdsItr != petIds.end()) // duplicate pets ROLLBACK(DUMP_FILE_BROKEN); - if (!changenth(line, 3, newguid)) // character_pet.owner update + + uint32 newPetId = sObjectMgr->GeneratePetNumber(); + petIds[currentPetId] = newPetId; + + if (!ChangeNth(line, 1, std::to_string(newPetId).c_str())) // character_pet.id update + ROLLBACK(DUMP_FILE_BROKEN); + if (!ChangeNth(line, 3, newguid)) // character_pet.owner update ROLLBACK(DUMP_FILE_BROKEN); break; } case DTT_PET_TABLE: // pet_aura, pet_spell, pet_spell_cooldown { - snprintf(currpetid, 20, "%s", getnth(line, 1).c_str()); + std::string petIdStr = GetNth(line, 1); // lookup currpetid and match to new inserted pet id - std::map :: const_iterator petids_iter = petids.find(atoi(currpetid)); - if (petids_iter == petids.end()) // couldn't find new inserted id + PetIds::const_iterator petIdsItr = petIds.find(atoul(petIdStr.c_str())); + if (petIdsItr == petIds.end()) // couldn't find new inserted id ROLLBACK(DUMP_FILE_BROKEN); - snprintf(newpetid, 20, "%d", petids_iter->second); - - if (!changenth(line, 1, newpetid)) + if (!ChangeNth(line, 1, std::to_string(petIdsItr->second).c_str())) ROLLBACK(DUMP_FILE_BROKEN); break; diff --git a/src/server/game/Tools/PlayerDump.h b/src/server/game/Tools/PlayerDump.h index d0c5b90fec..5cdcc4b6bb 100644 --- a/src/server/game/Tools/PlayerDump.h +++ b/src/server/game/Tools/PlayerDump.h @@ -64,6 +64,10 @@ enum DumpReturn class PlayerDump { + public: + typedef std::set DumpGuidSet; + typedef std::map DumpGuidMap; + protected: PlayerDump() { } }; @@ -75,16 +79,15 @@ class PlayerDumpWriter : public PlayerDump bool GetDump(ObjectGuid::LowType guid, std::string& dump); DumpReturn WriteDump(std::string const& file, ObjectGuid::LowType guid); - private: - typedef std::set GUIDs; - bool DumpTable(std::string& dump, ObjectGuid::LowType guid, char const*tableFrom, char const*tableTo, DumpTableType type); - std::string GenerateWhereStr(char const* field, GUIDs const& guids, GUIDs::const_iterator& itr); + private: + bool DumpTable(std::string& dump, ObjectGuid::LowType guid, char const* tableFrom, char const* tableTo, DumpTableType type); + std::string GenerateWhereStr(char const* field, DumpGuidSet const& guids, DumpGuidSet::const_iterator& itr); std::string GenerateWhereStr(char const* field, ObjectGuid::LowType guid); - GUIDs pets; - GUIDs mails; - GUIDs items; + DumpGuidSet pets; + DumpGuidSet mails; + DumpGuidSet items; }; class PlayerDumpReader : public PlayerDump From 517a30d7c189b0530711f78508f9731e31fe5a53 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 31 Oct 2015 15:36:48 +0100 Subject: [PATCH 236/524] Core/DBLayer: Sprinkle some async magic on worldserver auth/session load process (cherry picked from commit 0e49eefe85790ac365c90202a2e22ce6b266ac31) --- .../Implementation/CharacterDatabase.cpp | 6 +- .../Database/Implementation/LoginDatabase.cpp | 11 +- .../Database/Implementation/LoginDatabase.h | 3 +- src/server/game/Accounts/RBAC.cpp | 22 +- src/server/game/Accounts/RBAC.h | 2 + src/server/game/Server/WorldSession.cpp | 98 +++++- src/server/game/Server/WorldSession.h | 13 +- src/server/game/Server/WorldSocket.cpp | 317 +++++++++++------- src/server/game/Server/WorldSocket.h | 14 + src/server/game/World/World.cpp | 15 +- 10 files changed, 330 insertions(+), 171 deletions(-) diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 31c4605902..3e0d684a1f 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -250,7 +250,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); // Account data - PrepareStatement(CHAR_SEL_ACCOUNT_DATA, "SELECT type, time, data FROM account_data WHERE accountId = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_ACCOUNT_DATA, "SELECT type, time, data FROM account_data WHERE accountId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_REP_ACCOUNT_DATA, "REPLACE INTO account_data (accountId, type, time, data) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ACCOUNT_DATA, "DELETE FROM account_data WHERE accountId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PLAYER_ACCOUNT_DATA, "SELECT type, time, data FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC); @@ -258,7 +258,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_PLAYER_ACCOUNT_DATA, "DELETE FROM character_account_data WHERE guid = ?", CONNECTION_ASYNC); // Tutorials - PrepareStatement(CHAR_SEL_TUTORIALS, "SELECT tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_TUTORIALS, "SELECT tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7 FROM account_tutorial WHERE accountId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_HAS_TUTORIALS, "SELECT 1 FROM account_tutorial WHERE accountId = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_INS_TUTORIALS, "INSERT INTO account_tutorial(tut0, tut1, tut2, tut3, tut4, tut5, tut6, tut7, accountId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_TUTORIALS, "UPDATE account_tutorial SET tut0 = ?, tut1 = ?, tut2 = ?, tut3 = ?, tut4 = ?, tut5 = ?, tut6 = ?, tut7 = ? WHERE accountId = ?", CONNECTION_ASYNC); @@ -610,7 +610,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE, "UPDATE quest_tracker SET completed_by_gm = 1 WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME, "UPDATE quest_tracker SET quest_complete_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME, "UPDATE quest_tracker SET quest_abandon_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC); - + // DeserterTracker PrepareStatement(CHAR_INS_DESERTER_TRACK, "INSERT INTO battleground_deserters (guid, type, datetime) VALUES (?, ?, NOW())", CONNECTION_ASYNC); } diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index 8f0b506795..a6ff276aef 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -25,6 +25,9 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_REALMLIST, "SELECT id, name, address, localAddress, localSubnetMask, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE flag <> 3 ORDER BY name", CONNECTION_SYNCH); PrepareStatement(LOGIN_DEL_EXPIRED_IP_BANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC); PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_IP_INFO, "(SELECT unbandate > UNIX_TIMESTAMP() OR unbandate = bandate AS banned, NULL as country FROM ip_banned WHERE ip = ?) " + "UNION " + "(SELECT NULL AS banned, country FROM ip2nation WHERE INET_NTOA(ip) = ?)", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_IP_BANNED, "SELECT * FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_INS_IP_AUTO_BANNED, "INSERT INTO ip_banned (ip, bandate, unbandate, bannedby, banreason) VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban')", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_IP_BANNED_ALL, "SELECT ip, bandate, unbandate, bannedby, banreason FROM ip_banned WHERE (bandate = unbandate OR unbandate > UNIX_TIMESTAMP()) ORDER BY unbandate", CONNECTION_SYNCH); @@ -43,7 +46,9 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_FAILEDLOGINS, "SELECT id, failed_logins FROM account WHERE username = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_ID_BY_NAME, "SELECT id FROM account WHERE username = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_NAME, "SELECT id, username FROM account WHERE username = ?", CONNECTION_SYNCH); - PrepareStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME, "SELECT id, sessionkey, last_ip, locked, expansion, mutetime, locale, recruiter, os FROM account WHERE username = ?", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME, "SELECT a.id, a.sessionkey, a.last_ip, a.locked, a.lock_country, a.expansion, a.mutetime, a.locale, a.recruiter, a.os, aa.gmLevel, " + "ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, r.id FROM account a LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?) " + "LEFT JOIN account_banned ab ON a.id = ab.id LEFT JOIN account r ON a.id = r.recruiter WHERE a.username = ? ORDER BY aa.RealmID DESC LIMIT 1", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_EMAIL, "SELECT id, username FROM account WHERE email = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_NUM_CHARS_ON_REALM, "SELECT numchars FROM realmcharacters WHERE realmid = ? AND acctid= ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_BY_IP, "SELECT id, username FROM account WHERE last_ip = ?", CONNECTION_SYNCH); @@ -88,8 +93,6 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_ACCOUNT_INFO, "SELECT a.username, a.last_ip, aa.gmlevel, a.expansion FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_GMLEVEL_TEST, "SELECT 1 FROM account_access WHERE id = ? AND gmlevel > ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS, "SELECT a.id, aa.gmlevel, aa.RealmID FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.username = ?", CONNECTION_SYNCH); - PrepareStatement(LOGIN_SEL_ACCOUNT_RECRUITER, "SELECT 1 FROM account WHERE recruiter = ?", CONNECTION_SYNCH); - PrepareStatement(LOGIN_SEL_BANS, "SELECT 1 FROM account_banned WHERE id = ? AND active = 1 UNION SELECT 1 FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_WHOIS, "SELECT username, email, last_ip FROM account WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_LAST_ATTEMPT_IP, "SELECT last_attempt_ip FROM account WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_LAST_IP, "SELECT last_ip FROM account WHERE id = ?", CONNECTION_SYNCH); @@ -108,7 +111,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_INS_FALP_IP_LOGGING, "INSERT INTO logs_ip_actions (account_id,character_guid,type,ip,systemnote,unixtime,time) VALUES ((SELECT id FROM account WHERE username = ?), 0, 1, ?, ?, unix_timestamp(NOW()), NOW())", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_ACCOUNT_ACCESS_BY_ID, "SELECT gmlevel, RealmID FROM account_access WHERE id = ? and (RealmID = ? OR RealmID = -1) ORDER BY gmlevel desc", CONNECTION_SYNCH); - PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS, "SELECT permissionId, granted FROM rbac_account_permissions WHERE accountId = ? AND (realmId = ? OR realmId = -1) ORDER BY permissionId, realmId", CONNECTION_BOTH); PrepareStatement(LOGIN_INS_RBAC_ACCOUNT_PERMISSION, "INSERT INTO rbac_account_permissions (accountId, permissionId, granted, realmId) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE granted = VALUES(granted)", CONNECTION_ASYNC); PrepareStatement(LOGIN_DEL_RBAC_ACCOUNT_PERMISSION, "DELETE FROM rbac_account_permissions WHERE accountId = ? AND permissionId = ? AND (realmId = ? OR realmId = -1)", CONNECTION_ASYNC); PrepareStatement(LOGIN_INS_ACCOUNT_MUTE, "INSERT INTO account_muted VALUES (?, UNIX_TIMESTAMP(), ?, ?, ?)", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h index 79b7a53cb6..3b30105e67 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.h +++ b/src/server/database/Database/Implementation/LoginDatabase.h @@ -32,6 +32,7 @@ enum LoginDatabaseStatements LOGIN_SEL_REALMLIST, LOGIN_DEL_EXPIRED_IP_BANS, LOGIN_UPD_EXPIRED_ACCOUNT_BANS, + LOGIN_SEL_IP_INFO, LOGIN_SEL_IP_BANNED, LOGIN_INS_IP_AUTO_BANNED, LOGIN_SEL_ACCOUNT_BANNED, @@ -95,8 +96,6 @@ enum LoginDatabaseStatements LOGIN_SEL_ACCOUNT_INFO, LOGIN_SEL_ACCOUNT_ACCESS_GMLEVEL_TEST, LOGIN_SEL_ACCOUNT_ACCESS, - LOGIN_SEL_ACCOUNT_RECRUITER, - LOGIN_SEL_BANS, LOGIN_SEL_ACCOUNT_WHOIS, LOGIN_SEL_REALMLIST_SECURITY_LEVEL, LOGIN_DEL_ACCOUNT, diff --git a/src/server/game/Accounts/RBAC.cpp b/src/server/game/Accounts/RBAC.cpp index 74ff060636..3f5cd6b38c 100644 --- a/src/server/game/Accounts/RBAC.cpp +++ b/src/server/game/Accounts/RBAC.cpp @@ -180,7 +180,24 @@ void RBACData::LoadFromDB() stmt->setUInt32(0, GetId()); stmt->setInt32(1, GetRealmId()); - PreparedQueryResult result = LoginDatabase.Query(stmt); + LoadFromDBCallback(LoginDatabase.Query(stmt)); +} + +PreparedQueryResultFuture RBACData::LoadFromDBAsync() +{ + ClearData(); + + TC_LOG_DEBUG("rbac", "RBACData::LoadFromDB [Id: %u Name: %s]: Loading permissions", GetId(), GetName().c_str()); + // Load account permissions (granted and denied) that affect current realm + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_RBAC_ACCOUNT_PERMISSIONS); + stmt->setUInt32(0, GetId()); + stmt->setInt32(1, GetRealmId()); + + return LoginDatabase.AsyncQuery(stmt); +} + +void RBACData::LoadFromDBCallback(PreparedQueryResult result) +{ if (result) { do @@ -190,8 +207,7 @@ void RBACData::LoadFromDB() GrantPermission(fields[0].GetUInt32()); else DenyPermission(fields[0].GetUInt32()); - } - while (result->NextRow()); + } while (result->NextRow()); } // Add default permissions diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 805f613155..c184fe7f6d 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -864,6 +864,8 @@ class RBACData /// Loads all permissions assigned to current account void LoadFromDB(); + PreparedQueryResultFuture LoadFromDBAsync(); + void LoadFromDBCallback(PreparedQueryResult result); /// Sets security level void SetSecurityLevel(uint8 id) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index c99346cdb7..8f63f848f9 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -95,7 +95,7 @@ bool WorldSessionFilter::Process(WorldPacket* packet) } /// WorldSession constructor -WorldSession::WorldSession(uint32 id, std::shared_ptr sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter): +WorldSession::WorldSession(uint32 id, std::string&& name, std::shared_ptr sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter): m_muteTime(mute_time), m_timeOutTime(0), AntiDOS(this), @@ -104,6 +104,7 @@ WorldSession::WorldSession(uint32 id, std::shared_ptr sock, Account m_Socket(sock), _security(sec), _accountId(id), + _accountName(std::move(name)), m_expansion(expansion), _warden(NULL), _logoutTime(0), @@ -675,13 +676,6 @@ void WorldSession::SendAuthWaitQue(uint32 position) } } -void WorldSession::LoadGlobalAccountData() -{ - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_DATA); - stmt->setUInt32(0, GetAccountId()); - LoadAccountData(CharacterDatabase.Query(stmt), GLOBAL_CACHE_MASK); -} - void WorldSession::LoadAccountData(PreparedQueryResult result, uint32 mask) { for (uint32 i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i) @@ -757,13 +751,11 @@ void WorldSession::SendAccountDataTimes(uint32 mask) SendPacket(&data); } -void WorldSession::LoadTutorialsData() +void WorldSession::LoadTutorialsData(PreparedQueryResult result) { memset(m_Tutorials, 0, sizeof(uint32) * MAX_ACCOUNT_TUTORIAL_VALUES); - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS); - stmt->setUInt32(0, GetAccountId()); - if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) + if (result) for (uint8 i = 0; i < MAX_ACCOUNT_TUTORIAL_VALUES; ++i) m_Tutorials[i] = (*result)[i].GetUInt32(); @@ -966,7 +958,7 @@ void WorldSession::WriteMovementInfo(WorldPacket* data, MovementInfo* mi) *data << mi->splineElevation; } -void WorldSession::ReadAddonsInfo(WorldPacket &data) +void WorldSession::ReadAddonsInfo(ByteBuffer &data) { if (data.rpos() + 4 > data.size()) return; @@ -1125,6 +1117,9 @@ void WorldSession::ProcessQueryCallbacks() { PreparedQueryResult result; + if (_realmAccountLoginCallback.valid() && _realmAccountLoginCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready) + InitializeSessionCallback(_realmAccountLoginCallback.get()); + //! HandleCharEnumOpcode if (_charEnumCallback.valid() && _charEnumCallback.wait_for(std::chrono::seconds(0)) == std::future_status::ready) { @@ -1224,15 +1219,84 @@ void WorldSession::InitWarden(BigNumber* k, std::string const& os) void WorldSession::LoadPermissions() { uint32 id = GetAccountId(); - std::string name; - AccountMgr::GetName(id, name); uint8 secLevel = GetSecurity(); - _RBACData = new rbac::RBACData(id, name, realmID, secLevel); + _RBACData = new rbac::RBACData(id, _accountName, realmID, secLevel); _RBACData->LoadFromDB(); +} + +PreparedQueryResultFuture WorldSession::LoadPermissionsAsync() +{ + uint32 id = GetAccountId(); + uint8 secLevel = GetSecurity(); TC_LOG_DEBUG("rbac", "WorldSession::LoadPermissions [AccountId: %u, Name: %s, realmId: %d, secLevel: %u]", - id, name.c_str(), realmID, secLevel); + id, _accountName.c_str(), realmID, secLevel); + + _RBACData = new rbac::RBACData(id, _accountName, realmID, secLevel); + return _RBACData->LoadFromDBAsync(); +} + +class AccountInfoQueryHolderPerRealm : public SQLQueryHolder +{ +public: + enum + { + GLOBAL_ACCOUNT_DATA = 0, + TUTORIALS, + + MAX_QUERIES + }; + + AccountInfoQueryHolderPerRealm() { SetSize(MAX_QUERIES); } + + bool Initialize(uint32 accountId) + { + bool ok = true; + + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_DATA); + stmt->setUInt32(0, accountId); + ok = SetPreparedQuery(GLOBAL_ACCOUNT_DATA, stmt) && ok; + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_TUTORIALS); + stmt->setUInt32(0, accountId); + ok = SetPreparedQuery(TUTORIALS, stmt) && ok; + + return ok; + } +}; + +void WorldSession::InitializeSession() +{ + AccountInfoQueryHolderPerRealm* realmHolder = new AccountInfoQueryHolderPerRealm(); + if (!realmHolder->Initialize(GetAccountId())) + { + delete realmHolder; + SendAuthResponse(AUTH_SYSTEM_ERROR, false); + return; + } + + _realmAccountLoginCallback = CharacterDatabase.DelayQueryHolder(realmHolder); +} + +void WorldSession::InitializeSessionCallback(SQLQueryHolder* realmHolder) +{ + LoadAccountData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::GLOBAL_ACCOUNT_DATA), GLOBAL_CACHE_MASK); + LoadTutorialsData(realmHolder->GetPreparedResult(AccountInfoQueryHolderPerRealm::TUTORIALS)); + + if (!m_inQueue) + SendAuthResponse(AUTH_OK, true); + else + SendAuthWaitQue(0); + + SetInQueue(false); + ResetTimeOutTime(); + + SendAddonsInfo(); + SendClientCacheVersion(sWorld->getIntConfig(CONFIG_CLIENTCACHE_VERSION)); + SendTutorialsData(); + + delete realmHolder; } rbac::RBACData* WorldSession::GetRBACData() diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 6b1279e3e0..af2d2d22c5 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -249,7 +249,7 @@ struct PacketCounter class WorldSession { public: - WorldSession(uint32 id, std::shared_ptr sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter); + WorldSession(uint32 id, std::string&& name, std::shared_ptr sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter); ~WorldSession(); bool PlayerLoading() const { return m_playerLoading; } @@ -258,7 +258,7 @@ class WorldSession bool PlayerRecentlyLoggedOut() const { return m_playerRecentlyLogout; } bool PlayerDisconnected() const { return !m_Socket; } - void ReadAddonsInfo(WorldPacket& data); + void ReadAddonsInfo(ByteBuffer& data); void SendAddonsInfo(); void ReadMovementInfo(WorldPacket& data, MovementInfo* mi); @@ -276,9 +276,13 @@ class WorldSession void SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos = 0); void SendClientCacheVersion(uint32 version); + void InitializeSession(); + void InitializeSessionCallback(SQLQueryHolder* realmHolder); + rbac::RBACData* GetRBACData(); bool HasPermission(uint32 permissionId); void LoadPermissions(); + PreparedQueryResultFuture LoadPermissionsAsync(); void InvalidateRBACData(); // Used to force LoadPermissions at next HasPermission check AccountTypes GetSecurity() const { return _security; } @@ -358,10 +362,9 @@ class WorldSession AccountData* GetAccountData(AccountDataType type) { return &m_accountData[type]; } void SetAccountData(AccountDataType type, time_t tm, std::string const& data); void SendAccountDataTimes(uint32 mask); - void LoadGlobalAccountData(); void LoadAccountData(PreparedQueryResult result, uint32 mask); - void LoadTutorialsData(); + void LoadTutorialsData(PreparedQueryResult result); void SendTutorialsData(); void SaveTutorialsData(SQLTransaction& trans); uint32 GetTutorialInt(uint8 index) const { return m_Tutorials[index]; } @@ -965,6 +968,7 @@ class WorldSession void InitializeQueryCallbackParameters(); void ProcessQueryCallbacks(); + QueryResultHolderFuture _realmAccountLoginCallback; PreparedQueryResultFuture _charEnumCallback; PreparedQueryResultFuture _addIgnoreCallback; PreparedQueryResultFuture _stablePetCallback; @@ -1034,6 +1038,7 @@ class WorldSession AccountTypes _security; uint32 _accountId; + std::string _accountName; uint8 m_expansion; typedef std::list AddonsList; diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 066a4e501b..be5e851662 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -35,10 +35,62 @@ WorldSocket::WorldSocket(tcp::socket&& socket) void WorldSocket::Start() { + std::string ip_address = GetRemoteIpAddress().to_string(); + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_IP_INFO); + stmt->setString(0, ip_address); + stmt->setUInt32(1, inet_addr(ip_address.c_str())); + + _queryCallback = std::bind(&WorldSocket::CheckIpCallback, this, std::placeholders::_1); + _queryFuture = LoginDatabase.AsyncQuery(stmt); +} + +void WorldSocket::CheckIpCallback(PreparedQueryResult result) +{ + if (result) + { + bool banned = false; + do + { + Field* fields = result->Fetch(); + if (fields[0].GetUInt64() != 0) + banned = true; + + if (!fields[1].GetString().empty()) + _ipCountry = fields[1].GetString(); + + } while (result->NextRow()); + + if (banned) + { + SendAuthResponseError(AUTH_REJECT); + TC_LOG_ERROR("network", "WorldSocket::CheckIpCallback: Sent Auth Response (IP %s banned).", GetRemoteIpAddress().to_string().c_str()); + DelayedCloseSocket(); + return; + } + } + AsyncRead(); HandleSendAuthSession(); } +bool WorldSocket::Update() +{ + if (!BaseSocket::Update()) + return false; + + { + std::lock_guard lock(_queryLock); + if (_queryFuture.valid() && _queryFuture.wait_for(std::chrono::seconds(0)) == std::future_status::ready) + { + auto callback = std::move(_queryCallback); + _queryCallback = nullptr; + callback(_queryFuture.get()); + } + } + + return true; +} + void WorldSocket::HandleSendAuthSession() { WorldPacket packet(SMSG_AUTH_CHALLENGE, 37); @@ -145,6 +197,71 @@ bool WorldSocket::ReadHeaderHandler() return true; } +struct AuthSession +{ + uint32 BattlegroupID = 0; + uint32 LoginServerType = 0; + uint32 RealmID = 0; + uint32 Build = 0; + uint32 LocalChallenge = 0; + uint32 LoginServerID = 0; + uint32 RegionID = 0; + uint64 DosResponse = 0; + uint8 Digest[SHA_DIGEST_LENGTH] = {}; + std::string Account; + ByteBuffer AddonInfo; +}; + +struct AccountInfo +{ + uint32 Id; + BigNumber SessionKey; + std::string LastIP; + bool IsLockedToIP; + std::string LockCountry; + uint8 Expansion; + int64 MuteTime; + LocaleConstant Locale; + uint32 Recruiter; + std::string OS; + bool IsRectuiter; + AccountTypes Security; + bool IsBanned; + + explicit AccountInfo(Field* fields) + { + // 0 1 2 3 4 5 6 7 8 9 10 + // SELECT a.id, a.sessionkey, a.last_ip, a.locked, a.lock_country, a.expansion, a.mutetime, a.locale, a.recruiter, a.os, aa.gmLevel, + // 11 12 + // ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, r.id + // FROM account a + // LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?) + // LEFT JOIN account_banned ab ON a.id = ab.id + // LEFT JOIN account r ON a.id = r.recruiter + // WHERE a.username = ? ORDER BY aa.RealmID DESC LIMIT 1 + Id = fields[0].GetUInt32(); + SessionKey.SetHexStr(fields[1].GetCString()); + LastIP = fields[2].GetString(); + IsLockedToIP = fields[3].GetBool(); + LockCountry = fields[4].GetString(); + Expansion = fields[5].GetUInt8(); + MuteTime = fields[6].GetInt64(); + Locale = LocaleConstant(fields[7].GetUInt8()); + Recruiter = fields[8].GetUInt32(); + OS = fields[9].GetString(); + Security = AccountTypes(fields[10].GetUInt8()); + IsBanned = fields[11].GetUInt64() != 0; + IsRectuiter = fields[12].GetUInt32() != 0; + + uint32 world_expansion = sWorld->getIntConfig(CONFIG_EXPANSION); + if (Expansion > world_expansion) + Expansion = world_expansion; + + if (Locale >= TOTAL_LOCALES) + Locale = LOCALE_enUS; + } +}; + bool WorldSocket::ReadDataHandler() { ClientPktHeader* header = reinterpret_cast(_headerBuffer.GetReadPointer()); @@ -256,48 +373,35 @@ void WorldSocket::SendPacket(WorldPacket const& packet) void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) { - uint8 digest[SHA_DIGEST_LENGTH]; - uint32 clientSeed; - uint8 security; - uint32 id; - LocaleConstant locale; - std::string account; - SHA1Hash sha; - uint32 clientBuild; - uint32 serverId, loginServerType, region, battlegroup, realmIndex; - uint64 unk4; - WorldPacket packet, SendAddonPacked; - BigNumber k; - bool wardenActive = sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED); + std::shared_ptr authSession = std::make_shared(); // Read the content of the packet - recvPacket >> clientBuild; - recvPacket >> serverId; // Used for GRUNT only - recvPacket >> account; - recvPacket >> loginServerType; // 0 GRUNT, 1 Battle.net - recvPacket >> clientSeed; - recvPacket >> region >> battlegroup; // Used for Battle.net only - recvPacket >> realmIndex; // realmId from auth_database.realmlist table - recvPacket >> unk4; - recvPacket.read(digest, 20); - - TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: client %u, serverId %u, account %s, loginServerType %u, clientseed %u, realmIndex %u", - clientBuild, - serverId, - account.c_str(), - loginServerType, - clientSeed, - realmIndex); + recvPacket >> authSession->Build; + recvPacket >> authSession->LoginServerID; + recvPacket >> authSession->Account; + recvPacket >> authSession->LoginServerType; + recvPacket >> authSession->LocalChallenge; + recvPacket >> authSession->RegionID; + recvPacket >> authSession->BattlegroupID; + recvPacket >> authSession->RealmID; // realmId from auth_database.realmlist table + recvPacket >> authSession->DosResponse; + recvPacket.read(authSession->Digest, 20); + authSession->AddonInfo.append(recvPacket.contents() + recvPacket.rpos(), recvPacket.size() - recvPacket.rpos()); // Get the account information from the auth database - // 0 1 2 3 4 5 6 7 8 - // SELECT id, sessionkey, last_ip, locked, expansion, mutetime, locale, recruiter, os FROM account WHERE username = ? PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME); + stmt->setInt32(0, int32(realmID)); + stmt->setString(1, authSession->Account); - stmt->setString(0, account); - - PreparedQueryResult result = LoginDatabase.Query(stmt); + { + std::lock_guard lock(_queryLock); + _queryCallback = std::bind(&WorldSocket::HandleAuthSessionCallback, this, authSession, std::placeholders::_1); + _queryFuture = LoginDatabase.AsyncQuery(stmt); + } +} +void WorldSocket::HandleAuthSessionCallback(std::shared_ptr authSession, PreparedQueryResult result) +{ // Stop if the account is not found if (!result) { @@ -308,32 +412,20 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) return; } - Field* fields = result->Fetch(); - - uint8 expansion = fields[4].GetUInt8(); - uint32 world_expansion = sWorld->getIntConfig(CONFIG_EXPANSION); - if (expansion > world_expansion) - expansion = world_expansion; + AccountInfo account(result->Fetch()); // For hook purposes, we get Remoteaddress at this point. std::string address = GetRemoteIpAddress().to_string(); // As we don't know if attempted login process by ip works, we update last_attempt_ip right away - stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_ATTEMPT_IP); - + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_ATTEMPT_IP); stmt->setString(0, address); - stmt->setString(1, account); - + stmt->setString(1, authSession->Account); LoginDatabase.Execute(stmt); // This also allows to check for possible "hack" attempts on account - // id has to be fetched at this point, so that first actual account response that fails can be logged - id = fields[0].GetUInt32(); - - k.SetHexStr(fields[1].GetCString()); - // even if auth credentials are bad, try using the session key we have - client cannot read auth response error without it - _authCrypt.Init(&k); + _authCrypt.Init(&account.SessionKey); // First reject the connection if packet contains invalid data or realm state doesn't allow logging in if (sWorld->IsClosed()) @@ -344,7 +436,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) return; } - if (realmIndex != realmID) + if (authSession->RealmID != realmID) { SendAuthResponseError(REALM_LIST_REALM_NOT_FOUND); TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (bad realm)."); @@ -352,13 +444,12 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) return; } - std::string os = fields[8].GetString(); - // Must be done before WorldSession is created - if (wardenActive && os != "Win" && os != "OSX") + bool wardenActive = sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED); + if (wardenActive && account.OS != "Win" && account.OS != "Wn64" && account.OS != "Mc64") { SendAuthResponseError(AUTH_REJECT); - TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", address.c_str(), os.c_str()); + TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", address.c_str(), account.OS.c_str()); DelayedCloseSocket(); return; } @@ -366,135 +457,111 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) // Check that Key and account name are the same on client and server uint32 t = 0; - sha.UpdateData(account); + SHA1Hash sha; + sha.UpdateData(authSession->Account); sha.UpdateData((uint8*)&t, 4); - sha.UpdateData((uint8*)&clientSeed, 4); + sha.UpdateData((uint8*)&authSession->LocalChallenge, 4); sha.UpdateData((uint8*)&_authSeed, 4); - sha.UpdateBigNumbers(&k, NULL); + sha.UpdateBigNumbers(&account.SessionKey, NULL); sha.Finalize(); - if (memcmp(sha.GetDigest(), digest, SHA_DIGEST_LENGTH) != 0) + if (memcmp(sha.GetDigest(), authSession->Digest, SHA_DIGEST_LENGTH) != 0) { SendAuthResponseError(AUTH_FAILED); - TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Authentication failed for account: %u ('%s') address: %s", id, account.c_str(), address.c_str()); + TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Authentication failed for account: %u ('%s') address: %s", account.Id, authSession->Account.c_str(), address.c_str()); DelayedCloseSocket(); return; } ///- Re-check ip locking (same check as in auth). - if (fields[3].GetUInt8() == 1) // if ip is locked + if (account.IsLockedToIP) { - if (strcmp(fields[2].GetCString(), address.c_str()) != 0) + if (account.LastIP != address) { SendAuthResponseError(AUTH_FAILED); - TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account IP differs. Original IP: %s, new IP: %s).", fields[2].GetCString(), address.c_str()); + TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account IP differs. Original IP: %s, new IP: %s).", account.LastIP.c_str(), address.c_str()); // We could log on hook only instead of an additional db log, however action logger is config based. Better keep DB logging as well - sScriptMgr->OnFailedAccountLogin(id); + sScriptMgr->OnFailedAccountLogin(account.Id); + DelayedCloseSocket(); + return; + } + } + else if (!account.LockCountry.empty() && account.LockCountry != "00" && !_ipCountry.empty()) + { + if (account.LockCountry != _ipCountry) + { + SendAuthResponseError(AUTH_FAILED); + TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account country differs. Original country: %s, new country: %s).", account.LockCountry.c_str(), _ipCountry.c_str()); + // We could log on hook only instead of an additional db log, however action logger is config based. Better keep DB logging as well + sScriptMgr->OnFailedAccountLogin(account.Id); DelayedCloseSocket(); return; } } - int64 mutetime = fields[5].GetInt64(); + int64 mutetime = account.MuteTime; //! Negative mutetime indicates amount of seconds to be muted effective on next login - which is now. if (mutetime < 0) { mutetime = time(NULL) + llabs(mutetime); PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_MUTE_TIME_LOGIN); - stmt->setInt64(0, mutetime); - stmt->setUInt32(1, id); - + stmt->setUInt32(1, account.Id); LoginDatabase.Execute(stmt); } - locale = LocaleConstant(fields[6].GetUInt8()); - if (locale >= TOTAL_LOCALES) - locale = LOCALE_enUS; - - uint32 recruiter = fields[7].GetUInt32(); - // Checks gmlevel per Realm - stmt = LoginDatabase.GetPreparedStatement(LOGIN_GET_GMLEVEL_BY_REALMID); - - stmt->setUInt32(0, id); - stmt->setInt32(1, int32(realmID)); - - result = LoginDatabase.Query(stmt); - - if (!result) - security = 0; - else - { - fields = result->Fetch(); - security = fields[0].GetUInt8(); - } - - // Re-check account ban (same check as in auth) - stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BANS); - - stmt->setUInt32(0, id); - stmt->setString(1, address); - - PreparedQueryResult banresult = LoginDatabase.Query(stmt); - - if (banresult) // if account banned + if (account.IsBanned) { SendAuthResponseError(AUTH_BANNED); TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (Account banned)."); - sScriptMgr->OnFailedAccountLogin(id); + sScriptMgr->OnFailedAccountLogin(account.Id); DelayedCloseSocket(); return; } // Check locked state for server AccountTypes allowedAccountType = sWorld->GetPlayerSecurityLimit(); - TC_LOG_DEBUG("network", "Allowed Level: %u Player Level %u", allowedAccountType, AccountTypes(security)); - if (allowedAccountType > SEC_PLAYER && AccountTypes(security) < allowedAccountType) + TC_LOG_DEBUG("network", "Allowed Level: %u Player Level %u", allowedAccountType, account.Security); + if (allowedAccountType > SEC_PLAYER && account.Security < allowedAccountType) { SendAuthResponseError(AUTH_UNAVAILABLE); TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: User tries to login but his security level is not enough"); - sScriptMgr->OnFailedAccountLogin(id); + sScriptMgr->OnFailedAccountLogin(account.Id); DelayedCloseSocket(); return; } - TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Client '%s' authenticated successfully from %s.", - account.c_str(), - address.c_str()); - - // Check if this user is by any chance a recruiter - stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_RECRUITER); - - stmt->setUInt32(0, id); - - result = LoginDatabase.Query(stmt); - - bool isRecruiter = false; - if (result) - isRecruiter = true; + TC_LOG_DEBUG("network", "WorldSocket::HandleAuthSession: Client '%s' authenticated successfully from %s.", authSession->Account.c_str(), address.c_str()); // Update the last_ip in the database as it was successful for login stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_IP); stmt->setString(0, address); - stmt->setString(1, account); + stmt->setString(1, authSession->Account); LoginDatabase.Execute(stmt); // At this point, we can safely hook a successful login - sScriptMgr->OnAccountLogin(id); + sScriptMgr->OnAccountLogin(account.Id); _authed = true; - _worldSession = new WorldSession(id, shared_from_this(), AccountTypes(security), expansion, mutetime, locale, recruiter, isRecruiter); - _worldSession->LoadGlobalAccountData(); - _worldSession->LoadTutorialsData(); - _worldSession->ReadAddonsInfo(recvPacket); - _worldSession->LoadPermissions(); + _worldSession = new WorldSession(account.Id, std::move(authSession->Account), shared_from_this(), account.Security, + account.Expansion, mutetime, account.Locale, account.Recruiter, account.IsRectuiter); + _worldSession->ReadAddonsInfo(authSession->AddonInfo); // Initialize Warden system only if it is enabled by config if (wardenActive) - _worldSession->InitWarden(&k, os); + _worldSession->InitWarden(&account.SessionKey, account.OS); + + _queryCallback = std::bind(&WorldSocket::LoadSessionPermissionsCallback, this, std::placeholders::_1); + _queryFuture = _worldSession->LoadPermissionsAsync(); +} + +void WorldSocket::LoadSessionPermissionsCallback(PreparedQueryResult result) +{ + // RBAC must be loaded before adding session to check for skip queue permission + _worldSession->GetRBACData()->LoadFromDBCallback(result); sWorld->AddSession(_worldSession); } diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index 0f6acd0d72..e23f41ff27 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -45,8 +45,12 @@ struct ClientPktHeader #pragma pack(pop) +struct AuthSession; + class WorldSocket : public Socket { + typedef Socket BaseSocket; + public: WorldSocket(tcp::socket&& socket); @@ -54,6 +58,7 @@ public: WorldSocket& operator=(WorldSocket const& right) = delete; void Start() override; + bool Update() override; void SendPacket(WorldPacket const& packet); @@ -64,6 +69,8 @@ protected: bool ReadDataHandler(); private: + void CheckIpCallback(PreparedQueryResult result); + /// writes network.opcode log /// accessing WorldSession is not threadsafe, only do it when holding _worldSessionLock void LogOpcodeText(uint16 opcode, std::unique_lock const& guard) const; @@ -71,6 +78,8 @@ private: void SendPacketAndLogOpcode(WorldPacket const& packet); void HandleSendAuthSession(); void HandleAuthSession(WorldPacket& recvPacket); + void HandleAuthSessionCallback(std::shared_ptr authSession, PreparedQueryResult result); + void LoadSessionPermissionsCallback(PreparedQueryResult result); void SendAuthResponseError(uint8 code); bool HandlePing(WorldPacket& recvPacket); @@ -87,6 +96,11 @@ private: MessageBuffer _headerBuffer; MessageBuffer _packetBuffer; + + std::mutex _queryLock; + PreparedQueryResultFuture _queryFuture; + std::function _queryCallback; + std::string _ipCountry; }; #endif diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 8cf3d53f55..a0dd889876 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -269,10 +269,7 @@ void World::AddSession_(WorldSession* s) return; } - s->SendAuthResponse(AUTH_OK, true); - s->SendAddonsInfo(); - s->SendClientCacheVersion(sWorld->getIntConfig(CONFIG_CLIENTCACHE_VERSION)); - s->SendTutorialsData(); + s->InitializeSession(); UpdateMaxSessionCounters(); @@ -362,15 +359,7 @@ bool World::RemoveQueuedPlayer(WorldSession* sess) if ((!m_playerLimit || sessions < m_playerLimit) && !m_QueuedPlayer.empty()) { WorldSession* pop_sess = m_QueuedPlayer.front(); - pop_sess->SetInQueue(false); - pop_sess->ResetTimeOutTime(); - pop_sess->SendAuthWaitQue(0); - pop_sess->SendAddonsInfo(); - - pop_sess->SendClientCacheVersion(sWorld->getIntConfig(CONFIG_CLIENTCACHE_VERSION)); - pop_sess->SendAccountDataTimes(GLOBAL_CACHE_MASK); - pop_sess->SendTutorialsData(); - + pop_sess->InitializeSession(); m_QueuedPlayer.pop_front(); // update iter to point first queued socket or end() if queue is empty now From b95648ae275a19492c54f8aca1ee4d7d58b8cb5e Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 21 Jun 2015 02:15:13 +0200 Subject: [PATCH 237/524] Core/Threading: Significantly reduced the severity of possible data race during player login * This commit changes a data race on a pointer value to data race on integers (guid) (cherry picked from commit dbe20510569e6bd4a26892be84289b5864350ea6) --- src/server/game/Server/WorldSession.cpp | 8 ++++---- src/server/game/Server/WorldSocket.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 8f63f848f9..b1a043c4b5 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -171,11 +171,11 @@ std::string WorldSession::GetPlayerInfo() const { std::ostringstream ss; - ss << "[Player: " << GetPlayerName() << " ("; - if (_player != NULL) - ss << _player->GetGUID().ToString() << ", "; + ss << "[Player: "; + if (!m_playerLoading && _player) + ss << _player->GetName() << ' ' << _player->GetGUID().ToString() << ", "; - ss << "Account: " << GetAccountId() << ")]"; + ss << "Account: " << GetAccountId() << "]"; return ss.str(); } diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index be5e851662..0448059f43 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -446,7 +446,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr authSes // Must be done before WorldSession is created bool wardenActive = sWorld->getBoolConfig(CONFIG_WARDEN_ENABLED); - if (wardenActive && account.OS != "Win" && account.OS != "Wn64" && account.OS != "Mc64") + if (wardenActive && account.OS != "Win" && account.OS != "OSX") { SendAuthResponseError(AUTH_REJECT); TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client %s attempted to log in using invalid client OS (%s).", address.c_str(), account.OS.c_str()); From 97fe2283346e102742366fdd2f7be4398d27d641 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 21 Jun 2015 02:13:08 +0200 Subject: [PATCH 238/524] Core/Threading: Fixed possible data races after making auth queries async by moving their processing to boost::asio::io_service::run threads (cherry picked from commit f6bc87fe5df8b60ca0bf3a35f61305fd780a7e7d) --- src/server/game/Accounts/RBAC.cpp | 1 - src/server/game/Accounts/RBAC.h | 2 +- src/server/game/Server/WorldSocket.cpp | 15 +++++++++------ src/server/game/Server/WorldSocket.h | 2 +- src/server/shared/Networking/Socket.h | 2 ++ 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/server/game/Accounts/RBAC.cpp b/src/server/game/Accounts/RBAC.cpp index 3f5cd6b38c..c520564f0f 100644 --- a/src/server/game/Accounts/RBAC.cpp +++ b/src/server/game/Accounts/RBAC.cpp @@ -17,7 +17,6 @@ #include "RBAC.h" #include "AccountMgr.h" -#include "DatabaseEnv.h" #include "Log.h" namespace rbac diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index c184fe7f6d..4acadd7f2b 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -40,7 +40,7 @@ #ifndef _RBAC_H #define _RBAC_H -#include "Define.h" +#include "DatabaseEnv.h" #include #include #include diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 0448059f43..6d7e41e8af 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -40,8 +40,11 @@ void WorldSocket::Start() stmt->setString(0, ip_address); stmt->setUInt32(1, inet_addr(ip_address.c_str())); - _queryCallback = std::bind(&WorldSocket::CheckIpCallback, this, std::placeholders::_1); - _queryFuture = LoginDatabase.AsyncQuery(stmt); + { + std::lock_guard guard(_queryLock); + _queryCallback = io_service().wrap(std::bind(&WorldSocket::CheckIpCallback, this, std::placeholders::_1)); + _queryFuture = LoginDatabase.AsyncQuery(stmt); + } } void WorldSocket::CheckIpCallback(PreparedQueryResult result) @@ -79,7 +82,7 @@ bool WorldSocket::Update() return false; { - std::lock_guard lock(_queryLock); + std::lock_guard guard(_queryLock); if (_queryFuture.valid() && _queryFuture.wait_for(std::chrono::seconds(0)) == std::future_status::ready) { auto callback = std::move(_queryCallback); @@ -394,8 +397,8 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) stmt->setString(1, authSession->Account); { - std::lock_guard lock(_queryLock); - _queryCallback = std::bind(&WorldSocket::HandleAuthSessionCallback, this, authSession, std::placeholders::_1); + std::lock_guard guard(_queryLock); + _queryCallback = io_service().wrap(std::bind(&WorldSocket::HandleAuthSessionCallback, this, authSession, std::placeholders::_1)); _queryFuture = LoginDatabase.AsyncQuery(stmt); } } @@ -554,7 +557,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr authSes if (wardenActive) _worldSession->InitWarden(&account.SessionKey, account.OS); - _queryCallback = std::bind(&WorldSocket::LoadSessionPermissionsCallback, this, std::placeholders::_1); + _queryCallback = io_service().wrap(std::bind(&WorldSocket::LoadSessionPermissionsCallback, this, std::placeholders::_1)); _queryFuture = _worldSession->LoadPermissionsAsync(); } diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index e23f41ff27..35941f1515 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -99,7 +99,7 @@ private: std::mutex _queryLock; PreparedQueryResultFuture _queryFuture; - std::function _queryCallback; + std::function _queryCallback; std::string _ipCountry; }; diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h index 1989411bcc..3f58829861 100644 --- a/src/server/shared/Networking/Socket.h +++ b/src/server/shared/Networking/Socket.h @@ -160,6 +160,8 @@ protected: MessageBuffer _writeBuffer; #endif + boost::asio::io_service& io_service() { return _socket.get_io_service(); } + private: void ReadHandlerInternal(boost::system::error_code error, size_t transferredBytes) { From 60da7c6552735c62f8b1aba5634ba5177ef06d44 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 9 Aug 2015 15:30:06 +0200 Subject: [PATCH 239/524] Core/Networking: Fixed possible crashes happening if async query retrieving account data takes too long Closes #14944 (cherry picked from commit 590c6e399d778db459fc8417322c80549081440a) --- src/server/game/Server/WorldSocket.cpp | 23 +++++++++++--------- src/server/game/Server/WorldSocket.h | 10 ++++++++- src/server/shared/Networking/MessageBuffer.h | 4 ++-- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 6d7e41e8af..1dc470744a 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -166,13 +166,15 @@ void WorldSocket::ReadHandler() } // just received fresh new payload - if (!ReadDataHandler()) + ReadDataHandlerResult result = ReadDataHandler(); + _headerBuffer.Reset(); + if (result != ReadDataHandlerResult::Ok) { - CloseSocket(); + if (result != ReadDataHandlerResult::WaitingForQuery) + CloseSocket(); + return; } - - _headerBuffer.Reset(); } AsyncRead(); @@ -265,7 +267,7 @@ struct AccountInfo } }; -bool WorldSocket::ReadDataHandler() +WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler() { ClientPktHeader* header = reinterpret_cast(_headerBuffer.GetReadPointer()); @@ -282,7 +284,7 @@ bool WorldSocket::ReadDataHandler() { case CMSG_PING: LogOpcodeText(opcode, sessionGuard); - return HandlePing(packet); + return HandlePing(packet) ? ReadDataHandlerResult::Ok : ReadDataHandlerResult::Error; case CMSG_AUTH_SESSION: LogOpcodeText(opcode, sessionGuard); if (_authed) @@ -290,11 +292,11 @@ bool WorldSocket::ReadDataHandler() // locking just to safely log offending user is probably overkill but we are disconnecting him anyway if (sessionGuard.try_lock()) TC_LOG_ERROR("network", "WorldSocket::ProcessIncoming: received duplicate CMSG_AUTH_SESSION from %s", _worldSession->GetPlayerInfo().c_str()); - return false; + return ReadDataHandlerResult::Error; } HandleAuthSession(packet); - break; + return ReadDataHandlerResult::WaitingForQuery; case CMSG_KEEP_ALIVE: LogOpcodeText(opcode, sessionGuard); break; @@ -306,7 +308,7 @@ bool WorldSocket::ReadDataHandler() { TC_LOG_ERROR("network.opcode", "ProcessIncoming: Client not authed opcode = %u", uint32(opcode)); CloseSocket(); - return false; + return ReadDataHandlerResult::Error; } // Our Idle timer will reset on any non PING opcodes. @@ -319,7 +321,7 @@ bool WorldSocket::ReadDataHandler() } } - return true; + return ReadDataHandlerResult::Ok; } void WorldSocket::LogOpcodeText(uint16 opcode, std::unique_lock const& guard) const @@ -559,6 +561,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr authSes _queryCallback = io_service().wrap(std::bind(&WorldSocket::LoadSessionPermissionsCallback, this, std::placeholders::_1)); _queryFuture = _worldSession->LoadPermissionsAsync(); + AsyncRead(); } void WorldSocket::LoadSessionPermissionsCallback(PreparedQueryResult result) diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index 35941f1515..f0da520cf4 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -66,7 +66,15 @@ protected: void OnClose() override; void ReadHandler() override; bool ReadHeaderHandler(); - bool ReadDataHandler(); + + enum class ReadDataHandlerResult + { + Ok = 0, + Error = 1, + WaitingForQuery = 2 + }; + + ReadDataHandlerResult ReadDataHandler(); private: void CheckIpCallback(PreparedQueryResult result); diff --git a/src/server/shared/Networking/MessageBuffer.h b/src/server/shared/Networking/MessageBuffer.h index 95e2697462..5f9af33a45 100644 --- a/src/server/shared/Networking/MessageBuffer.h +++ b/src/server/shared/Networking/MessageBuffer.h @@ -84,9 +84,9 @@ public: // Ensures there's "some" free space, make sure to call Normalize() before this void EnsureFreeSpace() { - // Double the size of the buffer if it's already full + // resize buffer if it's already full if (GetRemainingSpace() == 0) - _storage.resize(_storage.size() * 2); + _storage.resize(_storage.size() * 3 / 2); } void Write(void const* data, std::size_t size) From 1de03cf1077f83ca89f75064e5f8810e357be195 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 30 Aug 2015 00:17:08 +0200 Subject: [PATCH 240/524] Core/Players: Implemented serverside validation of reserved/profane names Closes #15357 New library dependency: Boost.Regex (cherry picked from commit b564c10b13effed63c7b7dae25117e2e0a2c64e4) --- cmake/macros/ConfigureBoost.cmake | 2 +- src/common/Common.h | 5 +- src/server/game/DataStores/DBCStores.cpp | 55 +++++++++++++++++++ src/server/game/DataStores/DBCStores.h | 3 + src/server/game/DataStores/DBCStructure.h | 15 ++++- src/server/game/DataStores/DBCfmt.h | 2 + src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Globals/ObjectMgr.cpp | 17 +++++- src/server/game/Globals/ObjectMgr.h | 4 +- src/server/game/Handlers/CharacterHandler.cpp | 8 +-- src/server/game/Handlers/PetHandler.cpp | 2 +- src/server/game/Tools/PlayerDump.cpp | 2 +- src/server/scripts/Commands/cs_character.cpp | 4 +- 13 files changed, 103 insertions(+), 18 deletions(-) diff --git a/cmake/macros/ConfigureBoost.cmake b/cmake/macros/ConfigureBoost.cmake index 98caa5eb22..022d84246e 100644 --- a/cmake/macros/ConfigureBoost.cmake +++ b/cmake/macros/ConfigureBoost.cmake @@ -29,7 +29,7 @@ if(WIN32) add_definitions(-D_WIN32_WINNT=${ver}) endif() -find_package(Boost 1.49 REQUIRED system filesystem thread program_options iostreams) +find_package(Boost 1.49 REQUIRED system filesystem thread program_options iostreams regex) add_definitions(-DBOOST_DATE_TIME_NO_LIB) add_definitions(-DBOOST_REGEX_NO_LIB) add_definitions(-DBOOST_CHRONO_NO_LIB) diff --git a/src/common/Common.h b/src/common/Common.h index 4c209f89ec..54b735f0ca 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -116,10 +116,11 @@ enum LocaleConstant LOCALE_zhTW = 5, LOCALE_esES = 6, LOCALE_esMX = 7, - LOCALE_ruRU = 8 + LOCALE_ruRU = 8, + + TOTAL_LOCALES }; -const uint8 TOTAL_LOCALES = 9; #define DEFAULT_LOCALE LOCALE_enUS #define MAX_LOCALES 8 diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 14e4631548..806d9d4676 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -25,6 +25,7 @@ #include "Timer.h" #include "ObjectDefines.h" +#include #include typedef std::map AreaFlagByAreaID; @@ -140,6 +141,12 @@ MapDifficultyMap sMapDifficultyMap; DBCStorage sMovieStore(MovieEntryfmt); +DBCStorage sNamesProfanityStore(NamesProfanityEntryfmt); +DBCStorage sNamesReservedStore(NamesReservedEntryfmt); +typedef std::array, TOTAL_LOCALES> NameValidationRegexContainer; +NameValidationRegexContainer NamesProfaneValidators; +NameValidationRegexContainer NamesReservedValidators; + DBCStorage sOverrideSpellDataStore(OverrideSpellDatafmt); DBCStorage sPowerDisplayStore(PowerDisplayfmt); @@ -401,6 +408,37 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales, bad_dbc_files, sMovieStore, dbcPath, "Movie.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sNamesProfanityStore, dbcPath, "NamesProfanity.dbc"); + LoadDBC(availableDbcLocales, bad_dbc_files, sNamesReservedStore, dbcPath, "NamesReserved.dbc"); + for (uint32 i = 0; i < sNamesProfanityStore.GetNumRows(); ++i) + { + NamesProfanityEntry const* namesProfanity = sNamesProfanityStore.LookupEntry(i); + if (!namesProfanity) + continue; + + ASSERT(namesProfanity->Language < TOTAL_LOCALES || namesProfanity->Language == -1); + if (namesProfanity->Language != -1) + NamesProfaneValidators[namesProfanity->Language].emplace_back(namesProfanity->Name, boost::regex::perl | boost::regex::icase | boost::regex::optimize); + else + for (uint32 i = 0; i < TOTAL_LOCALES; ++i) + NamesProfaneValidators[i].emplace_back(namesProfanity->Name, boost::regex::perl | boost::regex::icase | boost::regex::optimize); + } + + for (uint32 i = 0; i < sNamesReservedStore.GetNumRows(); ++i) + { + NamesReservedEntry const* namesReserved = sNamesReservedStore.LookupEntry(i); + if (!namesReserved) + continue; + + ASSERT(namesReserved->Language < TOTAL_LOCALES || namesReserved->Language == -1); + if (namesReserved->Language != -1) + NamesReservedValidators[namesReserved->Language].emplace_back(namesReserved->Name, boost::regex::perl | boost::regex::icase | boost::regex::optimize); + else + for (uint32 i = 0; i < TOTAL_LOCALES; ++i) + NamesReservedValidators[i].emplace_back(namesReserved->Name, boost::regex::perl | boost::regex::icase | boost::regex::optimize); + } + + LoadDBC(availableDbcLocales, bad_dbc_files, sOverrideSpellDataStore, dbcPath, "OverrideSpellData.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sPowerDisplayStore, dbcPath, "PowerDisplay.dbc"); @@ -1005,3 +1043,20 @@ SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, u return NULL; } + +ResponseCodes ValidateName(std::string const& name, LocaleConstant locale) +{ + if (locale >= TOTAL_LOCALES) + return RESPONSE_FAILURE; + + for (boost::regex const& regex : NamesProfaneValidators[locale]) + if (boost::regex_search(name, regex)) + return CHAR_NAME_PROFANE; + + // regexes at TOTAL_LOCALES are loaded from NamesReserved which is not locale specific + for (boost::regex const& regex : NamesReservedValidators[locale]) + if (boost::regex_search(name, regex)) + return CHAR_NAME_RESERVED; + + return CHAR_NAME_SUCCESS; +} diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 858cd33f8f..2def790124 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -22,6 +22,7 @@ #include "Common.h" #include "DBCStore.h" #include "DBCStructure.h" +#include "SharedDefines.h" #include @@ -79,6 +80,8 @@ typedef std::unordered_multimap SkillRac typedef std::pair SkillRaceClassInfoBounds; SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_); +ResponseCodes ValidateName(std::string const& name, LocaleConstant locale); + extern DBCStorage sAchievementStore; extern DBCStorage sAchievementCriteriaStore; extern DBCStorage sAreaStore;// recommend access using functions diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 72317a196c..17e6067047 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -21,7 +21,6 @@ #include "Common.h" #include "DBCEnums.h" -#include "Define.h" #include "Util.h" // Structures using to access raw DBC data and required packing to portability @@ -1405,6 +1404,20 @@ struct MovieEntry //uint32 unk2; // 2 always 100 }; +struct NamesProfanityEntry +{ + //uint32 ID; // 0 + char const* Name; // 1 + int32 Language; // 2 +}; + +struct NamesReservedEntry +{ + //uint32 ID; // 0 + char const* Name; // 1 + int32 Language; // 2 +}; + #define MAX_OVERRIDE_SPELL 10 struct OverrideSpellDataEntry diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index 5c24e6f938..9ca2ce2edd 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -88,6 +88,8 @@ char const MailTemplateEntryfmt[] = "nxxxxxxxxxxxxxxxxxssssssssssssssssx"; char const MapEntryfmt[] = "nxiixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxiii"; char const MapDifficultyEntryfmt[] = "diisxxxxxxxxxxxxxxxxiix"; char const MovieEntryfmt[] = "nxx"; +char const NamesProfanityEntryfmt[] = "dsi"; +char const NamesReservedEntryfmt[] = "dsi"; char const OverrideSpellDatafmt[] = "niiiiiiiiiix"; char const QuestFactionRewardfmt[] = "niiiiiiiiii"; char const QuestSortEntryfmt[] = "nxxxxxxxxxxxxxxxxx"; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a21960fc2b..e23daeae38 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17117,7 +17117,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) m_name = fields[2].GetString(); // check name limitations - if (ObjectMgr::CheckPlayerName(m_name) != CHAR_NAME_SUCCESS || + if (ObjectMgr::CheckPlayerName(m_name, GetSession()->GetSessionDbcLocale()) != CHAR_NAME_SUCCESS || (!GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RESERVEDNAME) && sObjectMgr->IsReservedName(m_name))) { diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 16c96ca742..020028e627 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -7562,7 +7562,7 @@ bool isValidString(const std::wstring& wstr, uint32 strictMask, bool numericOrSp return false; } -ResponseCodes ObjectMgr::CheckPlayerName(const std::string& name, bool create) +ResponseCodes ObjectMgr::CheckPlayerName(std::string const& name, LocaleConstant locale, bool create /*= false*/) { std::wstring wname; if (!Utf8toWStr(name, wname)) @@ -7584,7 +7584,7 @@ ResponseCodes ObjectMgr::CheckPlayerName(const std::string& name, bool create) if (wname[i] == wname[i-1] && wname[i] == wname[i-2]) return CHAR_NAME_THREE_CONSECUTIVE; - return CHAR_NAME_SUCCESS; + return ValidateName(name, locale); } bool ObjectMgr::IsValidCharterName(const std::string& name) @@ -7605,7 +7605,7 @@ bool ObjectMgr::IsValidCharterName(const std::string& name) return isValidString(wname, strictMask, true); } -PetNameInvalidReason ObjectMgr::CheckPetName(const std::string& name) +PetNameInvalidReason ObjectMgr::CheckPetName(const std::string& name, LocaleConstant locale) { std::wstring wname; if (!Utf8toWStr(name, wname)) @@ -7622,6 +7622,17 @@ PetNameInvalidReason ObjectMgr::CheckPetName(const std::string& name) if (!isValidString(wname, strictMask, false)) return PET_NAME_MIXED_LANGUAGES; + switch (ValidateName(name, locale)) + { + case CHAR_NAME_PROFANE: + return PET_NAME_PROFANE; + case CHAR_NAME_RESERVED: + return PET_NAME_RESERVED; + case RESPONSE_FAILURE: + return PET_NAME_INVALID; + default: + break; + } return PET_NAME_SUCCESS; } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index b84d95973c..875b5547ae 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1230,8 +1230,8 @@ class ObjectMgr bool IsReservedName(std::string const& name) const; // name with valid structure and symbols - static ResponseCodes CheckPlayerName(std::string const& name, bool create = false); - static PetNameInvalidReason CheckPetName(std::string const& name); + static ResponseCodes CheckPlayerName(std::string const& name, LocaleConstant locale, bool create = false); + static PetNameInvalidReason CheckPetName(std::string const& name, LocaleConstant locale); static bool IsValidCharterName(std::string const& name); static bool CheckDeclinedNames(const std::wstring& w_ownname, DeclinedName const& names); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index d4594be132..d2cf2d4bae 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -363,7 +363,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData) } // check name limitations - ResponseCodes res = ObjectMgr::CheckPlayerName(createInfo.Name, true); + ResponseCodes res = ObjectMgr::CheckPlayerName(createInfo.Name, GetSessionDbcLocale(), true); if (res != CHAR_NAME_SUCCESS) { SendCharCreate(res); @@ -1095,7 +1095,7 @@ void WorldSession::HandleCharRenameOpcode(WorldPacket& recvData) return; } - ResponseCodes res = ObjectMgr::CheckPlayerName(renameInfo.Name, true); + ResponseCodes res = ObjectMgr::CheckPlayerName(renameInfo.Name, GetSessionDbcLocale(), true); if (res != CHAR_NAME_SUCCESS) { SendCharRename(res, renameInfo); @@ -1394,7 +1394,7 @@ void WorldSession::HandleCharCustomize(WorldPacket& recvData) return; } - ResponseCodes res = ObjectMgr::CheckPlayerName(customizeInfo.Name, true); + ResponseCodes res = ObjectMgr::CheckPlayerName(customizeInfo.Name, GetSessionDbcLocale(), true); if (res != CHAR_NAME_SUCCESS) { SendCharCustomize(res, customizeInfo); @@ -1652,7 +1652,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recvData) return; } - ResponseCodes res = ObjectMgr::CheckPlayerName(factionChangeInfo.Name, true); + ResponseCodes res = ObjectMgr::CheckPlayerName(factionChangeInfo.Name, GetSessionDbcLocale(), true); if (res != CHAR_NAME_SUCCESS) { SendCharFactionChange(res, factionChangeInfo); diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 4495c044c6..8c3c3e9082 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -600,7 +600,7 @@ void WorldSession::HandlePetRename(WorldPacket& recvData) pet->GetOwnerGUID() != _player->GetGUID() || !pet->GetCharmInfo()) return; - PetNameInvalidReason res = ObjectMgr::CheckPetName(name); + PetNameInvalidReason res = ObjectMgr::CheckPetName(name, GetSessionDbcLocale()); if (res != PET_NAME_SUCCESS) { SendPetNameInvalid(res, name, NULL); diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index e3a0246633..0a47da1c78 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -426,7 +426,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s if (!normalizePlayerName(name)) name.clear(); - if (ObjectMgr::CheckPlayerName(name, true) == CHAR_NAME_SUCCESS) + if (ObjectMgr::CheckPlayerName(name, sWorld->GetDefaultDbcLocale(), true) == CHAR_NAME_SUCCESS) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME); stmt->setString(0, name); diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 230d407b71..65dd44f856 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -335,7 +335,7 @@ public: return false; } - if (ObjectMgr::CheckPlayerName(newName, true) != CHAR_NAME_SUCCESS) + if (ObjectMgr::CheckPlayerName(newName, target ? target->GetSession()->GetSessionDbcLocale() : sWorld->GetDefaultDbcLocale(), true) != CHAR_NAME_SUCCESS) { handler->SendSysMessage(LANG_BAD_VALUE); handler->SetSentErrorMessage(true); @@ -895,7 +895,7 @@ public: return false; } - if (ObjectMgr::CheckPlayerName(name, true) != CHAR_NAME_SUCCESS) + if (ObjectMgr::CheckPlayerName(name, sWorld->GetDefaultDbcLocale(), true) != CHAR_NAME_SUCCESS) { handler->PSendSysMessage(LANG_INVALID_CHARACTER_NAME); handler->SetSentErrorMessage(true); From 7fb63478bbe582c404dab4c840756f46d83b5403 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 6 Sep 2015 11:13:24 +0200 Subject: [PATCH 241/524] Buildsystem: Added dependency on revision_data to common project. Simply including the header in GitRevision.cpp is not enough to rebuild that file after updating sources Fixes having to build twice before GitRevision returns accurate info. (cherry picked from commit 65999801d3085387a00d7bf0a172be77571123c5) --- src/common/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 2339399e02..7f20fe36ab 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -83,6 +83,8 @@ add_library(common STATIC ${common_STAT_PCH_SRC} ) +add_dependencies(common revision_data.h) + # Generate precompiled header if (USE_COREPCH) add_cxx_pch(common ${common_STAT_PCH_HDR} ${common_STAT_PCH_SRC}) From 119c372dfff335657c670de50bf156842aba445c Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 1 Aug 2015 18:53:50 +0200 Subject: [PATCH 242/524] Dep: Silenced build warning in G3D header (cherry picked from commit 22653c99f874e189bda6670c42be38151b58e52b) (cherry picked from commit cce7f1adf2b76c59d8a07f080f23d4b125ed8f15) (cherry picked from commit d2795c98ddf37ab3a74752ecf54ad65af8541c25) --- dep/g3dlite/G3D-v9.0 hotfix5.diff | 28 ++++++++++++++++++++++++++++ dep/g3dlite/Readme.txt | 1 + dep/g3dlite/include/G3D/Quat.h | 10 +++++----- 3 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 dep/g3dlite/G3D-v9.0 hotfix5.diff diff --git a/dep/g3dlite/G3D-v9.0 hotfix5.diff b/dep/g3dlite/G3D-v9.0 hotfix5.diff new file mode 100644 index 0000000000..7bc4073ef6 --- /dev/null +++ b/dep/g3dlite/G3D-v9.0 hotfix5.diff @@ -0,0 +1,28 @@ +diff --git a/dep/g3dlite/include/G3D/Quat.h b/dep/g3dlite/include/G3D/Quat.h +index 04e11e0..b26708a 100644 +--- a/dep/g3dlite/include/G3D/Quat.h ++++ b/dep/g3dlite/include/G3D/Quat.h +@@ -335,8 +335,8 @@ public: + Note that q.pow(a).pow(b) == q.pow(a + b) + @cite Dam98 pg 21 + */ +- inline Quat pow(float x) const { +- return (log() * x).exp(); ++ inline Quat pow(float r) const { ++ return (log() * r).exp(); + } + + /** Make unit length in place */ +@@ -349,9 +349,9 @@ public: + the magnitude. + */ + Quat toUnit() const { +- Quat x = *this; +- x.unitize(); +- return x; ++ Quat copyOfThis = *this; ++ copyOfThis.unitize(); ++ return copyOfThis; + } + + /** diff --git a/dep/g3dlite/Readme.txt b/dep/g3dlite/Readme.txt index 682a2404d9..bcd418d1d0 100644 --- a/dep/g3dlite/Readme.txt +++ b/dep/g3dlite/Readme.txt @@ -14,3 +14,4 @@ G3D-v9.0 hotfix1.diff - 2014-08-22 - updated to G3D9, reapplied previous patches G3D-v9.0 hotfix2.diff - 2014-08-23 - fix some -Wconversion warnings G3D-v9.0 hotfix3.diff - 2015-06-28 - fix some warnings G3D-v9.0 hotfix4.diff - 2015-07-02 - backport G3D10 fix +G3D-v9.0 hotfix5.diff - 2015-07-31 - fix MSVC 2015 warning: dep/g3dlite/include/G3D/Quat.h(352): warning C4458: declaration of 'x' hides class member diff --git a/dep/g3dlite/include/G3D/Quat.h b/dep/g3dlite/include/G3D/Quat.h index 04e11e084a..73e661a4f4 100644 --- a/dep/g3dlite/include/G3D/Quat.h +++ b/dep/g3dlite/include/G3D/Quat.h @@ -335,8 +335,8 @@ public: Note that q.pow(a).pow(b) == q.pow(a + b) @cite Dam98 pg 21 */ - inline Quat pow(float x) const { - return (log() * x).exp(); + inline Quat pow(float r) const { + return (log() * r).exp(); } /** Make unit length in place */ @@ -349,9 +349,9 @@ public: the magnitude. */ Quat toUnit() const { - Quat x = *this; - x.unitize(); - return x; + Quat copyOfThis = *this; + copyOfThis.unitize(); + return copyOfThis; } /** From a968595977b3c2f738a666cd270a00b75e54bf62 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Tue, 28 Jul 2015 19:09:20 +0200 Subject: [PATCH 243/524] Core/PacketIO: fixed instance binding of gamemasters (cherry picked from commit 231fb1d322bc1c91f9227d43d3ef672605232154) --- src/server/game/Entities/Player/Player.cpp | 8 +++++--- src/server/game/Maps/Map.cpp | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e23daeae38..f47454899f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -18829,9 +18829,11 @@ void Player::BindToInstance() WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4); data << uint32(0); GetSession()->SendPacket(&data); - BindToInstance(mapSave, true); - - GetSession()->SendCalendarRaidLockout(mapSave, true); + if (!IsGameMaster()) + { + BindToInstance(mapSave, true); + GetSession()->SendCalendarRaidLockout(mapSave, true); + } } void Player::SetPendingBind(uint32 instanceId, uint32 bindTimer) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 5054ff36bf..4893b742a1 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3249,8 +3249,8 @@ void InstanceMap::PermBindAllPlayers(Player* source) WorldPacket data(SMSG_INSTANCE_SAVE_CREATED, 4); data << uint32(0); player->GetSession()->SendPacket(&data); - - player->GetSession()->SendCalendarRaidLockout(save, true); + if (!player->IsGameMaster()) + player->GetSession()->SendCalendarRaidLockout(save, true); } // if the leader is not in the instance the group will not get a perm bind From bc187f8760cc892340ec4d6b8dd29ff4aad8b883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Gir=C3=B3n?= Date: Sun, 12 Jul 2015 23:08:59 +0200 Subject: [PATCH 244/524] Script/Commands: Add some sanity checks to cast commands Closes #15061 (cherry picked from commit 15dec9a76ca56930c6764e8483cbf4ce8aae4f90) --- src/server/scripts/Commands/cs_cast.cpp | 91 +++++++++---------------- 1 file changed, 34 insertions(+), 57 deletions(-) diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp index 59c919abd2..f45e73b7c5 100644 --- a/src/server/scripts/Commands/cs_cast.cpp +++ b/src/server/scripts/Commands/cs_cast.cpp @@ -51,6 +51,25 @@ public: return commandTable; } + static bool CheckSpellExistsAndIsValid(ChatHandler* handler, uint32 spellId) + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); + if (!spellInfo) + { + handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND); + handler->SetSentErrorMessage(true); + return false; + } + + if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer())) + { + handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId); + handler->SetSentErrorMessage(true); + return false; + } + return true; + } + static bool HandleCastCommand(ChatHandler* handler, char const* args) { if (!*args) @@ -69,20 +88,8 @@ public: if (!spellId) return false; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - if (!spellInfo) - { - handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND); - handler->SetSentErrorMessage(true); + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; - } - - if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer())) - { - handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId); - handler->SetSentErrorMessage(true); - return false; - } char* triggeredStr = strtok(NULL, " "); if (triggeredStr) @@ -109,15 +116,13 @@ public: return false; } - // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form uint32 spellId = handler->extractSpellIdFromLink((char*)args); - if (!spellId || !sSpellMgr->GetSpellInfo(spellId)) - { - handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND); - handler->SetSentErrorMessage(true); + if (!spellId) + return false; + + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; - } char* triggeredStr = strtok(NULL, " "); if (triggeredStr) @@ -144,20 +149,8 @@ public: if (!spellId) return false; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - if (!spellInfo) - { - handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND); - handler->SetSentErrorMessage(true); + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; - } - - if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer())) - { - handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId); - handler->SetSentErrorMessage(true); - return false; - } char* distStr = strtok(NULL, " "); @@ -190,29 +183,15 @@ public: return false; Unit* target = handler->getSelectedUnit(); - if (!target) - { - handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); - handler->SetSentErrorMessage(true); - return false; - } // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form uint32 spellId = handler->extractSpellIdFromLink((char*)args); if (!spellId) return false; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); - if (!spellInfo) + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; - if (!SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer())) - { - handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId); - handler->SetSentErrorMessage(true); - return false; - } - target->CastSpell(target, spellId, false); return true; @@ -237,12 +216,11 @@ public: // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form uint32 spellId = handler->extractSpellIdFromLink((char*)args); - if (!spellId || !sSpellMgr->GetSpellInfo(spellId)) - { - handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND); - handler->SetSentErrorMessage(true); + if (!spellId) + return false; + + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; - } char* triggeredStr = strtok(NULL, " "); if (triggeredStr) @@ -271,12 +249,11 @@ public: // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form uint32 spellId = handler->extractSpellIdFromLink((char*)args); - if (!spellId || !sSpellMgr->GetSpellInfo(spellId)) - { - handler->PSendSysMessage(LANG_COMMAND_NOSPELLFOUND); - handler->SetSentErrorMessage(true); + if (!spellId) + return false; + + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; - } char* posX = strtok(NULL, " "); char* posY = strtok(NULL, " "); From 072375dbd8e8de67a6252361ad215c2a21cb4bd4 Mon Sep 17 00:00:00 2001 From: StormBytePP Date: Sat, 22 Aug 2015 16:52:12 +0200 Subject: [PATCH 245/524] Core/Spells: Fixed gcc-4.7.x compile (cherry picked from commit 595bb841a9f9b71bae0fcbcdfb0eb0c38143c7fc) --- src/server/game/Spells/Spell.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 1aac88ac60..7def0f5d95 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -583,6 +583,8 @@ class Spell // Targets store structures and data struct TargetInfo { + // a bug in gcc-4.7 needs a destructor to call move operator instead of copy operator in std::vector remove + ~TargetInfo() { } ObjectGuid targetGUID; uint64 timeDelay; SpellMissInfo missCondition:8; From f56bb2e0a6973b7c9ea2800af04ada9f889c97c7 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 1 Sep 2015 16:59:28 +0200 Subject: [PATCH 246/524] Core/Spells: Extended spell required shapeshift masks to 64 bits and defined a new spell attribute (cherry picked from commit 191d2c7262d3680776579055a063a433add54277) --- src/server/game/DataStores/DBCStructure.h | 6 ++---- src/server/game/DataStores/DBCfmt.h | 2 +- src/server/game/Entities/Player/Player.cpp | 2 +- .../game/Spells/Auras/SpellAuraEffects.cpp | 17 ++++++----------- src/server/game/Spells/SpellInfo.cpp | 6 +++--- src/server/game/Spells/SpellInfo.h | 4 ++-- src/server/game/Spells/SpellMgr.cpp | 6 +++--- 7 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 17e6067047..dc4ad55d9c 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1651,10 +1651,8 @@ struct SpellEntry uint32 AttributesEx5; // 9 m_attributesExE uint32 AttributesEx6; // 10 m_attributesExF uint32 AttributesEx7; // 11 m_attributesExG - uint32 Stances; // 12 m_shapeshiftMask - // uint32 unk_320_2; // 13 3.2.0 - uint32 StancesNot; // 14 m_shapeshiftExclude - // uint32 unk_320_3; // 15 3.2.0 + uint32 Stances[2]; // 12 m_shapeshiftMask + uint32 StancesNot[2]; // 14 m_shapeshiftExclude uint32 Targets; // 16 m_targets uint32 TargetCreatureType; // 17 m_targetCreatureType uint32 RequiresSpellFocus; // 18 m_requiresSpellFocus diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index 9ca2ce2edd..c75c0fff62 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -110,7 +110,7 @@ char const SpellDifficultyfmt[] = "niiii"; const std::string CustomSpellDifficultyfmt = "ppppp"; const std::string CustomSpellDifficultyIndex = "id"; char const SpellDurationfmt[] = "niii"; -char const SpellEntryfmt[] = "niiiiiiiiiiiixixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiixxfffxx"; +char const SpellEntryfmt[] = "niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiixxfffxx"; const std::string CustomSpellEntryfmt = "papppppppppppapapaaaaaaaaaaapaaapapppppppaaaaapaapaaaaaaaaaaaaaaaaaappppppppppppppppppppppppppppppppppppaaappppppppppppaaapppppppppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaappppppppapppaaaaappaaaaaaa"; const std::string CustomSpellEntryIndex = "Id"; char const SpellFocusObjectfmt[] = "nxxxxxxxxxxxxxxxxx"; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f47454899f..0bc9eba653 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3912,7 +3912,7 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const // note: form passives activated with shapeshift spells be implemented by HandleShapeshiftBoosts instead of spell_learn_spell // talent dependent passives activated at form apply have proper stance data ShapeshiftForm form = GetShapeshiftForm(); - bool need_cast = (!spellInfo->Stances || (form && (spellInfo->Stances & (1 << (form - 1)))) || + bool need_cast = (!spellInfo->Stances || (form && (spellInfo->Stances & (UI64LIT(1) << (form - 1)))) || (!form && spellInfo->HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT))); //Check CasterAuraStates diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 0cc075a3dd..5e70d953be 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1134,7 +1134,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE))) continue; - if (spellInfo->Stances & (1<<(GetMiscValue()-1))) + if (spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1))) target->CastSpell(target, itr->first, true, NULL, this); } @@ -1148,7 +1148,8 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(glyph->SpellId); if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE))) continue; - if (spellInfo->Stances & (1<<(GetMiscValue()-1))) + + if (spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1))) target->CastSpell(target, glyph->SpellId, true, NULL, this); } } @@ -1158,7 +1159,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const if (target->ToPlayer()->HasSpell(17007)) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(24932); - if (spellInfo && spellInfo->Stances & (1<<(GetMiscValue()-1))) + if (spellInfo && spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1))) target->CastSpell(target, 24932, true, NULL, this); } // Improved Barkskin - apply/remove armor bonus due to shapeshift @@ -1278,14 +1279,8 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const for (Unit::AuraApplicationMap::iterator itr = tAuras.begin(); itr != tAuras.end();) { // Use the new aura to see on what stance the target will be - uint32 newStance = 0; - if (newAura) - { - if (newAura->GetMiscValue() > 0 && newAura->GetMiscValue() <= 32) //Not null and GetMiscValue is not == FORM_NONE - newStance = 1 << (newAura->GetMiscValue() - 1); - else - TC_LOG_ERROR("spell.aura", "newAura->GetMiscValue() returned value %i for SpellID: %u when it was expecting a value in range [0..31] for a bitshift", newAura->GetMiscValue(), newAura->GetId()); - } + uint64 newStance = newAura ? (UI64LIT(1) << (newAura->GetMiscValue() - 1)) : 0; + // If the stances are not compatible with the spell, remove it if (itr->second->GetBase()->IsRemovedOnShapeLost(target) && !(itr->second->GetBase()->GetSpellInfo()->Stances & newStance)) target->RemoveAura(itr); diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index ea5e4c8df0..e324f136a0 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -776,8 +776,8 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry) AttributesEx6 = spellEntry->AttributesEx6; AttributesEx7 = spellEntry->AttributesEx7; AttributesCu = 0; - Stances = spellEntry->Stances; - StancesNot = spellEntry->StancesNot; + Stances = MAKE_PAIR64(spellEntry->Stances[0], spellEntry->Stances[1]); + StancesNot = MAKE_PAIR64(spellEntry->StancesNot[0], spellEntry->StancesNot[1]); Targets = spellEntry->Targets; TargetCreatureType = spellEntry->TargetCreatureType; RequiresSpellFocus = spellEntry->RequiresSpellFocus; @@ -1309,7 +1309,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const (Effects[0].Effect == SPELL_EFFECT_LEARN_SPELL || Effects[1].Effect == SPELL_EFFECT_LEARN_SPELL || Effects[2].Effect == SPELL_EFFECT_LEARN_SPELL)) return SPELL_CAST_OK; - uint32 stanceMask = (form ? 1 << (form - 1) : 0); + uint64 stanceMask = (form ? UI64LIT(1) << (form - 1) : 0); if (stanceMask & StancesNot) // can explicitly not be cast in this stance return SPELL_FAILED_NOT_SHAPESHIFT; diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index cfa9877405..ecb55b25af 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -306,8 +306,8 @@ public: uint32 AttributesEx6; uint32 AttributesEx7; uint32 AttributesCu; - uint32 Stances; - uint32 StancesNot; + uint64 Stances; + uint64 StancesNot; uint32 Targets; uint32 TargetCreatureType; uint32 RequiresSpellFocus; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 55d0ad0b4d..6305d0a456 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3182,13 +3182,13 @@ void SpellMgr::LoadSpellInfoCorrections() // Master Shapeshifter: missing stance data for forms other than bear - bear version has correct data // To prevent aura staying on target after talent unlearned case 48420: - spellInfo->Stances = 1 << (FORM_CAT - 1); + spellInfo->Stances = UI64LIT(1) << (FORM_CAT - 1); break; case 48421: - spellInfo->Stances = 1 << (FORM_MOONKIN - 1); + spellInfo->Stances = UI64LIT(1) << (FORM_MOONKIN - 1); break; case 48422: - spellInfo->Stances = 1 << (FORM_TREE - 1); + spellInfo->Stances = UI64LIT(1) << (FORM_TREE - 1); break; case 51466: // Elemental Oath (Rank 1) case 51470: // Elemental Oath (Rank 2) From 8dc10022a6e34e510a5e92ecbeaf3fc3459de3d2 Mon Sep 17 00:00:00 2001 From: David Carlos Manuelda Date: Tue, 11 Aug 2015 05:25:53 +0200 Subject: [PATCH 247/524] Fixed boss evade and doors closed by cr4st. Should close #6377 and #15239 (cherry picked from commit e430f3f61ae45ca0e8e251f96a1605bdb9299eb1) --- .../EasternKingdoms/Stratholme/boss_baron_rivendare.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index 8d7d43048b..237a82cb47 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -106,7 +106,8 @@ public: void AttackStart(Unit* who) override { //can't use entercombat(), boss' dmg aura sets near players in combat, before entering the room's door - instance->SetData(TYPE_BARON, IN_PROGRESS); + if (instance && instance->GetData(TYPE_BARON) == NOT_STARTED) + instance->SetData(TYPE_BARON, IN_PROGRESS); ScriptedAI::AttackStart(who); } From a410072d6db23769bcf46609c2a540b545d10e73 Mon Sep 17 00:00:00 2001 From: David Carlos Manuelda Date: Tue, 11 Aug 2015 12:48:33 +0200 Subject: [PATCH 248/524] Removed unneeded nullptr check (cherry picked from commit 20215a8c421fd93d00233213966399a0c76e626a) --- .../scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index 237a82cb47..f6f6dab866 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -106,7 +106,7 @@ public: void AttackStart(Unit* who) override { //can't use entercombat(), boss' dmg aura sets near players in combat, before entering the room's door - if (instance && instance->GetData(TYPE_BARON) == NOT_STARTED) + if (instance->GetData(TYPE_BARON) == NOT_STARTED) instance->SetData(TYPE_BARON, IN_PROGRESS); ScriptedAI::AttackStart(who); } From b8e86b9b7a0983b3bc610513531944e68c01c911 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 13 Sep 2015 11:13:04 +0200 Subject: [PATCH 249/524] Core/DBLayer: Allowed using GetDouble for SUM results instead of requiring string conversions (cherry picked from commit 3109ab2da08d094df97724355bff681d7951e576) --- src/server/database/Database/Field.h | 36 +++++++++++++++++-- src/server/game/Handlers/CharacterHandler.cpp | 7 ++-- src/server/scripts/Commands/cs_misc.cpp | 12 ++----- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h index 42a842e628..72364f2c03 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -23,6 +23,36 @@ #include +/** + @class Field + + @brief Class used to access individual fields of database query result + + Guideline on field type matching: + + | MySQL type | method to use | + |------------------------|----------------------------------------| + | TINYINT | GetBool, GetInt8, GetUInt8 | + | SMALLINT | GetInt16, GetUInt16 | + | MEDIUMINT, INT | GetInt32, GetUInt32 | + | BIGINT | GetInt64, GetUInt64 | + | FLOAT | GetFloat | + | DOUBLE, DECIMAL | GetDouble | + | CHAR, VARCHAR, | GetCString, GetString | + | TINYTEXT, MEDIUMTEXT, | GetCString, GetString | + | TEXT, LONGTEXT | GetCString, GetString | + | TINYBLOB, MEDIUMBLOB, | GetBinary, GetString | + | BLOB, LONGBLOB | GetBinary, GetString | + | BINARY, VARBINARY | GetBinary | + + Return types of aggregate functions: + + | Function | Type | + |----------|-------------------| + | MIN, MAX | Same as the field | + | SUM, AVG | DECIMAL | + | COUNT | BIGINT | +*/ class Field { friend class ResultSet; @@ -214,15 +244,15 @@ class Field return 0.0f; #ifdef TRINITY_DEBUG - if (!IsType(MYSQL_TYPE_DOUBLE)) + if (!IsType(MYSQL_TYPE_DOUBLE) && !IsType(MYSQL_TYPE_NEWDECIMAL)) { - TC_LOG_WARN("sql.sql", "Warning: GetDouble() on non-double field %s.%s (%s.%s) at index %u. Using type: %s.", + TC_LOG_WARN("sql.sql", "Warning: GetDouble() on non-double/non-decimal field %s.%s (%s.%s) at index %u. Using type: %s.", meta.TableAlias, meta.Alias, meta.TableName, meta.Name, meta.Index, meta.Type); return 0.0f; } #endif - if (data.raw) + if (data.raw && !IsType(MYSQL_TYPE_NEWDECIMAL)) return *reinterpret_cast(data.value); return static_cast(atof((char*)data.value)); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index d2cf2d4bae..e5b32f548f 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -433,14 +433,11 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte } case 1: { - uint16 acctCharCount = 0; + uint64 acctCharCount = 0; if (result) { Field* fields = result->Fetch(); - // SELECT SUM(x) is MYSQL_TYPE_NEWDECIMAL - needs to be read as string - const char* ch = fields[0].GetCString(); - if (ch) - acctCharCount = atoi(ch); + acctCharCount = uint64(fields[0].GetDouble()); } if (acctCharCount >= sWorld->getIntConfig(CONFIG_CHARACTERS_PER_ACCOUNT)) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index b22f56ef92..b81d6152c0 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1773,21 +1773,13 @@ public: PreparedQueryResult result6 = CharacterDatabase.Query(stmt4); if (result6) { - // Define the variables, so the compiler knows they exist - uint32 rmailint = 0; - - // Fetch the fields - readmail is a SUM(x) and given out as char! Thus... - // ... while totalmail is a COUNT(x), which is given out as INt64, which we just convert on fetch... Field* fields = result6->Fetch(); - std::string readmail = fields[0].GetString(); + uint32 readmail = uint32(fields[0].GetDouble()); uint32 totalmail = uint32(fields[1].GetUInt64()); - // ... we have to convert it from Char to int. We can use totalmail as it is - rmailint = atoul(readmail.c_str()); - // Output XXI. LANG_INFO_CHR_MAILS if at least one mail is given if (totalmail >= 1) - handler->PSendSysMessage(LANG_PINFO_CHR_MAILS, rmailint, totalmail); + handler->PSendSysMessage(LANG_PINFO_CHR_MAILS, readmail, totalmail); } return true; From c5d36a318337ad8c35cd6d8adac3c97b89a82ee5 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 19 Sep 2015 18:25:43 +0200 Subject: [PATCH 250/524] Core/Misc: Added a few stl header includes to Common.h (cherry picked from commit 89b902b4e0d0016accd9540ca133519995a0b123) --- src/common/Common.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/common/Common.h b/src/common/Common.h index 54b735f0ca..cd9301e633 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -21,7 +21,6 @@ #include "Define.h" -#include #include #include #include @@ -32,14 +31,17 @@ #include #include +#include #include #include #include +#include #include #include #include #include #include +#include #include "Debugging/Errors.h" From 3a4f33d007f3898f9fd1be5a0ccfda3b0451c979 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sun, 20 Sep 2015 15:57:21 +0200 Subject: [PATCH 251/524] Scripts/Ulduar/Algalon: fixed achievement "He Feeds On Your Tears" Ref #6157 (cherry picked from commit d68e3325d5a09328425b8ae9855f3f5936ff24f9) --- .../Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 25d1e21426..7618a0b915 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -242,7 +242,7 @@ class ActivateLivingConstellation : public BasicEvent { } - bool Execute(uint64 execTime, uint32 /*diff*/) + bool Execute(uint64 execTime, uint32 /*diff*/) override { if (!_instance || _instance->GetBossState(BOSS_ALGALON) != IN_PROGRESS) return true; // delete event @@ -264,7 +264,7 @@ class CosmicSmashDamageEvent : public BasicEvent { } - bool Execute(uint64 /*execTime*/, uint32 /*diff*/) + bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override { _caster->CastSpell((Unit*)NULL, SPELL_COSMIC_SMASH_TRIGGERED, TRIGGERED_FULL_MASK); return true; @@ -281,7 +281,7 @@ class SummonUnleashedDarkMatter : public BasicEvent { } - bool Execute(uint64 execTime, uint32 /*diff*/) + bool Execute(uint64 execTime, uint32 /*diff*/) override { _caster->CastSpell((Unit*)NULL, SPELL_SUMMON_UNLEASHED_DARK_MATTER, TRIGGERED_FULL_MASK); _caster->m_Events.AddEvent(this, execTime + 30000); @@ -322,7 +322,7 @@ class boss_algalon_the_observer : public CreatureScript void KilledUnit(Unit* victim) override { - if (victim->GetTypeId() == TYPEID_UNIT) + if (victim->GetTypeId() == TYPEID_PLAYER) { _fedOnTears = true; if (!_hasYelled) From 635dc9c02a4462ea8879f9019acdb23430dbc663 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 29 Sep 2015 00:11:26 +0200 Subject: [PATCH 252/524] Core/Players: Fixed automatic learning skills gained from learning spells when leveling Closes #15391 (cherry picked from commit 3fceabfa113983549b5784dfd3f42259a53c258b) --- src/server/game/Entities/Player/Player.cpp | 51 ++++++++++++---------- src/server/game/Entities/Player/Player.h | 4 +- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 0bc9eba653..232f7cb58d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3551,7 +3551,7 @@ bool Player::AddTalent(uint32 spellId, uint8 spec, bool learning) return false; } -bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/, bool fromSkill /*= false*/) +bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading /*= false*/, uint32 fromSkill /*= 0*/) { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) @@ -3809,10 +3809,10 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent SkillLineAbilityMapBounds skill_bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spellId); - // add dependent skills if this spell is not learned from adding skill already - if (!fromSkill) + if (SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId)) { - if (SpellLearnSkillNode const* spellLearnSkill = sSpellMgr->GetSpellLearnSkill(spellId)) + // add dependent skills if this spell is not learned from adding skill already + if (spellLearnSkill->skill != fromSkill) { uint32 skill_value = GetPureSkillValue(spellLearnSkill->skill); uint32 skill_max_value = GetPureMaxSkillValue(spellLearnSkill->skill); @@ -3827,26 +3827,29 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent SetSkill(spellLearnSkill->skill, spellLearnSkill->step, skill_value, skill_max_value); } - else + } + else + { + // not ranked skills + for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx) { - // not ranked skills - for (SkillLineAbilityMap::const_iterator _spell_idx = skill_bounds.first; _spell_idx != skill_bounds.second; ++_spell_idx) - { - SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); - if (!pSkill) - continue; + SkillLineEntry const* pSkill = sSkillLineStore.LookupEntry(_spell_idx->second->skillId); + if (!pSkill) + continue; - ///@todo: confirm if rogues start with lockpicking skill at level 1 but only receive the spell to use it at level 16 - // Also added for runeforging. It's already confirmed this happens upon learning for Death Knights, not from character creation. - if ((_spell_idx->second->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(pSkill->id)) || ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0)) - LearnDefaultSkill(pSkill->id, 0); + if (pSkill->id == fromSkill) + continue; - if (pSkill->id == SKILL_MOUNTS && !Has310Flyer(false)) - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) - if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED && - spellInfo->Effects[i].CalcValue() == 310) - SetHas310Flyer(true); - } + ///@todo: confirm if rogues start with lockpicking skill at level 1 but only receive the spell to use it at level 16 + // Also added for runeforging. It's already confirmed this happens upon learning for Death Knights, not from character creation. + if ((_spell_idx->second->AutolearnType == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(pSkill->id)) || ((pSkill->id == SKILL_LOCKPICKING || pSkill->id == SKILL_RUNEFORGING) && _spell_idx->second->max_value == 0)) + LearnDefaultSkill(pSkill->id, 0); + + if (pSkill->id == SKILL_MOUNTS && !Has310Flyer(false)) + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + if (spellInfo->Effects[i].ApplyAuraName == SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED && + spellInfo->Effects[i].CalcValue() == 310) + SetHas310Flyer(true); } } @@ -3919,7 +3922,7 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const return need_cast && (!spellInfo->CasterAuraState || HasAuraState(AuraStateType(spellInfo->CasterAuraState))); } -void Player::LearnSpell(uint32 spell_id, bool dependent, bool fromSkill /*= false*/) +void Player::LearnSpell(uint32 spell_id, bool dependent, uint32 fromSkill /*= 0*/) { PlayerSpellMap::iterator itr = m_spells.find(spell_id); @@ -22997,9 +23000,9 @@ void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue) RemoveSpell(ability->spellId); // need learn else if (!IsInWorld()) - AddSpell(ability->spellId, true, true, true, false, false, true); + AddSpell(ability->spellId, true, true, true, false, false, ability->skillId); else - LearnSpell(ability->spellId, true, true); + LearnSpell(ability->spellId, true, ability->skillId); } } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0fc8e716ad..75f04cb0d7 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1595,8 +1595,8 @@ class Player : public Unit, public GridObject void SendProficiency(ItemClass itemClass, uint32 itemSubclassMask); void SendInitialSpells(); - bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, bool fromSkill = false); - void LearnSpell(uint32 spell_id, bool dependent, bool fromSkill = false); + bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, uint32 fromSkill = 0); + void LearnSpell(uint32 spell_id, bool dependent, uint32 fromSkill = 0); void RemoveSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true); void ResetSpells(bool myClassOnly = false); void LearnCustomSpells(); From f7e6f7a1054a1fbd44491dd347d46d7389d8b704 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sat, 31 Oct 2015 17:59:56 +0000 Subject: [PATCH 253/524] DB/Text: Real texts and sounds ids for Headless Horseman --- sql/updates/world/2015_10_31_00_world.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2015_10_31_00_world.sql diff --git a/sql/updates/world/2015_10_31_00_world.sql b/sql/updates/world/2015_10_31_00_world.sql new file mode 100644 index 0000000000..edae60f42d --- /dev/null +++ b/sql/updates/world/2015_10_31_00_world.sql @@ -0,0 +1,7 @@ +UPDATE `creature_text` SET `text`='It is over, your search is done. Let fate choose now, the righteous one.', `sound`=11961,`BroadcastTextId`=22261 WHERE `entry`=23682 AND `groupid`=0 AND `id`=0; -- Summon +UPDATE `creature_text` SET `text`='Here\'s my body, fit and pure! Now, your blackened souls I\'ll cure!', `sound`=12567,`BroadcastTextId`=22271 WHERE `entry`=23682 AND `groupid`=1 AND `id`=0; -- Agro +UPDATE `creature_text` SET `text`='Harken, cur! Tis you I spurn! Now feel... the burn!', `type`=12,`BroadcastTextId`=22587 WHERE `entry`=23682 AND `groupid`=2 AND `id`=0; -- Conflaguate +UPDATE `creature_text` SET `text`='Soldiers arise, stand and fight! Bring victory at last to this fallen knight!', `sound`=11963,`BroadcastTextId`=23861 WHERE `entry`=23682 AND `groupid`=3 AND `id`=0; -- Summon Pumkins +UPDATE `creature_text` SET `text`='This end have I reached before. What new adventure lies in store?', `sound`=11964,`BroadcastTextId`=23455 WHERE `entry`=23682 AND `groupid`=4 AND `id`=0; -- Death +UPDATE `creature_text` SET `text`='So eager you are, for my blood to spill. Yet to vanquish me, \'tis my head you must kill!', `sound`=11969, `BroadcastTextId`=22757 WHERE `entry`=23775 AND `groupid`=0 AND `id`=0; -- Loose Head +UPDATE `creature_text` SET `text`='Your body lies beaten, battered and broken! Let my curse be your own, fate has spoken!', `sound`=11962,`BroadcastTextId`=40546 WHERE `entry`=23775 AND `groupid`=1 AND `id`=0; -- PLayer Death From df88c7f2789e5e07cc4ec9ea400dacfea518a102 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sun, 4 Oct 2015 14:53:05 +0200 Subject: [PATCH 254/524] Core/Misc: removed some useless map checks (cherry picked from commit cf1e80e3d09067ca4d0078a8113a09227a9f91ae) --- src/server/game/Chat/Chat.cpp | 2 +- src/server/game/Conditions/ConditionMgr.cpp | 2 +- src/server/game/Entities/Player/Player.cpp | 4 +- src/server/game/Miscellaneous/Formulas.h | 2 +- src/server/scripts/Commands/cs_instance.cpp | 28 ++++---- .../EasternKingdoms/Gnomeregan/gnomeregan.cpp | 4 -- .../Karazhan/boss_netherspite.cpp | 28 ++++---- .../EasternKingdoms/Karazhan/karazhan.cpp | 40 +++++------ .../MagistersTerrace/magisters_terrace.cpp | 28 +------- .../ScarletEnclave/chapter5.cpp | 4 +- .../boss_headless_horseman.cpp | 6 +- .../SunwellPlateau/boss_kalecgos.cpp | 14 +--- .../EscapeFromDurnholdeKeep/old_hillsbrad.cpp | 12 ++-- .../RazorfenKraul/instance_razorfen_kraul.cpp | 10 +-- .../RuinsOfAhnQiraj/boss_ossirian.cpp | 4 +- .../Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp | 17 +---- .../Ahnkahet/boss_herald_volazj.cpp | 6 +- .../Ahnkahet/boss_jedoga_shadowseeker.cpp | 2 +- .../ObsidianSanctum/obsidian_sanctum.cpp | 56 +++++++--------- .../boss_grand_champions.cpp | 8 +-- .../IcecrownCitadel/boss_festergut.cpp | 18 ++--- .../IcecrownCitadel/boss_rotface.cpp | 18 ++--- .../Northrend/Naxxramas/boss_gothik.cpp | 66 ++++++++----------- .../Ulduar/Ulduar/boss_general_vezax.cpp | 54 +++++++-------- .../scripts/OutdoorPvP/OutdoorPvPSI.cpp | 10 --- .../boss_shirrak_the_dead_watcher.cpp | 3 +- .../boss_grandmaster_vorpil.cpp | 3 +- .../SerpentShrine/boss_lady_vashj.cpp | 3 +- .../boss_leotheras_the_blind.cpp | 3 +- .../SerpentShrine/boss_lurker_below.cpp | 15 ++--- 30 files changed, 162 insertions(+), 308 deletions(-) diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 259e51eb47..161aefdfc6 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -308,7 +308,7 @@ bool ChatHandler::ExecuteCommandInTable(std::vector const& table, c fullcmd.c_str(), player->GetName().c_str(), player->GetGUID().ToString().c_str(), m_session->GetAccountId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), - player->GetMap() ? player->GetMap()->GetMapName() : "Unknown", + player->FindMap() ? player->FindMap()->GetMapName() : "Unknown", areaId, areaName.c_str(), zoneName.c_str(), (player->GetSelectedUnit()) ? player->GetSelectedUnit()->GetName().c_str() : "", guid.ToString().c_str()); diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index f726032685..b19b0068be 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -231,7 +231,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) case CONDITION_INSTANCE_INFO: { Map* map = object->GetMap(); - if (map && map->IsDungeon()) + if (map->IsDungeon()) { if (InstanceScript const* instance = ((InstanceMap*)map)->GetInstanceScript()) { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 232f7cb58d..e9f9fdace3 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6920,7 +6920,7 @@ void Player::RewardReputation(Unit* victim, float rate) { // support for: Championing - http://www.wowwiki.com/Championing Map const* map = GetMap(); - if (map && map->IsNonRaidDungeon()) + if (map->IsNonRaidDungeon()) if (LFGDungeonEntry const* dungeon = GetLFGDungeon(map->GetId(), map->GetDifficulty())) if (dungeon->reclevel == 80) ChampioningFaction = GetChampioningFaction(); @@ -20264,7 +20264,7 @@ void Player::ResetInstances(uint8 method, bool isRaid) // if the map is loaded, reset it Map* map = sMapMgr->FindMap(p->GetMapId(), p->GetInstanceId()); if (map && map->IsDungeon()) - if (!((InstanceMap*)map)->Reset(method)) + if (!map->ToInstanceMap()->Reset(method)) { ++itr; continue; diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h index aa9a738b5d..6edc3d74a5 100644 --- a/src/server/game/Miscellaneous/Formulas.h +++ b/src/server/game/Miscellaneous/Formulas.h @@ -175,7 +175,7 @@ namespace Trinity if (creature->isElite()) { // Elites in instances have a 2.75x XP bonus instead of the regular 2x world bonus. - if (u->GetMap() && u->GetMap()->IsDungeon()) + if (u->GetMap()->IsDungeon()) xpMod *= 2.75f; else xpMod *= 2.0f; diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp index e51b7bcc59..5651aaa12e 100644 --- a/src/server/scripts/Commands/cs_instance.cpp +++ b/src/server/scripts/Commands/cs_instance.cpp @@ -168,22 +168,22 @@ public: static bool HandleInstanceSaveDataCommand(ChatHandler* handler, char const* /*args*/) { Player* player = handler->GetSession()->GetPlayer(); - Map* map = player->GetMap(); - if (!map->IsDungeon()) + InstanceMap* map = player->GetMap()->ToInstanceMap(); + if (!map) { handler->PSendSysMessage(LANG_NOT_DUNGEON); handler->SetSentErrorMessage(true); return false; } - if (!((InstanceMap*)map)->GetInstanceScript()) + if (!map->GetInstanceScript()) { handler->PSendSysMessage(LANG_NO_INSTANCE_DATA); handler->SetSentErrorMessage(true); return false; } - ((InstanceMap*)map)->GetInstanceScript()->SaveToDB(); + map->GetInstanceScript()->SaveToDB(); return true; } @@ -225,15 +225,15 @@ public: return false; } - Map* map = player->GetMap(); - if (!map->IsDungeon()) + InstanceMap* map = player->GetMap()->ToInstanceMap(); + if (!map) { handler->PSendSysMessage(LANG_NOT_DUNGEON); handler->SetSentErrorMessage(true); return false; } - if (!map->ToInstanceMap()->GetInstanceScript()) + if (!map->GetInstanceScript()) { handler->PSendSysMessage(LANG_NO_INSTANCE_DATA); handler->SetSentErrorMessage(true); @@ -244,14 +244,14 @@ public: state = atoi(param2); // Reject improper values. - if (state > TO_BE_DECIDED || encounterId > map->ToInstanceMap()->GetInstanceScript()->GetEncounterCount()) + if (state > TO_BE_DECIDED || encounterId > map->GetInstanceScript()->GetEncounterCount()) { handler->PSendSysMessage(LANG_BAD_VALUE); handler->SetSentErrorMessage(true); return false; } - map->ToInstanceMap()->GetInstanceScript()->SetBossState(encounterId, (EncounterState)state); + map->GetInstanceScript()->SetBossState(encounterId, EncounterState(state)); std::string stateName = InstanceScript::GetBossStateName(state); handler->PSendSysMessage(LANG_COMMAND_INST_SET_BOSS_STATE, encounterId, state, stateName); return true; @@ -292,15 +292,15 @@ public: return false; } - Map* map = player->GetMap(); - if (!map->IsDungeon()) + InstanceMap* map = player->GetMap()->ToInstanceMap(); + if (!map) { handler->PSendSysMessage(LANG_NOT_DUNGEON); handler->SetSentErrorMessage(true); return false; } - if (!map->ToInstanceMap()->GetInstanceScript()) + if (!map->GetInstanceScript()) { handler->PSendSysMessage(LANG_NO_INSTANCE_DATA); handler->SetSentErrorMessage(true); @@ -309,14 +309,14 @@ public: encounterId = atoi(param1); - if (encounterId > map->ToInstanceMap()->GetInstanceScript()->GetEncounterCount()) + if (encounterId > map->GetInstanceScript()->GetEncounterCount()) { handler->PSendSysMessage(LANG_BAD_VALUE); handler->SetSentErrorMessage(true); return false; } - uint8 state = map->ToInstanceMap()->GetInstanceScript()->GetBossState(encounterId); + uint32 state = map->GetInstanceScript()->GetBossState(encounterId); std::string stateName = InstanceScript::GetBossStateName(state); handler->PSendSysMessage(LANG_COMMAND_INST_GET_BOSS_STATE, encounterId, state, stateName); return true; diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp index 64513fece8..c1470d3bc4 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp @@ -203,10 +203,6 @@ public: void AggroAllPlayers(Creature* temp) { Map::PlayerList const &PlList = me->GetMap()->GetPlayers(); - - if (PlList.isEmpty()) - return; - for (Map::PlayerList::const_iterator i = PlList.begin(); i != PlList.end(); ++i) { if (Player* player = i->GetSource()) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp index 8965b64767..0a287173ad 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp @@ -181,23 +181,21 @@ public: // temporary store for the best suitable beam reciever Unit* target = me; - if (Map* map = me->GetMap()) - { - Map::PlayerList const& players = map->GetPlayers(); + Map::PlayerList const& players = me->GetMap()->GetPlayers(); - // get the best suitable target - for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i) - { - Player* p = i->GetSource(); - if (p && p->IsAlive() // alive - && (!target || target->GetDistance2d(portal)>p->GetDistance2d(portal)) // closer than current best - && !p->HasAura(PlayerDebuff[j]) // not exhausted - && !p->HasAura(PlayerBuff[(j + 1) % 3]) // not on another beam - && !p->HasAura(PlayerBuff[(j + 2) % 3]) - && IsBetween(me, p, portal)) // on the beam - target = p; - } + // get the best suitable target + for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i) + { + Player* p = i->GetSource(); + if (p && p->IsAlive() // alive + && (!target || target->GetDistance2d(portal)>p->GetDistance2d(portal)) // closer than current best + && !p->HasAura(PlayerDebuff[j]) // not exhausted + && !p->HasAura(PlayerBuff[(j + 1) % 3]) // not on another beam + && !p->HasAura(PlayerBuff[(j + 2) % 3]) + && IsBetween(me, p, portal)) // on the beam + target = p; } + // buff the target if (target->GetTypeId() == TYPEID_PLAYER) target->AddAura(PlayerBuff[j], target); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index 87945ccf91..8aba0a1546 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -309,11 +309,7 @@ public: { if (WipeTimer <= diff) { - Map* map = me->GetMap(); - if (!map->IsDungeon()) - return; - - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); if (PlayerList.isEmpty()) return; @@ -518,8 +514,6 @@ public: uint32 NextStep(uint32 step) { - Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID); - Map* map = me->GetMap(); switch (step) { case 0: return 9999999; @@ -527,21 +521,21 @@ public: me->Yell(SAY_DIALOG_MEDIVH_1, LANG_UNIVERSAL); return 10000; case 2: - if (arca) + if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID)) arca->Yell(SAY_DIALOG_ARCANAGOS_2, LANG_UNIVERSAL); return 20000; case 3: me->Yell(SAY_DIALOG_MEDIVH_3, LANG_UNIVERSAL); return 10000; case 4: - if (arca) + if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID)) arca->Yell(SAY_DIALOG_ARCANAGOS_4, LANG_UNIVERSAL); return 20000; case 5: me->Yell(SAY_DIALOG_MEDIVH_5, LANG_UNIVERSAL); return 20000; case 6: - if (arca) + if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID)) arca->Yell(SAY_DIALOG_ARCANAGOS_6, LANG_UNIVERSAL); return 10000; case 7: @@ -555,15 +549,15 @@ public: me->TextEmote(EMOTE_DIALOG_MEDIVH_7); return 10000; case 10: - if (arca) + if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID)) DoCast(arca, SPELL_CONFLAGRATION_BLAST, false); return 1000; case 11: - if (arca) + if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID)) arca->Yell(SAY_DIALOG_ARCANAGOS_8, LANG_UNIVERSAL); return 5000; case 12: - if (arca) + if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID)) { arca->GetMotionMaster()->MovePoint(0, -11010.82f, -1761.18f, 156.47f); arca->setActive(true); @@ -575,27 +569,27 @@ public: me->Yell(SAY_DIALOG_MEDIVH_9, LANG_UNIVERSAL); return 10000; case 14: + { me->SetVisible(false); me->ClearInCombat(); - if (map->IsDungeon()) + InstanceMap::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); + for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { - InstanceMap::PlayerList const &PlayerList = map->GetPlayers(); - for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) + if (i->GetSource()->IsAlive()) { - if (i->GetSource()->IsAlive()) - { - if (i->GetSource()->GetQuestStatus(9645) == QUEST_STATUS_INCOMPLETE) - i->GetSource()->CompleteQuest(9645); - } + if (i->GetSource()->GetQuestStatus(9645) == QUEST_STATUS_INCOMPLETE) + i->GetSource()->CompleteQuest(9645); } } return 50000; + } case 15: - if (arca) + if (Creature* arca = ObjectAccessor::GetCreature(*me, ArcanagosGUID)) arca->DealDamage(arca, arca->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); return 5000; - default : return 9999999; + default: + return 9999999; } } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp index 9b303fce89..9c904dcada 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp @@ -145,39 +145,13 @@ public: m_uiTransformTimer = MINUTE*IN_MILLISECONDS; } - // some targeting issues with the spell, so use this workaround as temporary solution - void DoWorkaroundForQuestCredit() - { - Map* map = me->GetMap(); - - if (!map || map->IsHeroic()) - return; - - Map::PlayerList const &lList = map->GetPlayers(); - - if (lList.isEmpty()) - return; - - SpellInfo const* spell = sSpellMgr->GetSpellInfo(SPELL_ORB_KILL_CREDIT); - - for (Map::PlayerList::const_iterator i = lList.begin(); i != lList.end(); ++i) - { - if (Player* player = i->GetSource()) - { - if (spell && spell->Effects[0].MiscValue) - player->KilledMonsterCredit(spell->Effects[0].MiscValue); - } - } - } - void UpdateAI(uint32 uiDiff) override { if (m_uiTransformTimer) { if (m_uiTransformTimer <= uiDiff) { - DoCast(me, SPELL_ORB_KILL_CREDIT, false); - DoWorkaroundForQuestCredit(); + DoCast(me, SPELL_ORB_KILL_CREDIT, true); // Transform and update entry, now ready for quest/read gossip DoCast(me, SPELL_TRANSFORM_TO_KAEL, false); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 3df07562d5..2714d65774 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -1293,8 +1293,8 @@ public: //if (GameObject* go = me->GetMap()->GetGameObject(uiDawnofLightGUID)) // Turn off dawn of light // go->SetPhaseMask(0, true); { - Map* map = me->GetMap(); // search players with in 50 yards for quest credit - Map::PlayerList const &PlayerList = map->GetPlayers(); + // search players with in 50 yards for quest credit + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); if (!PlayerList.isEmpty()) { for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index 14be8c51bc..a78ad740c9 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -538,11 +538,7 @@ public: Player* SelectRandomPlayer(float range = 0.0f, bool checkLoS = true) { - Map* map = me->GetMap(); - if (!map->IsDungeon()) - return NULL; - - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); if (PlayerList.isEmpty()) return NULL; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index ae327dbb87..d0f8d9eab0 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -551,13 +551,9 @@ public: bool OnGossipHello(Player* player, GameObject* go) override { - Map* map = go->GetMap(); - if (!map->IsDungeon()) - return true; - #if MAX_PLAYERS_IN_SPECTRAL_REALM > 0 uint8 SpectralPlayers = 0; - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = go->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { if (i->GetSource() && i->GetSource()->GetPositionZ() < DEMON_REALM_Z + 5) @@ -688,12 +684,8 @@ public: void TeleportAllPlayersBack() { - Map* map = me->GetMap(); - if (!map->IsDungeon()) - return; - - Map::PlayerList const &playerList = map->GetPlayers(); - Position homePos = me->GetHomePosition(); + Map::PlayerList const &playerList = me->GetMap()->GetPlayers(); + Position const& homePos = me->GetHomePosition(); for (Map::PlayerList::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) { Player* player = itr->GetSource(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index 780cf6646a..33b8516657 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -433,15 +433,11 @@ public: } //kill credit Creature for quest - Map* map = me->GetMap(); - Map::PlayerList const& players = map->GetPlayers(); - if (!players.isEmpty() && map->IsDungeon()) + Map::PlayerList const& players = me->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* player = itr->GetSource()) - player->KilledMonsterCredit(20156); - } + if (Player* player = itr->GetSource()) + player->KilledMonsterCredit(20156); } //alot will happen here, thrall and taretha talk, erozion appear at spot to explain diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp index d8966ec76c..b57d1b78de 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp @@ -54,14 +54,10 @@ public: Player* GetPlayerInMap() { Map::PlayerList const& players = instance->GetPlayers(); - - if (!players.isEmpty()) + for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* player = itr->GetSource()) - return player; - } + if (Player* player = itr->GetSource()) + return player; } TC_LOG_DEBUG("scripts", "Instance Razorfen Kraul: GetPlayerInMap, but PlayerList is empty!"); return NULL; diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index 463d1ee7e0..8ccc5f0b4c 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -143,8 +143,6 @@ class boss_ossirian : public CreatureScript Talk(SAY_AGGRO); Map* map = me->GetMap(); - if (!map->IsDungeon()) - return; WorldPacket data(SMSG_WEATHER, (4+4+4)); data << uint32(WEATHER_STATE_HEAVY_SANDSTORM) << float(1) << uint8(0); @@ -153,7 +151,7 @@ class boss_ossirian : public CreatureScript for (uint8 i = 0; i < NUM_TORNADOS; ++i) { Position Point = me->GetRandomPoint(RoomCenter, RoomRadius); - if (Creature* Tornado = me->GetMap()->SummonCreature(NPC_SAND_VORTEX, Point)) + if (Creature* Tornado = map->SummonCreature(NPC_SAND_VORTEX, Point)) Tornado->CastSpell(Tornado, SPELL_SAND_STORM, true); } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index f967bd6a21..8e84f1b426 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -586,21 +586,10 @@ public: //WisperTimer if (WisperTimer <= diff) { - Map* map = me->GetMap(); - if (!map->IsDungeon()) - return; - //Play random sound to the zone - Map::PlayerList const &PlayerList = map->GetPlayers(); - - if (!PlayerList.isEmpty()) - { - for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr) - { - if (Player* pPlr = itr->GetSource()) - pPlr->PlayDirectSound(RANDOM_SOUND_WHISPER, pPlr); - } - } + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr) + me->PlayDirectSound(RANDOM_SOUND_WHISPER, itr->GetSource()); //One random wisper every 90 - 300 seconds WisperTimer = urand(90000, 300000); diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index cfed13a8f3..d8ebfbbd74 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -230,11 +230,7 @@ public: // Roll Insanity uint32 spell = GetSpellForPhaseMask(phase); uint32 spell2 = GetSpellForPhaseMask(nextPhase); - Map* map = me->GetMap(); - if (!map) - return; - - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); if (!PlayerList.isEmpty()) { for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp index 7cb2c0e517..5890b9cbec 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp @@ -185,7 +185,7 @@ public: who->RemoveAurasByType(SPELL_AURA_MOD_STEALTH); AttackStart(who); } - else if (me->GetMap()->IsDungeon()) + else { who->SetInCombatWith(me); me->AddThreat(who, 0.0f); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index b4627d7f94..eac84d1f6c 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -652,23 +652,19 @@ class npc_acolyte_of_shadron : public CreatureScript if (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SHADRON))) instance->SetBossState(DATA_PORTAL_OPEN, NOT_STARTED); - Map* map = me->GetMap(); - if (map->IsDungeon()) + Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers(); + + if (PlayerList.isEmpty()) + return; + + for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { - Map::PlayerList const& PlayerList = map->GetPlayers(); - - if (PlayerList.isEmpty()) - return; - - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) + if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim()) { - if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim()) - { - i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true); - i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true); - i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT); - i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER); - } + i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true); + i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true); + i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT); + i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER); } } @@ -740,26 +736,22 @@ class npc_acolyte_of_vesperon : public CreatureScript vesperon->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP); } - Map* map = me->GetMap(); - if (map->IsDungeon()) + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); + + if (PlayerList.isEmpty()) + return; + + for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { - Map::PlayerList const &PlayerList = map->GetPlayers(); - - if (PlayerList.isEmpty()) - return; - - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) + if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim()) { - if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_SHIFT) && !i->GetSource()->GetVictim()) - { - i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true); - i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true); - i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT); - i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER); - } - if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_TORMENT_VESP) && !i->GetSource()->GetVictim()) - i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP); + i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_SHIFT_REMOVAL_ALL, true); + i->GetSource()->CastSpell(i->GetSource(), SPELL_TWILIGHT_RESIDUE, true); + i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT); + i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_SHIFT_ENTER); } + if (i->GetSource()->IsAlive() && i->GetSource()->HasAura(SPELL_TWILIGHT_TORMENT_VESP) && !i->GetSource()->GetVictim()) + i->GetSource()->RemoveAurasDueToSpell(SPELL_TWILIGHT_TORMENT_VESP); } instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_TORMENT_VESP_ACO); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index c375e5c1b9..512016c6ee 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -254,7 +254,7 @@ public: if (uiChargeTimer <= uiDiff) { Map::PlayerList const& players = me->GetMap()->GetPlayers(); - if (me->GetMap()->IsDungeon() && !players.isEmpty()) + if (!players.isEmpty()) { for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { @@ -281,7 +281,7 @@ public: if (Unit* pPassenger = pVehicle->GetPassenger(SEAT_ID_0)) { Map::PlayerList const& players = me->GetMap()->GetPlayers(); - if (me->GetMap()->IsDungeon() && !players.isEmpty()) + if (!players.isEmpty()) { for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { @@ -400,7 +400,7 @@ public: if (uiInterceptTimer <= uiDiff) { Map::PlayerList const& players = me->GetMap()->GetPlayers(); - if (me->GetMap()->IsDungeon() && !players.isEmpty()) + if (!players.isEmpty()) { for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { @@ -867,7 +867,7 @@ public: else { Map::PlayerList const& players = me->GetMap()->GetPlayers(); - if (me->GetMap()->IsDungeon() && !players.isEmpty()) + if (!players.isEmpty()) { for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index db0fcee22f..e3e89d865f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -470,21 +470,11 @@ class spell_festergut_blighted_spores : public SpellScriptLoader if (target->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE)) return; - if (target->GetMap() && !target->GetMap()->Is25ManRaid()) - { - if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) != QUEST_STATUS_INCOMPLETE) - return; + uint32 questId = target->GetMap()->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10; + if (target->GetQuestStatus(questId) != QUEST_STATUS_INCOMPLETE) + return; - target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK); - } - - if (target->GetMap() && target->GetMap()->Is25ManRaid()) - { - if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) != QUEST_STATUS_INCOMPLETE) - return; - - target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK); - } + target->CastSpell(target, SPELL_ORANGE_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK); } void Register() override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index c1d930cb62..1a2ebd179f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -892,21 +892,11 @@ class spell_rotface_slime_spray : public SpellScriptLoader if (target->HasAura(SPELL_GREEN_BLIGHT_RESIDUE)) return; - if (target->GetMap() && !target->GetMap()->Is25ManRaid()) - { - if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) != QUEST_STATUS_INCOMPLETE) - return; + uint32 questId = target->GetMap()->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10; + if (target->GetQuestStatus(questId) != QUEST_STATUS_INCOMPLETE) + return; - target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK); - } - - if (target->GetMap() && target->GetMap()->Is25ManRaid()) - { - if (target->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) != QUEST_STATUS_INCOMPLETE) - return; - - target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK); - } + target->CastSpell(target, SPELL_GREEN_BLIGHT_RESIDUE, TRIGGERED_FULL_MASK); } void Register() override diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index dd67f2b1ac..3778d8d25a 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -317,37 +317,30 @@ class boss_gothik : public CreatureScript bool CheckGroupSplitted() { - Map* map = me->GetMap(); - if (map && map->IsDungeon()) + bool checklife = false; + bool checkdead = false; + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { - Map::PlayerList const &PlayerList = map->GetPlayers(); - if (!PlayerList.isEmpty()) + if (i->GetSource() && i->GetSource()->IsAlive() && + i->GetSource()->GetPositionX() <= POS_X_NORTH && + i->GetSource()->GetPositionX() >= POS_X_SOUTH && + i->GetSource()->GetPositionY() <= POS_Y_GATE && + i->GetSource()->GetPositionY() >= POS_Y_EAST) { - bool checklife = false; - bool checkdead = false; - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - { - if (i->GetSource() && i->GetSource()->IsAlive() && - i->GetSource()->GetPositionX() <= POS_X_NORTH && - i->GetSource()->GetPositionX() >= POS_X_SOUTH && - i->GetSource()->GetPositionY() <= POS_Y_GATE && - i->GetSource()->GetPositionY() >= POS_Y_EAST) - { - checklife = true; - } - else if (i->GetSource() && i->GetSource()->IsAlive() && - i->GetSource()->GetPositionX() <= POS_X_NORTH && - i->GetSource()->GetPositionX() >= POS_X_SOUTH && - i->GetSource()->GetPositionY() >= POS_Y_GATE && - i->GetSource()->GetPositionY() <= POS_Y_WEST) - { - checkdead = true; - } - - if (checklife && checkdead) - return true; - } + checklife = true; } + else if (i->GetSource() && i->GetSource()->IsAlive() && + i->GetSource()->GetPositionX() <= POS_X_NORTH && + i->GetSource()->GetPositionX() >= POS_X_SOUTH && + i->GetSource()->GetPositionY() >= POS_Y_GATE && + i->GetSource()->GetPositionY() <= POS_Y_WEST) + { + checkdead = true; + } + + if (checklife && checkdead) + return true; } return false; @@ -555,20 +548,13 @@ class npc_gothik_minion : public CreatureScript if (!_EnterEvadeMode()) return; - Map* map = me->GetMap(); - if (map->IsDungeon()) + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { - Map::PlayerList const &PlayerList = map->GetPlayers(); - if (!PlayerList.isEmpty()) + if (i->GetSource() && i->GetSource()->IsAlive() && isOnSameSide(i->GetSource())) { - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - { - if (i->GetSource() && i->GetSource()->IsAlive() && isOnSameSide(i->GetSource())) - { - AttackStart(i->GetSource()); - return; - } - } + AttackStart(i->GetSource()); + return; } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 64403ad40c..7e005eff30 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -234,16 +234,12 @@ class boss_general_vezax : public CreatureScript void CheckShamanisticRage() { - Map* map = me->GetMap(); - if (map && map->IsDungeon()) - { - // If Shaman has Shamanistic Rage and use it during the fight, it will cast Corrupted Rage on him - Map::PlayerList const& Players = map->GetPlayers(); - for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr) - if (Player* player = itr->GetSource()) - if (player->HasSpell(SPELL_SHAMANTIC_RAGE)) - player->CastSpell(player, SPELL_CORRUPTED_RAGE, false); - } + // If Shaman has Shamanistic Rage and use it during the fight, it will cast Corrupted Rage on him + Map::PlayerList const& Players = me->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr) + if (Player* player = itr->GetSource()) + if (player->HasSpell(SPELL_SHAMANTIC_RAGE)) + player->CastSpell(player, SPELL_CORRUPTED_RAGE, false); } uint32 GetData(uint32 type) const override @@ -280,34 +276,28 @@ class boss_general_vezax : public CreatureScript */ Unit* CheckPlayersInRange(uint8 playersMin, float rangeMin, float rangeMax) { - Map* map = me->GetMap(); - if (map && map->IsDungeon()) + std::list PlayerList; + Map::PlayerList const& Players = me->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr) { - std::list PlayerList; - Map::PlayerList const& Players = map->GetPlayers(); - for (Map::PlayerList::const_iterator itr = Players.begin(); itr != Players.end(); ++itr) + if (Player* player = itr->GetSource()) { - if (Player* player = itr->GetSource()) - { - float distance = player->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); - if (rangeMin > distance || distance > rangeMax) - continue; + float distance = player->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); + if (rangeMin > distance || distance > rangeMax) + continue; - PlayerList.push_back(player); - } + PlayerList.push_back(player); } - - if (PlayerList.empty()) - return NULL; - - size_t size = PlayerList.size(); - if (size < playersMin) - return NULL; - - return Trinity::Containers::SelectRandomContainerElement(PlayerList); } - return NULL; + if (PlayerList.empty()) + return NULL; + + size_t size = PlayerList.size(); + if (size < playersMin) + return NULL; + + return Trinity::Containers::SelectRandomContainerElement(PlayerList); } }; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index 94ec7acba1..d289254137 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -162,11 +162,6 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) // he dropped it further, summon mound GameObject* go = new GameObject; Map* map = player->GetMap(); - if (!map) - { - delete go; - return true; - } if (!go->Create(map->GenerateLowGuid(), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) { @@ -196,11 +191,6 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) // he dropped it further, summon mound GameObject* go = new GameObject; Map* map = player->GetMap(); - if (!map) - { - delete go; - return true; - } if (!go->Create(map->GenerateLowGuid(), SI_SILITHYST_MOUND, map, player->GetPhaseMask(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(), 0, 0, 0, 0, 100, GO_STATE_READY)) { diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp index 263fd8340b..6e43cfa2d0 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp @@ -109,8 +109,7 @@ public: if (Inhibitmagic_Timer <= diff) { float dist; - Map* map = me->GetMap(); - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) if (Player* i_pl = i->GetSource()) if (i_pl->IsAlive() && (dist = i_pl->GetDistance(me)) < 45) diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index d0e12c87a5..b16a963033 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -182,8 +182,7 @@ class boss_grandmaster_vorpil : public CreatureScript break; case EVENT_DRAW_SHADOWS: { - Map* map = me->GetMap(); - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) if (Player* i_pl = i->GetSource()) if (i_pl->IsAlive() && !i_pl->HasAura(SPELL_BANISH)) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index d817c08d7f..787b191e23 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -257,8 +257,7 @@ public: void EnterCombat(Unit* who) override { // remove old tainted cores to prevent cheating in phase 2 - Map* map = me->GetMap(); - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr) if (Player* player = itr->GetSource()) player->DestroyItemCount(31088, 1, true); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index 5d967a3546..253c601e22 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -788,8 +788,7 @@ public: if (Earthshock_Timer <= diff) { - Map* map = me->GetMap(); - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr) { if (Player* i_pl = itr->GetSource()) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 096777163a..7c4dbdeaab 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -259,8 +259,7 @@ public: if (CheckTimer <= diff)//check if there are players in melee range { InRange = false; - Map* map = me->GetMap(); - Map::PlayerList const &PlayerList = map->GetPlayers(); + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); if (!PlayerList.isEmpty()) { for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) @@ -274,15 +273,11 @@ public: if (RotTimer) { - Map* map = me->GetMap(); - if (map->IsDungeon()) + Map::PlayerList const &PlayerList = me->GetMap()->GetPlayers(); + for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) { - Map::PlayerList const &PlayerList = map->GetPlayers(); - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - { - if (i->GetSource() && i->GetSource()->IsAlive() && me->HasInArc(diff/20000.f*float(M_PI)*2.f, i->GetSource()) && me->IsWithinDist(i->GetSource(), SPOUT_DIST) && !i->GetSource()->IsInWater()) - DoCast(i->GetSource(), SPELL_SPOUT, true); // only knock back players in arc, in 100yards, not in water - } + if (i->GetSource() && i->GetSource()->IsAlive() && me->HasInArc(diff/20000.f*float(M_PI)*2.f, i->GetSource()) && me->IsWithinDist(i->GetSource(), SPOUT_DIST) && !i->GetSource()->IsInWater()) + DoCast(i->GetSource(), SPELL_SPOUT, true); // only knock back players in arc, in 100yards, not in water } if (SpoutAnimTimer <= diff) From 36a205ec002307c77c813b7996fec4e334b4540f Mon Sep 17 00:00:00 2001 From: joschiwald Date: Mon, 5 Oct 2015 00:12:38 +0200 Subject: [PATCH 255/524] Core: fixed warning introduced in last commit (cherry picked from commit fe0c07a6fe4dea8772e69ec8ad491bdda7f61746) --- .../scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index d0f8d9eab0..c8964b2ff3 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -565,6 +565,8 @@ public: player->GetSession()->SendNotification(GO_FAILED); return true; } +#else + (void)go; #endif player->CastSpell(player, SPELL_TELEPORT_SPECTRAL, true); From fc95812141e925b727235530fbea94663eb43f97 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sat, 31 Oct 2015 18:32:41 +0000 Subject: [PATCH 256/524] DB/Conditions: Dead Mage Hunter Dead Mage Hunters should not be interactable without the quest 'rifle the bodies' --- sql/updates/world/2015_10_31_01_world.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 sql/updates/world/2015_10_31_01_world.sql diff --git a/sql/updates/world/2015_10_31_01_world.sql b/sql/updates/world/2015_10_31_01_world.sql new file mode 100644 index 0000000000..b929d74bec --- /dev/null +++ b/sql/updates/world/2015_10_31_01_world.sql @@ -0,0 +1,8 @@ + DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup`=26477; + INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES + (18, 26477, 47096, 0, 0, 9, 0, 12000, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'), + (18, 26477, 47096, 0, 1, 9, 0, 11999, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'), + (18, 26477, 61286, 0, 0, 9, 0, 12000, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'), + (18, 26477, 61286, 0, 1, 9, 0, 11999, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'), + (18, 26477, 61832, 0, 0, 9, 0, 11999, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'), +(18, 26477, 61832, 0, 1, 9, 0, 12000, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'); From dc74454356af726c96c83b02418d46bc664cee8e Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 25 Oct 2015 10:59:58 +0100 Subject: [PATCH 257/524] Core/Conditions: Type renaming (cherry picked from commit 5e0cee85ddd67188365ead3f18206df088e1f0c7) --- src/common/Common.h | 2 + src/server/game/AI/CoreAI/CombatAI.h | 2 +- .../game/AI/SmartScripts/SmartScript.cpp | 4 +- src/server/game/Conditions/ConditionMgr.cpp | 102 +++++++++--------- src/server/game/Conditions/ConditionMgr.h | 53 +++++---- src/server/game/Entities/Object/ObjectGuid.h | 2 - src/server/game/Entities/Player/Player.cpp | 16 +-- src/server/game/Entities/Unit/Unit.cpp | 4 +- src/server/game/Globals/ObjectMgr.h | 4 +- src/server/game/Handlers/ItemHandler.cpp | 2 +- src/server/game/Loot/LootMgr.cpp | 8 +- src/server/game/Loot/LootMgr.h | 6 +- src/server/game/Spells/Auras/SpellAuras.cpp | 2 +- src/server/game/Spells/Spell.cpp | 22 ++-- src/server/game/Spells/Spell.h | 18 ++-- src/server/game/Spells/SpellInfo.cpp | 2 +- 16 files changed, 122 insertions(+), 127 deletions(-) diff --git a/src/common/Common.h b/src/common/Common.h index cd9301e633..908cd48782 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -43,6 +43,8 @@ #include #include +#include + #include "Debugging/Errors.h" #include "Threading/LockedQueue.h" diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h index 97308f22e5..647916e0b0 100644 --- a/src/server/game/AI/CoreAI/CombatAI.h +++ b/src/server/game/AI/CoreAI/CombatAI.h @@ -112,7 +112,7 @@ struct VehicleAI : public CreatureAI private: void LoadConditions(); void CheckConditions(uint32 diff); - ConditionList conditions; + ConditionContainer conditions; uint32 m_ConditionsTimer; bool m_DoDismiss; uint32 m_DismissTimer; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index efee565e15..f79641c515 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -90,7 +90,7 @@ void SmartScript::ProcessEventsFor(SMART_EVENT e, Unit* unit, uint32 var0, uint3 if (eventType == e /*&& (!i->event.event_phase_mask || IsInPhase(i->event.event_phase_mask)) && !(i->event.event_flags & SMART_EVENT_FLAG_NOT_REPEATABLE && i->runOnce)*/) { - ConditionList conds = sConditionMgr->GetConditionsForSmartEvent(i->entryOrGuid, i->event_id, i->source_type); + ConditionContainer conds = sConditionMgr->GetConditionsForSmartEvent(i->entryOrGuid, i->event_id, i->source_type); ConditionSourceInfo info = ConditionSourceInfo(unit, GetBaseObject()); if (sConditionMgr->IsObjectMeetToConditions(info, conds)) @@ -2322,7 +2322,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u void SmartScript::ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit, uint32 var0, uint32 var1, bool bvar, const SpellInfo* spell, GameObject* gob) { - ConditionList const conds = sConditionMgr->GetConditionsForSmartEvent(e.entryOrGuid, e.event_id, e.source_type); + ConditionContainer const conds = sConditionMgr->GetConditionsForSmartEvent(e.entryOrGuid, e.event_id, e.source_type); ConditionSourceInfo info = ConditionSourceInfo(unit, GetBaseObject()); if (sConditionMgr->IsObjectMeetToConditions(info, conds)) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index b19b0068be..2a7cdc3d50 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -663,22 +663,22 @@ ConditionMgr::~ConditionMgr() Clean(); } -ConditionList ConditionMgr::GetConditionReferences(uint32 refId) +ConditionContainer ConditionMgr::GetConditionReferences(uint32 refId) { - ConditionList conditions; + ConditionContainer conditions; ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find(refId); if (ref != ConditionReferenceStore.end()) conditions = (*ref).second; return conditions; } -uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionList const& conditions) +uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions) { if (conditions.empty()) return GRID_MAP_TYPE_MASK_ALL; // groupId, typeMask std::map ElseGroupStore; - for (ConditionList::const_iterator i = conditions.begin(); i != conditions.end(); ++i) + for (ConditionContainer::const_iterator i = conditions.begin(); i != conditions.end(); ++i) { // no point of having not loaded conditions in list ASSERT((*i)->isLoaded() && "ConditionMgr::GetSearcherTypeMaskForConditionList - not yet loaded condition found in list"); @@ -712,11 +712,11 @@ uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionList const& co return mask; } -bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionList const& conditions) +bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) { // groupId, groupCheckPassed std::map ElseGroupStore; - for (ConditionList::const_iterator i = conditions.begin(); i != conditions.end(); ++i) + for (ConditionContainer::const_iterator i = conditions.begin(); i != conditions.end(); ++i) { TC_LOG_DEBUG("condition", "ConditionMgr::IsPlayerMeetToConditionList %s val1: %u", (*i)->ToString().c_str(), (*i)->ConditionValue1); if ((*i)->isLoaded()) @@ -758,19 +758,19 @@ bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, return false; } -bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object, ConditionList const& conditions) +bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions) { ConditionSourceInfo srcInfo = ConditionSourceInfo(object); return IsObjectMeetToConditions(srcInfo, conditions); } -bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionList const& conditions) +bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions) { ConditionSourceInfo srcInfo = ConditionSourceInfo(object1, object2); return IsObjectMeetToConditions(srcInfo, conditions); } -bool ConditionMgr::IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionList const& conditions) +bool ConditionMgr::IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) { if (conditions.empty()) return true; @@ -807,15 +807,15 @@ bool ConditionMgr::CanHaveSourceIdSet(ConditionSourceType sourceType) return (sourceType == CONDITION_SOURCE_TYPE_SMART_EVENT); } -ConditionList ConditionMgr::GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) +ConditionContainer ConditionMgr::GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) { - ConditionList spellCond; + ConditionContainer spellCond; if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX) { - ConditionContainer::const_iterator itr = ConditionStore.find(sourceType); + ConditionEntriesByTypeMap::const_iterator itr = ConditionStore.find(sourceType); if (itr != ConditionStore.end()) { - ConditionTypeContainer::const_iterator i = (*itr).second.find(entry); + ConditionsByEntryMap::const_iterator i = (*itr).second.find(entry); if (i != (*itr).second.end()) { spellCond = (*i).second; @@ -826,13 +826,13 @@ ConditionList ConditionMgr::GetConditionsForNotGroupedEntry(ConditionSourceType return spellCond; } -ConditionList ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) +ConditionContainer ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) { - ConditionList cond; - CreatureSpellConditionContainer::const_iterator itr = SpellClickEventConditionStore.find(creatureId); + ConditionContainer cond; + ConditionEntriesByCreatureIdMap::const_iterator itr = SpellClickEventConditionStore.find(creatureId); if (itr != SpellClickEventConditionStore.end()) { - ConditionTypeContainer::const_iterator i = (*itr).second.find(spellId); + ConditionsByEntryMap::const_iterator i = (*itr).second.find(spellId); if (i != (*itr).second.end()) { cond = (*i).second; @@ -842,13 +842,13 @@ ConditionList ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, u return cond; } -ConditionList ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId) +ConditionContainer ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId) { - ConditionList cond; - CreatureSpellConditionContainer::const_iterator itr = VehicleSpellConditionStore.find(creatureId); + ConditionContainer cond; + ConditionEntriesByCreatureIdMap::const_iterator itr = VehicleSpellConditionStore.find(creatureId); if (itr != VehicleSpellConditionStore.end()) { - ConditionTypeContainer::const_iterator i = (*itr).second.find(spellId); + ConditionsByEntryMap::const_iterator i = (*itr).second.find(spellId); if (i != (*itr).second.end()) { cond = (*i).second; @@ -858,13 +858,13 @@ ConditionList ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureId, uint return cond; } -ConditionList ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType) +ConditionContainer ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType) { - ConditionList cond; + ConditionContainer cond; SmartEventConditionContainer::const_iterator itr = SmartEventConditionStore.find(std::make_pair(entryOrGuid, sourceType)); if (itr != SmartEventConditionStore.end()) { - ConditionTypeContainer::const_iterator i = (*itr).second.find(eventId + 1); + ConditionsByEntryMap::const_iterator i = (*itr).second.find(eventId + 1); if (i != (*itr).second.end()) { cond = (*i).second; @@ -874,13 +874,13 @@ ConditionList ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 return cond; } -ConditionList ConditionMgr::GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId) +ConditionContainer ConditionMgr::GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId) { - ConditionList cond; - NpcVendorConditionContainer::const_iterator itr = NpcVendorConditionContainerStore.find(creatureId); + ConditionContainer cond; + ConditionEntriesByCreatureIdMap::const_iterator itr = NpcVendorConditionContainerStore.find(creatureId); if (itr != NpcVendorConditionContainerStore.end()) { - ConditionTypeContainer::const_iterator i = (*itr).second.find(itemId); + ConditionsByEntryMap::const_iterator i = (*itr).second.find(itemId); if (i != (*itr).second.end()) { cond = (*i).second; @@ -998,7 +998,7 @@ void ConditionMgr::LoadConditions(bool isReload) uint32 uRefId = abs(iSourceTypeOrReferenceId); if (ConditionReferenceStore.find(uRefId) == ConditionReferenceStore.end())//make sure we have a list for our conditions, based on reference id { - ConditionList mCondList; + ConditionContainer mCondList; ConditionReferenceStore[uRefId] = mCondList; } ConditionReferenceStore[uRefId].push_back(cond);//add to reference storage @@ -1141,14 +1141,14 @@ void ConditionMgr::LoadConditions(bool isReload) //make sure we have a storage list for our SourceType if (ConditionStore.find(cond->SourceType) == ConditionStore.end()) { - ConditionTypeContainer mTypeMap; + ConditionsByEntryMap mTypeMap; ConditionStore[cond->SourceType] = mTypeMap;//add new empty list for SourceType } //make sure we have a condition list for our SourceType's entry if (ConditionStore[cond->SourceType].find(cond->SourceEntry) == ConditionStore[cond->SourceType].end()) { - ConditionList mCondList; + ConditionContainer mCondList; ConditionStore[cond->SourceType][cond->SourceEntry] = mCondList; } @@ -1236,9 +1236,9 @@ bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond) continue; // build new shared mask with found effect - uint32 sharedMask = (1 << i); - ConditionList* cmp = spellInfo->Effects[i].ImplicitTargetConditions; - for (uint8 effIndex = i+1; effIndex < MAX_SPELL_EFFECTS; ++effIndex) + uint32 sharedMask = 1 << i; + ConditionContainer* cmp = spellInfo->Effects[i].ImplicitTargetConditions; + for (uint8 effIndex = i + 1; effIndex < MAX_SPELL_EFFECTS; ++effIndex) { if (spellInfo->Effects[effIndex].ImplicitTargetConditions == cmp) sharedMask |= 1 << effIndex; @@ -1260,7 +1260,7 @@ bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond) return false; // get shared data - ConditionList* sharedList = spellInfo->Effects[firstEffIndex].ImplicitTargetConditions; + ConditionContainer* sharedList = spellInfo->Effects[firstEffIndex].ImplicitTargetConditions; // there's already data entry for that sharedMask if (sharedList) @@ -1277,7 +1277,7 @@ bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond) else { // add new list, create new shared mask - sharedList = new ConditionList(); + sharedList = new ConditionContainer(); bool assigned = false; for (uint8 i = firstEffIndex; i < MAX_SPELL_EFFECTS; ++i) { @@ -2114,18 +2114,18 @@ void ConditionMgr::Clean() { for (ConditionReferenceContainer::iterator itr = ConditionReferenceStore.begin(); itr != ConditionReferenceStore.end(); ++itr) { - for (ConditionList::const_iterator it = itr->second.begin(); it != itr->second.end(); ++it) + for (ConditionContainer::const_iterator it = itr->second.begin(); it != itr->second.end(); ++it) delete *it; itr->second.clear(); } ConditionReferenceStore.clear(); - for (ConditionContainer::iterator itr = ConditionStore.begin(); itr != ConditionStore.end(); ++itr) + for (ConditionEntriesByTypeMap::iterator itr = ConditionStore.begin(); itr != ConditionStore.end(); ++itr) { - for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it) + for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) { - for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i) + for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; it->second.clear(); } @@ -2134,11 +2134,11 @@ void ConditionMgr::Clean() ConditionStore.clear(); - for (CreatureSpellConditionContainer::iterator itr = VehicleSpellConditionStore.begin(); itr != VehicleSpellConditionStore.end(); ++itr) + for (ConditionEntriesByCreatureIdMap::iterator itr = VehicleSpellConditionStore.begin(); itr != VehicleSpellConditionStore.end(); ++itr) { - for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it) + for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) { - for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i) + for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; it->second.clear(); } @@ -2149,9 +2149,9 @@ void ConditionMgr::Clean() for (SmartEventConditionContainer::iterator itr = SmartEventConditionStore.begin(); itr != SmartEventConditionStore.end(); ++itr) { - for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it) + for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) { - for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i) + for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; it->second.clear(); } @@ -2160,11 +2160,11 @@ void ConditionMgr::Clean() SmartEventConditionStore.clear(); - for (CreatureSpellConditionContainer::iterator itr = SpellClickEventConditionStore.begin(); itr != SpellClickEventConditionStore.end(); ++itr) + for (ConditionEntriesByCreatureIdMap::iterator itr = SpellClickEventConditionStore.begin(); itr != SpellClickEventConditionStore.end(); ++itr) { - for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it) + for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) { - for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i) + for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; it->second.clear(); } @@ -2173,11 +2173,11 @@ void ConditionMgr::Clean() SpellClickEventConditionStore.clear(); - for (NpcVendorConditionContainer::iterator itr = NpcVendorConditionContainerStore.begin(); itr != NpcVendorConditionContainerStore.end(); ++itr) + for (ConditionEntriesByCreatureIdMap::iterator itr = NpcVendorConditionContainerStore.begin(); itr != NpcVendorConditionContainerStore.end(); ++itr) { - for (ConditionTypeContainer::iterator it = itr->second.begin(); it != itr->second.end(); ++it) + for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) { - for (ConditionList::const_iterator i = it->second.begin(); i != it->second.end(); ++i) + for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; it->second.clear(); } diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 27983782bd..ff429cdbd2 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -19,11 +19,7 @@ #ifndef TRINITY_CONDITIONMGR_H #define TRINITY_CONDITIONMGR_H -#include "Define.h" -#include "Errors.h" -#include -#include -#include +#include "Common.h" class Player; class Unit; @@ -217,14 +213,13 @@ struct Condition std::string ToString(bool ext = false) const; /// For logging purpose }; -typedef std::list ConditionList; -typedef std::map ConditionTypeContainer; -typedef std::map ConditionContainer; -typedef std::map CreatureSpellConditionContainer; -typedef std::map NpcVendorConditionContainer; -typedef std::map, ConditionTypeContainer> SmartEventConditionContainer; +typedef std::list ConditionContainer; +typedef std::map ConditionsByEntryMap; +typedef std::map ConditionEntriesByTypeMap; +typedef std::map ConditionEntriesByCreatureIdMap; +typedef std::map, ConditionsByEntryMap> SmartEventConditionContainer; -typedef std::map ConditionReferenceContainer;//only used for references +typedef std::map ConditionReferenceContainer;//only used for references class ConditionMgr { @@ -241,19 +236,19 @@ class ConditionMgr void LoadConditions(bool isReload = false); bool isConditionTypeValid(Condition* cond); - ConditionList GetConditionReferences(uint32 refId); + ConditionContainer GetConditionReferences(uint32 refId); - uint32 GetSearcherTypeMaskForConditionList(ConditionList const& conditions); - bool IsObjectMeetToConditions(WorldObject* object, ConditionList const& conditions); - bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionList const& conditions); - bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionList const& conditions); + uint32 GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions); + bool IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions); + bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions); + bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions); static bool CanHaveSourceGroupSet(ConditionSourceType sourceType); static bool CanHaveSourceIdSet(ConditionSourceType sourceType); - ConditionList GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry); - ConditionList GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId); - ConditionList GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType); - ConditionList GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId); - ConditionList GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId); + ConditionContainer GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry); + ConditionContainer GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId); + ConditionContainer GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType); + ConditionContainer GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId); + ConditionContainer GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId); struct ConditionTypeInfo { @@ -271,19 +266,19 @@ class ConditionMgr bool addToGossipMenus(Condition* cond); bool addToGossipMenuItems(Condition* cond); bool addToSpellImplicitTargetConditions(Condition* cond); - bool IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionList const& conditions); + bool IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions); static void LogUselessConditionValue(Condition* cond, uint8 index, uint32 value); void Clean(); // free up resources std::list AllocatedMemoryStore; // some garbage collection :) - ConditionContainer ConditionStore; - ConditionReferenceContainer ConditionReferenceStore; - CreatureSpellConditionContainer VehicleSpellConditionStore; - CreatureSpellConditionContainer SpellClickEventConditionStore; - NpcVendorConditionContainer NpcVendorConditionContainerStore; - SmartEventConditionContainer SmartEventConditionStore; + ConditionEntriesByTypeMap ConditionStore; + ConditionReferenceContainer ConditionReferenceStore; + ConditionEntriesByCreatureIdMap VehicleSpellConditionStore; + ConditionEntriesByCreatureIdMap SpellClickEventConditionStore; + ConditionEntriesByCreatureIdMap NpcVendorConditionContainerStore; + SmartEventConditionContainer SmartEventConditionStore; }; #define sConditionMgr ConditionMgr::instance() diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 372a31307d..74fffe0979 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -21,10 +21,8 @@ #include "Common.h" #include "ByteBuffer.h" - #include #include -#include enum TypeID { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e9f9fdace3..3670c1e859 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15643,7 +15643,7 @@ bool Player::SatisfyQuestStatus(Quest const* qInfo, bool msg) bool Player::SatisfyQuestConditions(Quest const* qInfo, bool msg) { - ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_ACCEPT, qInfo->GetQuestId()); + ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_ACCEPT, qInfo->GetQuestId()); if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) { if (msg) @@ -16075,7 +16075,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) if (!quest) continue; - ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); + ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) continue; @@ -16103,7 +16103,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) if (!quest) continue; - ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); + ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) continue; @@ -20685,7 +20685,7 @@ void Player::VehicleSpellInitialize() continue; } - ConditionList conditions = sConditionMgr->GetConditionsForVehicleSpell(vehicle->GetEntry(), spellId); + ConditionContainer conditions = sConditionMgr->GetConditionsForVehicleSpell(vehicle->GetEntry(), spellId); if (!sConditionMgr->IsObjectMeetToConditions(this, vehicle, conditions)) { TC_LOG_DEBUG("condition", "VehicleSpellInitialize: conditions not met for Vehicle entry %u spell %u", vehicle->ToCreature()->GetEntry(), spellId); @@ -21538,7 +21538,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin return false; } - ConditionList conditions = sConditionMgr->GetConditionsForNpcVendorEvent(creature->GetEntry(), item); + ConditionContainer conditions = sConditionMgr->GetConditionsForNpcVendorEvent(creature->GetEntry(), item); if (!sConditionMgr->IsObjectMeetToConditions(this, creature, conditions)) { TC_LOG_DEBUG("condition", "BuyItemFromVendor: conditions not met for creature entry %u item %u", creature->GetEntry(), item); @@ -23353,9 +23353,9 @@ void Player::UpdateForQuestWorldObjects() { //! This code doesn't look right, but it was logically converted to condition system to do the exact //! same thing it did before. It definitely needs to be overlooked for intended functionality. - ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId); + ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId); bool buildUpdateBlock = false; - for (ConditionList::const_iterator jtr = conds.begin(); jtr != conds.end() && !buildUpdateBlock; ++jtr) + for (ConditionContainer::const_iterator jtr = conds.begin(); jtr != conds.end() && !buildUpdateBlock; ++jtr) if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN) buildUpdateBlock = true; @@ -25287,7 +25287,7 @@ bool Player::CanSeeSpellClickOn(Creature const* c) const if (!itr->second.IsFitToRequirements(this, c)) return false; - ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(c->GetEntry(), itr->second.spellId); + ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(c->GetEntry(), itr->second.spellId); ConditionSourceInfo info = ConditionSourceInfo(const_cast(this), const_cast(c)); if (sConditionMgr->IsObjectMeetToConditions(info, conds)) return true; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index fae612af7c..9c6dccaf5e 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14181,7 +14181,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u continue; // do checks using conditions table - ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, spellProto->Id); + ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, spellProto->Id); ConditionSourceInfo condInfo = ConditionSourceInfo(eventInfo.GetActor(), eventInfo.GetActionTarget()); if (!sConditionMgr->IsObjectMeetToConditions(condInfo, conditions)) continue; @@ -16887,7 +16887,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) continue; //! Check database conditions - ConditionList conds = sConditionMgr->GetConditionsForSpellClickEvent(spellClickEntry, itr->second.spellId); + ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(spellClickEntry, itr->second.spellId); ConditionSourceInfo info = ConditionSourceInfo(clicker, this); if (!sConditionMgr->IsObjectMeetToConditions(info, conds)) continue; diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 875b5547ae..033ea48291 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -564,14 +564,14 @@ struct GossipMenuItems uint32 BoxMoney; std::string BoxText; uint32 BoxBroadcastTextId; - ConditionList Conditions; + ConditionContainer Conditions; }; struct GossipMenus { uint32 entry; uint32 text_id; - ConditionList conditions; + ConditionContainer conditions; }; typedef std::multimap GossipMenusContainer; diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 13987c983f..6efaf5aab3 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -786,7 +786,7 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) if (!_player->IsGameMaster() && !leftInStock) continue; - ConditionList conditions = sConditionMgr->GetConditionsForNpcVendorEvent(vendor->GetEntry(), item->item); + ConditionContainer conditions = sConditionMgr->GetConditionsForNpcVendorEvent(vendor->GetEntry(), item->item); if (!sConditionMgr->IsObjectMeetToConditions(_player, vendor, conditions)) { TC_LOG_DEBUG("condition", "SendListInventory: conditions not met for creature entry %u item %u", vendor->GetEntry(), item->item); diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index be1b395b08..b7a19a72bf 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -95,7 +95,7 @@ class LootTemplate::LootGroup // A set of loot def void CheckLootRefs(LootTemplateMap const& store, LootIdSet* ref_set) const; LootStoreItemList* GetExplicitlyChancedItemList() { return &ExplicitlyChanced; } LootStoreItemList* GetEqualChancedItemList() { return &EqualChanced; } - void CopyConditions(ConditionList conditions); + void CopyConditions(ConditionContainer conditions); private: LootStoreItemList ExplicitlyChanced; // Entries with chances defined in DB LootStoreItemList EqualChanced; // Zero chances - every entry takes the same chance @@ -218,7 +218,7 @@ void LootStore::ResetConditions() { for (LootTemplateMap::iterator itr = m_LootTemplates.begin(); itr != m_LootTemplates.end(); ++itr) { - ConditionList empty; + ConditionContainer empty; itr->second->CopyConditions(empty); } } @@ -1155,7 +1155,7 @@ bool LootTemplate::LootGroup::HasQuestDropForPlayer(Player const* player) const return false; } -void LootTemplate::LootGroup::CopyConditions(ConditionList /*conditions*/) +void LootTemplate::LootGroup::CopyConditions(ConditionContainer /*conditions*/) { for (LootStoreItemList::iterator i = ExplicitlyChanced.begin(); i != ExplicitlyChanced.end(); ++i) (*i)->conditions.clear(); @@ -1260,7 +1260,7 @@ void LootTemplate::AddEntry(LootStoreItem* item) Entries.push_back(item); } -void LootTemplate::CopyConditions(const ConditionList& conditions) +void LootTemplate::CopyConditions(const ConditionContainer& conditions) { for (LootStoreItemList::iterator i = Entries.begin(); i != Entries.end(); ++i) (*i)->conditions.clear(); diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index 35687aee66..08cd224cd0 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -132,7 +132,7 @@ struct LootStoreItem uint8 groupid : 7; uint8 mincount; // mincount for drop items uint8 maxcount; // max drop count for the item mincount or Ref multiplicator - ConditionList conditions; // additional loot condition + ConditionContainer conditions; // additional loot condition // Constructor // displayid is filled in IsValid() which must be called after @@ -153,7 +153,7 @@ struct LootItem uint32 itemid; uint32 randomSuffix; int32 randomPropertyId; - ConditionList conditions; // additional loot condition + ConditionContainer conditions; // additional loot condition AllowedLooterSet allowedGUIDs; uint8 count : 8; bool is_looted : 1; @@ -252,7 +252,7 @@ class LootTemplate void AddEntry(LootStoreItem* item); // Rolls for every item in the template and adds the rolled items the the loot void Process(Loot& loot, bool rate, uint16 lootMode, uint8 groupId = 0) const; - void CopyConditions(const ConditionList& conditions); + void CopyConditions(const ConditionContainer& conditions); void CopyConditions(LootItem* li) const; // True if template includes at least 1 quest drop entry diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 9313301832..1cd671aca7 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1920,7 +1920,7 @@ bool Aura::IsProcTriggeredOnEvent(AuraApplication* aurApp, ProcEventInfo& eventI return false; // do checks using conditions table - ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, GetId()); + ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, GetId()); ConditionSourceInfo condInfo = ConditionSourceInfo(eventInfo.GetActor(), eventInfo.GetActionTarget()); if (!sConditionMgr->IsObjectMeetToConditions(condInfo, conditions)) return false; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 4e98efe10d..3e7c1cb9d6 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1019,7 +1019,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffIndex effIndex, SpellImplicitTar break; } - ConditionList* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions; + ConditionContainer* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions; // handle emergency case - try to use other provided targets if no conditions provided if (targetType.GetCheckType() == TARGET_CHECK_ENTRY && (!condList || condList->empty())) @@ -1105,7 +1105,7 @@ void Spell::SelectImplicitConeTargets(SpellEffIndex effIndex, SpellImplicitTarge std::list targets; SpellTargetObjectTypes objectType = targetType.GetObjectType(); SpellTargetCheckTypes selectionType = targetType.GetCheckType(); - ConditionList* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions; + ConditionContainer* condList = m_spellInfo->Effects[effIndex].ImplicitTargetConditions; float coneAngle = float(M_PI) / 2; float radius = m_spellInfo->Effects[effIndex].CalcRadius(m_caster) * m_spellValue->RadiusMod; @@ -1725,7 +1725,7 @@ void Spell::SelectEffectTypeImplicitTargets(uint8 effIndex) } } -uint32 Spell::GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionList* condList) +uint32 Spell::GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionContainer* condList) { // this function selects which containers need to be searched for spell target uint32 retMask = GRID_MAP_TYPE_MASK_ALL; @@ -1793,7 +1793,7 @@ void Spell::SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* refere } } -WorldObject* Spell::SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList) +WorldObject* Spell::SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionContainer* condList) { WorldObject* target = NULL; uint32 containerTypeMask = GetSearcherTypeMask(objectType, condList); @@ -1805,7 +1805,7 @@ WorldObject* Spell::SearchNearbyTarget(float range, SpellTargetObjectTypes objec return target; } -void Spell::SearchAreaTargets(std::list& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList) +void Spell::SearchAreaTargets(std::list& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionContainer* condList) { uint32 containerTypeMask = GetSearcherTypeMask(objectType, condList); if (!containerTypeMask) @@ -1815,7 +1815,7 @@ void Spell::SearchAreaTargets(std::list& targets, float range, Pos SearchTargets > (searcher, containerTypeMask, m_caster, position, range); } -void Spell::SearchChainTargets(std::list& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionList* condList, bool isChainHeal) +void Spell::SearchChainTargets(std::list& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionContainer* condList, bool isChainHeal) { // max dist for jump target selection float jumpRadius = 0.0f; @@ -4791,7 +4791,7 @@ SpellCastResult Spell::CheckCast(bool strict) { ConditionSourceInfo condInfo = ConditionSourceInfo(m_caster); condInfo.mConditionTargets[1] = m_targets.GetObjectTarget(); - ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL, m_spellInfo->Id); + ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL, m_spellInfo->Id); if (!conditions.empty() && !sConditionMgr->IsObjectMeetToConditions(condInfo, conditions)) { // mLastFailedCondition can be NULL if there was an error processing the condition in Condition::Meets (i.e. wrong data for ConditionTarget or others) @@ -7315,7 +7315,7 @@ namespace Trinity { WorldObjectSpellTargetCheck::WorldObjectSpellTargetCheck(Unit* caster, Unit* referer, SpellInfo const* spellInfo, - SpellTargetCheckTypes selectionType, ConditionList* condList) : _caster(caster), _referer(referer), _spellInfo(spellInfo), + SpellTargetCheckTypes selectionType, ConditionContainer* condList) : _caster(caster), _referer(referer), _spellInfo(spellInfo), _targetSelectionType(selectionType), _condList(condList) { if (condList) @@ -7389,7 +7389,7 @@ bool WorldObjectSpellTargetCheck::operator()(WorldObject* target) } WorldObjectSpellNearbyTargetCheck::WorldObjectSpellNearbyTargetCheck(float range, Unit* caster, SpellInfo const* spellInfo, - SpellTargetCheckTypes selectionType, ConditionList* condList) + SpellTargetCheckTypes selectionType, ConditionContainer* condList) : WorldObjectSpellTargetCheck(caster, caster, spellInfo, selectionType, condList), _range(range), _position(caster) { } bool WorldObjectSpellNearbyTargetCheck::operator()(WorldObject* target) @@ -7404,7 +7404,7 @@ bool WorldObjectSpellNearbyTargetCheck::operator()(WorldObject* target) } WorldObjectSpellAreaTargetCheck::WorldObjectSpellAreaTargetCheck(float range, Position const* position, Unit* caster, - Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList) + Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionContainer* condList) : WorldObjectSpellTargetCheck(caster, referer, spellInfo, selectionType, condList), _range(range), _position(position) { } bool WorldObjectSpellAreaTargetCheck::operator()(WorldObject* target) @@ -7415,7 +7415,7 @@ bool WorldObjectSpellAreaTargetCheck::operator()(WorldObject* target) } WorldObjectSpellConeTargetCheck::WorldObjectSpellConeTargetCheck(float coneAngle, float range, Unit* caster, - SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList) + SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionContainer* condList) : WorldObjectSpellAreaTargetCheck(range, caster, caster, caster, spellInfo, selectionType, condList), _coneAngle(coneAngle) { } bool WorldObjectSpellConeTargetCheck::operator()(WorldObject* target) diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 7def0f5d95..6b96f56c53 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -374,12 +374,12 @@ class Spell void SelectEffectTypeImplicitTargets(uint8 effIndex); - uint32 GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionList* condList); + uint32 GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionContainer* condList); template void SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* referer, Position const* pos, float radius); - WorldObject* SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList = NULL); - void SearchAreaTargets(std::list& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList); - void SearchChainTargets(std::list& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionList* condList, bool isChainHeal); + WorldObject* SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionContainer* condList = NULL); + void SearchAreaTargets(std::list& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionContainer* condList); + void SearchChainTargets(std::list& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionContainer* condList, bool isChainHeal); GameObject* SearchSpellFocus(); @@ -714,10 +714,10 @@ namespace Trinity SpellInfo const* _spellInfo; SpellTargetCheckTypes _targetSelectionType; ConditionSourceInfo* _condSrcInfo; - ConditionList* _condList; + ConditionContainer* _condList; WorldObjectSpellTargetCheck(Unit* caster, Unit* referer, SpellInfo const* spellInfo, - SpellTargetCheckTypes selectionType, ConditionList* condList); + SpellTargetCheckTypes selectionType, ConditionContainer* condList); ~WorldObjectSpellTargetCheck(); bool operator()(WorldObject* target); }; @@ -727,7 +727,7 @@ namespace Trinity float _range; Position const* _position; WorldObjectSpellNearbyTargetCheck(float range, Unit* caster, SpellInfo const* spellInfo, - SpellTargetCheckTypes selectionType, ConditionList* condList); + SpellTargetCheckTypes selectionType, ConditionContainer* condList); bool operator()(WorldObject* target); }; @@ -736,7 +736,7 @@ namespace Trinity float _range; Position const* _position; WorldObjectSpellAreaTargetCheck(float range, Position const* position, Unit* caster, - Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList); + Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionContainer* condList); bool operator()(WorldObject* target); }; @@ -744,7 +744,7 @@ namespace Trinity { float _coneAngle; WorldObjectSpellConeTargetCheck(float coneAngle, float range, Unit* caster, - SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList); + SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionContainer* condList); bool operator()(WorldObject* target); }; diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index e324f136a0..6486a7eada 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -2658,7 +2658,7 @@ void SpellInfo::_UnloadImplicitTargetConditionLists() // find the same instances of ConditionList and delete them. for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { - ConditionList* cur = Effects[i].ImplicitTargetConditions; + ConditionContainer* cur = Effects[i].ImplicitTargetConditions; if (!cur) continue; for (uint8 j = i; j < MAX_SPELL_EFFECTS; ++j) From 31586056034fe730a7a89ddc7200e9087a9440aa Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 25 Oct 2015 11:38:38 +0100 Subject: [PATCH 258/524] Core/Conditions: Optimizations part 1 - use containers more suited for their role (cherry picked from commit 9fa938f3e0df2ca6b9ff4f800a5b41ba18cdd214) --- src/common/Common.h | 15 +++++++++++++++ src/server/game/Conditions/ConditionMgr.cpp | 2 +- src/server/game/Conditions/ConditionMgr.h | 14 +++++++------- src/server/game/Spells/SpellInfo.h | 2 +- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/common/Common.h b/src/common/Common.h index 908cd48782..7a1ea247a9 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -161,4 +161,19 @@ namespace Trinity } } +//! Hash implementation for std::pair to allow using pairs in unordered_set or as key for unordered_map +//! Individual types used in pair must be hashable by boost::hash +namespace std +{ + template + struct hash> + { + public: + size_t operator()(std::pair const& key) const + { + return boost::hash_value(key); + } + }; +} + #endif diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 2a7cdc3d50..32314d92fd 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -2187,7 +2187,7 @@ void ConditionMgr::Clean() NpcVendorConditionContainerStore.clear(); // this is a BIG hack, feel free to fix it if you can figure out the ConditionMgr ;) - for (std::list::const_iterator itr = AllocatedMemoryStore.begin(); itr != AllocatedMemoryStore.end(); ++itr) + for (std::vector::const_iterator itr = AllocatedMemoryStore.begin(); itr != AllocatedMemoryStore.end(); ++itr) delete *itr; AllocatedMemoryStore.clear(); diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index ff429cdbd2..0411e421c5 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -213,13 +213,13 @@ struct Condition std::string ToString(bool ext = false) const; /// For logging purpose }; -typedef std::list ConditionContainer; -typedef std::map ConditionsByEntryMap; -typedef std::map ConditionEntriesByTypeMap; -typedef std::map ConditionEntriesByCreatureIdMap; -typedef std::map, ConditionsByEntryMap> SmartEventConditionContainer; +typedef std::vector ConditionContainer; +typedef std::unordered_map ConditionsByEntryMap; +typedef std::unordered_map ConditionEntriesByTypeMap; +typedef std::unordered_map ConditionEntriesByCreatureIdMap; +typedef std::unordered_map, ConditionsByEntryMap> SmartEventConditionContainer; -typedef std::map ConditionReferenceContainer;//only used for references +typedef std::unordered_map ConditionReferenceContainer;//only used for references class ConditionMgr { @@ -271,7 +271,7 @@ class ConditionMgr static void LogUselessConditionValue(Condition* cond, uint8 index, uint32 value); void Clean(); // free up resources - std::list AllocatedMemoryStore; // some garbage collection :) + std::vector AllocatedMemoryStore; // some garbage collection :) ConditionEntriesByTypeMap ConditionStore; ConditionReferenceContainer ConditionReferenceStore; diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index ecb55b25af..241e7df954 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -249,7 +249,7 @@ public: uint32 ItemType; uint32 TriggerSpell; flag96 SpellClassMask; - std::list* ImplicitTargetConditions; + std::vector* ImplicitTargetConditions; SpellEffectInfo() : _spellInfo(NULL), _effIndex(0), Effect(0), ApplyAuraName(0), Amplitude(0), DieSides(0), RealPointsPerLevel(0), BasePoints(0), PointsPerComboPoint(0), ValueMultiplier(0), DamageMultiplier(0), From 6ab90cc57ddfcda78055c04c72732425834b60a3 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 25 Oct 2015 12:22:04 +0100 Subject: [PATCH 259/524] Core/Conditions: Optimizations part 2 removed unneeded code (cherry picked from commit e5c1e7d71c3460a39317bacbc432adc3307c63ca) --- src/server/game/Conditions/ConditionMgr.cpp | 66 +-------------------- src/server/game/Conditions/ConditionMgr.h | 43 +++++++------- 2 files changed, 23 insertions(+), 86 deletions(-) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 32314d92fd..129078276f 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -663,15 +663,6 @@ ConditionMgr::~ConditionMgr() Clean(); } -ConditionContainer ConditionMgr::GetConditionReferences(uint32 refId) -{ - ConditionContainer conditions; - ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find(refId); - if (ref != ConditionReferenceStore.end()) - conditions = (*ref).second; - return conditions; -} - uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions) { if (conditions.empty()) @@ -995,14 +986,8 @@ void ConditionMgr::LoadConditions(bool isReload) if (iSourceTypeOrReferenceId < 0)//it is a reference template { - uint32 uRefId = abs(iSourceTypeOrReferenceId); - if (ConditionReferenceStore.find(uRefId) == ConditionReferenceStore.end())//make sure we have a list for our conditions, based on reference id - { - ConditionContainer mCondList; - ConditionReferenceStore[uRefId] = mCondList; - } - ConditionReferenceStore[uRefId].push_back(cond);//add to reference storage - count++; + ConditionReferenceStore[std::abs(iSourceTypeOrReferenceId)].push_back(cond);//add to reference storage + ++count; continue; }//end of reference templates @@ -1138,20 +1123,6 @@ void ConditionMgr::LoadConditions(bool isReload) } //handle not grouped conditions - //make sure we have a storage list for our SourceType - if (ConditionStore.find(cond->SourceType) == ConditionStore.end()) - { - ConditionsByEntryMap mTypeMap; - ConditionStore[cond->SourceType] = mTypeMap;//add new empty list for SourceType - } - - //make sure we have a condition list for our SourceType's entry - if (ConditionStore[cond->SourceType].find(cond->SourceEntry) == ConditionStore[cond->SourceType].end()) - { - ConditionContainer mCondList; - ConditionStore[cond->SourceType][cond->SourceEntry] = mCondList; - } - //add new Condition to storage based on Type/Entry ConditionStore[cond->SourceType][cond->SourceEntry].push_back(cond); ++count; @@ -2113,76 +2084,43 @@ void ConditionMgr::LogUselessConditionValue(Condition* cond, uint8 index, uint32 void ConditionMgr::Clean() { for (ConditionReferenceContainer::iterator itr = ConditionReferenceStore.begin(); itr != ConditionReferenceStore.end(); ++itr) - { for (ConditionContainer::const_iterator it = itr->second.begin(); it != itr->second.end(); ++it) delete *it; - itr->second.clear(); - } ConditionReferenceStore.clear(); for (ConditionEntriesByTypeMap::iterator itr = ConditionStore.begin(); itr != ConditionStore.end(); ++itr) - { for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) - { for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; - it->second.clear(); - } - itr->second.clear(); - } ConditionStore.clear(); for (ConditionEntriesByCreatureIdMap::iterator itr = VehicleSpellConditionStore.begin(); itr != VehicleSpellConditionStore.end(); ++itr) - { for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) - { for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; - it->second.clear(); - } - itr->second.clear(); - } VehicleSpellConditionStore.clear(); for (SmartEventConditionContainer::iterator itr = SmartEventConditionStore.begin(); itr != SmartEventConditionStore.end(); ++itr) - { for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) - { for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; - it->second.clear(); - } - itr->second.clear(); - } SmartEventConditionStore.clear(); for (ConditionEntriesByCreatureIdMap::iterator itr = SpellClickEventConditionStore.begin(); itr != SpellClickEventConditionStore.end(); ++itr) - { for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) - { for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; - it->second.clear(); - } - itr->second.clear(); - } SpellClickEventConditionStore.clear(); for (ConditionEntriesByCreatureIdMap::iterator itr = NpcVendorConditionContainerStore.begin(); itr != NpcVendorConditionContainerStore.end(); ++itr) - { for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) - { for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) delete *i; - it->second.clear(); - } - itr->second.clear(); - } NpcVendorConditionContainerStore.clear(); diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 0411e421c5..28c7a70983 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -158,13 +158,13 @@ enum MaxConditionTargets struct ConditionSourceInfo { WorldObject* mConditionTargets[MAX_CONDITION_TARGETS]; // an array of targets available for conditions - Condition* mLastFailedCondition; - ConditionSourceInfo(WorldObject* target0, WorldObject* target1 = NULL, WorldObject* target2 = NULL) + Condition const* mLastFailedCondition; + ConditionSourceInfo(WorldObject* target0, WorldObject* target1 = nullptr, WorldObject* target2 = nullptr) { mConditionTargets[0] = target0; mConditionTargets[1] = target1; mConditionTargets[2] = target2; - mLastFailedCondition = NULL; + mLastFailedCondition = nullptr; } }; @@ -205,10 +205,10 @@ struct Condition NegativeCondition = false; } - bool Meets(ConditionSourceInfo& sourceInfo); - uint32 GetSearcherTypeMaskForCondition(); + bool Meets(ConditionSourceInfo& sourceInfo) const; + uint32 GetSearcherTypeMaskForCondition() const; bool isLoaded() const { return ConditionType > CONDITION_NONE || ReferenceId; } - uint32 GetMaxAvailableConditionTargets(); + uint32 GetMaxAvailableConditionTargets() const; std::string ToString(bool ext = false) const; /// For logging purpose }; @@ -236,19 +236,18 @@ class ConditionMgr void LoadConditions(bool isReload = false); bool isConditionTypeValid(Condition* cond); - ConditionContainer GetConditionReferences(uint32 refId); uint32 GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions); - bool IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions); - bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions); - bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions); + bool IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions) const; + bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions) const; + bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const; static bool CanHaveSourceGroupSet(ConditionSourceType sourceType); static bool CanHaveSourceIdSet(ConditionSourceType sourceType); - ConditionContainer GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry); - ConditionContainer GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId); - ConditionContainer GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType); - ConditionContainer GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId); - ConditionContainer GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId); + ConditionContainer GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const; + ConditionContainer GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const; + ConditionContainer GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType) const; + ConditionContainer GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId) const; + ConditionContainer GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId) const; struct ConditionTypeInfo { @@ -257,16 +256,16 @@ class ConditionMgr bool HasConditionValue2; bool HasConditionValue3; }; - static char const* StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX]; + static char const* const StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX]; static ConditionTypeInfo const StaticConditionTypeData[CONDITION_MAX]; private: - bool isSourceTypeValid(Condition* cond); - bool addToLootTemplate(Condition* cond, LootTemplate* loot); - bool addToGossipMenus(Condition* cond); - bool addToGossipMenuItems(Condition* cond); - bool addToSpellImplicitTargetConditions(Condition* cond); - bool IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions); + bool isSourceTypeValid(Condition* cond) const; + bool addToLootTemplate(Condition* cond, LootTemplate* loot) const; + bool addToGossipMenus(Condition* cond) const; + bool addToGossipMenuItems(Condition* cond) const; + bool addToSpellImplicitTargetConditions(Condition* cond) const; + bool IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const; static void LogUselessConditionValue(Condition* cond, uint8 index, uint32 value); From 57c4b3d42cbd5052313ef30ecc803d276985810a Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 25 Oct 2015 12:22:53 +0100 Subject: [PATCH 260/524] Core/Conditions: Add const to methods not modifying ConditionMgr (cherry picked from commit 2cce998e905bed0873fbf0b3da981857c139e5d5) --- src/server/game/Conditions/ConditionMgr.cpp | 36 ++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 129078276f..ca18318a0e 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -28,7 +28,7 @@ #include "SpellAuras.h" #include "SpellMgr.h" -char const* ConditionMgr::StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX] = +char const* const ConditionMgr::StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX] = { "None", "Creature Loot", @@ -105,7 +105,7 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND // Checks if object meets the condition // Can have CONDITION_SOURCE_TYPE_NONE && !mReferenceId if called from a special event (ie: eventAI) -bool Condition::Meets(ConditionSourceInfo& sourceInfo) +bool Condition::Meets(ConditionSourceInfo& sourceInfo) const { ASSERT(ConditionTarget < MAX_CONDITION_TARGETS); WorldObject* object = sourceInfo.mConditionTargets[ConditionTarget]; @@ -445,7 +445,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) return condMeets && script; } -uint32 Condition::GetSearcherTypeMaskForCondition() +uint32 Condition::GetSearcherTypeMaskForCondition() const { // build mask of types for which condition can return true // this is used for speeding up gridsearches @@ -607,7 +607,7 @@ uint32 Condition::GetSearcherTypeMaskForCondition() return mask; } -uint32 Condition::GetMaxAvailableConditionTargets() +uint32 Condition::GetMaxAvailableConditionTargets() const { // returns number of targets which are available for given source type switch (SourceType) @@ -703,7 +703,7 @@ uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionContainer cons return mask; } -bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) +bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const { // groupId, groupCheckPassed std::map ElseGroupStore; @@ -749,19 +749,19 @@ bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, return false; } -bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions) +bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions) const { ConditionSourceInfo srcInfo = ConditionSourceInfo(object); return IsObjectMeetToConditions(srcInfo, conditions); } -bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions) +bool ConditionMgr::IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions) const { ConditionSourceInfo srcInfo = ConditionSourceInfo(object1, object2); return IsObjectMeetToConditions(srcInfo, conditions); } -bool ConditionMgr::IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) +bool ConditionMgr::IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const { if (conditions.empty()) return true; @@ -798,7 +798,7 @@ bool ConditionMgr::CanHaveSourceIdSet(ConditionSourceType sourceType) return (sourceType == CONDITION_SOURCE_TYPE_SMART_EVENT); } -ConditionContainer ConditionMgr::GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) +ConditionContainer ConditionMgr::GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const { ConditionContainer spellCond; if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX) @@ -817,7 +817,7 @@ ConditionContainer ConditionMgr::GetConditionsForNotGroupedEntry(ConditionSource return spellCond; } -ConditionContainer ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) +ConditionContainer ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const { ConditionContainer cond; ConditionEntriesByCreatureIdMap::const_iterator itr = SpellClickEventConditionStore.find(creatureId); @@ -833,7 +833,7 @@ ConditionContainer ConditionMgr::GetConditionsForSpellClickEvent(uint32 creature return cond; } -ConditionContainer ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId) +ConditionContainer ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId) const { ConditionContainer cond; ConditionEntriesByCreatureIdMap::const_iterator itr = VehicleSpellConditionStore.find(creatureId); @@ -849,7 +849,7 @@ ConditionContainer ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureId, return cond; } -ConditionContainer ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType) +ConditionContainer ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType) const { ConditionContainer cond; SmartEventConditionContainer::const_iterator itr = SmartEventConditionStore.find(std::make_pair(entryOrGuid, sourceType)); @@ -865,7 +865,7 @@ ConditionContainer ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, u return cond; } -ConditionContainer ConditionMgr::GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId) +ConditionContainer ConditionMgr::GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId) const { ConditionContainer cond; ConditionEntriesByCreatureIdMap::const_iterator itr = NpcVendorConditionContainerStore.find(creatureId); @@ -1132,7 +1132,7 @@ void ConditionMgr::LoadConditions(bool isReload) TC_LOG_INFO("server.loading", ">> Loaded %u conditions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } -bool ConditionMgr::addToLootTemplate(Condition* cond, LootTemplate* loot) +bool ConditionMgr::addToLootTemplate(Condition* cond, LootTemplate* loot) const { if (!loot) { @@ -1147,7 +1147,7 @@ bool ConditionMgr::addToLootTemplate(Condition* cond, LootTemplate* loot) return false; } -bool ConditionMgr::addToGossipMenus(Condition* cond) +bool ConditionMgr::addToGossipMenus(Condition* cond) const { GossipMenusMapBoundsNonConst pMenuBounds = sObjectMgr->GetGossipMenusMapBoundsNonConst(cond->SourceGroup); @@ -1167,7 +1167,7 @@ bool ConditionMgr::addToGossipMenus(Condition* cond) return false; } -bool ConditionMgr::addToGossipMenuItems(Condition* cond) +bool ConditionMgr::addToGossipMenuItems(Condition* cond) const { GossipMenuItemsMapBoundsNonConst pMenuItemBounds = sObjectMgr->GetGossipMenuItemsMapBoundsNonConst(cond->SourceGroup); if (pMenuItemBounds.first != pMenuItemBounds.second) @@ -1186,7 +1186,7 @@ bool ConditionMgr::addToGossipMenuItems(Condition* cond) return false; } -bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond) +bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond) const { uint32 conditionEffMask = cond->SourceGroup; SpellInfo* spellInfo = const_cast(sSpellMgr->EnsureSpellInfo(cond->SourceEntry)); @@ -1269,7 +1269,7 @@ bool ConditionMgr::addToSpellImplicitTargetConditions(Condition* cond) return true; } -bool ConditionMgr::isSourceTypeValid(Condition* cond) +bool ConditionMgr::isSourceTypeValid(Condition* cond) const { if (cond->SourceType == CONDITION_SOURCE_TYPE_NONE || cond->SourceType >= CONDITION_SOURCE_TYPE_MAX) { From cba122ad94af5081fa748c5d77842dd5205e7b67 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 25 Oct 2015 13:20:28 +0100 Subject: [PATCH 261/524] Core/Conditions: Optimizations part 3 removed copying condition containers all over the place (cherry picked from commit b09e63e9debfab49e635a591339294dd96b09d95) --- src/server/game/AI/CoreAI/CombatAI.cpp | 12 +- src/server/game/AI/CoreAI/CombatAI.h | 2 +- .../game/AI/SmartScripts/SmartScript.cpp | 12 +- src/server/game/Conditions/ConditionMgr.cpp | 139 +++++++++++------- src/server/game/Conditions/ConditionMgr.h | 18 ++- src/server/game/Entities/Player/Player.cpp | 39 +++-- src/server/game/Entities/Unit/Unit.cpp | 8 +- src/server/game/Handlers/ItemHandler.cpp | 3 +- src/server/game/Scripting/ScriptMgr.cpp | 2 +- src/server/game/Scripting/ScriptMgr.h | 4 +- src/server/game/Spells/Auras/SpellAuras.cpp | 4 +- src/server/game/Spells/Spell.cpp | 6 +- 12 files changed, 131 insertions(+), 118 deletions(-) diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp index 7efed2976c..9d76ee5573 100644 --- a/src/server/game/AI/CoreAI/CombatAI.cpp +++ b/src/server/game/AI/CoreAI/CombatAI.cpp @@ -259,7 +259,7 @@ void TurretAI::UpdateAI(uint32 /*diff*/) // VehicleAI ////////////// -VehicleAI::VehicleAI(Creature* creature) : CreatureAI(creature), m_ConditionsTimer(VEHICLE_CONDITION_CHECK_TIME) +VehicleAI::VehicleAI(Creature* creature) : CreatureAI(creature), m_HasConditions(false), m_ConditionsTimer(VEHICLE_CONDITION_CHECK_TIME) { LoadConditions(); m_DoDismiss = false; @@ -285,7 +285,7 @@ void VehicleAI::UpdateAI(uint32 diff) void VehicleAI::OnCharmed(bool apply) { - if (!me->GetVehicleKit()->IsVehicleInUse() && !apply && !conditions.empty()) // was used and has conditions + if (!me->GetVehicleKit()->IsVehicleInUse() && !apply && m_HasConditions) // was used and has conditions { m_DoDismiss = true; // needs reset } @@ -297,16 +297,14 @@ void VehicleAI::OnCharmed(bool apply) void VehicleAI::LoadConditions() { - conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE, me->GetEntry()); - if (!conditions.empty()) - TC_LOG_DEBUG("condition", "VehicleAI::LoadConditions: loaded %u conditions", uint32(conditions.size())); + m_HasConditions = sConditionMgr->HasConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE, me->GetEntry()); } void VehicleAI::CheckConditions(uint32 diff) { if (m_ConditionsTimer < diff) { - if (!conditions.empty()) + if (m_HasConditions) { if (Vehicle* vehicleKit = me->GetVehicleKit()) for (SeatMap::iterator itr = vehicleKit->Seats.begin(); itr != vehicleKit->Seats.end(); ++itr) @@ -314,7 +312,7 @@ void VehicleAI::CheckConditions(uint32 diff) { if (Player* player = passenger->ToPlayer()) { - if (!sConditionMgr->IsObjectMeetToConditions(player, me, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE, me->GetEntry(), player, me)) { player->ExitVehicle(); return; // check other pessanger in next tick diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h index 647916e0b0..26b5db3e7c 100644 --- a/src/server/game/AI/CoreAI/CombatAI.h +++ b/src/server/game/AI/CoreAI/CombatAI.h @@ -112,7 +112,7 @@ struct VehicleAI : public CreatureAI private: void LoadConditions(); void CheckConditions(uint32 diff); - ConditionContainer conditions; + bool m_HasConditions; uint32 m_ConditionsTimer; bool m_DoDismiss; uint32 m_DismissTimer; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index f79641c515..6a3e978e50 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -89,13 +89,8 @@ void SmartScript::ProcessEventsFor(SMART_EVENT e, Unit* unit, uint32 var0, uint3 continue; if (eventType == e /*&& (!i->event.event_phase_mask || IsInPhase(i->event.event_phase_mask)) && !(i->event.event_flags & SMART_EVENT_FLAG_NOT_REPEATABLE && i->runOnce)*/) - { - ConditionContainer conds = sConditionMgr->GetConditionsForSmartEvent(i->entryOrGuid, i->event_id, i->source_type); - ConditionSourceInfo info = ConditionSourceInfo(unit, GetBaseObject()); - - if (sConditionMgr->IsObjectMeetToConditions(info, conds)) + if (sConditionMgr->IsObjectMeetingSmartEventConditions(i->entryOrGuid, i->event_id, i->source_type, unit, GetBaseObject())) ProcessEvent(*i, unit, var0, var1, bvar, spell, gob); - } } } @@ -2322,10 +2317,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u void SmartScript::ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit, uint32 var0, uint32 var1, bool bvar, const SpellInfo* spell, GameObject* gob) { - ConditionContainer const conds = sConditionMgr->GetConditionsForSmartEvent(e.entryOrGuid, e.event_id, e.source_type); - ConditionSourceInfo info = ConditionSourceInfo(unit, GetBaseObject()); - - if (sConditionMgr->IsObjectMeetToConditions(info, conds)) + if (sConditionMgr->IsObjectMeetingSmartEventConditions(e.entryOrGuid, e.event_id, e.source_type, unit, GetBaseObject())) ProcessAction(e, unit, var0, var1, bvar, spell, gob); RecalcTimer(e, min, max); diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index ca18318a0e..a6af028098 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -663,41 +663,41 @@ ConditionMgr::~ConditionMgr() Clean(); } -uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions) +uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions) const { if (conditions.empty()) return GRID_MAP_TYPE_MASK_ALL; // groupId, typeMask - std::map ElseGroupStore; + std::map elseGroupSearcherTypeMasks; for (ConditionContainer::const_iterator i = conditions.begin(); i != conditions.end(); ++i) { // no point of having not loaded conditions in list ASSERT((*i)->isLoaded() && "ConditionMgr::GetSearcherTypeMaskForConditionList - not yet loaded condition found in list"); - std::map::const_iterator itr = ElseGroupStore.find((*i)->ElseGroup); + std::map::const_iterator itr = elseGroupSearcherTypeMasks.find((*i)->ElseGroup); // group not filled yet, fill with widest mask possible - if (itr == ElseGroupStore.end()) - ElseGroupStore[(*i)->ElseGroup] = GRID_MAP_TYPE_MASK_ALL; + if (itr == elseGroupSearcherTypeMasks.end()) + elseGroupSearcherTypeMasks[(*i)->ElseGroup] = GRID_MAP_TYPE_MASK_ALL; // no point of checking anymore, empty mask - else if (!(*itr).second) + else if (!itr->second) continue; if ((*i)->ReferenceId) // handle reference { ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find((*i)->ReferenceId); ASSERT(ref != ConditionReferenceStore.end() && "ConditionMgr::GetSearcherTypeMaskForConditionList - incorrect reference"); - ElseGroupStore[(*i)->ElseGroup] &= GetSearcherTypeMaskForConditionList((*ref).second); + elseGroupSearcherTypeMasks[(*i)->ElseGroup] &= GetSearcherTypeMaskForConditionList((*ref).second); } else // handle normal condition { // object will match conditions in one ElseGroupStore only when it matches all of them // so, let's find a smallest possible mask which satisfies all conditions - ElseGroupStore[(*i)->ElseGroup] &= (*i)->GetSearcherTypeMaskForCondition(); + elseGroupSearcherTypeMasks[(*i)->ElseGroup] &= (*i)->GetSearcherTypeMaskForCondition(); } } // object will match condition when one of the checks in ElseGroupStore is matching // so, let's include all possible masks uint32 mask = 0; - for (std::map::const_iterator i = ElseGroupStore.begin(); i != ElseGroupStore.end(); ++i) + for (std::map::const_iterator i = elseGroupSearcherTypeMasks.begin(); i != elseGroupSearcherTypeMasks.end(); ++i) mask |= i->second; return mask; @@ -706,43 +706,43 @@ uint32 ConditionMgr::GetSearcherTypeMaskForConditionList(ConditionContainer cons bool ConditionMgr::IsObjectMeetToConditionList(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const { // groupId, groupCheckPassed - std::map ElseGroupStore; - for (ConditionContainer::const_iterator i = conditions.begin(); i != conditions.end(); ++i) + std::map elseGroupStore; + for (Condition const* condition : conditions) { - TC_LOG_DEBUG("condition", "ConditionMgr::IsPlayerMeetToConditionList %s val1: %u", (*i)->ToString().c_str(), (*i)->ConditionValue1); - if ((*i)->isLoaded()) + TC_LOG_DEBUG("condition", "ConditionMgr::IsPlayerMeetToConditionList %s val1: %u", condition->ToString().c_str(), condition->ConditionValue1); + if (condition->isLoaded()) { //! Find ElseGroup in ElseGroupStore - std::map::const_iterator itr = ElseGroupStore.find((*i)->ElseGroup); + std::map::const_iterator itr = elseGroupStore.find(condition->ElseGroup); //! If not found, add an entry in the store and set to true (placeholder) - if (itr == ElseGroupStore.end()) - ElseGroupStore[(*i)->ElseGroup] = true; + if (itr == elseGroupStore.end()) + elseGroupStore[condition->ElseGroup] = true; else if (!(*itr).second) continue; - if ((*i)->ReferenceId)//handle reference + if (condition->ReferenceId)//handle reference { - ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find((*i)->ReferenceId); + ConditionReferenceContainer::const_iterator ref = ConditionReferenceStore.find(condition->ReferenceId); if (ref != ConditionReferenceStore.end()) { - if (!IsObjectMeetToConditionList(sourceInfo, (*ref).second)) - ElseGroupStore[(*i)->ElseGroup] = false; + if (!IsObjectMeetToConditionList(sourceInfo, ref->second)) + elseGroupStore[condition->ElseGroup] = false; } else { TC_LOG_DEBUG("condition", "ConditionMgr::IsPlayerMeetToConditionList %s Reference template -%u not found", - (*i)->ToString().c_str(), (*i)->ReferenceId); // checked at loading, should never happen + condition->ToString().c_str(), condition->ReferenceId); // checked at loading, should never happen } } else //handle normal condition { - if (!(*i)->Meets(sourceInfo)) - ElseGroupStore[(*i)->ElseGroup] = false; + if (!condition->Meets(sourceInfo)) + elseGroupStore[condition->ElseGroup] = false; } } } - for (std::map::const_iterator i = ElseGroupStore.begin(); i != ElseGroupStore.end(); ++i) + for (std::map::const_iterator i = elseGroupStore.begin(); i != elseGroupStore.end(); ++i) if (i->second) return true; @@ -798,87 +798,120 @@ bool ConditionMgr::CanHaveSourceIdSet(ConditionSourceType sourceType) return (sourceType == CONDITION_SOURCE_TYPE_SMART_EVENT); } -ConditionContainer ConditionMgr::GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const +bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, ConditionSourceInfo& sourceInfo) const { - ConditionContainer spellCond; if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX) { ConditionEntriesByTypeMap::const_iterator itr = ConditionStore.find(sourceType); if (itr != ConditionStore.end()) { - ConditionsByEntryMap::const_iterator i = (*itr).second.find(entry); - if (i != (*itr).second.end()) + ConditionsByEntryMap::const_iterator i = itr->second.find(entry); + if (i != itr->second.end()) { - spellCond = (*i).second; TC_LOG_DEBUG("condition", "GetConditionsForNotGroupedEntry: found conditions for type %u and entry %u", uint32(sourceType), entry); + return IsObjectMeetToConditions(sourceInfo, i->second); } } } - return spellCond; + + return true; } -ConditionContainer ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const +bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, WorldObject* target0, WorldObject* target1 /*= nullptr*/, WorldObject* target2 /*= nullptr*/) const +{ + ConditionSourceInfo conditionSource(target0, target1, target2); + return IsObjectMeetingNotGroupedConditions(sourceType, entry, conditionSource); +} + +bool ConditionMgr::HasConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const +{ + if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX) + { + ConditionEntriesByTypeMap::const_iterator itr = ConditionStore.find(sourceType); + if (itr != ConditionStore.end()) + if (itr->second.find(entry) != itr->second.end()) + return true; + } + return false; +} + +bool ConditionMgr::IsObjectMeetingSpellClickConditions(uint32 creatureId, uint32 spellId, WorldObject* clicker, WorldObject* target) const { - ConditionContainer cond; ConditionEntriesByCreatureIdMap::const_iterator itr = SpellClickEventConditionStore.find(creatureId); if (itr != SpellClickEventConditionStore.end()) { - ConditionsByEntryMap::const_iterator i = (*itr).second.find(spellId); - if (i != (*itr).second.end()) + ConditionsByEntryMap::const_iterator i = itr->second.find(spellId); + if (i != itr->second.end()) { - cond = (*i).second; TC_LOG_DEBUG("condition", "GetConditionsForSpellClickEvent: found conditions for SpellClickEvent entry %u spell %u", creatureId, spellId); + ConditionSourceInfo sourceInfo(clicker, target); + return IsObjectMeetToConditions(sourceInfo, i->second); } } - return cond; + return true; } -ConditionContainer ConditionMgr::GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId) const +ConditionContainer const* ConditionMgr::GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const +{ + ConditionEntriesByCreatureIdMap::const_iterator itr = SpellClickEventConditionStore.find(creatureId); + if (itr != SpellClickEventConditionStore.end()) + { + ConditionsByEntryMap::const_iterator i = itr->second.find(spellId); + if (i != itr->second.end()) + { + TC_LOG_DEBUG("condition", "GetConditionsForSpellClickEvent: found conditions for SpellClickEvent entry %u spell %u", creatureId, spellId); + return &i->second; + } + } + return nullptr; +} + +bool ConditionMgr::IsObjectMeetingVehicleSpellConditions(uint32 creatureId, uint32 spellId, Player* player, Unit* vehicle) const { - ConditionContainer cond; ConditionEntriesByCreatureIdMap::const_iterator itr = VehicleSpellConditionStore.find(creatureId); if (itr != VehicleSpellConditionStore.end()) { - ConditionsByEntryMap::const_iterator i = (*itr).second.find(spellId); - if (i != (*itr).second.end()) + ConditionsByEntryMap::const_iterator i = itr->second.find(spellId); + if (i != itr->second.end()) { - cond = (*i).second; TC_LOG_DEBUG("condition", "GetConditionsForVehicleSpell: found conditions for Vehicle entry %u spell %u", creatureId, spellId); + ConditionSourceInfo sourceInfo(player, vehicle); + return IsObjectMeetToConditions(sourceInfo, i->second); } } - return cond; + return true; } -ConditionContainer ConditionMgr::GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType) const +bool ConditionMgr::IsObjectMeetingSmartEventConditions(int32 entryOrGuid, uint32 eventId, uint32 sourceType, Unit* unit, WorldObject* baseObject) const { - ConditionContainer cond; SmartEventConditionContainer::const_iterator itr = SmartEventConditionStore.find(std::make_pair(entryOrGuid, sourceType)); if (itr != SmartEventConditionStore.end()) { - ConditionsByEntryMap::const_iterator i = (*itr).second.find(eventId + 1); - if (i != (*itr).second.end()) + ConditionsByEntryMap::const_iterator i = itr->second.find(eventId + 1); + if (i != itr->second.end()) { - cond = (*i).second; TC_LOG_DEBUG("condition", "GetConditionsForSmartEvent: found conditions for Smart Event entry or guid %d eventId %u", entryOrGuid, eventId); + ConditionSourceInfo sourceInfo(unit, baseObject); + return IsObjectMeetToConditions(sourceInfo, i->second); } } - return cond; + return true; } -ConditionContainer ConditionMgr::GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId) const +bool ConditionMgr::IsObjectMeetingVendorItemConditions(uint32 creatureId, uint32 itemId, Player* player, Creature* vendor) const { - ConditionContainer cond; ConditionEntriesByCreatureIdMap::const_iterator itr = NpcVendorConditionContainerStore.find(creatureId); if (itr != NpcVendorConditionContainerStore.end()) { ConditionsByEntryMap::const_iterator i = (*itr).second.find(itemId); if (i != (*itr).second.end()) { - cond = (*i).second; TC_LOG_DEBUG("condition", "GetConditionsForNpcVendorEvent: found conditions for creature entry %u item %u", creatureId, itemId); + ConditionSourceInfo sourceInfo(player, vendor); + return IsObjectMeetToConditions(sourceInfo, i->second); } } - return cond; + return true; } void ConditionMgr::LoadConditions(bool isReload) @@ -1621,7 +1654,7 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) const return true; } -bool ConditionMgr::isConditionTypeValid(Condition* cond) +bool ConditionMgr::isConditionTypeValid(Condition* cond) const { if (cond->ConditionType == CONDITION_NONE || cond->ConditionType >= CONDITION_MAX) { diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 28c7a70983..0f60f2e3c4 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -21,6 +21,7 @@ #include "Common.h" +class Creature; class Player; class Unit; class WorldObject; @@ -235,19 +236,22 @@ class ConditionMgr } void LoadConditions(bool isReload = false); - bool isConditionTypeValid(Condition* cond); + bool isConditionTypeValid(Condition* cond) const; - uint32 GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions); + uint32 GetSearcherTypeMaskForConditionList(ConditionContainer const& conditions) const; bool IsObjectMeetToConditions(WorldObject* object, ConditionContainer const& conditions) const; bool IsObjectMeetToConditions(WorldObject* object1, WorldObject* object2, ConditionContainer const& conditions) const; bool IsObjectMeetToConditions(ConditionSourceInfo& sourceInfo, ConditionContainer const& conditions) const; static bool CanHaveSourceGroupSet(ConditionSourceType sourceType); static bool CanHaveSourceIdSet(ConditionSourceType sourceType); - ConditionContainer GetConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const; - ConditionContainer GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const; - ConditionContainer GetConditionsForSmartEvent(int32 entryOrGuid, uint32 eventId, uint32 sourceType) const; - ConditionContainer GetConditionsForVehicleSpell(uint32 creatureId, uint32 spellId) const; - ConditionContainer GetConditionsForNpcVendorEvent(uint32 creatureId, uint32 itemId) const; + bool IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, ConditionSourceInfo& sourceInfo) const; + bool IsObjectMeetingNotGroupedConditions(ConditionSourceType sourceType, uint32 entry, WorldObject* target0, WorldObject* target1 = nullptr, WorldObject* target2 = nullptr) const; + bool HasConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const; + bool IsObjectMeetingSpellClickConditions(uint32 creatureId, uint32 spellId, WorldObject* clicker, WorldObject* target) const; + ConditionContainer const* GetConditionsForSpellClickEvent(uint32 creatureId, uint32 spellId) const; + bool IsObjectMeetingVehicleSpellConditions(uint32 creatureId, uint32 spellId, Player* player, Unit* vehicle) const; + bool IsObjectMeetingSmartEventConditions(int32 entryOrGuid, uint32 eventId, uint32 sourceType, Unit* unit, WorldObject* baseObject) const; + bool IsObjectMeetingVendorItemConditions(uint32 creatureId, uint32 itemId, Player* player, Creature* vendor) const; struct ConditionTypeInfo { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3670c1e859..37df45acfd 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15643,8 +15643,7 @@ bool Player::SatisfyQuestStatus(Quest const* qInfo, bool msg) bool Player::SatisfyQuestConditions(Quest const* qInfo, bool msg) { - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_ACCEPT, qInfo->GetQuestId()); - if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_ACCEPT, qInfo->GetQuestId(), this)) { if (msg) { @@ -16075,8 +16074,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) if (!quest) continue; - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); - if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId(), this)) continue; QuestStatus status = GetQuestStatus(questId); @@ -16103,8 +16101,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) if (!quest) continue; - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId()); - if (!sConditionMgr->IsObjectMeetToConditions(this, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_QUEST_SHOW_MARK, quest->GetQuestId(), this)) continue; QuestStatus status = GetQuestStatus(questId); @@ -20685,8 +20682,7 @@ void Player::VehicleSpellInitialize() continue; } - ConditionContainer conditions = sConditionMgr->GetConditionsForVehicleSpell(vehicle->GetEntry(), spellId); - if (!sConditionMgr->IsObjectMeetToConditions(this, vehicle, conditions)) + if (!sConditionMgr->IsObjectMeetingVehicleSpellConditions(vehicle->GetEntry(), spellId, this, vehicle)) { TC_LOG_DEBUG("condition", "VehicleSpellInitialize: conditions not met for Vehicle entry %u spell %u", vehicle->ToCreature()->GetEntry(), spellId); data << uint16(0) << uint8(0) << uint8(i+8); @@ -21538,8 +21534,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin return false; } - ConditionContainer conditions = sConditionMgr->GetConditionsForNpcVendorEvent(creature->GetEntry(), item); - if (!sConditionMgr->IsObjectMeetToConditions(this, creature, conditions)) + if (!sConditionMgr->IsObjectMeetingVendorItemConditions(creature->GetEntry(), item, this, creature)) { TC_LOG_DEBUG("condition", "BuyItemFromVendor: conditions not met for creature entry %u item %u", creature->GetEntry(), item); SendBuyError(BUY_ERR_CANT_FIND_ITEM, creature, item, 0); @@ -23353,16 +23348,18 @@ void Player::UpdateForQuestWorldObjects() { //! This code doesn't look right, but it was logically converted to condition system to do the exact //! same thing it did before. It definitely needs to be overlooked for intended functionality. - ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId); - bool buildUpdateBlock = false; - for (ConditionContainer::const_iterator jtr = conds.begin(); jtr != conds.end() && !buildUpdateBlock; ++jtr) - if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN) - buildUpdateBlock = true; - - if (buildUpdateBlock) + if (ConditionContainer const* conds = sConditionMgr->GetConditionsForSpellClickEvent(obj->GetEntry(), _itr->second.spellId)) { - obj->BuildValuesUpdateBlockForPlayer(&udata, this); - break; + bool buildUpdateBlock = false; + for (ConditionContainer::const_iterator jtr = conds->begin(); jtr != conds->end() && !buildUpdateBlock; ++jtr) + if ((*jtr)->ConditionType == CONDITION_QUESTREWARDED || (*jtr)->ConditionType == CONDITION_QUESTTAKEN) + buildUpdateBlock = true; + + if (buildUpdateBlock) + { + obj->BuildValuesUpdateBlockForPlayer(&udata, this); + break; + } } } } @@ -25287,9 +25284,7 @@ bool Player::CanSeeSpellClickOn(Creature const* c) const if (!itr->second.IsFitToRequirements(this, c)) return false; - ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(c->GetEntry(), itr->second.spellId); - ConditionSourceInfo info = ConditionSourceInfo(const_cast(this), const_cast(c)); - if (sConditionMgr->IsObjectMeetToConditions(info, conds)) + if (sConditionMgr->IsObjectMeetingSpellClickConditions(c->GetEntry(), itr->second.spellId, const_cast(this), const_cast(c))) return true; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9c6dccaf5e..77615aa704 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14181,9 +14181,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u continue; // do checks using conditions table - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, spellProto->Id); - ConditionSourceInfo condInfo = ConditionSourceInfo(eventInfo.GetActor(), eventInfo.GetActionTarget()); - if (!sConditionMgr->IsObjectMeetToConditions(condInfo, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPELL_PROC, spellProto->Id, eventInfo.GetActor(), eventInfo.GetActionTarget())) continue; // AuraScript Hook @@ -16887,9 +16885,7 @@ bool Unit::HandleSpellClick(Unit* clicker, int8 seatId) continue; //! Check database conditions - ConditionContainer conds = sConditionMgr->GetConditionsForSpellClickEvent(spellClickEntry, itr->second.spellId); - ConditionSourceInfo info = ConditionSourceInfo(clicker, this); - if (!sConditionMgr->IsObjectMeetToConditions(info, conds)) + if (!sConditionMgr->IsObjectMeetingSpellClickConditions(spellClickEntry, itr->second.spellId, clicker, this)) continue; Unit* caster = (itr->second.castFlags & NPC_CLICK_CAST_CASTER_CLICKER) ? clicker : this; diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 6efaf5aab3..b1f46c381b 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -786,8 +786,7 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) if (!_player->IsGameMaster() && !leftInStock) continue; - ConditionContainer conditions = sConditionMgr->GetConditionsForNpcVendorEvent(vendor->GetEntry(), item->item); - if (!sConditionMgr->IsObjectMeetToConditions(_player, vendor, conditions)) + if (!sConditionMgr->IsObjectMeetingVendorItemConditions(vendor->GetEntry(), item->item, _player, vendor)) { TC_LOG_DEBUG("condition", "SendListInventory: conditions not met for creature entry %u item %u", vendor->GetEntry(), item->item); continue; diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index f2613b0267..c47df97369 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1034,7 +1034,7 @@ void ScriptMgr::OnAuctionExpire(AuctionHouseObject* ah, AuctionEntry* entry) FOREACH_SCRIPT(AuctionHouseScript)->OnAuctionExpire(ah, entry); } -bool ScriptMgr::OnConditionCheck(Condition* condition, ConditionSourceInfo& sourceInfo) +bool ScriptMgr::OnConditionCheck(Condition const* condition, ConditionSourceInfo& sourceInfo) { ASSERT(condition); diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index a2024a5ccb..025cedd84e 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -603,7 +603,7 @@ class ConditionScript : public ScriptObject bool IsDatabaseBound() const final override { return true; } // Called when a single condition is checked for a player. - virtual bool OnConditionCheck(Condition* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; } + virtual bool OnConditionCheck(Condition const* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; } }; class VehicleScript : public ScriptObject @@ -1030,7 +1030,7 @@ class ScriptMgr public: /* ConditionScript */ - bool OnConditionCheck(Condition* condition, ConditionSourceInfo& sourceInfo); + bool OnConditionCheck(Condition const* condition, ConditionSourceInfo& sourceInfo); public: /* VehicleScript */ diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 1cd671aca7..93b8c3eb36 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1920,9 +1920,7 @@ bool Aura::IsProcTriggeredOnEvent(AuraApplication* aurApp, ProcEventInfo& eventI return false; // do checks using conditions table - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL_PROC, GetId()); - ConditionSourceInfo condInfo = ConditionSourceInfo(eventInfo.GetActor(), eventInfo.GetActionTarget()); - if (!sConditionMgr->IsObjectMeetToConditions(condInfo, conditions)) + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPELL_PROC, GetId(), eventInfo.GetActor(), eventInfo.GetActionTarget())) return false; // AuraScript Hook diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 3e7c1cb9d6..c026d10241 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4789,10 +4789,8 @@ SpellCastResult Spell::CheckCast(bool strict) // check spell cast conditions from database { - ConditionSourceInfo condInfo = ConditionSourceInfo(m_caster); - condInfo.mConditionTargets[1] = m_targets.GetObjectTarget(); - ConditionContainer conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_SPELL, m_spellInfo->Id); - if (!conditions.empty() && !sConditionMgr->IsObjectMeetToConditions(condInfo, conditions)) + ConditionSourceInfo condInfo = ConditionSourceInfo(m_caster, m_targets.GetObjectTarget()); + if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPELL, m_spellInfo->Id, condInfo)) { // mLastFailedCondition can be NULL if there was an error processing the condition in Condition::Meets (i.e. wrong data for ConditionTarget or others) if (condInfo.mLastFailedCondition && condInfo.mLastFailedCondition->ErrorType) From 14d382f185ada74f3b60b3d323b0eb1f98ea9181 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 25 Oct 2015 13:35:45 +0100 Subject: [PATCH 262/524] Core/Conditions: Optimizations part 3 changed ConditionStore to a simple array (cherry picked from commit db0c48c17fdf61b8816cc229dcfec907354326cd) --- src/server/game/Conditions/ConditionMgr.cpp | 33 +++++++++------------ src/server/game/Conditions/ConditionMgr.h | 5 ++-- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index a6af028098..3675d43a3b 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -802,15 +802,11 @@ bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourc { if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX) { - ConditionEntriesByTypeMap::const_iterator itr = ConditionStore.find(sourceType); - if (itr != ConditionStore.end()) + ConditionsByEntryMap::const_iterator i = ConditionStore[sourceType].find(entry); + if (i != ConditionStore[sourceType].end()) { - ConditionsByEntryMap::const_iterator i = itr->second.find(entry); - if (i != itr->second.end()) - { - TC_LOG_DEBUG("condition", "GetConditionsForNotGroupedEntry: found conditions for type %u and entry %u", uint32(sourceType), entry); - return IsObjectMeetToConditions(sourceInfo, i->second); - } + TC_LOG_DEBUG("condition", "GetConditionsForNotGroupedEntry: found conditions for type %u and entry %u", uint32(sourceType), entry); + return IsObjectMeetToConditions(sourceInfo, i->second); } } @@ -826,12 +822,9 @@ bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourc bool ConditionMgr::HasConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const { if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX) - { - ConditionEntriesByTypeMap::const_iterator itr = ConditionStore.find(sourceType); - if (itr != ConditionStore.end()) - if (itr->second.find(entry) != itr->second.end()) - return true; - } + if (ConditionStore[sourceType].find(entry) != ConditionStore[sourceType].end()) + return true; + return false; } @@ -2122,12 +2115,14 @@ void ConditionMgr::Clean() ConditionReferenceStore.clear(); - for (ConditionEntriesByTypeMap::iterator itr = ConditionStore.begin(); itr != ConditionStore.end(); ++itr) - for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) - for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) - delete *i; + for (uint32 i = 0; i < CONDITION_SOURCE_TYPE_MAX; ++i) + { + for (ConditionsByEntryMap::iterator it = ConditionStore[i].begin(); it != ConditionStore[i].end(); ++it) + for (ConditionContainer::const_iterator itr = it->second.begin(); itr != it->second.end(); ++itr) + delete *itr; - ConditionStore.clear(); + ConditionStore[i].clear(); + } for (ConditionEntriesByCreatureIdMap::iterator itr = VehicleSpellConditionStore.begin(); itr != VehicleSpellConditionStore.end(); ++itr) for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 0f60f2e3c4..81fe379f0d 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -216,10 +216,9 @@ struct Condition typedef std::vector ConditionContainer; typedef std::unordered_map ConditionsByEntryMap; -typedef std::unordered_map ConditionEntriesByTypeMap; +typedef std::array ConditionEntriesByTypeArray; typedef std::unordered_map ConditionEntriesByCreatureIdMap; typedef std::unordered_map, ConditionsByEntryMap> SmartEventConditionContainer; - typedef std::unordered_map ConditionReferenceContainer;//only used for references class ConditionMgr @@ -276,7 +275,7 @@ class ConditionMgr void Clean(); // free up resources std::vector AllocatedMemoryStore; // some garbage collection :) - ConditionEntriesByTypeMap ConditionStore; + ConditionEntriesByTypeArray ConditionStore; ConditionReferenceContainer ConditionReferenceStore; ConditionEntriesByCreatureIdMap VehicleSpellConditionStore; ConditionEntriesByCreatureIdMap SpellClickEventConditionStore; From c911a2aaa90410bbe17d2cd5c618f9211fd65bf7 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 31 Oct 2015 20:37:14 +0100 Subject: [PATCH 263/524] DB/Creature: Fix movement type for Thomas Yance --- sql/updates/world/2015_10_31_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_10_31_02_world.sql diff --git a/sql/updates/world/2015_10_31_02_world.sql b/sql/updates/world/2015_10_31_02_world.sql new file mode 100644 index 0000000000..6dfeba2116 --- /dev/null +++ b/sql/updates/world/2015_10_31_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature` SET `MovementType`=2 WHERE `guid`=84011 AND `id`=18672; From 98cd477149a3c656cb7310872e540256343530e6 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 1 Aug 2015 11:58:14 +0200 Subject: [PATCH 264/524] Core/Misc: Update game creature template locale in simple system (cherry picked from commit 8aa55a0b570cfee0445cd841f86baa5ca433a803) --- .../2015_10_31_02_world_2015_08_01_01.sql | 43 +++++++++++++++++++ src/server/game/Entities/Creature/Creature.h | 4 +- src/server/game/Globals/ObjectMgr.cpp | 28 +++++++----- src/server/game/Handlers/QueryHandler.cpp | 8 ++-- 4 files changed, 66 insertions(+), 17 deletions(-) create mode 100644 sql/updates/world/2015_10_31_02_world_2015_08_01_01.sql diff --git a/sql/updates/world/2015_10_31_02_world_2015_08_01_01.sql b/sql/updates/world/2015_10_31_02_world_2015_08_01_01.sql new file mode 100644 index 0000000000..776486929f --- /dev/null +++ b/sql/updates/world/2015_10_31_02_world_2015_08_01_01.sql @@ -0,0 +1,43 @@ +DROP TABLE IF EXISTS `creature_template_locale`; +CREATE TABLE IF NOT EXISTS `creature_template_locale` ( + `entry` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0', + `locale` VARCHAR(4) NOT NULL, + `Name` TEXT, + `Title` TEXT, + `VerifiedBuild` SMALLINT(5) DEFAULT '0', + PRIMARY KEY (`entry`,`locale`) +) ENGINE=MYISAM DEFAULT CHARSET=utf8; + +-- koKR +INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`) + (SELECT `entry`, "koKR", `name_loc1`, `subname_loc1`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc1`) > 0 OR LENGTH(`subname_loc1`) > 0); + +-- frFR +INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`) + (SELECT `entry`, "frFR", `name_loc2`, `subname_loc2`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc2`) > 0 OR LENGTH(`subname_loc2`) > 0); + +-- deDE +INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`) + (SELECT `entry`, "deDE", `name_loc3`, `subname_loc3`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc3`) > 0 OR LENGTH(`subname_loc3`) > 0); + +-- zhCN +INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`) + (SELECT `entry`, "zhCN", `name_loc4`, `subname_loc4`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc4`) > 0 OR LENGTH(`subname_loc4`) > 0); + +-- zhTW +INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`) + (SELECT `entry`, "zhTW", `name_loc5`, `subname_loc5`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc5`) > 0 OR LENGTH(`subname_loc5`) > 0); + +-- esES +INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`) + (SELECT `entry`, "esES", `name_loc6`, `subname_loc6`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc6`) > 0 OR LENGTH(`subname_loc6`) > 0); + +-- esMX +INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`) + (SELECT `entry`, "esMX", `name_loc7`, `subname_loc7`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc7`) > 0 OR LENGTH(`subname_loc7`) > 0); + +-- ruRU +INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`, `VerifiedBuild`) + (SELECT `entry`, "ruRU", `name_loc8`, `subname_loc8`, `VerifiedBuild` FROM `locales_creature` WHERE LENGTH(`name_loc8`) > 0 OR LENGTH(`subname_loc8`) > 0); + +DROP TABLE IF EXISTS `locales_creature`; diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 7744e30f12..df83a2f9c0 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -83,7 +83,7 @@ struct CreatureTemplate uint32 Modelid3; uint32 Modelid4; std::string Name; - std::string SubName; + std::string Title; std::string IconName; uint32 GossipMenuId; uint8 minlevel; @@ -218,7 +218,7 @@ typedef std::unordered_map CreatureBaseStatsContainer struct CreatureLocale { StringVector Name; - StringVector SubName; + StringVector Title; }; struct GossipMenuItemsLocale diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 020028e627..283323b65f 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -291,8 +291,8 @@ void ObjectMgr::LoadCreatureLocales() _creatureLocaleStore.clear(); // need for reload case - QueryResult result = WorldDatabase.Query("SELECT entry, name_loc1, subname_loc1, name_loc2, subname_loc2, name_loc3, subname_loc3, name_loc4, subname_loc4, name_loc5, subname_loc5, name_loc6, subname_loc6, name_loc7, subname_loc7, name_loc8, subname_loc8 FROM locales_creature"); - + // 0 1 2 3 + QueryResult result = WorldDatabase.Query("SELECT entry, locale, Name, Title FROM creature_template_locale"); if (!result) return; @@ -300,16 +300,20 @@ void ObjectMgr::LoadCreatureLocales() { Field* fields = result->Fetch(); - uint32 entry = fields[0].GetUInt32(); + uint32 id = fields[0].GetUInt32(); + std::string localeName = fields[1].GetString(); - CreatureLocale& data = _creatureLocaleStore[entry]; + std::string name = fields[2].GetString(); + std::string title = fields[3].GetString(); + + CreatureLocale& data = _creatureLocaleStore[id]; + LocaleConstant locale = GetLocaleByName(localeName); + if (locale == LOCALE_enUS) + continue; + + AddLocaleString(name, locale, data.Name); + AddLocaleString(title, locale, data.Title); - for (uint8 i = TOTAL_LOCALES - 1; i > 0; --i) - { - LocaleConstant locale = (LocaleConstant) i; - AddLocaleString(fields[1 + 2 * (i - 1)].GetString(), locale, data.Name); - AddLocaleString(fields[1 + 2 * (i - 1) + 1].GetString(), locale, data.SubName); - } } while (result->NextRow()); TC_LOG_INFO("server.loading", ">> Loaded %u creature locale strings in %u ms", uint32(_creatureLocaleStore.size()), GetMSTimeDiffToNow(oldMSTime)); @@ -442,7 +446,7 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields) creatureTemplate.Modelid3 = fields[8].GetUInt32(); creatureTemplate.Modelid4 = fields[9].GetUInt32(); creatureTemplate.Name = fields[10].GetString(); - creatureTemplate.SubName = fields[11].GetString(); + creatureTemplate.Title = fields[11].GetString(); creatureTemplate.IconName = fields[12].GetString(); creatureTemplate.GossipMenuId = fields[13].GetUInt32(); creatureTemplate.minlevel = fields[14].GetUInt8(); @@ -6520,6 +6524,8 @@ void ObjectMgr::LoadGameObjectLocales() GameObjectLocale& data = _gameObjectLocaleStore[id]; LocaleConstant locale = GetLocaleByName(localeName); + if (locale == LOCALE_enUS) + continue; AddLocaleString(name, locale, data.Name); AddLocaleString(castBarCaption, locale, data.CastBarCaption); diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 1211a1338d..153ce73694 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -96,9 +96,9 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket& recvData) CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(entry); if (ci) { - std::string Name, SubName; + std::string Name, Title; Name = ci->Name; - SubName = ci->SubName; + Title = ci->Title; int loc_idx = GetSessionDbLocaleIndex(); if (loc_idx >= 0) @@ -106,7 +106,7 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket& recvData) if (CreatureLocale const* cl = sObjectMgr->GetCreatureLocale(entry)) { ObjectMgr::GetLocaleString(cl->Name, loc_idx, Name); - ObjectMgr::GetLocaleString(cl->SubName, loc_idx, SubName); + ObjectMgr::GetLocaleString(cl->Title, loc_idx, Title); } } TC_LOG_DEBUG("network", "WORLD: CMSG_CREATURE_QUERY '%s' - Entry: %u.", ci->Name.c_str(), entry); @@ -115,7 +115,7 @@ void WorldSession::HandleCreatureQueryOpcode(WorldPacket& recvData) data << uint32(entry); // creature entry data << Name; data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4, always empty - data << SubName; + data << Title; data << ci->IconName; // "Directions" for guard, string for Icons 2.3.0 data << uint32(ci->type_flags); // flags data << uint32(ci->type); // CreatureType.dbc From 0e44fedf19847d05215bbbef8d33c9455e92db12 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sat, 31 Oct 2015 21:18:52 +0100 Subject: [PATCH 265/524] Rename 2015_10_31_02_world_2015_08_01_01.sql to 2015_10_31_03_world_2015_08_01_01.sql --- ...ld_2015_08_01_01.sql => 2015_10_31_03_world_2015_08_01_01.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_10_31_02_world_2015_08_01_01.sql => 2015_10_31_03_world_2015_08_01_01.sql} (100%) diff --git a/sql/updates/world/2015_10_31_02_world_2015_08_01_01.sql b/sql/updates/world/2015_10_31_03_world_2015_08_01_01.sql similarity index 100% rename from sql/updates/world/2015_10_31_02_world_2015_08_01_01.sql rename to sql/updates/world/2015_10_31_03_world_2015_08_01_01.sql From e8909de8de6486b795deff4db6a477bb366ecae4 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 1 Nov 2015 13:16:29 +0100 Subject: [PATCH 266/524] Core/Accounts: Check active column when determining if account is banned or not --- src/server/database/Database/Implementation/LoginDatabase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index a6ff276aef..9b7bf285ef 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -47,7 +47,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_ACCOUNT_ID_BY_NAME, "SELECT id FROM account WHERE username = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_NAME, "SELECT id, username FROM account WHERE username = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME, "SELECT a.id, a.sessionkey, a.last_ip, a.locked, a.lock_country, a.expansion, a.mutetime, a.locale, a.recruiter, a.os, aa.gmLevel, " - "ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, r.id FROM account a LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?) " + "(ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate) AND ab.active, r.id FROM account a LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?) " "LEFT JOIN account_banned ab ON a.id = ab.id LEFT JOIN account r ON a.id = r.recruiter WHERE a.username = ? ORDER BY aa.RealmID DESC LIMIT 1", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_EMAIL, "SELECT id, username FROM account WHERE email = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_NUM_CHARS_ON_REALM, "SELECT numchars FROM realmcharacters WHERE realmid = ? AND acctid= ?", CONNECTION_SYNCH); From 20ee754de9185a524ff9a9c9adeb7d3f32ad148e Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 1 Nov 2015 13:44:56 +0000 Subject: [PATCH 267/524] DB/Misc: Commoners (Hallow's End) Adds more texts and gossip for Hallows End --- sql/updates/world/2015_11_01_00_world.sql | 127 ++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 sql/updates/world/2015_11_01_00_world.sql diff --git a/sql/updates/world/2015_11_01_00_world.sql b/sql/updates/world/2015_11_01_00_world.sql new file mode 100644 index 0000000000..dabd7d2713 --- /dev/null +++ b/sql/updates/world/2015_11_01_00_world.sql @@ -0,0 +1,127 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `source_type`=0 AND `id` IN(6,11); +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 +(19148,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Dwarf Commoner - OOC - Say'), +(19171,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Dreanei Commoner - OOC - Say'), +(20102,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Goblin Commoner - OOC - Say'), +(19172,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Gnome Commoner - OOC - Say'), +(19173,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Night Elf Commoner - OOC - Say'), +(18927,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Human Commoner - OOC - Say'), +(19175,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Orc Commoner - OOC - Say'), +(19176,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tauren Commoner - OOC - Say'), +(19177,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Troll Commoner - OOC - Say'), +(19178,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Forsaken Commoner - OOC - Say'), +(19169,0,6,0,1,0,100,0,3000,15000,45000,90000,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,'Blood Elf Commoner - OOC - Say'), + +(19171,0,11,0,64,0,100,0,0,0,0,0,98,8936,11957,0,0,0,0,1,0,0,0,0,0,0,0,'Dreanei Commoner - On Gossip Hello - Send Gossip'), +(20102,0,11,0,64,0,100,0,0,0,0,0,98,8939,11960,0,0,0,0,1,0,0,0,0,0,0,0,'Goblin Commoner - On Gossip Hello - Send Gossip'), +(19172,0,11,0,64,0,100,0,0,0,0,0,98,8938,11959,0,0,0,0,1,0,0,0,0,0,0,0,'Gnome Commoner - On Gossip Hello - Send Gossip'), +(19173,0,11,0,64,0,100,0,0,0,0,0,98,8941,11962,0,0,0,0,1,0,0,0,0,0,0,0,'Night Elf Commoner - On Gossip Hello - Send Gossip'), +(18927,0,11,0,64,0,100,0,0,0,0,0,98,8940,11961,0,0,0,0,1,0,0,0,0,0,0,0,'Human Commoner - On Gossip Hello - Send Gossip'), +(19175,0,11,0,64,0,100,0,0,0,0,0,98,8942,11963,0,0,0,0,1,0,0,0,0,0,0,0,'Orc Commoner - On Gossip Hello - Send Gossip'), +(19176,0,11,0,64,0,100,0,0,0,0,0,98,8943,11964,0,0,0,0,1,0,0,0,0,0,0,0,'Tauren Commoner - On Gossip Hello - Send Gossip'), +(19177,0,11,0,64,0,100,0,0,0,0,0,98,8944,11965,0,0,0,0,1,0,0,0,0,0,0,0,'Troll Commoner - On Gossip Hello - Send Gossip'), +(19178,0,11,0,64,0,100,0,0,0,0,0,98,8945,11966,0,0,0,0,1,0,0,0,0,0,0,0,'Forsaken Commoner - On Gossip Hello - Send Gossip'), +(19169,0,11,0,64,0,100,0,0,0,0,0,98,8935,11956,0,0,0,0,1,0,0,0,0,0,0,0,'Blood Elf Commoner - On Gossip Hello - Send Gossip'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` in(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `SourceGroup`=7; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` in(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `SourceGroup`=12; + +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 7, 19148, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 20102, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 18927, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 19171, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 19172, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 19173, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 19175, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 19176, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 19177, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 19178, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 7, 19169, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 20102, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 18927, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 19171, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 19172, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 19173, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 19175, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 19176, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 19177, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 19178, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'), +(22, 12, 19169, 0, 0, 12, 1, 12, 0, 0, 0, 0, 0, '', 'Commoner - Hallows End must be active'); + +DELETE FROM `gossip_menu` WHERE `entry` IN(8936,8939,8938,8941,8940,8942,8943,8944,8945,8935); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(8936,11957), +(8939,11960), +(8938,11959), +(8941,11962), +(8940,11961), +(8942,11963), +(8943,11964), +(8944,11965), +(8945,11966), +(8935,11956); + +DELETE FROM `creature_text` WHERE `entry` IN(20102,18927,19177,19169,19175,19171,19176,19178,19173,19148) AND `groupid`=6; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(19171, 6, 0, 'What do you think of the mask?', 12, 7, 100, 1, 0, 0, 24339, 'Draenei Commoner to Draenei Commoner'), +(19171, 6, 1, 'You know... why DO we celebrate this holiday?', 12, 7, 100, 0, 0, 0, 23287, 'Draenei Commoner to Draenei Commoner'), +(19171, 6, 2, 'For the Horde!', 12, 7, 100, 4, 0, 0, 23357, 'Draenei Commoner to Draenei Commoner'), +(19173, 6, 0, 'Next year, I''m dressing up as either a corsair or an assassin.', 12, 7, 100, 1, 0, 0, 24338, 'Night Elf Commoner to Night Elf Commoner'), +(19173, 6, 1, 'Happy Hallow''s End!', 12, 7, 100, 0, 0, 0, 24346, 'Night Elf Commoner to Night Elf Commoner'), +(19173, 6, 2, 'We should go trick or treating later.', 12, 7, 100, 0, 0, 0, 0, 'Night Elf Commoner to Night Elf Commoner'), +(19173, 6, 3, 'For the Horde!', 12, 7, 100, 4, 0, 0, 23357, 'Night Elf Commoner to Night Elf Commoner'), +(19173, 6, 4, 'Curse this twisting of the night. The candy''s good, though.', 12, 7, 100, 0, 0, 0, 23294, 'Night Elf Commoner to Night Elf Commoner'), +(19173, 6, 5, 'You know... why DO we celebrate this holiday?', 12, 7, 100, 0, 0, 0, 23287, 'Night Elf Commoner to Night Elf Commoner'), +(19173, 6, 6, 'What do you think of the mask?', 12, 7, 100, 1, 0, 0, 24339, 'Night Elf Commoner to Night Elf Commoner'), +(19173, 6, 7, 'Next year, I''m dressing up as either a corsair or an assassin.', 12, 7, 100, 1, 0, 0, 24338, 'Night Elf Commoner to Night Elf Commoner'), +(18927, 6, 0, 'Brains... braaaiiins!', 12, 7, 100, 15, 0, 0, 23358, 'Human Commoner to Human Commoner'), +(18927, 6, 1, 'We should go trick or treating later.', 12, 7, 100, 396, 0, 0, 24348, 'Human Commoner to Human Commoner'), +(18927, 6, 2, 'Are there any more inns we can visit for treats?', 12, 7, 100, 0, 0, 0, 23293, 'Human Commoner to Human Commoner'), +(18927, 6, 3, 'We should go trick or treating later.', 12, 7, 100, 0, 0, 0, 24348, 'Human Commoner to Human Commoner'), +(18927, 6, 4, 'For the Horde!', 12, 7, 100, 274, 0, 0, 23357, 'Human Commoner to Human Commoner'), +(18927, 6, 5, 'What do you think of the mask?', 12, 7, 100, 1, 0, 0, 24339, 'Human Commoner to Human Commoner'), +(18927, 6, 6, 'You know... why DO we celebrate this holiday?', 12, 7, 100, 0, 0, 0, 23287, 'Human Commoner to Human Commoner'), +(19148, 6, 0, 'I think I''ve eaten too much candy...', 12, 7, 100, 0, 0, 0, 24347, 'Dwarf Commoner to Dwarf Commoner'), +(19148, 6, 1, 'Happy Hallow''s End!', 12, 7, 100, 0, 0, 0, 24346, 'Dwarf Commoner to Dwarf Commoner'), +(20102, 6, 0, 'We should go trick or treating later.', 12, 0, 100, 0, 0, 0, 23286, 'Goblin Commoner to Goblin Commoner'), +(20102, 6, 1, 'There MUST be a way to make more money off of this holiday.', 12, 0, 100, 0, 0, 0, 23299, 'Goblin Commoner to Goblin Commoner'), +(20102, 6, 2, 'The innkeepers are mad to be giving away treats for free.', 12, 0, 100, 0, 0, 0, 23300, 'Goblin Commoner to Goblin Commoner'), +(20102, 6, 3, 'For the Alliance! Wait... the Horde! Wait... which was I again?', 12, 0, 100, 4, 0, 149, 23364, 'Goblin Commoner to Goblin Commoner'), +(19176, 6, 0, 'What do you think of the mask?', 12, 1, 100, 1, 0, 0, 24337, 'Tauren Commoner to Tauren Commoner'), +(19176, 6, 1, 'Ishnu-dal-dieb.', 12, 1, 100, 3, 0, 0, 23355, 'Tauren Commoner to Tauren Commoner'), +(19176, 6, 2, 'For the Alliance!', 12, 1, 100, 4, 0, 0, 23351, 'Tauren Commoner to Tauren Commoner'), +(19177, 6, 0, 'Next year, I''m dressing up as either a corsair or an assassin.', 12, 1, 100, 1, 0, 0, 24336, 'Troll Commoner to Troll Commoner'), +(19177, 6, 1, 'Happy Hallow''s End!', 12, 1, 100, 0, 0, 0, 24329, 'Troll Commoner to Troll Commoner'), +(19177, 6, 2, 'What do you think of the mask?', 12, 1, 100, 1, 0, 0, 24337, 'Troll Commoner to Troll Commoner'), +(19177, 6, 3, 'Boo-hoo! I''m a poor little gnome, and I don''t have a capital ci... oh, wait.', 12, 1, 100, 1, 0, 0, 23354, 'Troll Commoner to Troll Commoner'), +(19177, 6, 4, 'Someone should make a candy with a chewy gnome center.', 12, 1, 100, 0, 0, 0, 23297, 'Troll Commoner to Troll Commoner'), +(19177, 6, 5, 'We should go trick or treating later.', 12, 1, 100, 0, 0, 0, 24331, 'Troll Commoner to Troll Commoner'), +(19177, 6, 6, 'I think I''ve eaten too much candy...', 12, 1, 100, 0, 0, 0, 24330, 'Troll Commoner to Troll Commoner'), +(19178, 6, 0, 'We should go trick or treating later.', 12, 1, 100, 0, 0, 0, 24331, 'Forsaken Commoner to Forsaken Commoner'), +(19178, 6, 1, 'We should attend the next burning of the Wickerman.', 12, 1, 100, 0, 0, 0, 23292, 'Forsaken Commoner to Forsaken Commoner'), +(19178, 6, 2, 'For the Alliance!', 12, 1, 100, 4, 0, 0, 23351, 'Forsaken Commoner to Forsaken Commoner'), +(19178, 6, 3, 'Happy Hallow''s End!', 12, 1, 100, 0, 0, 0, 24329, 'Forsaken Commoner to Forsaken Commoner'), +(19178, 6, 4, 'I think I''ve eaten too much candy...', 12, 1, 100, 0, 0, 0, 24330, 'Forsaken Commoner to Forsaken Commoner'), +(19178, 6, 5, 'I think I''ve eaten too much candy...', 12, 1, 100, 274, 0, 0, 24330, 'Forsaken Commoner to Forsaken Commoner'), +(19169, 6, 0, 'Gaze upon my crazy tentacle-face and despair, Azerothian!', 12, 1, 100, 23, 0, 0, 23356, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 1, 'Next year, I''m dressing up as either a corsair or an assassin.', 12, 1, 100, 1, 0, 0, 24336, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 2, 'I think I''ve eaten too much candy...', 12, 1, 100, 0, 0, 0, 24330, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 3, 'What do you think of the mask?', 12, 1, 100, 1, 0, 0, 24337, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 4, 'We should go trick or treating later.', 12, 1, 100, 0, 0, 0, 24331, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 5, 'Happy Hallow''s End!', 12, 1, 100, 0, 0, 0, 24329, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 6, 'This time of year is quite important to our Forsaken allies.', 12, 1, 100, 0, 0, 0, 23288, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 7, 'For the Alliance!', 12, 1, 100, 4, 0, 0, 23351, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 8, 'We should attend the next burning of the Wickerman.', 12, 1, 100, 0, 0, 0, 23292, 'Blood Elf Commoner to Blood Elf Commoner'), +(19169, 6, 9, 'What do you think of the mask?', 12, 1, 100, 273, 0, 0, 24337, 'Blood Elf Commoner to Blood Elf Commoner'), +(19175, 6, 0, 'We should go trick or treating later.', 12, 1, 100, 0, 0, 0, 24331, 'Orc Commoner to Orc Commoner'), +(19175, 6, 1, 'Happy Hallow''s End!', 12, 1, 100, 0, 0, 0, 24329, 'Orc Commoner to Orc Commoner'), +(19175, 6, 2, 'What do you think of the mask?', 12, 1, 100, 1, 0, 0, 24337, 'Orc Commoner to Orc Commoner'), +(19175, 6, 3, 'We should attend the next burning of the Wickerman.', 12, 1, 100, 0, 0, 0, 23292, 'Orc Commoner to Orc Commoner'), +(19175, 6, 4, 'We should go trick or treating later.', 12, 1, 100, 273, 0, 0, 24331, 'Orc Commoner to Orc Commoner'), +(19175, 6, 5, 'Where''s me gold? Where''s me beer? Where''s me feet?', 12, 1, 100, 6, 0, 0, 23352, 'Orc Commoner to Orc Commoner'), +(19175, 6, 6, 'For the Alliance!', 12, 1, 100, 4, 0, 0, 23351, 'Orc Commoner to Orc Commoner'), +(19175, 6, 7, 'Where''s me gold? Where''s me beer? Where''s me feet?', 12, 1, 100, 6, 0, 0, 23352, 'Orc Commoner to Orc Commoner'), +(19175, 6, 8, 'The Forsaken are right to celebrate their freedom.', 12, 1, 100, 0, 0, 0, 23295, 'Orc Commoner to Orc Commoner'), +(19175, 6, 9, 'I think I''ve eaten too much candy...', 12, 1, 100, 396, 0, 0, 24330, 'Orc Commoner to Orc Commoner'), +(19175, 6, 10, 'I think I''ve eaten too much candy...', 12, 1, 100, 0, 0, 0, 24330, 'Orc Commoner to Orc Commoner'); From 5bdbf9b19c54b506518ae0552ff9bf4b7151f364 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 1 Nov 2015 14:52:32 +0100 Subject: [PATCH 268/524] DB/Event: Add missing Hallow's End event spawns on Eversong Woods Thanks to @kittnz for the sniffs --- sql/updates/world/2015_11_01_01_world.sql | 779 ++++++++++++++++++++++ 1 file changed, 779 insertions(+) create mode 100644 sql/updates/world/2015_11_01_01_world.sql diff --git a/sql/updates/world/2015_11_01_01_world.sql b/sql/updates/world/2015_11_01_01_world.sql new file mode 100644 index 0000000000..e6fb63ec28 --- /dev/null +++ b/sql/updates/world/2015_11_01_01_world.sql @@ -0,0 +1,779 @@ +-- +SET @OGUID:=78023; +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+385 AND `eventEntry`=12; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+385; +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,180406, 530, 1, 1, 10006.97, -7223.957, 38.252, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+1,180410, 530, 1, 1, 10017.58, -7218.51, 32.9932, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+2,180411, 530, 1, 1, 10001.91, -7204.366, 43.59731, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+3,180410, 530, 1, 1, 9963.57, -7252.031, 33.84737, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+4,180410, 530, 1, 1, 9961.773, -7253.525, 33.84737, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+5,180410, 530, 1, 1, 9965.425, -7250.459, 34.04182, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+6, 180410, 530, 1, 1, 9966.247, -7242.492, 33.60432, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+7, 180410, 530, 1, 1, 10024.43, -7212.82, 32.86126, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+8, 180410, 530, 1, 1, 10020.63, -7200.405, 33.09042, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+9, 180405, 530, 1, 1, 9823.148, -7386.113, 20.45557, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+10,1180407, 530, 1, 1, 9812.965, -7409.957, 13.62506, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+11,1180427, 530, 1, 1, 9682.321, -7432.618, 23.67524, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+12,1180426, 530, 1, 1, 9685.572, -7441.069, 23.97384, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) +(@OGUID+13,1180426, 530, 1, 1, 9686.853, -7440.715, 20.77245, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) +(@OGUID+14,1180427, 530, 1, 1, 9686.702, -7436.893, 20.72384, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+15,1180426, 530, 1, 1, 9684.29, -7437.083, 23.16829, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) +(@OGUID+16,1180427, 530, 1, 1, 9682.661, -7437.406, 19.14746, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+17,1180427, 530, 1, 1, 9682.217, -7440.542, 23.70301, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+18,1180426, 530, 1, 1, 9681.567, -7440.406, 21.67523, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) +(@OGUID+19,1180427, 530, 1, 1, 9688.92, -7439.088, 24.64051, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+20,1180415, 530, 1, 1, 9726.541, -7459.687, 14.03802, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+21,1180415, 530, 1, 1, 9646.93, -7446.186, 14.02778, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+22,1180415, 530, 1, 1, 9763.853, -7467.264, 13.57424, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+23,1180415, 530, 1, 1, 9721.928, -7473.809, 14.03804, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+24,1180415, 530, 1, 1, 9763.872, -7469.173, 13.57424, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+25,1180415, 530, 1, 1, 9642.902, -7441.372, 14.02778, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+26,1180415, 530, 1, 1, 9706.262, -7464.713, 14.03802, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+27,1180415, 530, 1, 1, 9722.172, -7455.784, 14.03802, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+28,1180415, 530, 1, 1, 9637.544, -7439.558, 14.02778, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+29,1180415, 530, 1, 1, 9708.006, -7469.922, 14.03803, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+30,1180415, 530, 1, 1, 9717.246, -7454.905, 14.03803, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+31,1180415, 530, 1, 1, 9707.984, -7459.522, 14.03802, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+32,1180415, 530, 1, 1, 9726.428, -7470.03, 14.03803, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+33,1180415, 530, 1, 1, 9763.653, -7472.03, 13.57424, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+34,1180415, 530, 1, 1, 9712.377, -7473.811, 14.03804, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+35,1180415, 530, 1, 1, 9728.004, -7464.864, 14.03802, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+36,1180415, 530, 1, 1, 9712.409, -7455.581, 14.03802, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+37,1180415, 530, 1, 1, 9717.181, -7474.624, 14.03804, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+38,1180415, 530, 1, 1, 9660.289, -7459.098, 14.02777, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+39,1180415, 530, 1, 1, 9661.99, -7464.522, 14.02777, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+40,1180415, 530, 1, 1, 9655.606, -7455.169, 14.02777, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+41,1180415, 530, 1, 1, 9649.94, -7453.708, 14.02778, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+42,1180415, 530, 1, 1, 9641.782, -7259.7, 14.81578, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+43,1180406, 530, 1, 1, 9607.743, -7398.093, 13.61317, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+44,1180415, 530, 1, 1, 9628.13, -7445.979, 14.02779, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+45,1180415, 530, 1, 1, 9632.113, -7441.426, 14.02779, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+46,1180415, 530, 1, 1, 9660.25, -7470.04, 14.02776, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+47,1180415, 530, 1, 1, 9638.744, -7460.21, 15.98692, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+48,1180415, 530, 1, 1, 9641.474, -7463.021, 16.38364, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+49,1180415, 530, 1, 1, 9640.314, -7461.316, 17.30185, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+50,1180415, 530, 1, 1, 9638.427, -7461.016, 18.32743, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+51,1180415, 530, 1, 1, 9638.209, -7462.663, 18.66362, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+52,1180415, 530, 1, 1, 9637.09, -7461.913, 18.66316, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+53,1180415, 530, 1, 1, 9640.428, -7464.382, 15.98692, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+54,1180415, 530, 1, 1, 9641.477, -7465.749, 15.98692, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+55,1180415, 530, 1, 1, 9639.198, -7461.872, 15.98692, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+56,1180415, 530, 1, 1, 9624.851, -7453.41, 14.02778, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+57,1180415, 530, 1, 1, 9637.354, -7461.244, 15.98692, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+58,1180415, 530, 1, 1, 9639.954, -7462.725, 16.84003, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+59,1180415, 530, 1, 1, 9635.964, -7460.174, 15.97606, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+60,1180415, 530, 1, 1, 9635.571, -7461.838, 15.98692, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+61,1180415, 530, 1, 1, 9639.138, -7462.302, 17.97781, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+62,1180415, 530, 1, 1, 9635.984, -7466.34, 18.39254, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+63,1180415, 530, 1, 1, 9633.069, -7464.283, 15.98692, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+64,1180415, 530, 1, 1, 9634.456, -7463.351, 15.98692, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+65,1180415, 530, 1, 1, 9635.389, -7467.68, 17.8932, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+66,1180415, 530, 1, 1, 9637.663, -7466.748, 18.66317, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+67,1180415, 530, 1, 1, 9633.908, -7461.739, 15.98692, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+68,1180415, 530, 1, 1, 9634.506, -7465.276, 16.39715, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+69,1180415, 530, 1, 1, 9637.328, -7468.691, 15.98692, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+70,1180415, 530, 1, 1, 9638.302, -7467.272, 15.98692, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+71,1180415, 530, 1, 1, 9635.129, -7466.257, 17.33418, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+72,1180415, 530, 1, 1, 9649.725, -7475.164, 14.02777, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+73,1180415, 530, 1, 1, 9634.771, -7467.749, 15.98692, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+74,1180415, 530, 1, 1, 9639.864, -7467.848, 15.98692, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+75,1180415, 530, 1, 1, 9636.4, -7467.287, 15.98692, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+76,1180415, 530, 1, 1, 9639.832, -7466.174, 15.98692, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+77,1180415, 530, 1, 1, 9655.462, -7473.856, 14.02776, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+78,1180415, 530, 1, 1, 9633.779, -7466.766, 16.85439, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+79,1180415, 530, 1, 1, 9654.685, -7494.923, 20.20687, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+80,1180415, 530, 1, 1, 9642.694, -7487.412, 14.02775, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+81,1180415, 530, 1, 1, 9708.024, -7495.3, 20.21482, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+82,1180405, 530, 1, 1, 9677.399, -7499.985, 15.73777, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+83,1180407, 530, 1, 1, 9687.479, -7494.583, 15.76028, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+84,1180411, 530, 1, 1, 9694.27, -7498.087, 19.95394, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+85,1180415, 530, 1, 1, 9714.893, -7495.471, 20.20084, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+86,1180406, 530, 1, 1, 9689.191, -7499.704, 15.73832, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+87,1180415, 530, 1, 1, 9705.337, -7495.149, 20.22054, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+88,1180406, 530, 1, 1, 9679.796, -7494.525, 15.75649, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+89,1180415, 530, 1, 1, 9646.641, -7482.605, 14.02776, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+90,1180411, 530, 1, 1, 9672.331, -7497.908, 19.90336, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+91,1180415, 530, 1, 1, 9619.048, -7454.828, 14.02777, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+92,1180415, 530, 1, 1, 9711.266, -7495.455, 20.2082, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+93,1180415, 530, 1, 1, 9658.174, -7494.944, 20.21395, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+94,1180407, 530, 1, 1, 9697.96, -7500.003, 15.73456, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+95,1180415, 530, 1, 1, 9661.191, -7494.833, 20.22025, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+96,1180415, 530, 1, 1, 9614.421, -7458.695, 14.02777, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+97,1180411, 530, 1, 1, 9683.252, -7498, 21.73868, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+98,1180415, 530, 1, 1, 9612.596, -7464.159, 14.02776, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+99,1180415, 530, 1, 1, 9624.603, -7474.983, 14.02777, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+100,180415, 530, 1, 1, 9718.226, -7495.425, 20.1941, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+101,180415, 530, 1, 1, 9651.492, -7494.754, 20.20044, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+102,180415, 530, 1, 1, 9708.641, -7508.83, 20.19345, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+103,180415, 530, 1, 1, 9614.337, -7469.526, 14.02776, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+104,180415, 530, 1, 1, 9767.092, -7472.754, 13.57029, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+105,180415, 530, 1, 1, 9627.683, -7482.578, 14.02777, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+106,180415, 530, 1, 1, 9618.941, -7473.685, 14.02776, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+107,180415, 530, 1, 1, 9648.458, -7494.752, 20.19428, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+108,180415, 530, 1, 1, 9631.637, -7487.333, 14.02776, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+109,180415, 530, 1, 1, 9657.274, -7508.259, 20.19345, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+110,180415, 530, 1, 1, 9637.185, -7488.979, 14.02775, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+111,180407, 530, 1, 1, 9668.626, -7499.798, 15.73456, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+112,180415, 530, 1, 1, 9708.441, -7511.002, 20.19343, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+113,180415, 530, 1, 1, 9658.278, -7510.662, 20.19343, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+114,180415, 530, 1, 1, 9767.192, -7475.003, 13.54758, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+115,180415, 530, 1, 1, 9747.169, -7504.403, 13.82745, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+116,180415, 530, 1, 1, 9708.247, -7520.514, 20.1934, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+117,180411, 530, 1, 1, 9768.593, -7495.143, 22.07407, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+118,180415, 530, 1, 1, 9770.302, -7477.873, 13.54952, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+119,180415, 530, 1, 1, 9708.587, -7514.249, 20.19342, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+120,180405, 530, 1, 1, 9771.71, -7476.252, 13.54952, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+121,180405, 530, 1, 1, 9765.729, -7484.294, 13.51967, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+122,180415, 530, 1, 1, 9745.084, -7507.751, 13.84984, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+123,180415, 530, 1, 1, 9708.395, -7517.227, 20.19341, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+124,180406, 530, 1, 1, 9766.075, -7491.438, 13.51901, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+125,180415, 530, 1, 1, 9767.161, -7488.73, 13.5172, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+126,180415, 530, 1, 1, 9767.326, -7477.913, 13.5208, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+127,180415, 530, 1, 1, 9770.485, -7489.105, 13.54949, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+128,180415, 530, 1, 1, 9770.472, -7486.432, 13.54949, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+129,180415, 530, 1, 1, 9766.888, -7486.758, 13.51768, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+130,180411, 530, 1, 1, 9768.688, -7480.606, 22.21311, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+131,180415, 530, 1, 1, 9770.341, -7492.48, 13.5495, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+132,180415, 530, 1, 1, 9770.315, -7483.281, 13.5495, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+133,180407, 530, 1, 1, 9806.146, -7483.15, 13.54675, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+134,180405, 530, 1, 1, 9828.603, -7428.656, 13.619, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+135,180405, 530, 1, 1, 9771.549, -7499.522, 13.54952, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+136,180415, 530, 1, 1, 9770.2, -7497.835, 13.54952, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+137,180415, 530, 1, 1, 9767.045, -7497.897, 13.52364, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+138,180415, 530, 1, 1, 9763.943, -7503.117, 13.57326, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+139,180415, 530, 1, 1, 9760.557, -7504.637, 13.84737, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+140,180407, 530, 1, 1, 9822.736, -7460.87, 14.96318, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+141,180415, 530, 1, 1, 9767.044, -7502.682, 13.56838, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+142,180415, 530, 1, 1, 9828.7, -7444.441, 15.47772, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+143,180406, 530, 1, 1, 9806.036, -7492.882, 13.54704, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+144,180472, 530, 1, 1, 9828.494, -7448.282, 18.26859, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+145,180472, 530, 1, 1, 9834.405, -7383.108, 18.10079, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+146,180406, 530, 1, 1, 9850.404, -7388.42, 13.64399, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+147,180415, 530, 1, 1, 9864.481, -7406.846, 17.2591, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+148,180415, 530, 1, 1, 9873.646, -7397.968, 17.17783, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+149,180415, 530, 1, 1, 9871.325, -7404.424, 17.25784, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+150,180407, 530, 1, 1, 9864.585, -7372.301, 20.45062, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+151,180472, 530, 1, 1, 9874.94, -7450.112, 18.36826, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+152,180406, 530, 1, 1, 9876.843, -7387.032, 20.45033, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+153,180407, 530, 1, 1, 9912.188, -7409.072, 13.64037, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+154,180405, 530, 1, 1, 9899.083, -7405.358, 13.6274, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+155,180415, 530, 1, 1, 9841.817, -7508.129, 19.64095, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+156,180415, 530, 1, 1, 9849.061, -7502.075, -4.007756, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+157,180415, 530, 1, 1, 9852.741, -7502.268, -4.003982, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+158,180415, 530, 1, 1, 9847.087, -7501.374, 19.64914, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+159,180415, 530, 1, 1, 9855.832, -7499.758, 14.95692, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+160,180415, 530, 1, 1, 9844.303, -7503.149, 19.64698, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+161,180415, 530, 1, 1, 9850.985, -7500.915, 19.68542, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+162,180415, 530, 1, 1, 9850.927, -7498.934, 14.93043, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+163,180415, 530, 1, 1, 9841.513, -7507.542, -4.000395, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+164,180405, 530, 1, 1, 9881.052, -7461.776, 18.23401, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+165,180415, 530, 1, 1, 9855.014, -7501.309, 19.67005, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+166,180415, 530, 1, 1, 9845.86, -7499.851, 14.9349, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+167,180415, 530, 1, 1, 9863.115, -7510.865, -3.999226, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+168,180415, 530, 1, 1, 9836.048, -7510.821, -4.0007, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+169,180415, 530, 1, 1, 9857.706, -7503.155, 19.66912, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+170,180407, 530, 1, 1, 9911.933, -7454.624, 3.859614, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+171,180415, 530, 1, 1, 9861.13, -7509.801, -3.999039, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+172,180415, 530, 1, 1, 9860.067, -7508.15, 19.66097, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+173,180415, 530, 1, 1, 9838.981, -7510.788, -3.999198, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+174,180415, 530, 1, 1, 9860.134, -7507.262, -3.999874, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+175,180415, 530, 1, 1, 9841.044, -7509.531, -3.99918, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+176,180415, 530, 1, 1, 9866.301, -7510.897, -4.000865, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+177,180415, 530, 1, 1, 9850.412, -7576.229, 20.30321, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+178,180415, 530, 1, 1, 9859.636, -7571.133, 20.36898, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+179,180415, 530, 1, 1, 9840.057, -7565.67, 20.272, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+180,180415, 530, 1, 1, 9855.566, -7556.837, 20.22193, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+181,180415, 530, 1, 1, 9855.622, -7574.95, 20.33961, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+182,180415, 530, 1, 1, 9841.286, -7570.885, 20.31774, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+183,180415, 530, 1, 1, 9850.589, -7555.328, 20.28959, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+184,180415, 530, 1, 1, 9860.757, -7565.826, 20.21995, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+185,180415, 530, 1, 1, 9845.252, -7556.721, 20.27281, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+186,180415, 530, 1, 1, 9859.213, -7560.637, 20.16981, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+187,180415, 530, 1, 1, 9845.12, -7574.828, 20.32867, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+188,180415, 530, 1, 1, 9841.471, -7560.367, 20.30399, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+189,180415, 530, 1, 1, 9708.164, -7523.533, 20.19339, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+190,180415, 530, 1, 1, 9708.63, -7525.708, 20.19339, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+191,180415, 530, 1, 1, 9689.424, -7526.101, 18.17952, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+192,180415, 530, 1, 1, 9698.255, -7529.269, 18.1807, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+193,180415, 530, 1, 1, 9699.27, -7531.121, 18.17952, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+194,180415, 530, 1, 1, 9688.258, -7524.131, 18.17952, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+195,180415, 530, 1, 1, 9696.238, -7528.111, 18.18006, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+196,180415, 530, 1, 1, 9699.441, -7533.089, 18.18734, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+197,180415, 530, 1, 1, 9686.209, -7523.117, 18.17953, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+198,180415, 530, 1, 1, 9680.044, -7523.145, 18.17953, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+199,180415, 530, 1, 1, 9689.915, -7528.086, 18.18014, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+200,180415, 530, 1, 1, 9677.983, -7524.141, 18.17953, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+201,180415, 530, 1, 1, 9676.573, -7530.896, 18.18807, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+202,180415, 530, 1, 1, 9669.972, -7528.087, 18.18037, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+203,180415, 530, 1, 1, 9658.169, -7523.246, 20.19338, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+204,180415, 530, 1, 1, 9666.942, -7531.015, 18.18179, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+205,180415, 530, 1, 1, 9658.161, -7520.05, 20.19339, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+206,180415, 530, 1, 1, 9676.96, -7525.968, 18.17952, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+207,180415, 530, 1, 1, 9690.021, -7531.793, 18.19084, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+208,180415, 530, 1, 1, 9658.127, -7516.909, 20.19341, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+209,180415, 530, 1, 1, 9687.82, -7536.056, 18.20918, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+210,180415, 530, 1, 1, 9677.461, -7536.019, 18.20867, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+211,180415, 530, 1, 1, 9676.623, -7527.953, 18.17995, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+212,180415, 530, 1, 1, 9658.238, -7513.847, 20.19342, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+213,180415, 530, 1, 1, 9668.019, -7529.09, 18.17951, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+214,180415, 530, 1, 1, 9657.903, -7525.752, 20.19338, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+215,180415, 530, 1, 1, 9666.733, -7532.866, 18.1876, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+216,180415, 530, 1, 1, 9555.557, -7451.346, 15.48449, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+217,180415, 530, 1, 1, 9566.941, -7457.089, 15.52037, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+218,180415, 530, 1, 1, 9567.046, -7447.51, 15.51974, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+219,180415, 530, 1, 1, 9566.97, -7453.825, 15.51949, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+220,180415, 530, 1, 1, 9566.997, -7451.406, 15.51957, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+221,180415, 530, 1, 1, 9568.402, -7426.109, 19.47399, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+222,180415, 530, 1, 1, 9567.152, -7445.854, 15.52034, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+223,180472, 530, 1, 1, 9563.636, -7502.269, 21.49481, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+224,180415, 530, 1, 1, 9566.976, -7449.656, 15.51938, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+225,180415, 530, 1, 1, 9566.942, -7455.471, 15.51938, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+226,180405, 530, 1, 1, 9563.622, -7483.452, 15.5327, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+227,180415, 530, 1, 1, 9567.161, -7443.97, 15.52034, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+228,180406, 530, 1, 1, 9562.59, -7505.374, 16.25697, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+229,180415, 530, 1, 1, 9567.133, -7442.481, 15.5201, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+230,180415, 530, 1, 1, 9565.785, -7425.961, 19.47643, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+231,180410, 530, 1, 1, 9540.223, -7450.809, 17.51837, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+232,180415, 530, 1, 1, 9567.209, -7426.12, 19.47489, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+233,180415, 530, 1, 1, 9541.864, -7425.773, 19.47651, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+234,180415, 530, 1, 1, 9563.859, -7424.643, 19.47689, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+235,180410, 530, 1, 1, 9540.258, -7448.014, 17.50896, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+236,180472, 530, 1, 1, 9564.246, -7412.431, 27.42245, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+237,180410, 530, 1, 1, 9550.316, -7412.965, 20.95277, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+238,180415, 530, 1, 1, 9544.101, -7423.859, 19.47693, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+239,180415, 530, 1, 1, 9563.4, -7423.909, 19.47697, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+240,180410, 530, 1, 1, 9540.216, -7453.866, 17.47302, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+241,180415, 530, 1, 1, 9543.036, -7424.986, 19.47662, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+242,180415, 530, 1, 1, 9564.668, -7425.304, 19.47664, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+243,180407, 530, 1, 1, 9567.768, -7397.515, 16.85042, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+244,180406, 530, 1, 1, 9567.915, -7416.937, 19.47392, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+245,180410, 530, 1, 1, 9553.402, -7413.04, 20.98712, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+246,180407, 530, 1, 1, 9543.043, -7483.666, 15.53269, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+247,180415, 530, 1, 1, 9540.23, -7425.866, 19.4752, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+248,180472, 530, 1, 1, 9519.833, -7433.035, 19.3605, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+249,180415, 530, 1, 1, 9539.083, -7425.975, 19.47459, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+250,180407, 530, 1, 1, 9540.185, -7417.852, 19.4752, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+251,180405, 530, 1, 1, 9557.853, -7400.035, 16.83773, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+252,180410, 530, 1, 1, 9543.699, -7412.968, 20.87036, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+253,180406, 530, 1, 1, 9508.441, -7424.596, 14.1965, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+254,180410, 530, 1, 1, 9538.562, -7415.213, 20.94702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+255,180405, 530, 1, 1, 9523.479, -7423.124, 14.25087, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+256,180410, 530, 1, 1, 9540.664, -7412.908, 20.89148, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: -1) +(@OGUID+257,180406, 530, 1, 1, 9539.319, -7392.822, 16.82288, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+258,180472, 530, 1, 1, 9554.567, -7389.99, 21.68028, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: -1) +(@OGUID+259,180415, 530, 1, 1, 9487.291, -7422.018, 14.81501, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+260,180415, 530, 1, 1, 9484.362, -7445.353, 14.90302, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+261,180415, 530, 1, 1, 9480.708, -7432.739, 14.90301, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+262,180415, 530, 1, 1, 9476.451, -7449.176, 14.90303, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+263,180407, 530, 1, 1, 9494.879, -7428.358, 17.09135, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+264,180415, 530, 1, 1, 9492.825, -7419.987, 14.81502, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+265,180415, 530, 1, 1, 9476.508, -7431.844, 14.90302, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+266,180415, 530, 1, 1, 9467.375, -7440.646, 14.90301, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+267,180415, 530, 1, 1, 9472.466, -7432.785, 14.90301, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+268,180415, 530, 1, 1, 9482.682, -7420.492, 14.81501, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+269,180415, 530, 1, 1, 9484.56, -7436.282, 14.90301, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+270,180415, 530, 1, 1, 9468.686, -7445.147, 14.90302, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+271,180415, 530, 1, 1, 9496.979, -7414.939, 14.81503, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+272,180415, 530, 1, 1, 9472.42, -7448.443, 14.90303, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+273,180415, 530, 1, 1, 9485.846, -7440.649, 14.90301, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+274,180415, 530, 1, 1, 9497.751, -7409.99, 14.81504, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+275,180415, 530, 1, 1, 9480.601, -7448.55, 14.90303, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+276,180415, 530, 1, 1, 9497.879, -7397.243, 14.81503, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+277,180415, 530, 1, 1, 9468.706, -7436.143, 14.90301, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+278,180415, 530, 1, 1, 9497.823, -7404.051, 14.81503, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+279,180405, 530, 1, 1, 9728.203, -7077.669, 16.74163, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+280,180405, 530, 1, 1, 9731.667, -7093.845, 16.69393, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+281,180406, 530, 1, 1, 9649.085, -7055.952, 18.9854, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+282,180405, 530, 1, 1, 9630.405, -7055.748, 18.99824, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+283,180407, 530, 1, 1, 9625.018, -7048.128, 16.5235, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+284,180407, 530, 1, 1, 9452.534, -7117.212, 17.60469, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+285, 180415, 530, 1, 1, 9471.1, -6788.781, 18.13373, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+286, 180415, 530, 1, 1, 9476.353, -6788.941, 18.10409, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+287, 180405, 530, 1, 1, 9477.764, -6788.119, 16.49356, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+288, 180415, 530, 1, 1, 9478.772, -6793.347, 18.11179, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+289, 180415, 530, 1, 1, 9540.375, -6792.719, 18.12548, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+290, 180406, 530, 1, 1, 9543.698, -6778.754, 15.11356, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+291, 180415, 530, 1, 1, 9543.889, -6783.125, 17.3731, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+292, 180415, 530, 1, 1, 9544.979, -6778.125, 16.53427, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+293, 180415, 530, 1, 1, 9543.481, -6796.776, 18.1165, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+294, 180405, 530, 1, 1, 9542.096, -6797.444, 16.47561, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+295, 180415, 530, 1, 1, 9541.747, -6787.827, 17.90674, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+296, 180415, 530, 1, 1, 8744.743, -6707.795, 71.16882, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+297, 180407, 530, 1, 1, 8752.958, -6701.513, 70.30769, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+298, 180415, 530, 1, 1, 8732.847, -6664.828, 71.75481, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+299, 180415, 530, 1, 1, 8761.782, -6686.872, 71.60171, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+300, 180407, 530, 1, 1, 8727.983, -6662.12, 70.34041, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+301, 180415, 530, 1, 1, 8748.609, -6711.054, 71.06712, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+302, 180415, 530, 1, 1, 8759.109, -6691.253, 71.28538, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+303, 180406, 530, 1, 1, 8749.692, -6699.78, 69.26237, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+304, 180415, 530, 1, 1, 8739.994, -6664.781, 71.07558, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+305, 180415, 530, 1, 1, 8757.932, -6701.396, 71.16756, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+306, 180405, 530, 1, 1, 8723.28, -6666.225, 70.24129, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+307, 180415, 530, 1, 1, 8753.414, -6709.49, 71.1883, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+308, 180415, 530, 1, 1, 8726.561, -6687.083, 72.62592, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+309, 180405, 530, 1, 1, 8753.743, -6699.585, 70.3749, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+310, 180415, 530, 1, 1, 8723.233, -6681.452, 71.84742, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+311, 180405, 530, 1, 1, 8719.521, -6656.928, 93.42024, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+312, 180415, 530, 1, 1, 8700.916, -6674.799, 72.0319, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462) +(@OGUID+313, 180415, 530, 1, 1, 8706.488, -6662.007, 71.92754, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462) +(@OGUID+314, 180406, 530, 1, 1, 8705.386, -6687.072, 70.4631, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3462) +(@OGUID+315, 180411, 530, 1, 1, 8717.235, -6634.217, 81.3668, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3462) +(@OGUID+316, 180415, 530, 1, 1, 8702.579, -6665.299, 71.93767, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462) +(@OGUID+317, 180415, 530, 1, 1, 8701.252, -6679.795, 72.46958, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462) +(@OGUID+318, 180407, 530, 1, 1, 8706.709, -6692.784, 70.40144, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3462) +(@OGUID+319, 180411, 530, 1, 1, 8692.95, -6653.304, 81.65059, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3462) +(@OGUID+320, 180415, 530, 1, 1, 8698.946, -6684.249, 72.75284, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3462) +(@OGUID+321, 180411, 530, 1, 1, 8690.379, -6624.208, 81.74379, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3462) +(@OGUID+322, 180407, 530, 1, 1, 8698.128, -6633.019, 82.70164, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3462) +(@OGUID+323, 180406, 530, 1, 1, 8704.135, -6639.711, 82.70164, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3462) +(@OGUID+324, 180411, 530, 1, 1, 8714.333, -6651.519, 81.38808, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3462) +(@OGUID+325, 180405, 530, 1, 1, 8679.956, -6613.042, 93.42129, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3462) +(@OGUID+326, 180405, 530, 1, 1, 8683.743, -6621.233, 70.36587, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3462) +(@OGUID+327, 180406, 530, 1, 1, 8688.724, -6616.967, 70.36587, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3462) +(@OGUID+328, 180415, 530, 1, 1, 7605.088, -6811.049, 84.1159, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+329, 180415, 530, 1, 1, 7612.11, -6804.234, 81.90377, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+330, 180415, 530, 1, 1, 7612.021, -6828.266, 83.9107, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+331, 180415, 530, 1, 1, 7566.673, -6821.13, 88.05801, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+332, 180427, 530, 1, 1, 7573.918, -6803.229, 94.8674, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+333, 180415, 530, 1, 1, 7567.127, -6817.865, 88.0573, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+334, 180427, 530, 1, 1, 7569.024, -6809.578, 94.50038, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+335, 180426, 530, 1, 1, 7569.082, -6825.991, 89.69709, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+336, 180415, 530, 1, 1, 7602.116, -6828.639, 86.01514, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+337, 180427, 530, 1, 1, 7574.768, -6814.038, 95.28167, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+338, 180405, 530, 1, 1, 7577.568, -6858.068, 93.35548, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+339, 180426, 530, 1, 1, 7572.743, -6822.458, 90.08892, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+340, 180407, 530, 1, 1, 7576.379, -6780.385, 87.40021, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+341, 180426, 530, 1, 1, 7572.007, -6815.111, 93.45477, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+342, 180415, 530, 1, 1, 7567.2, -6819.601, 88.05785, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+343, 180427, 530, 1, 1, 7589.011, -6833.851, 98.97574, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+344, 180407, 530, 1, 1, 7572.278, -6819.3, 86.66614, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+345, 180426, 530, 1, 1, 7571.846, -6841.222, 98.84716, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+346, 180415, 530, 1, 1, 7562.185, -6823.288, 88.05971, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+347, 180427, 530, 1, 1, 7567.376, -6835.135, 98.69683, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+348, 180415, 530, 1, 1, 7561.724, -6814.664, 88.05759, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+349, 180415, 530, 1, 1, 7565.117, -6815.148, 88.05692, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+350, 180415, 530, 1, 1, 7558.944, -6816.728, 88.05735, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+351, 180405, 530, 1, 1, 7566.199, -6800.06, 87.48344, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+352, 180415, 530, 1, 1, 7563.428, -6814.641, 88.05914, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+353, 180415, 530, 1, 1, 7559.307, -6821.544, 88.05991, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+354, 180415, 530, 1, 1, 7558.512, -6820.009, 88.05814, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+355, 180426, 530, 1, 1, 7560.972, -6804.747, 97.29667, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+356, 180415, 530, 1, 1, 7565.508, -6822.448, 88.05878, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+357, 180426, 530, 1, 1, 7567.499, -6812.465, 101.9166, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+358, 180415, 530, 1, 1, 7566.346, -6816.298, 88.0579, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+359, 180407, 530, 1, 1, 7571.595, -6855.143, 93.3475, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+360, 180415, 530, 1, 1, 7564.033, -6823.213, 88.05829, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+361, 180415, 530, 1, 1, 7560.621, -6822.766, 88.05952, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+362, 180426, 530, 1, 1, 7564.719, -6828.118, 96.17546, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+363, 180426, 530, 1, 1, 7560.467, -6812.441, 96.04751, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+364, 180415, 530, 1, 1, 7560.125, -6815.4, 88.05717, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+365, 180426, 530, 1, 1, 7547.692, -6814.104, 93.27422, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+366, 180406, 530, 1, 1, 7552.977, -6801.014, 87.09279, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+367, 180426, 530, 1, 1, 7547.643, -6825.288, 94.40193, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+368, 180427, 530, 1, 1, 7558.28, -6809.564, 94.68667, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+369, 180415, 530, 1, 1, 7546.278, -6830.885, 88.81131, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+370, 180426, 530, 1, 1, 7557.047, -6828.95, 95.44633, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+371, 180415, 530, 1, 1, 7555.831, -6833.354, 89.27995, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+372, 180415, 530, 1, 1, 7558.429, -6818.413, 88.05863, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+373, 180405, 530, 1, 1, 7552.512, -6816.896, 86.9488, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+374, 180411, 530, 1, 1, 7557.601, -6889.191, 103.978, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+375, 180427, 530, 1, 1, 7542.735, -6808.821, 93.34179, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+376, 180427, 530, 1, 1, 7538.969, -6832.844, 96.30994, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+377, 180411, 530, 1, 1, 7552.211, -6766.903, 96.95532, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+378, 180406, 530, 1, 1, 7512.574, -6856.683, 84.62782, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3488) +(@OGUID+379, 180415, 530, 1, 1, 7506.477, -6809.167, 81.56933, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3488) +(@OGUID+380, 180415, 530, 1, 1, 7516.309, -6806.774, 83.16227, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3488) +(@OGUID+381, 186720, 530, 1, 1, 9225.462, -6765.234, 26.05804, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 186720 (Area: 0) +(@OGUID+382, 186720, 530, 1, 1, 9229.307, -6780.561, 27.05395, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 186720 (Area: 0) +(@OGUID+383, 186720, 530, 1, 1, 9224.697, -6771.005, 27.25945, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 186720 (Area: 0) +(@OGUID+384, 186720, 530, 1, 1, 9224.153, -6777.715, 28.38528, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 186720 (Area: 0) +(@OGUID+385, 186234, 530, 1, 1, 9235.062, -6770.263, 24.79453, 2.792518, 0, 0, 0, 1, 120, 255, 1); -- 186234 (Area: 0) + +INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES +(12, @OGUID+0), +(12, @OGUID+1), +(12, @OGUID+2), +(12, @OGUID+3), +(12, @OGUID+4), +(12, @OGUID+5), +(12, @OGUID+6), +(12, @OGUID+7), +(12, @OGUID+8), +(12, @OGUID+9), +(12, @OGUID+10), +(12, @OGUID+11), +(12, @OGUID+12), +(12, @OGUID+13), +(12, @OGUID+14), +(12, @OGUID+15), +(12, @OGUID+16), +(12, @OGUID+17), +(12, @OGUID+18), +(12, @OGUID+19), +(12, @OGUID+20), +(12, @OGUID+21), +(12, @OGUID+22), +(12, @OGUID+23), +(12, @OGUID+24), +(12, @OGUID+25), +(12, @OGUID+26), +(12, @OGUID+27), +(12, @OGUID+28), +(12, @OGUID+29), +(12, @OGUID+30), +(12, @OGUID+31), +(12, @OGUID+32), +(12, @OGUID+33), +(12, @OGUID+34), +(12, @OGUID+35), +(12, @OGUID+36), +(12, @OGUID+37), +(12, @OGUID+38), +(12, @OGUID+39), +(12, @OGUID+40), +(12, @OGUID+41), +(12, @OGUID+42), +(12, @OGUID+43), +(12, @OGUID+44), +(12, @OGUID+45), +(12, @OGUID+46), +(12, @OGUID+47), +(12, @OGUID+48), +(12, @OGUID+49), +(12, @OGUID+50), +(12, @OGUID+51), +(12, @OGUID+52), +(12, @OGUID+53), +(12, @OGUID+54), +(12, @OGUID+55), +(12, @OGUID+56), +(12, @OGUID+57), +(12, @OGUID+58), +(12, @OGUID+59), +(12, @OGUID+60), +(12, @OGUID+61), +(12, @OGUID+62), +(12, @OGUID+63), +(12, @OGUID+64), +(12, @OGUID+65), +(12, @OGUID+66), +(12, @OGUID+67), +(12, @OGUID+68), +(12, @OGUID+69), +(12, @OGUID+70), +(12, @OGUID+71), +(12, @OGUID+72), +(12, @OGUID+73), +(12, @OGUID+74), +(12, @OGUID+75), +(12, @OGUID+76), +(12, @OGUID+77), +(12, @OGUID+78), +(12, @OGUID+79), +(12, @OGUID+80), +(12, @OGUID+81), +(12, @OGUID+82), +(12, @OGUID+83), +(12, @OGUID+84), +(12, @OGUID+85), +(12, @OGUID+86), +(12, @OGUID+87), +(12, @OGUID+88), +(12, @OGUID+89), +(12, @OGUID+90), +(12, @OGUID+91), +(12, @OGUID+92), +(12, @OGUID+93), +(12, @OGUID+94), +(12, @OGUID+95), +(12, @OGUID+96), +(12, @OGUID+97), +(12, @OGUID+98), +(12, @OGUID+99), +(12, @OGUID+100), +(12, @OGUID+101), +(12, @OGUID+102), +(12, @OGUID+103), +(12, @OGUID+104), +(12, @OGUID+105), +(12, @OGUID+106), +(12, @OGUID+107), +(12, @OGUID+108), +(12, @OGUID+109), +(12, @OGUID+110), +(12, @OGUID+111), +(12, @OGUID+112), +(12, @OGUID+113), +(12, @OGUID+114), +(12, @OGUID+115), +(12, @OGUID+116), +(12, @OGUID+117), +(12, @OGUID+118), +(12, @OGUID+119), +(12, @OGUID+120), +(12, @OGUID+121), +(12, @OGUID+122), +(12, @OGUID+123), +(12, @OGUID+124), +(12, @OGUID+125), +(12, @OGUID+126), +(12, @OGUID+127), +(12, @OGUID+128), +(12, @OGUID+129), +(12, @OGUID+130), +(12, @OGUID+131), +(12, @OGUID+132), +(12, @OGUID+133), +(12, @OGUID+134), +(12, @OGUID+135), +(12, @OGUID+136), +(12, @OGUID+137), +(12, @OGUID+138), +(12, @OGUID+139), +(12, @OGUID+140), +(12, @OGUID+141), +(12, @OGUID+142), +(12, @OGUID+143), +(12, @OGUID+144), +(12, @OGUID+145), +(12, @OGUID+146), +(12, @OGUID+147), +(12, @OGUID+148), +(12, @OGUID+149), +(12, @OGUID+150), +(12, @OGUID+151), +(12, @OGUID+152), +(12, @OGUID+153), +(12, @OGUID+154), +(12, @OGUID+155), +(12, @OGUID+156), +(12, @OGUID+157), +(12, @OGUID+158), +(12, @OGUID+159), +(12, @OGUID+160), +(12, @OGUID+161), +(12, @OGUID+162), +(12, @OGUID+163), +(12, @OGUID+164), +(12, @OGUID+165), +(12, @OGUID+166), +(12, @OGUID+167), +(12, @OGUID+168), +(12, @OGUID+169), +(12, @OGUID+170), +(12, @OGUID+171), +(12, @OGUID+172), +(12, @OGUID+173), +(12, @OGUID+174), +(12, @OGUID+175), +(12, @OGUID+176), +(12, @OGUID+177), +(12, @OGUID+178), +(12, @OGUID+179), +(12, @OGUID+180), +(12, @OGUID+181), +(12, @OGUID+182), +(12, @OGUID+183), +(12, @OGUID+184), +(12, @OGUID+185), +(12, @OGUID+186), +(12, @OGUID+187), +(12, @OGUID+188), +(12, @OGUID+189), +(12, @OGUID+190), +(12, @OGUID+191), +(12, @OGUID+192), +(12, @OGUID+193), +(12, @OGUID+194), +(12, @OGUID+195), +(12, @OGUID+196), +(12, @OGUID+197), +(12, @OGUID+198), +(12, @OGUID+199), +(12, @OGUID+200), +(12, @OGUID+201), +(12, @OGUID+202), +(12, @OGUID+203), +(12, @OGUID+204), +(12, @OGUID+205), +(12, @OGUID+206), +(12, @OGUID+207), +(12, @OGUID+208), +(12, @OGUID+209), +(12, @OGUID+210), +(12, @OGUID+211), +(12, @OGUID+212), +(12, @OGUID+213), +(12, @OGUID+214), +(12, @OGUID+215), +(12, @OGUID+216), +(12, @OGUID+217), +(12, @OGUID+218), +(12, @OGUID+219), +(12, @OGUID+220), +(12, @OGUID+221), +(12, @OGUID+222), +(12, @OGUID+223), +(12, @OGUID+224), +(12, @OGUID+225), +(12, @OGUID+226), +(12, @OGUID+227), +(12, @OGUID+228), +(12, @OGUID+229), +(12, @OGUID+230), +(12, @OGUID+231), +(12, @OGUID+232), +(12, @OGUID+233), +(12, @OGUID+234), +(12, @OGUID+235), +(12, @OGUID+236), +(12, @OGUID+237), +(12, @OGUID+238), +(12, @OGUID+239), +(12, @OGUID+240), +(12, @OGUID+241), +(12, @OGUID+242), +(12, @OGUID+243), +(12, @OGUID+244), +(12, @OGUID+245), +(12, @OGUID+246), +(12, @OGUID+247), +(12, @OGUID+248), +(12, @OGUID+249), +(12, @OGUID+250), +(12, @OGUID+251), +(12, @OGUID+252), +(12, @OGUID+253), +(12, @OGUID+254), +(12, @OGUID+255), +(12, @OGUID+256), +(12, @OGUID+257), +(12, @OGUID+258), +(12, @OGUID+259), +(12, @OGUID+260), +(12, @OGUID+261), +(12, @OGUID+262), +(12, @OGUID+263), +(12, @OGUID+264), +(12, @OGUID+265), +(12, @OGUID+266), +(12, @OGUID+267), +(12, @OGUID+268), +(12, @OGUID+269), +(12, @OGUID+270), +(12, @OGUID+271), +(12, @OGUID+272), +(12, @OGUID+273), +(12, @OGUID+274), +(12, @OGUID+275), +(12, @OGUID+276), +(12, @OGUID+277), +(12, @OGUID+278), +(12, @OGUID+279), +(12, @OGUID+280), +(12, @OGUID+281), +(12, @OGUID+282), +(12, @OGUID+283), +(12, @OGUID+284), +(12, @OGUID+285), +(12, @OGUID+286), +(12, @OGUID+287), +(12, @OGUID+288), +(12, @OGUID+289), +(12, @OGUID+290), +(12, @OGUID+291), +(12, @OGUID+292), +(12, @OGUID+293), +(12, @OGUID+294), +(12, @OGUID+295), +(12, @OGUID+296), +(12, @OGUID+297), +(12, @OGUID+298), +(12, @OGUID+299), +(12, @OGUID+300), +(12, @OGUID+301), +(12, @OGUID+302), +(12, @OGUID+303), +(12, @OGUID+304), +(12, @OGUID+305), +(12, @OGUID+306), +(12, @OGUID+307), +(12, @OGUID+308), +(12, @OGUID+309), +(12, @OGUID+310), +(12, @OGUID+311), +(12, @OGUID+312), +(12, @OGUID+313), +(12, @OGUID+314), +(12, @OGUID+315), +(12, @OGUID+316), +(12, @OGUID+317), +(12, @OGUID+318), +(12, @OGUID+319), +(12, @OGUID+320), +(12, @OGUID+321), +(12, @OGUID+322), +(12, @OGUID+323), +(12, @OGUID+324), +(12, @OGUID+325), +(12, @OGUID+326), +(12, @OGUID+327), +(12, @OGUID+328), +(12, @OGUID+329), +(12, @OGUID+330), +(12, @OGUID+331), +(12, @OGUID+332), +(12, @OGUID+333), +(12, @OGUID+334), +(12, @OGUID+335), +(12, @OGUID+336), +(12, @OGUID+337), +(12, @OGUID+338), +(12, @OGUID+339), +(12, @OGUID+340), +(12, @OGUID+341), +(12, @OGUID+342), +(12, @OGUID+343), +(12, @OGUID+344), +(12, @OGUID+345), +(12, @OGUID+346), +(12, @OGUID+347), +(12, @OGUID+348), +(12, @OGUID+349), +(12, @OGUID+350), +(12, @OGUID+351), +(12, @OGUID+352), +(12, @OGUID+353), +(12, @OGUID+354), +(12, @OGUID+355), +(12, @OGUID+356), +(12, @OGUID+357), +(12, @OGUID+358), +(12, @OGUID+359), +(12, @OGUID+360), +(12, @OGUID+361), +(12, @OGUID+362), +(12, @OGUID+363), +(12, @OGUID+364), +(12, @OGUID+365), +(12, @OGUID+366), +(12, @OGUID+367), +(12, @OGUID+368), +(12, @OGUID+369), +(12, @OGUID+370), +(12, @OGUID+371), +(12, @OGUID+372), +(12, @OGUID+373), +(12, @OGUID+374), +(12, @OGUID+375), +(12, @OGUID+376), +(12, @OGUID+377), +(12, @OGUID+378), +(12, @OGUID+379), +(12, @OGUID+380), +(12, @OGUID+381), +(12, @OGUID+382), +(12, @OGUID+383), +(12, @OGUID+384), +(12, @OGUID+385); From 105f624763967509f5727878fb5099c76d4ce18f Mon Sep 17 00:00:00 2001 From: Naios Date: Fri, 30 Oct 2015 23:58:34 +0100 Subject: [PATCH 269/524] Core/AI: Convert the hardcoded variadic RAND functions into one C++11 variadic template version. (cherry picked from commit 0b6f7845911c41dcc175996816abc2e06f7dadbd) --- src/server/game/AI/CreatureAIImpl.h | 290 +----------------- .../boss_valithria_dreamwalker.cpp | 4 +- 2 files changed, 8 insertions(+), 286 deletions(-) diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h index a2c5c5db05..529f742002 100644 --- a/src/server/game/AI/CreatureAIImpl.h +++ b/src/server/game/AI/CreatureAIImpl.h @@ -23,292 +23,14 @@ #include "CreatureAI.h" #include "SpellMgr.h" -template -inline -const T& RAND(const T& v1, const T& v2) -{ - return (urand(0, 1)) ? v1 : v2; -} +#include +#include -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3) +template +static inline First const& RAND(First const& first, Second const& second, Rest const&... rest) { - switch (urand(0, 2)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4) -{ - switch (urand(0, 3)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5) -{ - switch (urand(0, 4)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6) -{ - switch (urand(0, 5)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7) -{ - switch (urand(0, 6)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8) -{ - switch (urand(0, 7)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9) -{ - switch (urand(0, 8)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10) -{ - switch (urand(0, 9)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11) -{ - switch (urand(0, 10)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12) -{ - switch (urand(0, 11)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12, const T& v13) -{ - switch (urand(0, 12)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - case 12: return v13; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14) -{ - switch (urand(0, 13)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - case 12: return v13; - case 13: return v14; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14, const T& v15) -{ - switch (urand(0, 14)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - case 12: return v13; - case 13: return v14; - case 14: return v15; - } -} - -template -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14, const T& v15, const T& v16) -{ - switch (urand(0, 15)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - case 12: return v13; - case 13: return v14; - case 14: return v15; - case 15: return v16; - } + std::reference_wrapper::type> const pack[] = { first, second, rest... }; + return pack[urand(0, sizeof...(rest) + 1)].get(); } enum AITarget diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index f083513589..f9d5a31052 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -1336,7 +1336,7 @@ class spell_dreamwalker_summon_dream_portal : public SpellScriptLoader if (!GetHitUnit()) return; - uint32 spellId = RAND(71301, 72220, 72223, 72225); + uint32 spellId = RAND(71301, 72220, 72223, 72225); GetHitUnit()->CastSpell(GetHitUnit(), spellId, true); } @@ -1367,7 +1367,7 @@ class spell_dreamwalker_summon_nightmare_portal : public SpellScriptLoader if (!GetHitUnit()) return; - uint32 spellId = RAND(71977, 72481, 72482, 72483); + uint32 spellId = RAND(71977, 72481, 72482, 72483); GetHitUnit()->CastSpell(GetHitUnit(), spellId, true); } From 570e6baa090793bb5be33a4dbc417fb7b11d0b51 Mon Sep 17 00:00:00 2001 From: Naios Date: Sat, 31 Oct 2015 00:10:17 +0100 Subject: [PATCH 270/524] Core/AI: Cleanup in CreatureAISelector (cherry picked from commit 6fa45881914e0961c6c971d2c5e78fa3c712c5fb) --- src/server/game/AI/CreatureAIFactory.h | 5 ++++ src/server/game/AI/CreatureAISelector.cpp | 30 +++++++++++------------ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/server/game/AI/CreatureAIFactory.h b/src/server/game/AI/CreatureAIFactory.h index 4473d3e9cd..4e11630259 100644 --- a/src/server/game/AI/CreatureAIFactory.h +++ b/src/server/game/AI/CreatureAIFactory.h @@ -50,6 +50,8 @@ CreatureAIFactory::Create(void* data) const typedef FactoryHolder CreatureAICreator; typedef FactoryHolder::FactoryHolderRegistry CreatureAIRegistry; +#define sCreatureAIRegistry CreatureAIRegistry::instance() + //GO struct SelectableGameObjectAI : public FactoryHolder, public Permissible { @@ -76,4 +78,7 @@ GameObjectAIFactory::Create(void* data) const typedef FactoryHolder GameObjectAICreator; typedef FactoryHolder::FactoryHolderRegistry GameObjectAIRegistry; + +#define sGameObjectAIRegistry GameObjectAIRegistry::instance() + #endif diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp index d3e1173399..4cab7d5c09 100644 --- a/src/server/game/AI/CreatureAISelector.cpp +++ b/src/server/game/AI/CreatureAISelector.cpp @@ -30,10 +30,9 @@ namespace FactorySelector CreatureAI* selectAI(Creature* creature) { const CreatureAICreator* ai_factory = NULL; - CreatureAIRegistry& ai_registry(*CreatureAIRegistry::instance()); if (creature->IsPet()) - ai_factory = ai_registry.GetRegistryItem("PetAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("PetAI"); //scriptname in db if (!ai_factory) @@ -43,32 +42,32 @@ namespace FactorySelector // AIname in db std::string ainame=creature->GetAIName(); if (!ai_factory && !ainame.empty()) - ai_factory = ai_registry.GetRegistryItem(ainame); + ai_factory = sCreatureAIRegistry->GetRegistryItem(ainame); // select by NPC flags if (!ai_factory) { if (creature->IsVehicle()) - ai_factory = ai_registry.GetRegistryItem("VehicleAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("VehicleAI"); else if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN) && ((Guardian*)creature)->GetOwner()->GetTypeId() == TYPEID_PLAYER) - ai_factory = ai_registry.GetRegistryItem("PetAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("PetAI"); else if (creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK)) - ai_factory = ai_registry.GetRegistryItem("NullCreatureAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("NullCreatureAI"); else if (creature->IsGuard()) - ai_factory = ai_registry.GetRegistryItem("GuardAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("GuardAI"); else if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN)) - ai_factory = ai_registry.GetRegistryItem("PetAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("PetAI"); else if (creature->IsTotem()) - ai_factory = ai_registry.GetRegistryItem("TotemAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("TotemAI"); else if (creature->IsTrigger()) { if (creature->m_spells[0]) - ai_factory = ai_registry.GetRegistryItem("TriggerAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("TriggerAI"); else - ai_factory = ai_registry.GetRegistryItem("NullCreatureAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("NullCreatureAI"); } else if (creature->IsCritter() && !creature->HasUnitTypeMask(UNIT_MASK_GUARDIAN)) - ai_factory = ai_registry.GetRegistryItem("CritterAI"); + ai_factory = sCreatureAIRegistry->GetRegistryItem("CritterAI"); } // select by permit check @@ -76,7 +75,7 @@ namespace FactorySelector { int best_val = -1; typedef CreatureAIRegistry::RegistryMapType RMT; - RMT const& l = ai_registry.GetRegisteredItems(); + RMT const& l = sCreatureAIRegistry->GetRegisteredItems(); for (RMT::const_iterator iter = l.begin(); iter != l.end(); ++iter) { const CreatureAICreator* factory = iter->second; @@ -128,14 +127,13 @@ namespace FactorySelector GameObjectAI* SelectGameObjectAI(GameObject* go) { - const GameObjectAICreator* ai_factory = NULL; - GameObjectAIRegistry& ai_registry(*GameObjectAIRegistry::instance()); + GameObjectAICreator const* ai_factory = NULL; // scriptname in db if (GameObjectAI* scriptedAI = sScriptMgr->GetGameObjectAI(go)) return scriptedAI; - ai_factory = ai_registry.GetRegistryItem(go->GetAIName()); + ai_factory = sGameObjectAIRegistry->GetRegistryItem(go->GetAIName()); //future goAI types go here From 965d29484b0dd399f7aac4ceb4b765dcaac3dbdb Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 1 Nov 2015 16:29:29 +0100 Subject: [PATCH 271/524] Core/Items: Corrected all spellid checks from item_template to also check -1 Closes #15797 --- src/server/game/Entities/Player/Player.cpp | 8 ++++---- src/server/game/Globals/ObjectMgr.cpp | 2 +- src/server/game/Spells/Spell.cpp | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 37df45acfd..2f78280a40 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -8101,7 +8101,7 @@ void Player::ApplyItemEquipSpell(Item* item, bool apply, bool form_change) _Spell const& spellData = proto->Spells[i]; // no spell - if (!spellData.SpellId) + if (spellData.SpellId <= 0) continue; // wrong triggering type @@ -8229,7 +8229,7 @@ void Player::CastItemCombatSpell(Unit* target, WeaponAttackType attType, uint32 _Spell const& spellData = proto->Spells[i]; // no spell - if (!spellData.SpellId) + if (spellData.SpellId <= 0) continue; // wrong triggering type @@ -8358,7 +8358,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8 _Spell const& spellData = proto->Spells[i]; // no spell - if (!spellData.SpellId) + if (spellData.SpellId <= 0) continue; // wrong triggering type @@ -22713,7 +22713,7 @@ void Player::ApplyEquipCooldown(Item* pItem) _Spell const& spellData = pItem->GetTemplate()->Spells[i]; // no spell - if (!spellData.SpellId) + if (spellData.SpellId <= 0) continue; // wrong triggering type (note: ITEM_SPELLTRIGGER_ON_NO_DELAY_USE not have cooldown) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 283323b65f..7a9302699b 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2521,7 +2521,7 @@ void ObjectMgr::LoadItemTemplates() if (!req) for (uint8 j = 0; j < MAX_ITEM_PROTO_SPELLS; ++j) { - if (itemTemplate.Spells[j].SpellId) + if (itemTemplate.Spells[j].SpellId > 0) { req = true; break; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index c026d10241..76eefa0bb0 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4253,7 +4253,7 @@ void Spell::TakeCastItem() for (int i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) { - if (proto->Spells[i].SpellId) + if (proto->Spells[i].SpellId > 0) { // item has limited charges if (proto->Spells[i].SpellCharges) @@ -6044,7 +6044,7 @@ SpellCastResult Spell::CheckItems() for (uint8 e = 0; e < MAX_ITEM_PROTO_SPELLS; ++e) { ItemTemplate const* proto = targetItem->GetTemplate(); - if (proto->Spells[e].SpellId && ( + if (proto->Spells[e].SpellId > 0 && ( proto->Spells[e].SpellTrigger == ITEM_SPELLTRIGGER_ON_USE || proto->Spells[e].SpellTrigger == ITEM_SPELLTRIGGER_ON_NO_DELAY_USE)) { From 5be1f4c74bf23fbb968f715b2ff5e2310b24552a Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 1 Nov 2015 16:36:39 +0100 Subject: [PATCH 272/524] DB/Objects: Fix Objects IDs on a previous commit --- sql/updates/world/2015_11_01_02_world.sql | 94 +++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 sql/updates/world/2015_11_01_02_world.sql diff --git a/sql/updates/world/2015_11_01_02_world.sql b/sql/updates/world/2015_11_01_02_world.sql new file mode 100644 index 0000000000..10a432bc0e --- /dev/null +++ b/sql/updates/world/2015_11_01_02_world.sql @@ -0,0 +1,94 @@ +-- +SET @OGUID:=78023; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+10 AND @OGUID+99; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `PhaseGroup`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+10,180407, 530, 1, 1, 9812.965, -7409.957, 13.62506, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+11,180427, 530, 1, 1, 9682.321, -7432.618, 23.67524, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+12,180426, 530, 1, 1, 9685.572, -7441.069, 23.97384, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) +(@OGUID+13,180426, 530, 1, 1, 9686.853, -7440.715, 20.77245, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) +(@OGUID+14,180427, 530, 1, 1, 9686.702, -7436.893, 20.72384, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+15,180426, 530, 1, 1, 9684.29, -7437.083, 23.16829, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) +(@OGUID+16,180427, 530, 1, 1, 9682.661, -7437.406, 19.14746, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+17,180427, 530, 1, 1, 9682.217, -7440.542, 23.70301, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+18,180426, 530, 1, 1, 9681.567, -7440.406, 21.67523, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) +(@OGUID+19,180427, 530, 1, 1, 9688.92, -7439.088, 24.64051, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) +(@OGUID+20,180415, 530, 1, 1, 9726.541, -7459.687, 14.03802, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+21,180415, 530, 1, 1, 9646.93, -7446.186, 14.02778, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+22,180415, 530, 1, 1, 9763.853, -7467.264, 13.57424, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+23,180415, 530, 1, 1, 9721.928, -7473.809, 14.03804, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+24,180415, 530, 1, 1, 9763.872, -7469.173, 13.57424, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+25,180415, 530, 1, 1, 9642.902, -7441.372, 14.02778, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+26,180415, 530, 1, 1, 9706.262, -7464.713, 14.03802, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+27,180415, 530, 1, 1, 9722.172, -7455.784, 14.03802, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+28,180415, 530, 1, 1, 9637.544, -7439.558, 14.02778, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+29,180415, 530, 1, 1, 9708.006, -7469.922, 14.03803, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+30,180415, 530, 1, 1, 9717.246, -7454.905, 14.03803, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+31,180415, 530, 1, 1, 9707.984, -7459.522, 14.03802, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+32,180415, 530, 1, 1, 9726.428, -7470.03, 14.03803, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+33,180415, 530, 1, 1, 9763.653, -7472.03, 13.57424, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+34,180415, 530, 1, 1, 9712.377, -7473.811, 14.03804, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+35,180415, 530, 1, 1, 9728.004, -7464.864, 14.03802, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+36,180415, 530, 1, 1, 9712.409, -7455.581, 14.03802, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+37,180415, 530, 1, 1, 9717.181, -7474.624, 14.03804, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+38,180415, 530, 1, 1, 9660.289, -7459.098, 14.02777, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+39,180415, 530, 1, 1, 9661.99, -7464.522, 14.02777, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+40,180415, 530, 1, 1, 9655.606, -7455.169, 14.02777, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+41,180415, 530, 1, 1, 9649.94, -7453.708, 14.02778, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+42,180415, 530, 1, 1, 9641.782, -7259.7, 14.81578, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+43,180406, 530, 1, 1, 9607.743, -7398.093, 13.61317, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+44,180415, 530, 1, 1, 9628.13, -7445.979, 14.02779, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+45,180415, 530, 1, 1, 9632.113, -7441.426, 14.02779, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+46,180415, 530, 1, 1, 9660.25, -7470.04, 14.02776, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+47,180415, 530, 1, 1, 9638.744, -7460.21, 15.98692, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+48,180415, 530, 1, 1, 9641.474, -7463.021, 16.38364, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+49,180415, 530, 1, 1, 9640.314, -7461.316, 17.30185, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+50,180415, 530, 1, 1, 9638.427, -7461.016, 18.32743, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+51,180415, 530, 1, 1, 9638.209, -7462.663, 18.66362, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+52,180415, 530, 1, 1, 9637.09, -7461.913, 18.66316, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+53,180415, 530, 1, 1, 9640.428, -7464.382, 15.98692, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+54,180415, 530, 1, 1, 9641.477, -7465.749, 15.98692, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+55,180415, 530, 1, 1, 9639.198, -7461.872, 15.98692, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+56,180415, 530, 1, 1, 9624.851, -7453.41, 14.02778, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+57,180415, 530, 1, 1, 9637.354, -7461.244, 15.98692, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+58,180415, 530, 1, 1, 9639.954, -7462.725, 16.84003, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+59,180415, 530, 1, 1, 9635.964, -7460.174, 15.97606, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+60,180415, 530, 1, 1, 9635.571, -7461.838, 15.98692, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+61,180415, 530, 1, 1, 9639.138, -7462.302, 17.97781, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+62,180415, 530, 1, 1, 9635.984, -7466.34, 18.39254, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+63,180415, 530, 1, 1, 9633.069, -7464.283, 15.98692, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+64,180415, 530, 1, 1, 9634.456, -7463.351, 15.98692, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+65,180415, 530, 1, 1, 9635.389, -7467.68, 17.8932, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+66,180415, 530, 1, 1, 9637.663, -7466.748, 18.66317, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+67,180415, 530, 1, 1, 9633.908, -7461.739, 15.98692, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+68,180415, 530, 1, 1, 9634.506, -7465.276, 16.39715, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+69,180415, 530, 1, 1, 9637.328, -7468.691, 15.98692, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+70,180415, 530, 1, 1, 9638.302, -7467.272, 15.98692, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+71,180415, 530, 1, 1, 9635.129, -7466.257, 17.33418, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+72,180415, 530, 1, 1, 9649.725, -7475.164, 14.02777, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+73,180415, 530, 1, 1, 9634.771, -7467.749, 15.98692, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+74,180415, 530, 1, 1, 9639.864, -7467.848, 15.98692, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+75,180415, 530, 1, 1, 9636.4, -7467.287, 15.98692, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+76,180415, 530, 1, 1, 9639.832, -7466.174, 15.98692, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+77,180415, 530, 1, 1, 9655.462, -7473.856, 14.02776, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+78,180415, 530, 1, 1, 9633.779, -7466.766, 16.85439, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+79,180415, 530, 1, 1, 9654.685, -7494.923, 20.20687, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+80,180415, 530, 1, 1, 9642.694, -7487.412, 14.02775, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+81,180415, 530, 1, 1, 9708.024, -7495.3, 20.21482, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+82,180405, 530, 1, 1, 9677.399, -7499.985, 15.73777, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: -1) +(@OGUID+83,180407, 530, 1, 1, 9687.479, -7494.583, 15.76028, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+84,180411, 530, 1, 1, 9694.27, -7498.087, 19.95394, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+85,180415, 530, 1, 1, 9714.893, -7495.471, 20.20084, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+86,180406, 530, 1, 1, 9689.191, -7499.704, 15.73832, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+87,180415, 530, 1, 1, 9705.337, -7495.149, 20.22054, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+88,180406, 530, 1, 1, 9679.796, -7494.525, 15.75649, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: -1) +(@OGUID+89,180415, 530, 1, 1, 9646.641, -7482.605, 14.02776, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+90,180411, 530, 1, 1, 9672.331, -7497.908, 19.90336, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+91,180415, 530, 1, 1, 9619.048, -7454.828, 14.02777, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+92,180415, 530, 1, 1, 9711.266, -7495.455, 20.2082, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+93,180415, 530, 1, 1, 9658.174, -7494.944, 20.21395, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+94,180407, 530, 1, 1, 9697.96, -7500.003, 15.73456, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) +(@OGUID+95,180415, 530, 1, 1, 9661.191, -7494.833, 20.22025, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+96,180415, 530, 1, 1, 9614.421, -7458.695, 14.02777, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+97,180411, 530, 1, 1, 9683.252, -7498, 21.73868, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: -1) +(@OGUID+98,180415, 530, 1, 1, 9612.596, -7464.159, 14.02776, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: -1) +(@OGUID+99,180415, 530, 1, 1, 9624.603, -7474.983, 14.02777, 3.717554, 0, 0, 0, 1, 120, 255, 1); -- 180415 (Area: -1) From 146608985dc01ef16ae9556392a9047cae9c856d Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 1 Nov 2015 17:07:05 +0100 Subject: [PATCH 273/524] DB: Fix a type --- sql/updates/world/2015_11_01_02_world.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/updates/world/2015_11_01_02_world.sql b/sql/updates/world/2015_11_01_02_world.sql index 10a432bc0e..40a7f50c76 100644 --- a/sql/updates/world/2015_11_01_02_world.sql +++ b/sql/updates/world/2015_11_01_02_world.sql @@ -1,7 +1,7 @@ -- SET @OGUID:=78023; DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+10 AND @OGUID+99; -INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `PhaseGroup`, `phaseId`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES (@OGUID+10,180407, 530, 1, 1, 9812.965, -7409.957, 13.62506, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: -1) (@OGUID+11,180427, 530, 1, 1, 9682.321, -7432.618, 23.67524, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: -1) (@OGUID+12,180426, 530, 1, 1, 9685.572, -7441.069, 23.97384, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: -1) From da0671f4fee1ee00a45dc15e4ddd94d3f9c82a18 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 1 Nov 2015 18:40:35 +0100 Subject: [PATCH 274/524] Scripts/Naxxramax: Fix clang warning --- src/server/scripts/Northrend/Naxxramas/boss_noth.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index 810d446111..f6dc75c7b3 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -172,7 +172,7 @@ public: Talk(SAY_DEATH); } - void DamageTaken(Unit* /*who*/, uint32& damage) // prevent noth from somehow dying in the balcony phase + void DamageTaken(Unit* /*who*/, uint32& damage) override // prevent noth from somehow dying in the balcony phase { if (!events.IsInPhase(PHASE_BALCONY)) return; From 044e50de9bc0d9a0e0f2557b174074bdfe4ea085 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Sun, 1 Nov 2015 20:49:59 +0100 Subject: [PATCH 275/524] Rename 2015_10_08_faerlina.sql to 2015_11_01_03_world.sql --- .../world/{2015_10_08_faerlina.sql => 2015_11_01_03_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_10_08_faerlina.sql => 2015_11_01_03_world.sql} (100%) diff --git a/sql/updates/world/2015_10_08_faerlina.sql b/sql/updates/world/2015_11_01_03_world.sql similarity index 100% rename from sql/updates/world/2015_10_08_faerlina.sql rename to sql/updates/world/2015_11_01_03_world.sql From eddc759cbe49d8a1170660ca825eb4af8b02caa3 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Sun, 1 Nov 2015 21:26:17 +0100 Subject: [PATCH 276/524] DB/Event: Day of the Dead spawn addon fixes Spirit's & Celebrant's should be invisible, only visible with [Orange Marigold] and [Bouquet of Orange Marigolds] --- sql/updates/world/2015_11_01_04_world.sql | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 sql/updates/world/2015_11_01_04_world.sql diff --git a/sql/updates/world/2015_11_01_04_world.sql b/sql/updates/world/2015_11_01_04_world.sql new file mode 100644 index 0000000000..90efdecdf4 --- /dev/null +++ b/sql/updates/world/2015_11_01_04_world.sql @@ -0,0 +1,27 @@ +DELETE FROM `creature_template_addon` WHERE `entry` IN (35254, 35253, 35252, 35251, 35250, 35249, 35248, 35247, 35246, 35256, 34484, 34483, 34482, 34481, 34480, 34479, 34478, 34477, 34476, 34435, 35258, 35244, 35259, 35260, 35261); +INSERT INTO `creature_template_addon` (`entry`, `emote`, `auras`) VALUES +(35254, 10, "33900 30628"), +(35253, 10, "33900 30628"), +(35252, 10, "33900 30628"), +(35251, 10, "33900 30628"), +(35250, 10, "33900 30628"), +(35249, 10, "33900 30628"), +(35248, 10, "33900 30628"), +(35247, 10, "33900 30628"), +(35246, 10, "33900 30628"), +(35256, 0, "33900 30628"), +(34484, 0, "33900 30628"), +(34483, 0, "33900 30628"), +(34482, 0, "33900 30628"), +(34481, 0, "33900 30628"), +(34480, 0, "33900 30628"), +(34479, 0, "33900 30628"), +(34478, 0, "33900 30628"), +(34477, 0, "33900 30628"), +(34476, 0, "33900 30628"), +(34435, 0, "33900 30628"), +(35258, 0, "33900 30628"), +(35244, 0, "33900 30628"), +(35259, 0, "33900 30628"), +(35260, 0, "33900 30628"), +(35261, 0, "33900 30628"); From 91de0322bba3ef071338ce5a71f512369486eb1f Mon Sep 17 00:00:00 2001 From: treeston Date: Wed, 30 Sep 2015 12:14:45 +0200 Subject: [PATCH 277/524] Scripts/Naxxramas: Anub'rekhan encounter cleanup. - Cleaned up events behavior to use phases instead of weird checks for auras. - Cleaned up Crypt Guard despawn behavior, they should no longer despawn instantly upon death. - Moved initial greeting from MoveInLineOfSight hack to proper areatrigger script. - Fixed Crypt Guard respawn behaviour to prevent pulling them before Anub'rekhan has fully reset. - Fixed Crypt Guard aggro behaviour to call for help on aggro. This prevents pulling the initial pair of Crypt Guards without engaging the boss. - Added missing boss emotes. - Code style cleanup. --- .../world/2015_10_25_anubrekhan_world.sql | 26 +++ .../Northrend/Naxxramas/boss_anubrekhan.cpp | 209 ++++++++++++------ .../Naxxramas/instance_naxxramas.cpp | 16 ++ .../scripts/Northrend/Naxxramas/naxxramas.h | 3 + 4 files changed, 185 insertions(+), 69 deletions(-) create mode 100644 sql/updates/world/2015_10_25_anubrekhan_world.sql diff --git a/sql/updates/world/2015_10_25_anubrekhan_world.sql b/sql/updates/world/2015_10_25_anubrekhan_world.sql new file mode 100644 index 0000000000..77720bc0ad --- /dev/null +++ b/sql/updates/world/2015_10_25_anubrekhan_world.sql @@ -0,0 +1,26 @@ +-- Anub'Rekhan cleanup +-- areatrigger for greeting upon entering room +DELETE FROM `areatrigger_scripts` WHERE `entry`=4119; +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(4119,"at_anubrekhan_entrance"); + +-- make crypt guards aggro anub when pulled +DELETE FROM `smart_scripts` WHERE `entryorguid`=16573 AND `source_type`=0 AND `id` IN (6,7); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_chance`,`event_flags`,`event_param1`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`target_type`,`comment`) VALUES +(16573,0, 6, 0, 4,100,0,NULL, 39, 25, 0, 0, 0, "Crypt Guard - On Aggro - Call For Help (25yd)"), +(16573,0, 7, 5,61,100,0,NULL, 1, 0, 0, 0, 0, "Crypt Guard - On Cast Frenzy - Say EMOTE_FRENZY"); +UPDATE `smart_scripts` SET `link`=7 WHERE `entryorguid`=16573 AND `source_type`=0 AND `id`=5; + +DELETE FROM `creature_text` WHERE `entry`=16573; +DELETE FROM `creature_text` WHERE `entry`=15956 AND `groupid`=3; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(16573,0,0,"%s goes into a frenzy!",16,100,1191,3,"Crypt Guard EMOTE_FRENZY"), +(16573,1,0,"A Crypt Guard joins the fight!",41,100,29887,3,"Crypt Guard EMOTE_SPAWN"), +(16573,2,0,"Corpse Scarabs appear from a Crypt Guard's corpse!",41,100,32796,3,"Crypt Guard EMOTE_SCARAB"), +(15956,3,0,"Anub'Rekhan begins to unleash an insect swarm!",41,100,13443,3,"Anub'Rekhan EMOTE_LOCUST"); + +DELETE FROM `creature_summon_groups` WHERE `summonerId`=15956; +INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`) VALUES +(15956,0,1,16573, 3300.503, -3503.574, 287.1606, 2.321288, 8), +(15956,0,1,16573, 3299.283, -3450.938, 287.1606, 3.839724, 8), +(15956,0,2,16573, 3334.41 , -3476.84 , 287.1553, 0, 8); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 733647fdb6..471a7adc9d 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -17,39 +17,61 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "Player.h" #include "naxxramas.h" -enum Says +enum AnubSays { SAY_AGGRO = 0, SAY_GREET = 1, - SAY_SLAY = 2 + SAY_SLAY = 2, + + EMOTE_LOCUST = 3 }; -Position const GuardSummonPos = {3333.72f, -3476.30f, 287.1f, 6.2801f}; +enum GuardSays +{ + EMOTE_FRENZY = 0, + EMOTE_SPAWN = 1, + EMOTE_SCARAB = 2 +}; enum Events { - EVENT_IMPALE = 1, - EVENT_LOCUST, - EVENT_SPAWN_GUARDIAN_NORMAL, - EVENT_BERSERK + EVENT_IMPALE = 1, // Cast Impale on a random target + EVENT_LOCUST, // Begin channeling Locust Swarm + EVENT_LOCUST_ENDS, // Locust swarm dissipates + EVENT_SPAWN_GUARD, // 10-man only - crypt guard has delayed spawn; also used for the locust swarm crypt guard in both modes + EVENT_SCARABS, // spawn corpse scarabs + EVENT_BERSERK // Berserk }; enum Spells { - SPELL_IMPALE = 28783, - SPELL_LOCUST_SWARM = 28785, + SPELL_IMPALE = 28783, // 25-man: 56090 + SPELL_LOCUST_SWARM = 28785, // 25-man: 54021 SPELL_SUMMON_CORPSE_SCARABS_PLR = 29105, // This spawns 5 corpse scarabs on top of player SPELL_SUMMON_CORPSE_SCARABS_MOB = 28864, // This spawns 10 corpse scarabs on top of dead guards SPELL_BERSERK = 27680 }; +enum SpawnGroups +{ + GROUP_INITIAL_25M = 1, + GROUP_SINGLE_SPAWN = 2 +}; + enum Misc { ACHIEV_TIMED_START_EVENT = 9891 }; +enum Phases +{ + PHASE_NORMAL = 1, + PHASE_SWARM +}; + class boss_anubrekhan : public CreatureScript { public: @@ -62,46 +84,64 @@ public: struct boss_anubrekhanAI : public BossAI { - boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN) + boss_anubrekhanAI(Creature* creature) : BossAI(creature, BOSS_ANUBREKHAN) { } + + void SummonGuards() { - Initialize(); + if (Is25ManRaid()) + me->SummonCreatureGroup(GROUP_INITIAL_25M); } - void Initialize() + void InitializeAI() override { - hasTaunted = false; + if (!me->isDead()) + { + Reset(); + SummonGuards(); + } } - bool hasTaunted; - void Reset() override { _Reset(); + guardCorpses.clear(); + } - Initialize(); + void JustReachedHome() override + { + _JustReachedHome(); + SummonGuards(); + } - if (GetDifficulty() == RAID_DIFFICULTY_25MAN_NORMAL) - { - Position pos; + void JustSummoned(Creature* summon) override + { + BossAI::JustSummoned(summon); + + if (me->IsInCombat()) + if (summon->GetEntry() == NPC_CRYPT_GUARD) + summon->AI()->Talk(EMOTE_SPAWN, me); + } - // respawn guard using home position, - // otherwise, after a wipe, they respawn where boss was at wipe moment. - pos = me->GetHomePosition(); - pos.m_positionY -= 10.0f; - me->SummonCreature(NPC_CRYPT_GUARD, pos, TEMPSUMMON_CORPSE_DESPAWN); + void SummonedCreatureDies(Creature* summon, Unit* killer) override + { + BossAI::SummonedCreatureDies(summon, killer); - pos = me->GetHomePosition(); - pos.m_positionY += 10.0f; - me->SummonCreature(NPC_CRYPT_GUARD, pos, TEMPSUMMON_CORPSE_DESPAWN); - } + if (summon->GetEntry() == NPC_CRYPT_GUARD) + guardCorpses.insert(summon->GetGUID()); + } + + void SummonedCreatureDespawn(Creature* summon) override + { + BossAI::SummonedCreatureDespawn(summon); + + if (summon->GetEntry() == NPC_CRYPT_GUARD) + guardCorpses.erase(summon->GetGUID()); } void KilledUnit(Unit* victim) override { - /// Force the player to spawn corpse scarabs via spell, @todo Check percent chance for scarabs, 20% at the moment - if (!(rand32() % 5)) - if (victim->GetTypeId() == TYPEID_PLAYER) - victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, NULL, NULL, me->GetGUID()); + if (victim->GetTypeId() == TYPEID_PLAYER) + victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_PLR, true, nullptr, nullptr, me->GetGUID()); Talk(SAY_SLAY); } @@ -113,37 +153,22 @@ public: // start achievement timer (kill Maexna within 20 min) instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } + void EnterCombat(Unit* /*who*/) override { _EnterCombat(); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000)); - events.ScheduleEvent(EVENT_LOCUST, 90000); - events.ScheduleEvent(EVENT_BERSERK, 600000); - if (GetDifficulty() == RAID_DIFFICULTY_10MAN_NORMAL) - events.ScheduleEvent(EVENT_SPAWN_GUARDIAN_NORMAL, urand(15000, 20000)); - } + summons.DoZoneInCombat(); + + events.SetPhase(PHASE_NORMAL); + events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL); + events.ScheduleEvent(EVENT_SCARABS, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS), 0, PHASE_NORMAL); + events.ScheduleEvent(EVENT_LOCUST, urand(80,120) * IN_MILLISECONDS, 0, PHASE_NORMAL); + events.ScheduleEvent(EVENT_BERSERK, 10 * MINUTE * IN_MILLISECONDS); - void MoveInLineOfSight(Unit* who) override - { - if (!hasTaunted && me->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() == TYPEID_PLAYER) - { - Talk(SAY_GREET); - hasTaunted = true; - } - ScriptedAI::MoveInLineOfSight(who); - } - - void SummonedCreatureDespawn(Creature* summon) override - { - BossAI::SummonedCreatureDespawn(summon); - - // check if it is an actual killed guard - if (!me->IsAlive() || summon->IsAlive() || summon->GetEntry() != NPC_CRYPT_GUARD) - return; - - summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, NULL, NULL, me->GetGUID()); + if (!Is25ManRaid()) + events.ScheduleEvent(EVENT_SPAWN_GUARD, urand(15, 20) * IN_MILLISECONDS); } void UpdateAI(uint32 diff) override @@ -158,22 +183,44 @@ public: switch (eventId) { case EVENT_IMPALE: - //Cast Impale on a random target - //Do NOT cast it when we are afflicted by locust swarm - if (!me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_LOCUST_SWARM, me))) - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_IMPALE); - events.ScheduleEvent(EVENT_IMPALE, urand(10000, 20000)); + if (events.GetTimeUntilEvent(EVENT_LOCUST) < 5 * IN_MILLISECONDS) break; // don't chain impale tank -> locust swarm + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_IMPALE); + else + EnterEvadeMode(); + + events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL); + break; + case EVENT_SCARABS: + events.ScheduleEvent(EVENT_SCARABS, urand(40 * IN_MILLISECONDS, 60 * IN_MILLISECONDS), 0, PHASE_NORMAL); + + if (!guardCorpses.empty()) + { + if (ObjectGuid target = Trinity::Containers::SelectRandomContainerElement(guardCorpses)) + if(Creature* creatureTarget = ObjectAccessor::GetCreature(*me, target)) + { + creatureTarget->CastSpell(creatureTarget, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, nullptr, nullptr, me->GetGUID()); + creatureTarget->AI()->Talk(EMOTE_SCARAB); + creatureTarget->DespawnOrUnsummon(); + } + } break; case EVENT_LOCUST: - /// @todo Add Text + Talk(EMOTE_LOCUST); DoCast(me, SPELL_LOCUST_SWARM); - DoSummon(NPC_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN); + events.ScheduleEvent(EVENT_SPAWN_GUARD, 3 * IN_MILLISECONDS); + + events.ScheduleEvent(EVENT_LOCUST_ENDS, RAID_MODE(19, 23) * IN_MILLISECONDS); events.ScheduleEvent(EVENT_LOCUST, 90000); + events.SetPhase(PHASE_SWARM); break; - case EVENT_SPAWN_GUARDIAN_NORMAL: - /// @todo Add Text - DoSummon(NPC_CRYPT_GUARD, GuardSummonPos, 0, TEMPSUMMON_CORPSE_DESPAWN); + case EVENT_LOCUST_ENDS: + events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL); + events.ScheduleEvent(EVENT_SCARABS, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS), 0, PHASE_NORMAL); + events.SetPhase(PHASE_NORMAL); + break; + case EVENT_SPAWN_GUARD: + me->SummonCreatureGroup(GROUP_SINGLE_SPAWN); break; case EVENT_BERSERK: DoCast(me, SPELL_BERSERK, true); @@ -182,13 +229,37 @@ public: } } - DoMeleeAttackIfReady(); + if (events.IsInPhase(PHASE_NORMAL)) + DoMeleeAttackIfReady(); } + private: + GuidSet guardCorpses; }; }; +class at_anubrekhan_entrance : public AreaTriggerScript +{ + public: + at_anubrekhan_entrance() : AreaTriggerScript("at_anubrekhan_entrance") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + { + InstanceScript* instance = player->GetInstanceScript(); + if (!instance || instance->GetData(DATA_HAD_ANUBREKHAN_GREET) || instance->GetBossState(BOSS_ANUBREKHAN) != NOT_STARTED) + return true; + + if (Creature* anub = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_ANUBREKHAN))) + anub->AI()->Talk(SAY_GREET); + instance->SetData(DATA_HAD_ANUBREKHAN_GREET, 1u); + + return true; + } +}; + void AddSC_boss_anubrekhan() { new boss_anubrekhan(); + + new at_anubrekhan_entrance(); } diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 37aaa639bb..9b10fab2d6 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -125,6 +125,7 @@ class instance_naxxramas : public InstanceMapScript minHorsemenDiedTime = 0; maxHorsemenDiedTime = 0; AbominationCount = 0; + hadAnubRekhanGreet = false; hadFaerlinaGreet = false; CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT; @@ -135,6 +136,9 @@ class instance_naxxramas : public InstanceMapScript { switch (creature->GetEntry()) { + case NPC_ANUBREKHAN: + AnubRekhanGUID = creature->GetGUID(); + break; case NPC_FAERLINA: FaerlinaGUID = creature->GetGUID(); break; @@ -319,9 +323,14 @@ class instance_naxxramas : public InstanceMapScript case DATA_ABOMINATION_KILLED: AbominationCount = value; break; + case DATA_HAD_ANUBREKHAN_GREET: + hadAnubRekhanGreet = (value == 1u); + break; case DATA_HAD_FAERLINA_GREET: hadFaerlinaGreet = (value == 1u); break; + default: + break; } } @@ -331,6 +340,8 @@ class instance_naxxramas : public InstanceMapScript { case DATA_ABOMINATION_KILLED: return AbominationCount; + case DATA_HAD_ANUBREKHAN_GREET: + return (uint32)hadAnubRekhanGreet; case DATA_HAD_FAERLINA_GREET: return (uint32)hadFaerlinaGreet; default: @@ -344,6 +355,8 @@ class instance_naxxramas : public InstanceMapScript { switch (id) { + case DATA_ANUBREKHAN: + return AnubRekhanGUID; case DATA_FAERLINA: return FaerlinaGUID; case DATA_THANE: @@ -604,6 +617,8 @@ class instance_naxxramas : public InstanceMapScript protected: /* The Arachnid Quarter */ + // Anub'rekhan + ObjectGuid AnubRekhanGUID; // Grand Widow Faerlina ObjectGuid FaerlinaGUID; @@ -640,6 +655,7 @@ class instance_naxxramas : public InstanceMapScript ObjectGuid KelthuzadDoorGUID; ObjectGuid LichKingGUID; uint8 AbominationCount; + bool hadAnubRekhanGreet; bool hadFaerlinaGreet; uint8 CurrentWingTaunt; diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index 6795e2cc33..6289b70741 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -46,6 +46,7 @@ enum Data DATA_HEIGAN_ERUPT, DATA_GOTHIK_GATE, DATA_SAPPHIRON_BIRTH, + DATA_HAD_ANUBREKHAN_GREET, DATA_HAD_FAERLINA_GREET, @@ -63,6 +64,7 @@ enum Data enum Data64 { + DATA_ANUBREKHAN, DATA_FAERLINA, DATA_THANE, DATA_LADY, @@ -83,6 +85,7 @@ enum Data64 enum CreaturesIds { + NPC_ANUBREKHAN = 15956, NPC_FAERLINA = 15953, NPC_THANE = 16064, NPC_LADY = 16065, From d98037a75dd8a3edc2d95051b68fb4db83fb9d7b Mon Sep 17 00:00:00 2001 From: Incorrect Date: Sun, 1 Nov 2015 23:53:54 +0200 Subject: [PATCH 278/524] Core/Misc: Remove unneeded files These 3 BlackRock Mountain scripts can be removed from source: - boss_anubshiah.cpp - boss_gorosh_the_dervish.cpp - boss_grizzle.cpp They already removed from the creatures in DB, and are currently causing DBErrors. --- src/server/game/Scripting/ScriptLoader.cpp | 6 - .../BlackrockDepths/boss_anubshiah.cpp | 116 ------------------ .../boss_gorosh_the_dervish.cpp | 93 -------------- .../BlackrockDepths/boss_grizzle.cpp | 110 ----------------- .../scripts/EasternKingdoms/CMakeLists.txt | 3 - 5 files changed, 328 deletions(-) delete mode 100644 src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp delete mode 100644 src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp delete mode 100644 src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index a6a8eca600..47a23dedf0 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -102,11 +102,8 @@ void AddSC_boss_galvangar(); void AddSC_boss_vanndar(); void AddSC_blackrock_depths(); //Blackrock Depths void AddSC_boss_ambassador_flamelash(); -void AddSC_boss_anubshiah(); void AddSC_boss_draganthaurissan(); void AddSC_boss_general_angerforge(); -void AddSC_boss_gorosh_the_dervish(); -void AddSC_boss_grizzle(); void AddSC_boss_high_interrogator_gerstahn(); void AddSC_boss_magmus(); void AddSC_boss_moira_bronzebeard(); @@ -804,11 +801,8 @@ void AddEasternKingdomsScripts() AddSC_boss_vanndar(); AddSC_blackrock_depths(); //Blackrock Depths AddSC_boss_ambassador_flamelash(); - AddSC_boss_anubshiah(); AddSC_boss_draganthaurissan(); AddSC_boss_general_angerforge(); - AddSC_boss_gorosh_the_dervish(); - AddSC_boss_grizzle(); AddSC_boss_high_interrogator_gerstahn(); AddSC_boss_magmus(); AddSC_boss_moira_bronzebeard(); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp deleted file mode 100644 index c226178578..0000000000 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2008-2015 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 "ScriptMgr.h" -#include "ScriptedCreature.h" - -enum Spells -{ - SPELL_SHADOWBOLT = 17228, - SPELL_CURSEOFTONGUES = 15470, - SPELL_CURSEOFWEAKNESS = 17227, - SPELL_DEMONARMOR = 11735, - SPELL_ENVELOPINGWEB = 15471 -}; - -enum Events -{ - EVENT_SHADOWBOLT = 1, - EVENT_CURSE_OF_TONGUES = 2, - EVENT_CURSE_OF_WEAKNESS = 3, - EVENT_DEMON_ARMOR = 4, - EVENT_ENVELOPING_WEB = 5 -}; - -class boss_anubshiah : public CreatureScript -{ - public: - boss_anubshiah() : CreatureScript("boss_anubshiah") { } - - struct boss_anubshiahAI : public ScriptedAI - { - boss_anubshiahAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override - { - _events.Reset(); - } - - void EnterCombat(Unit* /*who*/) override - { - _events.ScheduleEvent(EVENT_SHADOWBOLT, 7000); - _events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 24000); - _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 12000); - _events.ScheduleEvent(EVENT_DEMON_ARMOR, 3000); - _events.ScheduleEvent(EVENT_ENVELOPING_WEB, 16000); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - while (uint32 eventId = _events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_SHADOWBOLT: - DoCast(me, SPELL_SHADOWBOLT); - _events.ScheduleEvent(EVENT_SHADOWBOLT, 7000); - break; - case EVENT_CURSE_OF_TONGUES: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_CURSEOFTONGUES); - _events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, 18000); - break; - case EVENT_CURSE_OF_WEAKNESS: - DoCastVictim(SPELL_CURSEOFWEAKNESS); - _events.ScheduleEvent(EVENT_CURSE_OF_WEAKNESS, 45000); - break; - case EVENT_DEMON_ARMOR: - DoCast(me, SPELL_DEMONARMOR); - _events.ScheduleEvent(EVENT_DEMON_ARMOR, 300000); - break; - case EVENT_ENVELOPING_WEB: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_ENVELOPINGWEB); - _events.ScheduleEvent(EVENT_ENVELOPING_WEB, 12000); - break; - default: - break; - } - } - - DoMeleeAttackIfReady(); - } - - private: - EventMap _events; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new boss_anubshiahAI(creature); - } -}; - -void AddSC_boss_anubshiah() -{ - new boss_anubshiah(); -} diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp deleted file mode 100644 index 83702ffb16..0000000000 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2008-2015 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 "ScriptMgr.h" -#include "ScriptedCreature.h" - -enum Spells -{ - SPELL_WHIRLWIND = 15589, - SPELL_MORTALSTRIKE = 24573 -}; - -enum Events -{ - EVENT_WHIRLWIND = 1, - EVENT_MORTALSTRIKE = 2 -}; - -class boss_gorosh_the_dervish : public CreatureScript -{ - public: - boss_gorosh_the_dervish() : CreatureScript("boss_gorosh_the_dervish") { } - - struct boss_gorosh_the_dervishAI : public ScriptedAI - { - boss_gorosh_the_dervishAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override - { - _events.Reset(); - } - - void EnterCombat(Unit* /*who*/) override - { - _events.ScheduleEvent(EVENT_WHIRLWIND, 12000); - _events.ScheduleEvent(EVENT_MORTALSTRIKE, 22000); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - while (uint32 eventId = _events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_WHIRLWIND: - DoCast(me, SPELL_WHIRLWIND); - _events.ScheduleEvent(EVENT_WHIRLWIND, 15000); - break; - case EVENT_MORTALSTRIKE: - DoCastVictim(SPELL_MORTALSTRIKE); - _events.ScheduleEvent(EVENT_MORTALSTRIKE, 15000); - break; - default: - break; - } - } - - DoMeleeAttackIfReady(); - } - - private: - EventMap _events; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new boss_gorosh_the_dervishAI(creature); - } -}; - -void AddSC_boss_gorosh_the_dervish() -{ - new boss_gorosh_the_dervish(); -} diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp deleted file mode 100644 index 44dbbe3f4c..0000000000 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 2008-2015 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 "ScriptMgr.h" -#include "ScriptedCreature.h" - -enum Grizzle -{ - SPELL_GROUNDTREMOR = 6524, - SPELL_FRENZY = 28371, - EMOTE_FRENZY_KILL = 0 -}; - -enum Events -{ - EVENT_GROUNDTREMOR = 1, - EVENT_FRENZY = 2 -}; - -enum Phases -{ - PHASE_ONE = 1, - PHASE_TWO = 2 -}; - -class boss_grizzle : public CreatureScript -{ - public: - boss_grizzle() : CreatureScript("boss_grizzle") { } - - struct boss_grizzleAI : public ScriptedAI - { - boss_grizzleAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override - { - _events.Reset(); - } - - void EnterCombat(Unit* /*who*/) override - { - _events.SetPhase(PHASE_ONE); - _events.ScheduleEvent(EVENT_GROUNDTREMOR, 12000); - } - - void DamageTaken(Unit* /*attacker*/, uint32& damage) override - { - if (me->HealthBelowPctDamaged(50, damage) && _events.IsInPhase(PHASE_ONE)) - { - _events.SetPhase(PHASE_TWO); - _events.ScheduleEvent(EVENT_FRENZY, 0, 0, PHASE_TWO); - } - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - while (uint32 eventId = _events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_GROUNDTREMOR: - DoCastVictim(SPELL_GROUNDTREMOR); - _events.ScheduleEvent(EVENT_GROUNDTREMOR, 8000); - break; - case EVENT_FRENZY: - DoCast(me, SPELL_FRENZY); - Talk(EMOTE_FRENZY_KILL); - _events.ScheduleEvent(EVENT_FRENZY, 15000, 0, PHASE_TWO); - break; - default: - break; - } - } - - DoMeleeAttackIfReady(); - } - - private: - EventMap _events; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new boss_grizzleAI(creature); - } -}; - -void AddSC_boss_grizzle() -{ - new boss_grizzle(); -} diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt index fdebfca797..76e4d36e0a 100644 --- a/src/server/scripts/EasternKingdoms/CMakeLists.txt +++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt @@ -17,12 +17,9 @@ set(scripts_STAT_SRCS EasternKingdoms/AlteracValley/boss_vanndar.cpp EasternKingdoms/AlteracValley/alterac_valley.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp From a1ac057ed2ee47fab38d6452c08c8b1005c4e146 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Mon, 2 Nov 2015 17:53:55 +0100 Subject: [PATCH 279/524] Rename 2015_10_25_anubrekhan_world.sql to 2015_11_02_00_world.sql --- .../{2015_10_25_anubrekhan_world.sql => 2015_11_02_00_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_10_25_anubrekhan_world.sql => 2015_11_02_00_world.sql} (100%) diff --git a/sql/updates/world/2015_10_25_anubrekhan_world.sql b/sql/updates/world/2015_11_02_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_25_anubrekhan_world.sql rename to sql/updates/world/2015_11_02_00_world.sql From 88111fa365fcbd0164e34a007e964558612c7d30 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 2 Nov 2015 18:03:27 +0100 Subject: [PATCH 280/524] Update 2015_11_02_00_world.sql --- sql/updates/world/2015_11_02_00_world.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/updates/world/2015_11_02_00_world.sql b/sql/updates/world/2015_11_02_00_world.sql index 77720bc0ad..f080577717 100644 --- a/sql/updates/world/2015_11_02_00_world.sql +++ b/sql/updates/world/2015_11_02_00_world.sql @@ -6,9 +6,9 @@ INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES -- make crypt guards aggro anub when pulled DELETE FROM `smart_scripts` WHERE `entryorguid`=16573 AND `source_type`=0 AND `id` IN (6,7); -INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_chance`,`event_flags`,`event_param1`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`target_type`,`comment`) VALUES -(16573,0, 6, 0, 4,100,0,NULL, 39, 25, 0, 0, 0, "Crypt Guard - On Aggro - Call For Help (25yd)"), -(16573,0, 7, 5,61,100,0,NULL, 1, 0, 0, 0, 0, "Crypt Guard - On Cast Frenzy - Say EMOTE_FRENZY"); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_chance`,`event_flags`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`target_type`,`comment`) VALUES +(16573,0, 6, 0, 4,100,0, 39, 25, 0, 0, 0, "Crypt Guard - On Aggro - Call For Help (25yd)"), +(16573,0, 7, 5,61,100,0, 1, 0, 0, 0, 0, "Crypt Guard - On Cast Frenzy - Say EMOTE_FRENZY"); UPDATE `smart_scripts` SET `link`=7 WHERE `entryorguid`=16573 AND `source_type`=0 AND `id`=5; DELETE FROM `creature_text` WHERE `entry`=16573; From 700b5dcb491a4356df23c5013edc47e2a5194d1e Mon Sep 17 00:00:00 2001 From: Kittnz Date: Mon, 2 Nov 2015 19:55:55 +0100 Subject: [PATCH 281/524] DB/Instance: The Eye instance updates - Pathing for Phoenix-Hawk, Crystalcore Devastator, Astromancer Lord, Nether Scryer - Delete & Correcting some npc's locations, formations.. --- sql/updates/world/2015_11_02_01_world.sql | 432 ++++++++++++++++++++++ 1 file changed, 432 insertions(+) create mode 100644 sql/updates/world/2015_11_02_01_world.sql diff --git a/sql/updates/world/2015_11_02_01_world.sql b/sql/updates/world/2015_11_02_01_world.sql new file mode 100644 index 0000000000..c074e6b7de --- /dev/null +++ b/sql/updates/world/2015_11_02_01_world.sql @@ -0,0 +1,432 @@ +-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT' +SET @NPC := 12475; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=404.3267,`position_y`=51.04832,`position_z`=20.42939 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,404.3267,51.04832,20.42939,0,0,1,0,100,0), -- 15:53:14 +(@PATH,2,363.3958,82.78564,20.16342,0,0,1,0,100,0), -- 15:53:20 +(@PATH,3,351.0526,86.04145,20.2427,0,0,1,0,100,0), -- 15:53:21 +(@PATH,4,332.8026,86.04145,20.4927,0,0,1,0,100,0), -- 15:53:21 +(@PATH,5,322.5526,86.29145,20.2427,0,0,1,0,100,0), -- 15:53:21 +(@PATH,6,309.8975,86.35751,20.44322,0,0,1,0,100,0), -- 15:53:25 +(@PATH,7,298.1475,82.35751,20.44322,0,0,1,0,100,0), -- 15:53:25 +(@PATH,8,276.9726,72.43015,20.42969,0,0,1,0,100,0), -- 15:53:27 +(@PATH,9,256.9967,56.60734,20.43009,0,0,1,0,100,0), -- 15:53:29 +(@PATH,10,256.7982,56.72626,20.43009,0,0,1,0,100,0), -- 15:53:33 +(@PATH,11,276.9184,72.64089,20.43155,0,0,1,0,100,0), -- 15:53:34 +(@PATH,12,297.7713,82.30241,20.42944,0,0,1,0,100,0), -- 15:53:37 +(@PATH,13,322.4713,86.09231,20.41415,0,0,1,0,100,0), -- 15:53:39 +(@PATH,14,332.4713,86.09231,20.41415,0,0,1,0,100,0), -- 15:53:39 +(@PATH,15,351.2139,86.03535,20.23542,0,0,1,0,100,0), -- 15:53:43 +(@PATH,16,365.9639,82.28535,20.23542,0,0,1,0,100,0), -- 15:53:43 +(@PATH,17,386.9718,70.78688,20.28395,0,0,1,0,100,0), -- 15:53:45 +(@PATH,18,404.4698,51.14609,20.42939,0,0,1,0,100,0); -- 15:53:48 + +-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT' +SET @NPC := 12434; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=332.7476,`position_y`=-90.41917,`position_z`=20.51123 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,332.7476,-90.41917,20.51123,0,0,1,0,100,0), -- 15:53:36 +(@PATH,2,324.7476,-90.16917,20.26123,0,0,1,0,100,0), -- 15:53:36 +(@PATH,3,315.7476,-89.91917,20.26123,0,0,1,0,100,0), -- 15:53:36 +(@PATH,4,297.1394,-85.66326,20.4148,0,0,1,0,100,0), -- 15:53:39 +(@PATH,5,258.2917,-57.28191,20.42989,0,0,1,0,100,0), -- 15:53:42 +(@PATH,6,244.784,-38.03379,20.51284,0,0,1,0,100,0), -- 15:53:45 +(@PATH,7,239.784,-13.28379,25.76284,0,0,1,0,100,0), -- 15:53:45 +(@PATH,8,238.5742,1.909073,26.95395,0,0,1,0,100,0), -- 15:53:49 +(@PATH,9,242.5742,29.15907,20.70395,0,0,1,0,100,0), -- 15:53:49 +(@PATH,10,256.9634,56.59798,20.42731,0,0,1,0,100,0), -- 15:53:54 +(@PATH,11,297.2964,83.12163,20.43203,0,0,1,0,100,0), -- 15:53:56 +(@PATH,12,315.9869,88.49153,20.44473,0,0,1,0,100,0), -- 15:54:00 +(@PATH,13,324.2369,88.49153,20.44473,0,0,1,0,100,0), -- 15:54:00 +(@PATH,14,332.4869,88.74153,20.44473,0,0,1,0,100,0), -- 15:54:00 +(@PATH,15,340.2369,88.99153,20.44473,0,0,1,0,100,0), -- 15:54:00 +(@PATH,16,349.4869,89.24153,20.44473,0,0,1,0,100,0), -- 15:54:00 +(@PATH,17,362.7359,84.22715,20.25116,0,0,1,0,100,0), -- 15:54:03 +(@PATH,18,366.4859,82.72715,20.25116,0,0,1,0,100,0), -- 15:54:03 +(@PATH,19,380.7359,76.72715,20.50116,0,0,1,0,100,0), -- 15:54:03 +(@PATH,20,388.7359,73.47715,20.25116,0,0,1,0,100,0), -- 15:54:03 +(@PATH,21,403.4129,54.84925,20.37498,0,0,1,0,100,0), -- 15:54:07 +(@PATH,22,418.7638,27.5905,20.42937,0,0,1,0,100,0), -- 15:54:11 +(@PATH,23,423.947,-0.8590612,20.42934,0,0,1,0,100,0), -- 15:54:13 +(@PATH,24,423.947,-12.85906,20.42934,0,0,1,0,100,0), -- 15:54:13 +(@PATH,25,415.4541,-39.22434,20.42944,0,0,1,0,100,0), -- 15:54:17 +(@PATH,26,409.8507,-46.91153,20.42938,0,0,1,0,100,0), -- 15:54:18 +(@PATH,27,404.3507,-55.91153,20.42938,0,0,1,0,100,0), -- 15:54:18 +(@PATH,28,379.6078,-80.35109,20.36515,0,0,1,0,100,0), -- 15:54:21 +(@PATH,29,357.0756,-90.66071,20.3293,0,0,1,0,100,0), -- 15:54:24 +(@PATH,30,344.5756,-90.41071,20.3293,0,0,1,0,100,0); -- 15:54:24 + +-- Add missing Phoenix-Hawk +SET @ENTRY := 20039; +SET @GUID := 554; +DELETE FROM `creature` WHERE `guid`=@GUID; +INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`) VALUES +(@GUID, @ENTRY, 550, 246.4875, -37.49984, 20.42661, 5.58522, 10800, 366765); + +-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT' +SET @NPC := 554; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=246.4875,`position_y`=-37.49984,`position_z`=20.42661 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,246.4875,-37.49984,20.42661,0,0,1,0,100,0), -- 15:53:34 +(@PATH,2,257.6479,-57.38124,20.42661,0,0,1,0,100,0), -- 15:53:37 +(@PATH,3,276.6165,-74.59982,20.42977,0,0,1,0,100,0), -- 15:53:40 +(@PATH,4,318.1243,-87.4548,20.22828,0,0,1,0,100,0), -- 15:53:43 +(@PATH,5,346.6934,-87.65228,20.55079,0,0,1,0,100,0), -- 15:53:46 +(@PATH,6,366.6934,-84.40228,20.05079,0,0,1,0,100,0), -- 15:53:46 +(@PATH,7,371.813,-83.31676,20.14231,0,0,1,0,100,0), -- 15:53:49 +(@PATH,8,381.313,-76.81676,20.39231,0,0,1,0,100,0), -- 15:53:49 +(@PATH,9,387.563,-73.06676,20.39231,0,0,1,0,100,0), -- 15:53:49 +(@PATH,10,405.1288,-53.81012,20.43003,0,0,1,0,100,0), -- 15:53:52 +(@PATH,11,387.8711,-72.59858,20.29767,0,0,1,0,100,0), -- 15:53:56 +(@PATH,12,381.6211,-76.84858,20.29767,0,0,1,0,100,0), -- 15:53:56 +(@PATH,13,366.4635,-84.1076,20.22797,0,0,1,0,100,0), -- 15:53:58 +(@PATH,14,346.7135,-87.6076,20.47797,0,0,1,0,100,0), -- 15:53:58 +(@PATH,15,332.7135,-90.1076,20.47797,0,0,1,0,100,0), -- 15:53:58 +(@PATH,16,318.1471,-87.49127,20.23125,0,0,1,0,100,0), -- 15:54:02 +(@PATH,17,297.8971,-83.99127,20.23125,0,0,1,0,100,0), -- 15:54:02 +(@PATH,18,276.5398,-74.81604,20.42981,0,0,1,0,100,0), -- 15:54:05 +(@PATH,19,257.961,-57.62645,20.42985,0,0,1,0,100,0); -- 15:54:07 + +-- Pathing for Phoenix-Hawk Entry: 20039 'TDB FORMAT' +SET @NPC := 12433; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=332.517,`position_y`=-90.67094,`position_z`=20.45976 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,332.517,-90.67094,20.45976,0,0,1,0,100,0), -- 15:54:00 +(@PATH,2,349.2753,-89.96908,20.37492,0,0,1,0,100,0), -- 15:54:03 +(@PATH,3,367.7753,-86.46908,20.12492,0,0,1,0,100,0), -- 15:54:03 +(@PATH,4,390.4767,-72.33127,20.37196,0,0,1,0,100,0), -- 15:54:07 +(@PATH,5,404.9767,-53.58127,20.37196,0,0,1,0,100,0), -- 15:54:07 +(@PATH,6,417.079,-29.24579,20.42938,0,0,1,0,100,0), -- 15:54:10 +(@PATH,7,423.1954,-0.6701798,20.42934,0,0,1,0,100,0), -- 15:54:13 +(@PATH,8,416.2595,27.87078,20.42938,0,0,1,0,100,0), -- 15:54:16 +(@PATH,9,405.6095,50.9514,20.42931,0,0,1,0,100,0), -- 15:54:18 +(@PATH,10,379.8849,78.87553,20.28936,0,0,1,0,100,0), -- 15:54:20 +(@PATH,11,361.7868,87.05472,20.07407,0,0,1,0,100,0), -- 15:54:24 +(@PATH,12,347.5368,87.55472,20.32407,0,0,1,0,100,0), -- 15:54:24 +(@PATH,13,332.7868,88.05472,20.57407,0,0,1,0,100,0), -- 15:54:24 +(@PATH,14,315.7868,88.55472,20.32407,0,0,1,0,100,0), -- 15:54:24 +(@PATH,15,297.4316,83.2674,20.46751,0,0,1,0,100,0), -- 15:54:28 +(@PATH,16,275.6396,74.44795,20.43051,0,0,1,0,100,0), -- 15:54:30 +(@PATH,17,258.8896,55.69796,20.43051,0,0,1,0,100,0), -- 15:54:30 +(@PATH,18,243.9132,25.22697,20.67206,0,0,1,0,100,0), -- 15:54:35 +(@PATH,19,241.1632,11.72697,25.92206,0,0,1,0,100,0), -- 15:54:35 +(@PATH,20,238.8673,-0.7733765,27.23883,0,0,1,0,100,0), -- 15:54:39 +(@PATH,21,246.6173,-37.27338,20.48883,0,0,1,0,100,0), -- 15:54:39 +(@PATH,22,257.6819,-57.25851,20.4247,0,0,1,0,100,0), -- 15:54:42 +(@PATH,23,276.6098,-74.62117,20.42971,0,0,1,0,100,0), -- 15:54:45 +(@PATH,24,297.1098,-85.12117,20.42971,0,0,1,0,100,0), -- 15:54:45 +(@PATH,25,315.9437,-89.75371,20.45979,0,0,1,0,100,0), -- 15:54:48 +(@PATH,26,324.4437,-90.25371,20.45979,0,0,1,0,100,0); -- 15:54:48 + +-- Pathing for Crystalcore Devastator Entry: 20040 'TDB FORMAT' +SET @NPC := 12549; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=478.9474,`position_y`=89.4745,`position_z`=20.52121 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,478.9474,89.4745,20.52121,0,0,0,0,100,0), -- 16:07:45 +(@PATH,2,479.0185,89.26942,20.52121,0,0,0,0,100,0), -- 16:07:50 +(@PATH,3,493.3273,105.7242,20.53989,0,0,0,0,100,0), -- 16:07:54 +(@PATH,4,500.1716,115.4319,20.53092,0,0,0,0,100,0), -- 16:07:57 +(@PATH,5,501.6716,118.1819,20.53092,0,0,0,0,100,0), -- 16:07:57 +(@PATH,6,505.9216,125.6819,20.53092,0,0,0,0,100,0), -- 16:07:57 +(@PATH,7,509.7829,136.1951,20.50818,0,0,0,0,100,0), -- 16:08:02 +(@PATH,8,511.0329,139.6951,20.50818,0,0,0,0,100,0), -- 16:08:02 +(@PATH,9,511.7829,142.6951,20.50818,0,0,0,0,100,0), -- 16:08:02 +(@PATH,10,517.5752,164.9698,20.50733,0,0,0,0,100,0), -- 16:08:08 +(@PATH,11,520.0752,175.7198,20.50733,0,0,0,0,100,0), -- 16:08:08 +(@PATH,12,520.3252,177.2198,20.50733,0,0,0,0,100,0), -- 16:08:08 +(@PATH,13,520.882,179.5561,20.53715,0,0,0,0,100,0), -- 16:08:16 +(@PATH,14,520.382,184.3061,20.53715,0,0,0,0,100,0), -- 16:08:16 +(@PATH,15,519.882,191.8061,20.53715,0,0,0,0,100,0), -- 16:08:16 +(@PATH,16,519.132,199.5561,20.53715,0,0,0,0,100,0), -- 16:08:16 +(@PATH,17,515.7716,216.1749,20.5457,0,0,0,0,100,0), -- 16:08:23 +(@PATH,18,513.7716,222.9249,20.5457,0,0,0,0,100,0), -- 16:08:23 +(@PATH,19,517.1009,211.7702,20.5457,0,0,0,0,100,0), -- 16:08:30 +(@PATH,20,519.8978,192.0669,20.53427,0,0,0,0,100,0), -- 16:08:35 +(@PATH,21,520.3978,184.3169,20.53427,0,0,0,0,100,0), -- 16:08:35 +(@PATH,22,520.1716,175.6861,20.51027,0,0,0,0,100,0), -- 16:08:42 +(@PATH,23,517.6716,165.6861,20.51027,0,0,0,0,100,0), -- 16:08:42 +(@PATH,24,516.1716,158.4361,20.51027,0,0,0,0,100,0), -- 16:08:42 +(@PATH,25,511.1044,140.4333,20.50434,0,0,0,0,100,0), -- 16:08:49 +(@PATH,26,510.1044,136.1833,20.50434,0,0,0,0,100,0), -- 16:08:49 +(@PATH,27,502.2063,118.9294,20.52943,0,0,0,0,100,0), -- 16:08:56 +(@PATH,28,500.2063,115.4294,20.52943,0,0,0,0,100,0), -- 16:08:56 +(@PATH,29,498.2063,111.9294,20.52943,0,0,0,0,100,0), -- 16:08:56 +(@PATH,30,493.3535,105.5967,20.53989,0,0,0,0,100,0), -- 16:09:00 +(@PATH,31,488.6035,99.84668,20.53989,0,0,0,0,100,0); -- 16:09:00 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=12467; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(12467, 12467, 0, 0, 1), +(12467, 12431, 3, 270, 2), +(12467, 12432, 3, 90, 2); + +-- Pathing for Astromancer Lord Entry: 20046 'TDB FORMAT' +SET @NPC := 12467; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=513.6304,`position_y`=-224.7386,`position_z`=20.56552 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,513.6304,-224.7386,20.56552,0,5000,0,0,100,0), -- 16:08:45 +(@PATH,2,517.2208,-208.6252,20.56552,0,0,0,0,100,0), -- 16:08:52 +(@PATH,3,518.7356,-200.354,20.56796,0,0,0,0,100,0), -- 16:08:57 +(@PATH,4,519.4856,-193.354,20.56796,0,0,0,0,100,0), -- 16:08:57 +(@PATH,5,519.9856,-190.104,20.56796,0,0,0,0,100,0), -- 16:08:57 +(@PATH,6,519.5496,-178.3897,20.51476,0,0,0,0,100,0), -- 16:09:02 +(@PATH,7,519.2996,-177.3897,20.51476,0,0,0,0,100,0), -- 16:09:02 +(@PATH,8,518.2996,-169.3897,20.51476,0,0,0,0,100,0), -- 16:09:02 +(@PATH,9,518.0496,-166.6397,20.51476,0,0,0,0,100,0), -- 16:09:02 +(@PATH,10,516.9454,-162.3555,20.49109,0,0,0,0,100,0), -- 16:09:08 +(@PATH,11,516.4454,-160.1055,20.49109,0,0,0,0,100,0), -- 16:09:08 +(@PATH,12,512.1954,-143.8555,20.49109,0,0,0,0,100,0), -- 16:09:08 +(@PATH,13,511.4454,-141.3555,20.49109,0,0,0,0,100,0), -- 16:09:08 +(@PATH,14,509.4338,-136.6816,20.51297,0,0,0,0,100,0), -- 16:09:14 +(@PATH,15,504.6838,-123.9316,20.51297,0,0,0,0,100,0), -- 16:09:14 +(@PATH,16,502.9338,-119.4316,20.51297,0,0,0,0,100,0), -- 16:09:14 +(@PATH,17,502.5425,-118.8291,20.53002,0,0,0,0,100,0), -- 16:09:19 +(@PATH,18,498.0425,-113.0791,20.53002,0,0,0,0,100,0), -- 16:09:19 +(@PATH,19,493.7925,-106.8291,20.53002,0,0,0,0,100,0), -- 16:09:19 +(@PATH,20,488.5476,-100.5731,20.50299,0,0,0,0,100,0), -- 16:09:24 +(@PATH,21,482.5476,-94.07306,20.50299,0,0,0,0,100,0), -- 16:09:24 +(@PATH,22,479.0476,-90.32306,20.50299,0,5000,0,0,100,0), -- 16:09:24 +(@PATH,23,488.4339,-100.7364,20.50299,0,0,0,0,100,0), -- 16:09:32 +(@PATH,24,493.5073,-106.8633,20.53566,0,0,0,0,100,0), -- 16:09:37 +(@PATH,25,498.0073,-112.8633,20.53566,0,0,0,0,100,0), -- 16:09:37 +(@PATH,26,509.557,-136.8885,20.51389,0,0,0,0,100,0), -- 16:09:42 +(@PATH,27,512.2501,-143.873,20.491,0,0,0,0,100,0), -- 16:09:48 +(@PATH,28,516.2501,-159.623,20.491,0,0,0,0,100,0), -- 16:09:48 +(@PATH,29,517.0001,-162.373,20.491,0,0,0,0,100,0), -- 16:09:48 +(@PATH,30,517.6157,-163.5336,20.51302,0,0,0,0,100,0), -- 16:09:54 +(@PATH,31,518.1157,-166.7836,20.51302,0,0,0,0,100,0), -- 16:09:54 +(@PATH,32,518.3657,-169.2836,20.51302,0,0,0,0,100,0), -- 16:09:54 +(@PATH,33,519.3657,-177.0336,20.51302,0,0,0,0,100,0), -- 16:09:54 +(@PATH,34,519.6157,-178.2836,20.51302,0,0,0,0,100,0), -- 16:09:54 +(@PATH,35,519.576,-193.4193,20.5364,0,0,0,0,100,0), -- 16:10:00 +(@PATH,36,518.826,-200.4193,20.5364,0,0,0,0,100,0), -- 16:10:00 +(@PATH,37,517.826,-207.1693,20.5364,0,0,0,0,100,0); -- 16:10:00 + +UPDATE `creature` SET `id`=20045 WHERE `guid`=12540; +UPDATE `creature` SET `id`=20045 WHERE `guid`=12538; + +DELETE FROM `creature_formations` WHERE `leaderGUID`=12540; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(12540, 12540, 0, 0, 1), +(12540, 12542, 3, 270, 2), +(12540, 12541, 3, 90, 2); + +-- Pathing for Nether Scryer Entry: 20045 'TDB FORMAT' +SET @NPC := 12540; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=423.7304,`position_y`=-297.2403,`position_z`=19.25663 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,423.7304,-297.2403,19.25663,0,0,0,0,100,0), -- 16:13:39 +(@PATH,2,421.8612,-297.5166,19.29133,0,0,0,0,100,0), -- 16:13:46 +(@PATH,3,395.1479,-306.0458,19.47611,0,0,0,0,100,0), -- 16:13:51 +(@PATH,4,386.0147,-311.4482,19.33733,0,0,0,0,100,0), -- 16:13:57 +(@PATH,5,361.8398,-343.4693,19.29735,0,0,0,0,100,0), -- 16:14:02 +(@PATH,6,357.9641,-362.9832,19.28531,0,0,0,0,100,0), -- 16:14:08 +(@PATH,7,358.3306,-382.0202,19.17975,0,0,0,0,100,0), -- 16:14:14 +(@PATH,8,367.2446,-410.9676,19.20938,0,0,0,0,100,0), -- 16:14:20 +(@PATH,9,376.3463,-423.0817,19.22353,0,0,0,0,100,0), -- 16:14:26 +(@PATH,10,387.6675,-434.1544,19.24023,0,0,0,0,100,0), -- 16:14:31 +(@PATH,11,422.7839,-449.2073,19.28438,0,0,0,0,100,0), -- 16:14:37 +(@PATH,12,442.8006,-447.2404,19.22515,0,0,0,0,100,0), -- 16:14:43 +(@PATH,13,478.9905,-433.6435,19.3018,0,0,0,0,100,0), -- 16:14:51 +(@PATH,14,494.5335,-421.47,19.31859,0,0,0,0,100,0), -- 16:15:01 +(@PATH,15,505.3245,-403.0611,19.52428,0,0,0,0,100,0), -- 16:15:07 +(@PATH,16,510.3288,-382.475,19.45391,0,0,0,0,100,0), -- 16:15:12 +(@PATH,17,509.6892,-362.8328,19.19526,0,0,0,0,100,0), -- 16:15:18 +(@PATH,18,504.8862,-343.3768,19.23977,0,0,0,0,100,0), -- 16:15:22 +(@PATH,19,505.9844,-344.7854,19.44162,0,0,0,0,100,0), -- 16:15:28 +(@PATH,20,509.5838,-363.0805,19.20078,0,0,0,0,100,0), -- 16:15:33 +(@PATH,21,505.4904,-403.0814,19.51538,0,0,0,0,100,0), -- 16:15:38 +(@PATH,22,494.6033,-421.486,19.34887,0,0,0,0,100,0), -- 16:15:44 +(@PATH,23,493.8533,-422.486,19.59887,0,0,0,0,100,0), -- 16:15:44 +(@PATH,24,492.6177,-424.3935,19.49897,0,0,0,0,100,0), -- 16:15:49 +(@PATH,25,479.1177,-433.3935,19.24897,0,0,0,0,100,0), -- 16:15:49 +(@PATH,26,470.3677,-439.3935,19.24897,0,0,0,0,100,0), -- 16:15:49 +(@PATH,27,462.8677,-444.3935,19.49897,0,0,0,0,100,0), -- 16:15:49 +(@PATH,28,442.9135,-447.4605,19.24915,0,0,0,0,100,0), -- 16:15:58 +(@PATH,29,403.749,-444.8676,19.51671,0,0,0,0,100,0), -- 16:16:07 +(@PATH,30,387.6254,-434.2364,19.2685,0,0,0,0,100,0), -- 16:16:13 +(@PATH,31,376.6454,-423.368,19.23084,0,0,0,0,100,0), -- 16:16:18 +(@PATH,32,361.54,-397.0302,19.1883,0,0,0,0,100,0), -- 16:16:24 +(@PATH,33,358.272,-382.2332,19.21221,0,0,0,0,100,0), -- 16:16:30 +(@PATH,34,358.0092,-362.9816,19.25879,0,0,0,0,100,0), -- 16:16:36 +(@PATH,35,372.6,-326.9489,19.52757,0,0,0,0,100,0), -- 16:16:42 +(@PATH,36,385.8902,-311.8205,19.52534,0,0,0,0,100,0), -- 16:16:48 +(@PATH,37,395.203,-306.4769,19.5721,0,0,0,0,100,0), -- 16:16:53 +(@PATH,38,404.203,-300.9769,19.5721,0,0,0,0,100,0); -- 16:16:53 + +DELETE FROM `creature_formations` WHERE `leaderGUID`=12538; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(12538, 12538, 0, 0, 1), +(12538, 12537, 3, 270, 2), +(12538, 12539, 3, 90, 2); + +-- Pathing for Nether Scryer Entry: 20045 'TDB FORMAT' +SET @NPC := 12538; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=491.6343,`position_y`=-348.8971,`position_z`=17.45782 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,491.6343,-348.8971,17.45782,0,0,0,0,100,0), -- 16:10:09 +(@PATH,2,494.4583,-365.0894,17.3224,0,0,0,0,100,0), -- 16:10:11 +(@PATH,3,494.3617,-380.7137,17.29877,0,0,0,0,100,0), -- 16:10:17 +(@PATH,4,485.7098,-402.4861,17.33348,0,0,0,0,100,0), -- 16:10:22 +(@PATH,5,479.9598,-409.9861,17.08348,0,0,0,0,100,0), -- 16:10:22 +(@PATH,6,475.9598,-414.7361,17.33348,0,0,0,0,100,0), -- 16:10:22 +(@PATH,7,470.2098,-421.7361,17.33348,0,0,0,0,100,0), -- 16:10:22 +(@PATH,8,456.0066,-429.1491,17.33844,0,0,0,0,100,0), -- 16:10:32 +(@PATH,9,441.2566,-434.6491,17.58844,0,0,0,0,100,0), -- 16:10:32 +(@PATH,10,425.0241,-433.6116,17.49777,0,0,0,0,100,0), -- 16:10:39 +(@PATH,11,409.0241,-431.8616,17.49777,0,0,0,0,100,0), -- 16:10:39 +(@PATH,12,396.0655,-422.4177,17.41465,0,0,0,0,100,0), -- 16:10:47 +(@PATH,13,387.3155,-413.9177,17.41465,0,0,0,0,100,0), -- 16:10:47 +(@PATH,14,374.3321,-392.9123,17.42148,0,0,0,0,100,0), -- 16:10:56 +(@PATH,15,371.2164,-380.3734,17.65318,0,0,0,0,100,0), -- 16:11:02 +(@PATH,16,371.1164,-364.8227,17.43382,0,0,0,0,100,0), -- 16:11:07 +(@PATH,17,381.9487,-334.1354,17.87497,0,0,0,0,100,0), -- 16:11:12 +(@PATH,18,393.8716,-322.5054,17.69732,0,0,0,0,100,0), -- 16:11:17 +(@PATH,19,412.3383,-311.7506,17.58051,0,0,0,0,100,0), -- 16:11:21 +(@PATH,20,423.361,-308.4557,17.6968,0,0,0,0,100,0), -- 16:11:26 +(@PATH,21,428.361,-307.4557,17.9468,0,0,0,0,100,0), -- 16:11:26 +(@PATH,22,423.8289,-308.1609,17.72783,0,0,0,0,100,0), -- 16:11:32 +(@PATH,23,403.0539,-316.1074,17.86351,0,0,0,0,100,0), -- 16:11:35 +(@PATH,24,394.0146,-322.5777,17.75302,0,0,0,0,100,0), -- 16:11:40 +(@PATH,25,381.8382,-334.0474,17.83417,0,0,0,0,100,0), -- 16:11:45 +(@PATH,26,371.0694,-364.8433,17.48853,0,0,0,0,100,0), -- 16:11:49 +(@PATH,27,371.0801,-380.4205,17.45639,0,0,0,0,100,0), -- 16:11:54 +(@PATH,28,379.2573,-404.1338,17.39072,0,0,0,0,100,0), -- 16:11:59 +(@PATH,29,387.2876,-413.9666,17.47128,0,0,0,0,100,0), -- 16:12:05 +(@PATH,30,396.0376,-422.4666,17.47128,0,0,0,0,100,0), -- 16:12:05 +(@PATH,31,424.8217,-433.5346,17.49184,0,0,0,0,100,0), -- 16:12:14 +(@PATH,32,456.0426,-429.2732,17.36312,0,0,0,0,100,0), -- 16:12:22 +(@PATH,33,460.5426,-427.7732,17.36312,0,0,0,0,100,0), -- 16:12:22 +(@PATH,34,476.0071,-414.7808,17.28578,0,0,0,0,100,0), -- 16:12:29 +(@PATH,35,479.7571,-410.0308,17.03578,0,0,0,0,100,0), -- 16:12:29 +(@PATH,36,485.7571,-402.5308,17.28578,0,0,0,0,100,0), -- 16:12:29 +(@PATH,37,490.2571,-397.2808,17.28578,0,0,0,0,100,0), -- 16:12:29 +(@PATH,38,494.1788,-380.7926,17.42046,0,0,0,0,100,0), -- 16:12:39 +(@PATH,39,494.2377,-364.9676,17.32992,0,0,0,0,100,0); -- 16:12:45 + +-- Remove bad spawns +DELETE FROM `creature` WHERE `guid` IN (12546, 12545, 12460, 12459, 12547, 12548, 12571, 12572); +DELETE FROM `linked_respawn` WHERE `guid` IN (12546, 12545, 12460, 12459, 12547, 12548, 12571, 12572); + +-- Set right entry +UPDATE `creature` SET `id`=20050 WHERE `guid`=12465; +UPDATE `creature` SET `id`=20048 WHERE `guid`=12463; +UPDATE `creature` SET `id`=20048 WHERE `guid`=12464; +UPDATE `creature` SET `id`=20031 WHERE `guid`=12485; +UPDATE `creature` SET `id`=20031 WHERE `guid`=12484; + +DELETE FROM `creature_formations` WHERE `leaderGUID`=12465; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(12465, 12465, 0, 0, 1), +(12465, 12463, 3, 270, 2), +(12465, 12464, 3, 90, 2); + +-- Pathing for Crimson Hand Inquisitor Entry: 20050 'TDB FORMAT' +SET @NPC := 12465; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=655.5598,`position_y`=-74.22478,`position_z`=47.05975 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,655.5598,-74.22478,47.05975,0,0,0,0,100,0), -- 16:08:34 +(@PATH,2,651.4869,-79.5063,47.04427,0,0,0,0,100,0), -- 16:08:41 +(@PATH,3,631.1815,-102.5708,47.03273,0,0,0,0,100,0), -- 16:08:45 +(@PATH,4,619.0531,-111.1841,46.42092,0,0,0,0,100,0), -- 16:08:51 +(@PATH,5,617.8031,-111.9341,45.92092,0,0,0,0,100,0), -- 16:08:51 +(@PATH,6,606.8416,-117.8403,41.57663,0,0,0,0,100,0), -- 16:08:56 +(@PATH,7,589.9025,-125.8981,36.43072,0,0,0,0,100,0), -- 16:09:01 +(@PATH,8,580.551,-129.5958,36.31794,0,0,0,0,100,0), -- 16:09:03 +(@PATH,9,579.801,-129.8458,36.31794,0,0,0,0,100,0), -- 16:09:03 +(@PATH,10,573.301,-132.3458,35.06794,0,0,0,0,100,0), -- 16:09:03 +(@PATH,11,580.7385,-129.5231,36.23978,0,0,0,0,100,0), -- 16:09:10 +(@PATH,12,594.8942,-123.7401,37.95549,0,0,0,0,100,0), -- 16:09:14 +(@PATH,13,606.4921,-118.0775,41.48959,0,0,0,0,100,0), -- 16:09:17 +(@PATH,14,619.0924,-111.1047,46.4275,0,0,0,0,100,0), -- 16:09:21 +(@PATH,15,633.9102,-99.63002,47.15026,0,0,0,0,100,0), -- 16:09:25 +(@PATH,16,653.5164,-77.03735,47.0669,0,0,0,0,100,0); -- 16:09:31 + +SET @CGUID := 86939; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+14; +INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`) VALUES +(@CGUID+0, 20048, 550, 615.408, 108.1827, 45.53154, 5.798159, 7200), -- 20048 (Area: -1) +(@CGUID+1, 20050, 550, 621.3588, 107.9806, 46.45268, 5.711797, 7200), -- 20050 (Area: -1) +(@CGUID+2, 20048, 550, 617.9949, 113.5776, 45.32596, 5.797285, 7200), -- 20048 (Area: -1) +(@CGUID+3, 20048, 550, 651.4778, 85.3616, 46.98529, 2.460914, 7200), -- 20048 (Area: -1) +(@CGUID+4, 20048, 550, 644.955, 78.4049, 46.925, 2.181662, 7200), -- 20048 (Area: -1) +(@CGUID+5, 20048, 550, 590.4993, 115.3127, 37.52827, 2.478368, 7200), -- 20048 (Area: -1) +(@CGUID+6, 20048, 550, 598.2206, 130.2819, 37.6214, 3.211406, 7200), -- 20048 (Area: -1) +(@CGUID+7, 20049, 550, 641.1609, 77.83035, 46.88414, 2.076942, 7200), -- 20049 (Area: -1) +(@CGUID+8, 20049, 550, 594.7014, 114.7355, 38.61783, 2.670354, 7200), -- 20049 (Area: -1) +(@CGUID+9, 20049, 550, 654.7372, 88.48184, 46.82887, 2.583087, 7200), -- 20049 (Area: -1) +(@CGUID+10, 20049, 550, 601.0374, 127.5763, 38.66954, 3.054326, 7200), -- 20049 (Area: -1) +(@CGUID+11, 20047, 550, 651.4259, 87.75813, 46.89581, 2.321288, 7200), -- 20047 (Area: -1) (Auras: ) +(@CGUID+12, 20047, 550, 642.4025, 80.52879, 46.89103, 2.146755, 7200), -- 20047 (Area: -1) (Auras: ) +(@CGUID+13, 20047, 550, 597.9776, 114.9579, 39.38305, 2.792527, 7200), -- 20047 (Area: -1) (Auras: ) +(@CGUID+14, 20047, 550, 603.4946, 125.0622, 39.5998, 2.9147, 7200); -- 20047 (Area: -1) (Auras: ) + +DELETE FROM `creature_formations` WHERE `leaderGUID`=86940; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(86940, 86940, 0, 0, 1), +(86940, 86939, 3, 270, 2), +(86940, 86941, 3, 90, 2); + +-- Pathing for Crimson Hand Inquisitor Entry: 20050 'TDB FORMAT' +SET @NPC := 86940; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=655.5364,`position_y`=72.95763,`position_z`=47.05836 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,655.5364,72.95763,47.05836,0,0,0,0,100,0), -- 16:08:23 +(@PATH,2,651.3881,78.08571,47.05026,0,0,0,0,100,0), -- 16:08:30 +(@PATH,3,630.8481,100.8367,47.02984,0,0,0,0,100,0), -- 16:08:35 +(@PATH,4,618.8256,109.6938,46.47087,0,0,0,0,100,0), -- 16:08:40 +(@PATH,5,617.3256,110.6938,45.72087,0,0,0,0,100,0), -- 16:08:40 +(@PATH,6,606.6226,116.3986,41.5707,0,0,0,0,100,0), -- 16:08:45 +(@PATH,7,589.7452,124.2339,36.51868,0,0,0,0,100,0), -- 16:08:50 +(@PATH,8,580.804,128.0832,36.30165,0,0,0,0,100,0), -- 16:08:52 +(@PATH,9,580.054,128.5832,36.30165,0,0,0,0,100,0), -- 16:08:52 +(@PATH,10,577.9855,129.5036,35.95486,0,0,0,0,100,0), -- 16:08:55 +(@PATH,11,573.9855,129.7536,35.20486,0,0,0,0,100,0), -- 16:08:55 +(@PATH,12,573.3516,129.5648,35.01861,0,0,0,0,100,0), -- 16:09:00 +(@PATH,13,579.8276,128.5876,36.13748,0,0,0,0,100,0), -- 16:09:02 +(@PATH,14,580.5776,128.0876,36.13748,0,0,0,0,100,0), -- 16:09:02 +(@PATH,15,595.2676,121.8818,37.90141,0,0,0,0,100,0), -- 16:09:04 +(@PATH,16,606.479,116.8065,41.47223,0,0,0,0,100,0), -- 16:09:07 +(@PATH,17,618.7388,110.0541,46.44956,0,0,0,0,100,0), -- 16:09:12 +(@PATH,18,635.658,96.03332,46.94309,0,0,0,0,100,0), -- 16:09:17 +(@PATH,19,653.3979,75.61298,47.06518,0,0,0,0,100,0); -- 16:09:21 From 7ab1d1b7d060c7e9f5cc964d0f01113cb3200304 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sun, 11 Oct 2015 12:06:59 +0200 Subject: [PATCH 282/524] Core/Ticket improved ticket system - Safely close ticket before character deletion - Allow to keep trace of delete characters tickets (configurable) - Closes #15655 Closes #15699 --- sql/base/characters_database.sql | 3 ++- .../characters/2015_11_03_00_characters.sql | 10 +++++++++ .../Implementation/CharacterDatabase.cpp | 5 +++-- .../Implementation/CharacterDatabase.h | 1 + src/server/game/Entities/Player/Player.cpp | 21 ++++++++++++++++--- src/server/game/Tickets/TicketMgr.cpp | 14 +++++++------ src/server/game/Tickets/TicketMgr.h | 16 ++++++++++---- src/server/game/World/World.cpp | 1 + src/server/game/World/World.h | 1 + src/server/scripts/Commands/cs_ticket.cpp | 4 ++-- src/server/worldserver/worldserver.conf.dist | 10 +++++++++ 11 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 sql/updates/characters/2015_11_03_00_characters.sql diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 5f4258a3ae..4e2d933227 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1541,6 +1541,7 @@ DROP TABLE IF EXISTS `gm_ticket`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `gm_ticket` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0 open, 1 closed, 2 character deleted', `playerGuid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier of ticket creator', `name` varchar(12) NOT NULL COMMENT 'Name of ticket creator', `description` text NOT NULL, @@ -2529,7 +2530,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0),('2015_10_29_00_characters_335.sql','4555A7F35C107E54C13D74D20F141039ED42943E','RELEASED','2015-10-29 17:05:43',0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0),('2015_10_29_00_characters_335.sql','4555A7F35C107E54C13D74D20F141039ED42943E','RELEASED','2015-10-29 17:05:43',0),('2015_11_03_00_characters.sql','CC045717B8FDD9733351E52A5302560CD08AAD57','RELEASED','2015-10-12 15:23:33',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/2015_11_03_00_characters.sql b/sql/updates/characters/2015_11_03_00_characters.sql new file mode 100644 index 0000000000..b74824477b --- /dev/null +++ b/sql/updates/characters/2015_11_03_00_characters.sql @@ -0,0 +1,10 @@ +ALTER TABLE `gm_ticket` + ADD COLUMN `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0 open, 1 closed, 2 character deleted' AFTER `id`; + +UPDATE `gm_ticket` SET `type` = 1 WHERE `closedBy` != 0 OR `completed` != 0 OR `resolvedBy` != 0; +UPDATE `gm_ticket` SET `closedBy` = 0 WHERE `closedBy` < 0; +UPDATE `gm_ticket` SET `resolvedBy` = 0 WHERE `resolvedBy` < 0; + +ALTER TABLE `gm_ticket` + CHANGE COLUMN `closedBy` `closedBy` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `lastModifiedTime`, + CHANGE COLUMN `resolvedBy` `resolvedBy` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket' AFTER `needMoreHelp`; diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 3e0d684a1f..45bfee5d59 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -335,10 +335,11 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_GO_RESPAWN_BY_INSTANCE, "DELETE FROM gameobject_respawn WHERE mapId = ? AND instanceId = ?", CONNECTION_ASYNC); // GM Tickets - PrepareStatement(CHAR_SEL_GM_TICKETS, "SELECT id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp FROM gm_ticket", CONNECTION_SYNCH); - PrepareStatement(CHAR_REP_GM_TICKET, "REPLACE INTO gm_ticket (id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_GM_TICKETS, "SELECT id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp FROM gm_ticket", CONNECTION_SYNCH); + PrepareStatement(CHAR_REP_GM_TICKET, "REPLACE INTO gm_ticket (id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_GM_TICKET, "DELETE FROM gm_ticket WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_PLAYER_GM_TICKETS, "DELETE FROM gm_ticket WHERE playerGuid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION, "UPDATE gm_ticket SET type = 2 WHERE playerGuid = ?", CONNECTION_ASYNC); // GM Survey/subsurvey/lag report PrepareStatement(CHAR_INS_GM_SURVEY, "INSERT INTO gm_survey (guid, surveyId, mainSurvey, comment, createTime) VALUES (?, ?, ?, ?, UNIX_TIMESTAMP(NOW()))", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index 3382430d69..7a463c73df 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -286,6 +286,7 @@ enum CharacterDatabaseStatements CHAR_DEL_GM_TICKET, CHAR_DEL_ALL_GM_TICKETS, CHAR_DEL_PLAYER_GM_TICKETS, + CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION, CHAR_INS_GM_SURVEY, CHAR_INS_GM_SUBSURVEY, diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2f78280a40..64263823ca 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -69,6 +69,7 @@ #include "SpellMgr.h" #include "SpellHistory.h" #include "Transport.h" +#include "TicketMgr.h" #include "UpdateData.h" #include "UpdateFieldFlags.h" #include "UpdateMask.h" @@ -4546,6 +4547,11 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe if (Guild* guild = sGuildMgr->GetGuildById(guildId)) guild->DeleteMember(playerguid, false, false, true); + // close player ticket if any + GmTicket* ticket = sTicketMgr->GetTicketByPlayer(playerguid); + if (ticket) + ticket->SetClosedBy(playerguid); + // remove from arena teams LeaveAllArenaTeams(playerguid); @@ -4757,9 +4763,18 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt32(0, guid); trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_GM_TICKETS); - stmt->setUInt32(0, guid); - trans->Append(stmt); + if (sWorld->getBoolConfig(CONFIG_DELETE_CHARACTER_TICKET_TRACE)) + { + stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PLAYER_GM_TICKETS_ON_CHAR_DELETION); + stmt->setUInt32(0, guid); + trans->Append(stmt); + } + else + { + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_GM_TICKETS); + stmt->setUInt32(0, guid); + trans->Append(stmt); + } stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_BY_OWNER); stmt->setUInt32(0, guid); diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index dbf66c6bd7..b4b3b8267c 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -32,11 +32,11 @@ inline float GetAge(uint64 t) { return float(time(NULL) - t) / DAY; } /////////////////////////////////////////////////////////////////////////////////////////////////// // GM ticket -GmTicket::GmTicket() : _id(0), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(0), _lastModifiedTime(0), +GmTicket::GmTicket() : _id(0), _type(TICKET_TYPE_OPEN), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(0), _lastModifiedTime(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), _needResponse(false), _needMoreHelp(false) { } -GmTicket::GmTicket(Player* player) : _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(time(NULL)), _lastModifiedTime(time(NULL)), +GmTicket::GmTicket(Player* player) : _type(TICKET_TYPE_OPEN), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(time(NULL)), _lastModifiedTime(time(NULL)), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), _needResponse(false), _needMoreHelp(false) { @@ -49,10 +49,11 @@ GmTicket::~GmTicket() { } bool GmTicket::LoadFromDB(Field* fields) { - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 - // ticketId, guid, name, message, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, haveTicket + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + // id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp uint8 index = 0; _id = fields[ index].GetUInt32(); + _type = TicketType(fields[++index].GetUInt8()); _playerGuid = ObjectGuid(HighGuid::Player, fields[++index].GetUInt32()); _playerName = fields[++index].GetString(); _message = fields[++index].GetString(); @@ -75,11 +76,12 @@ bool GmTicket::LoadFromDB(Field* fields) void GmTicket::SaveToDB(SQLTransaction& trans) const { - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 - // id, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 + // id, type, playerGuid, name, description, createTime, mapId, posX, posY, posZ, lastModifiedTime, closedBy, assignedTo, comment, response, completed, escalated, viewed, needMoreHelp, resolvedBy uint8 index = 0; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_GM_TICKET); stmt->setUInt32( index, _id); + stmt->setUInt8 (++index, uint8(_type)); stmt->setUInt32(++index, _playerGuid.GetCounter()); stmt->setString(++index, _playerName); stmt->setString(++index, _message); diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index f7d3178978..a90a1ec020 100644 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -77,6 +77,13 @@ enum LagReportType LAG_REPORT_TYPE_SPELL = 6 }; +enum TicketType +{ + TICKET_TYPE_OPEN = 0, + TICKET_TYPE_CLOSED = 1, + TICKET_TYPE_CHARACTER_DELETED = 2, +}; + class GmTicket { public: @@ -84,7 +91,7 @@ public: GmTicket(Player* player); ~GmTicket(); - bool IsClosed() const { return !_closedBy.IsEmpty(); } + bool IsClosed() const { return _type != TICKET_TYPE_OPEN; } bool IsCompleted() const { return _completed; } bool IsFromPlayer(ObjectGuid guid) const { return guid == _playerGuid; } bool IsAssigned() const { return !_assignedTo.IsEmpty(); } @@ -118,7 +125,7 @@ public: else if (_escalatedStatus == TICKET_UNASSIGNED) _escalatedStatus = TICKET_ASSIGNED; } - void SetClosedBy(ObjectGuid value) { _closedBy = value; } + void SetClosedBy(ObjectGuid value) { _closedBy = value; _type = TICKET_TYPE_CLOSED; } void SetResolvedBy(ObjectGuid value) { _resolvedBy = value; } void SetCompleted() { _completed = true; } void SetMessage(std::string const& message) @@ -150,6 +157,7 @@ public: private: uint32 _id; + TicketType _type; // 0 = Open, 1 = Closed, 2 = Character deleted ObjectGuid _playerGuid; std::string _playerName; float _posX; @@ -159,8 +167,8 @@ private: std::string _message; uint64 _createTime; uint64 _lastModifiedTime; - ObjectGuid _closedBy; // 0 = Open, -1 = Console, playerGuid = player abandoned ticket or read the GM response message, other = GM who closed it. - ObjectGuid _resolvedBy; // 0 = Open, -1 = Resolved by Console, GM who resolved it by closing or completing the ticket. + ObjectGuid _closedBy; // 0 = Open or Closed by Console (if type = 1), playerGuid = GM who closed it or player abandoned ticket or read the GM response message. + ObjectGuid _resolvedBy; // 0 = Open or Resolved by Console (if type = 1), playerGuid = GM who resolved it by closing or completing the ticket. ObjectGuid _assignedTo; std::string _comment; bool _completed; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index a0dd889876..bb4de29ad5 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -395,6 +395,7 @@ void World::LoadConfigSettings(bool reload) ///- Read ticket system setting from the config file m_bool_configs[CONFIG_ALLOW_TICKETS] = sConfigMgr->GetBoolDefault("AllowTickets", true); + m_bool_configs[CONFIG_DELETE_CHARACTER_TICKET_TRACE] = sConfigMgr->GetBoolDefault("DeletedCharacterTicketTrace", false); ///- Get string for new logins (newly created characters) SetNewCharString(sConfigMgr->GetStringDefault("PlayerStart.String", "")); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index b8ffc94661..e3dc3b5568 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -144,6 +144,7 @@ enum WorldBoolConfigs CONFIG_SHOW_BAN_IN_WORLD, CONFIG_AUTOBROADCAST, CONFIG_ALLOW_TICKETS, + CONFIG_DELETE_CHARACTER_TICKET_TRACE, CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES, CONFIG_PRESERVE_CUSTOM_CHANNELS, CONFIG_PDUMP_NO_PATHS, diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index 9b771f734b..a9baa45f34 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -150,7 +150,7 @@ public: return true; } - sTicketMgr->ResolveAndCloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(-1))); + sTicketMgr->ResolveAndCloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(0))); sTicketMgr->UpdateLastChange(); std::string msg = ticket->FormatMessageString(*handler, player ? player->GetName().c_str() : "Console", NULL, NULL, NULL, NULL); @@ -248,7 +248,7 @@ public: Player* gm = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr; SQLTransaction trans = SQLTransaction(NULL); - ticket->SetResolvedBy(gm ? gm->GetGUID() : ObjectGuid(uint64(-1))); + ticket->SetResolvedBy(gm ? gm->GetGUID() : ObjectGuid(uint64(0))); ticket->SetCompleted(); ticket->SaveToDB(trans); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 13b6b22bed..df2b2e73c1 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1073,6 +1073,16 @@ Command.LookupMaxResults = 0 AllowTickets = 1 +# +# DeletedCharacterTicketTrace +# Description: Keep trace of tickets opened by deleted characters +# gm_ticket.playerGuid will be 0, old GUID and character name +# will be included in gm_ticket.comment +# Default: 0 - (Disabled) +# 1 - (Enabled) + +DeletedCharacterTicketTrace = 0 + # # DungeonFinder.OptionsMask # Description: Dungeon and raid finder system. From 22f1d269865a5980dabadab1f469e60a701e9de1 Mon Sep 17 00:00:00 2001 From: sirikfoll Date: Wed, 9 Sep 2015 22:32:33 -0300 Subject: [PATCH 283/524] DB/CORE Minor change in quest Kick, What Kick? and some codestyle Remove the line that despawns the 'Apple' npc, this despawn is non-blizzlike and breaks the quest. Thx Killyana for sql and valuable information Closes #15480 --- sql/updates/world/2015_11_03_00_world.sql | 3 + .../scripts/Northrend/zone_sholazar_basin.cpp | 62 +++++++++---------- 2 files changed, 33 insertions(+), 32 deletions(-) create mode 100644 sql/updates/world/2015_11_03_00_world.sql diff --git a/sql/updates/world/2015_11_03_00_world.sql b/sql/updates/world/2015_11_03_00_world.sql new file mode 100644 index 0000000000..deb95e8e7b --- /dev/null +++ b/sql/updates/world/2015_11_03_00_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=50556; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,50556,0,0,31,0,3,28054,0,0,0,0,'','Only Lucky Wilhelm is a target for the spell Ride Wilhelm'); diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index d5d2eebda3..6e4a8df6f2 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -622,17 +622,17 @@ public: enum MiscLifewarden { - NPC_PRESENCE = 28563, // Freya's Presence - NPC_SABOTEUR = 28538, // Cultist Saboteur - NPC_SERVANT = 28320, // Servant of Freya + NPC_PRESENCE = 28563, // Freya's Presence + NPC_SABOTEUR = 28538, // Cultist Saboteur + NPC_SERVANT = 28320, // Servant of Freya - WHISPER_ACTIVATE = 0, + WHISPER_ACTIVATE = 0, - SPELL_FREYA_DUMMY = 51318, - SPELL_LIFEFORCE = 51395, - SPELL_FREYA_DUMMY_TRIGGER = 51335, - SPELL_LASHER_EMERGE = 48195, - SPELL_WILD_GROWTH = 52948, + SPELL_FREYA_DUMMY = 51318, + SPELL_LIFEFORCE = 51395, + SPELL_FREYA_DUMMY_TRIGGER = 51335, + SPELL_LASHER_EMERGE = 48195, + SPELL_WILD_GROWTH = 52948, }; class spell_q12620_the_lifewarden_wrath : public SpellScriptLoader @@ -702,25 +702,25 @@ public: enum KickWhatKick { - NPC_LUCKY_WILHELM = 28054, - NPC_APPLE = 28053, - NPC_DROSTAN = 28328, - NPC_CRUNCHY = 28346, - NPC_THICKBIRD = 28093, + NPC_LUCKY_WILHELM = 28054, + NPC_APPLE = 28053, + NPC_DROSTAN = 28328, + NPC_CRUNCHY = 28346, + NPC_THICKBIRD = 28093, - SPELL_HIT_APPLE = 51331, - SPELL_MISS_APPLE = 51332, - SPELL_MISS_BIRD_APPLE = 51366, - SPELL_APPLE_FALL = 51371, - SPELL_BIRD_FALL = 51369, + SPELL_HIT_APPLE = 51331, + SPELL_MISS_APPLE = 51332, + SPELL_MISS_BIRD_APPLE = 51366, + SPELL_APPLE_FALL = 51371, + SPELL_BIRD_FALL = 51369, - EVENT_MISS = 0, - EVENT_HIT = 1, - EVENT_MISS_BIRD = 2, + EVENT_MISS = 0, + EVENT_HIT = 1, + EVENT_MISS_BIRD = 2, - SAY_WILHELM_MISS = 0, - SAY_WILHELM_HIT = 1, - SAY_DROSTAN_REPLY_MISS = 0, + SAY_WILHELM_MISS = 0, + SAY_WILHELM_HIT = 1, + SAY_DROSTAN_REPLY_MISS = 0, }; class spell_q12589_shoot_rjr : public SpellScriptLoader @@ -800,8 +800,6 @@ public: wilhelm->AI()->Talk(SAY_WILHELM_HIT); if (Player* player = shooter->ToPlayer()) player->KilledMonsterCredit(NPC_APPLE); - apple->DespawnOrUnsummon(); - break; } } @@ -828,11 +826,11 @@ may be easily converted to SAI when they get.*/ enum SongOfWindAndWater { // Spells - SPELL_DEVOUR_WIND = 52862, - SPELL_DEVOUR_WATER = 52864, + SPELL_DEVOUR_WIND = 52862, + SPELL_DEVOUR_WATER = 52864, // NPCs - NPC_HAIPHOON_WATER = 28999, - NPC_HAIPHOON_AIR = 28985 + NPC_HAIPHOON_WATER = 28999, + NPC_HAIPHOON_AIR = 28985 }; class npc_haiphoon : public CreatureScript @@ -883,7 +881,7 @@ enum ReconnaissanceFlight VIC_SAY_6 = 6, PLANE_EMOTE = 0, - SPELL_ENGINE = 52255, // Engine on Fire + SPELL_ENGINE = 52255, // Engine on Fire SPELL_LAND = 52226, // Land Flying Machine SPELL_CREDIT = 53328 // Land Flying Machine Credit From e4520ec78bb7218840831e13203e13e4c15abc7d Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 3 Nov 2015 19:09:51 +0100 Subject: [PATCH 284/524] DB/Creature: Remove wrong spawns and add triggers npcs for future events on Icecrown Airships --- sql/updates/world/2015_11_03_01_world.sql | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 sql/updates/world/2015_11_03_01_world.sql diff --git a/sql/updates/world/2015_11_03_01_world.sql b/sql/updates/world/2015_11_03_01_world.sql new file mode 100644 index 0000000000..562e70491a --- /dev/null +++ b/sql/updates/world/2015_11_03_01_world.sql @@ -0,0 +1,41 @@ +SET @CGUID:=86954; + +DELETE FROM `creature` WHERE `id` IN (30655, 30640, 30832, 30646, 30651, 30707, 30649, 30749, 30700, 30699, 30690, 31246, 31353, 30589, 30588, 30476, 30559); +DELETE FROM `creature` WHERE `guid` IN (122568, 122569, 122570); +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+29; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 30640, 623, 1, 1, 35.03846, 36.06336, 25.11708, 5.288348, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement) +(@CGUID+1, 30640, 623, 1, 1, 6.909693, 9.529325, 20.54005, 2.303835, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement) +(@CGUID+2, 30640, 623, 1, 1, -27.16368, 2.981263, 20.54094, 0.122173, 120, 0, 0), -- 30640 (Area: 4508) (possible waypoints or random movement) +(@CGUID+3, 30640, 623, 1, 1, -56.31194, 12.39219, 31.00466, 3.281219, 120, 0, 0), -- 30640 (Area: 4537) (possible waypoints or random movement) +(@CGUID+4, 30646, 623, 1, 1, -30.25571, 31.80029, 12.35424, 1.605703, 120, 0, 0), -- 30646 (Area: 4508) (possible waypoints or random movement) +(@CGUID+5, 30646, 623, 1, 1, -5.325279, 31.62501, 12.34004, 1.500983, 120, 0, 0), -- 30646 (Area: 4508) (possible waypoints or random movement) +(@CGUID+6, 30651, 623, 1, 1, -40.68238, 29.21558, 12.33503, 1.919862, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement) +(@CGUID+7, 30651, 623, 1, 1, -17.81335, 32.07878, 12.3449, 1.553343, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement) +(@CGUID+8, 30651, 623, 1, 1, 5.88316, 30.50419, 12.34755, 1.32645, 120, 0, 0), -- 30651 (Area: 4508) (possible waypoints or random movement) +(@CGUID+9, 30655, 623, 1, 1, 6.662919, 19.23895, 10.05156, 0.5061455, 120, 0, 0), -- 30655 (Area: 4509) +(@CGUID+10, 30655, 623, 1, 1, -43.53964, 18.66365, 9.692578, 3.246312, 120, 0, 0), -- 30655 (Area: 4509) (possible waypoints or random movement) +(@CGUID+11, 30559, 623, 1, 1, 38.16154, -0.040522, 40.16801, 4.223697, 120, 0, 0), -- 30559 (Area: 4508) (possible waypoints or random movement) +(@CGUID+12, 30476, 623, 1, 1, 31.41805, 0.126893, 41.69821, 0.05235988, 120, 0, 0), -- 30476 (Area: 4508) (Auras: 56852 - 56852) (possible waypoints or random movement) +(@CGUID+13, 31353, 623, 1, 1, -21.7234, 19.33753, 9.687197, 1.64061, 120, 0, 0), -- 31353 (Area: 4509) (Auras: 57726 - 57726) +(@CGUID+14, 30690, 622, 1, 1, 15.24723, 32.37709, 10.63188, 1.553343, 120, 0, 0), -- 30690 (Area: 4533) (possible waypoints or random movement) +(@CGUID+15, 30690, 622, 1, 1, -11.22309, 32.91199, 10.55865, 1.58825, 120, 0, 0), -- 30690 (Area: 4533) (possible waypoints or random movement) +(@CGUID+16, 30649, 622, 1, 1, 4.109683, 19.52689, 34.74765, 3.752458, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement) +(@CGUID+17, 30649, 622, 1, 1, -32.53434, 24.30232, 33.9708, 3.211406, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement) +(@CGUID+18, 30649, 622, 1, 1, 50.99569, 46.95655, 23.41373, 2.583087, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement) +(@CGUID+19, 30649, 622, 1, 1, 2.006737, 15.73845, 9.250069, 3.368485, 120, 0, 0), -- 30649 (Area: 4533) (possible waypoints or random movement) +(@CGUID+20, 30699, 622, 1, 1, 1.853844, 32.8888, 10.02361, 1.58825, 120, 0, 0), -- 30699 (Area: 4533) (possible waypoints or random movement) +(@CGUID+21, 30700, 622, 1, 1, -35.66628, 29.43331, 1.87925, 1.745329, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement) +(@CGUID+22, 30700, 622, 1, 1, 7.417077, 32.82674, 38.35604, 1.553343, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement) +(@CGUID+23, 30700, 622, 1, 1, -55.9708, 28.44186, 18.02501, 2.268928, 120, 0, 0), -- 30700 (Area: 0) (possible waypoints or random movement) +(@CGUID+24, 30700, 622, 1, 1, 38.76255, 30.09343, 2.308181, 1.134464, 120, 0, 0), -- 30700 (Area: 4533) (possible waypoints or random movement) +(@CGUID+25, 30707, 622, 1, 1, 19.47087, 27.5296, 10.64527, 1.396263, 120, 0, 0), -- 30707 (Area: 4533) (possible waypoints or random movement) +(@CGUID+26, 30707, 622, 1, 1, -15.3085, 30.59285, 11.11614, 2.635447, 120, 0, 0), -- 30707 (Area: 0) (possible waypoints or random movement) +(@CGUID+27, 31353, 622, 1, 1, -7.999845, 17.85185, 35.04856, 2.460914, 120, 0, 0), -- 31353 (Area: 0) (possible waypoints or random movement) +(@CGUID+28, 30588, 622, 1, 1, -18.10283, -0.042108, 45.31725, 1.762783, 120, 0, 0), -- 30588 (Area: 4533) (Auras: 57424 - 57424) (possible waypoints or random movement) +(@CGUID+29, 30589, 622, 1, 1, -11.83204, -0.019289, 43.11467, 4.153883, 120, 0, 0); -- 30589 (Area: 4533) (possible waypoints or random movement) + +UPDATE `creature_template` SET `flags_extra`=128 WHERE `entry` IN (30690, 30699); +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (30700, 30646,30651,31353); + +DELETE FROM `creature_addon` WHERE `guid` IN (122568, 122569, 122758, 122777, 124002, 124113); From 7bfbd9e3d84907048728beec3800c6f1c80aa271 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 3 Nov 2015 19:21:05 +0100 Subject: [PATCH 285/524] DB/SAI: Fix a DB error Origin: https://github.com/TrinityCore/TrinityCore/commit/91de0322bba3ef071338ce5a71f512369486eb1f --- sql/updates/world/2015_11_03_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_11_03_02_world.sql diff --git a/sql/updates/world/2015_11_03_02_world.sql b/sql/updates/world/2015_11_03_02_world.sql new file mode 100644 index 0000000000..c4757d0d63 --- /dev/null +++ b/sql/updates/world/2015_11_03_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=16573 AND `source_type`=0 AND `id`=7; From a17c27aaeba798f93f31a7ba17f446eb93818437 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 5 Nov 2015 21:25:51 +0100 Subject: [PATCH 286/524] Core/Accounts: Fixed ban check after 517a30d7c189b0530711f78508f9731e31fe5a53 --- src/server/database/Database/Implementation/LoginDatabase.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index 9b7bf285ef..de003c2092 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -47,8 +47,8 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_ACCOUNT_ID_BY_NAME, "SELECT id FROM account WHERE username = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_NAME, "SELECT id, username FROM account WHERE username = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME, "SELECT a.id, a.sessionkey, a.last_ip, a.locked, a.lock_country, a.expansion, a.mutetime, a.locale, a.recruiter, a.os, aa.gmLevel, " - "(ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate) AND ab.active, r.id FROM account a LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?) " - "LEFT JOIN account_banned ab ON a.id = ab.id LEFT JOIN account r ON a.id = r.recruiter WHERE a.username = ? ORDER BY aa.RealmID DESC LIMIT 1", CONNECTION_ASYNC); + "ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, r.id FROM account a LEFT JOIN account_access aa ON a.id = aa.id AND aa.RealmID IN (-1, ?) " + "LEFT JOIN account_banned ab ON a.id = ab.id AND ab.active = 1 LEFT JOIN account r ON a.id = r.recruiter WHERE a.username = ? ORDER BY aa.RealmID DESC LIMIT 1", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_ACCOUNT_LIST_BY_EMAIL, "SELECT id, username FROM account WHERE email = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_NUM_CHARS_ON_REALM, "SELECT numchars FROM realmcharacters WHERE realmid = ? AND acctid= ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_BY_IP, "SELECT id, username FROM account WHERE last_ip = ?", CONNECTION_SYNCH); From d6c52ba28cba924a8dc17f7393e2d6d30d3fd522 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 3 Nov 2015 20:02:47 +0100 Subject: [PATCH 287/524] Core/Commands: Added assertion checking if command name is not null (cherry picked from commit 56959697257aba3537af2273d9d30114bfd6bd5c) --- src/server/game/Chat/Chat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index ff8757a891..2420331e36 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -42,7 +42,7 @@ class ChatCommand public: ChatCommand(char const* name, uint32 permission, bool allowConsole, pHandler handler, std::string help, std::vector childCommands = std::vector()) - : Name(name), Permission(permission), AllowConsole(allowConsole), Handler(handler), Help(std::move(help)), ChildCommands(std::move(childCommands)) { } + : Name(ASSERT_NOTNULL(name)), Permission(permission), AllowConsole(allowConsole), Handler(handler), Help(std::move(help)), ChildCommands(std::move(childCommands)) { } char const* Name; uint32 Permission; // function pointer required correct align (use uint32) From e9e349c7cc60cc83ab6db9ac6e28dd3dacec548b Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 4 Nov 2015 21:04:40 +0100 Subject: [PATCH 288/524] Dep/g3d: Removed std::shared_ptr, std::weak_ptr, std::dynamic_pointer_cast, std::static_pointer_cast and std::enable_shared_from_this from global namespace (cherry picked from commit 2c23a686e30cd23dbfa18f2fdfac0282052731ab) --- dep/g3dlite/G3D-v9.0 hotfix6.diff | 32 ++++++++++++++++++++++++++++++ dep/g3dlite/Readme.txt | 1 + dep/g3dlite/include/G3D/platform.h | 8 ++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 dep/g3dlite/G3D-v9.0 hotfix6.diff diff --git a/dep/g3dlite/G3D-v9.0 hotfix6.diff b/dep/g3dlite/G3D-v9.0 hotfix6.diff new file mode 100644 index 0000000000..3ff735c734 --- /dev/null +++ b/dep/g3dlite/G3D-v9.0 hotfix6.diff @@ -0,0 +1,32 @@ +diff --git a/dep/g3dlite/include/G3D/platform.h b/dep/g3dlite/include/G3D/platform.h +index 17e3bf2..439495a 100644 +--- a/dep/g3dlite/include/G3D/platform.h ++++ b/dep/g3dlite/include/G3D/platform.h +@@ -364,13 +364,18 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {\ + #endif + #if (!defined(_LIBCPP_VERSION) && defined(__APPLE__)) || (!defined(_LIBCPP_VERSION) && defined(__linux__)) + # include ++#else ++# include ++#endif ++ ++namespace G3D { ++#if (!defined(_LIBCPP_VERSION) && defined(__APPLE__)) || (!defined(_LIBCPP_VERSION) && defined(__linux__)) + using std::tr1::shared_ptr; + using std::tr1::weak_ptr; + using std::tr1::dynamic_pointer_cast; + using std::tr1::static_pointer_cast; + using std::tr1::enable_shared_from_this; + #else +-# include + using std::shared_ptr; + using std::weak_ptr; + using std::dynamic_pointer_cast; +@@ -378,7 +383,6 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {\ + using std::enable_shared_from_this; + #endif + +-namespace G3D { + /** Options for initG3D and initGLG3D. */ + class G3DSpecification { + public: diff --git a/dep/g3dlite/Readme.txt b/dep/g3dlite/Readme.txt index bcd418d1d0..d4e3fa5d06 100644 --- a/dep/g3dlite/Readme.txt +++ b/dep/g3dlite/Readme.txt @@ -15,3 +15,4 @@ G3D-v9.0 hotfix2.diff - 2014-08-23 - fix some -Wconversion warnings G3D-v9.0 hotfix3.diff - 2015-06-28 - fix some warnings G3D-v9.0 hotfix4.diff - 2015-07-02 - backport G3D10 fix G3D-v9.0 hotfix5.diff - 2015-07-31 - fix MSVC 2015 warning: dep/g3dlite/include/G3D/Quat.h(352): warning C4458: declaration of 'x' hides class member +G3D-v9.0 hotfix6.diff - 2015-11-04 - fix adding std::shared_ptr, std::weak_ptr, std::dynamic_pointer_cast, std::static_pointer_cast and std::enable_shared_from_this to global namespace diff --git a/dep/g3dlite/include/G3D/platform.h b/dep/g3dlite/include/G3D/platform.h index 17e3bf279e..439495ab13 100644 --- a/dep/g3dlite/include/G3D/platform.h +++ b/dep/g3dlite/include/G3D/platform.h @@ -364,13 +364,18 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {\ #endif #if (!defined(_LIBCPP_VERSION) && defined(__APPLE__)) || (!defined(_LIBCPP_VERSION) && defined(__linux__)) # include +#else +# include +#endif + +namespace G3D { +#if (!defined(_LIBCPP_VERSION) && defined(__APPLE__)) || (!defined(_LIBCPP_VERSION) && defined(__linux__)) using std::tr1::shared_ptr; using std::tr1::weak_ptr; using std::tr1::dynamic_pointer_cast; using std::tr1::static_pointer_cast; using std::tr1::enable_shared_from_this; #else -# include using std::shared_ptr; using std::weak_ptr; using std::dynamic_pointer_cast; @@ -378,7 +383,6 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) {\ using std::enable_shared_from_this; #endif -namespace G3D { /** Options for initG3D and initGLG3D. */ class G3DSpecification { public: From a08611dfefc60d9092b7c36c7553a41ed04be187 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 6 Nov 2015 01:22:01 +0100 Subject: [PATCH 289/524] DB/Misc: Fix a runtime error --- sql/updates/world/2015_11_06_00_world_335.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2015_11_06_00_world_335.sql diff --git a/sql/updates/world/2015_11_06_00_world_335.sql b/sql/updates/world/2015_11_06_00_world_335.sql new file mode 100644 index 0000000000..dbf4559b78 --- /dev/null +++ b/sql/updates/world/2015_11_06_00_world_335.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `gameobject_template` where `entry` =191146; +INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `faction`, `flags`, `size`, `Data0`, `Data1`, `Data2`, `Data3`, `Data4`, `Data5`, `Data6`, `VerifiedBuild`) VALUES +(191146, 6, 7205, 'Ensnaring Trap', '', '', '', 0, 0, 1, 12, 0, 5, 53077, 0, 0, -1, -18019); From 910fb001305bbe2fd3ad198840a5e26d9d2481c3 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 6 Nov 2015 21:30:08 +0100 Subject: [PATCH 290/524] Core/Corpses: Fixed a possible crash adding bones to grid Closes #15808 (cherry picked from commit ec1583df67605b7253a34dc5f153cdad5b16969e) --- src/server/game/Maps/Map.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 4893b742a1..db74e71e86 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -303,19 +303,19 @@ template<> void Map::AddToGrid(Corpse* obj, Cell const& cell) { NGridType* grid = getNGrid(cell.GridX(), cell.GridY()); - if (obj->IsWorldObject()) + // Corpses are a special object type - they can be added to grid via a call to AddToMap + // or loaded through ObjectGridLoader. + // Both corpses loaded from database and these freshly generated by Player::CreateCoprse are added to _corpsesByCell + // ObjectGridLoader loads all corpses from _corpsesByCell even if they were already added to grid before it was loaded + // so we need to explicitly check it here (Map::AddToGrid is only called from Player::BuildPlayerRepop, not from ObjectGridLoader) + // to avoid failing an assertion in GridObject::AddToGrid + if (grid->isGridObjectDataLoaded()) { - // Corpses are a special object type - they can be added to grid via a call to AddToMap - // or loaded through ObjectGridLoader. - // Both corpses loaded from database and these freshly generated by Player::CreateCoprse are added to _corpsesByCell - // ObjectGridLoader loads all corpses from _corpsesByCell even if they were already added to grid before it was loaded - // so we need to explicitly check it here (Map::AddToGrid is only called from Player::BuildPlayerRepop, not from ObjectGridLoader) - // to avoid failing an assertion in GridObject::AddToGrid - if (grid->isGridObjectDataLoaded()) + if (obj->IsWorldObject()) grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj); + else + grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj); } - else - grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj); // bones. nothing special here } template From 55f795b9fd44194039d8d10e79c5267547af67f0 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 7 Nov 2015 01:23:00 +0100 Subject: [PATCH 291/524] DB/Page text: Saga of the Sin'dorei --- sql/updates/world/2015_11_07_00_world.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 sql/updates/world/2015_11_07_00_world.sql diff --git a/sql/updates/world/2015_11_07_00_world.sql b/sql/updates/world/2015_11_07_00_world.sql new file mode 100644 index 0000000000..2cb4a1bdd9 --- /dev/null +++ b/sql/updates/world/2015_11_07_00_world.sql @@ -0,0 +1,9 @@ +-- Page text: Saga of the Sin'dorei + +DELETE FROM `page_text` WHERE `ID` IN (2823, 2824, 2825, 2826, 2827); +INSERT INTO `page_text` (`ID`, `TEXT`, `NextPageID`) VALUES +(2823, "Thousands of years ago, the exiled Highborne landed on the shores of Lordaeron and founded the enchanted kingdom of Quel'Thalas. These high elves, as they called themselves, created a fount of vast, magical energies within the heart of their land - the Sunwell. Over time, they grew dependant on the Sunwell's unstable energies- regardless of the bitter lessons they'd learned in ages past.", 2824), +(2824, "During the Third War, the villainous Prince Arthas invaded Quel'Thalas and reduced the once-mighty realm to rubble and ashes. His undead army decimated nearly ninety percent of the high elven population. In addition, he used the Sunwell's energies to resurrect Kel'thuzad - a powerful undead Lich - thereby fouling the Sunwell's mystical waters. The few elven survivors, realizing that they had been cut off from the source of their arcane power, grew increasingly volatile and desperate.", 2825), +(2825, "In the midst of the elves' darkest hour came Kael'thas Sunstrider - the last of Quel'Thalas' royal bloodline. Kael, as he was commonly known, knew that the remnants of his people would not long survive without the nourishing magics that once empowered them. Renaming his people blood elves, in honor of their fallen countrymen, he taught them how to tap into ambient mystical energies- even demonic energies - in order to sate their terrible thirst for magic.", 2826), +(2826, "In search of a new destiny for his people - referred to in the elven vernacular now as the Sin'dorei - Kael'thas ventured to the remote world of Outland where he encountered the fallen night elf, Illidan. Under Illidan's tutelage, Kael and his blood elves have regained much of their former power.", 2827), +(2827, "Unfortunately, the blood elves' practice of embracing demonic energies resulted in them being shunned by their former comrades in the Alliance. Thus, he remaining blood elves on Azeroth look desperately to the Horde to help them reach Outland, where they can reunite with Kael'thas and achieve the golden destiny he promised them.", 0); From 987c1a3a532fdc459b808be360431cba3c49792f Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 7 Nov 2015 01:48:58 +0100 Subject: [PATCH 292/524] DB/Creature: Apexis Flayer Closes #15761 --- sql/updates/world/2015_11_07_01_world.sql | 47 +++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 sql/updates/world/2015_11_07_01_world.sql diff --git a/sql/updates/world/2015_11_07_01_world.sql b/sql/updates/world/2015_11_07_01_world.sql new file mode 100644 index 0000000000..a72a893a65 --- /dev/null +++ b/sql/updates/world/2015_11_07_01_world.sql @@ -0,0 +1,47 @@ +-- +SET @Guid=144801; +DELETE FROM `creature` WHERE `guid` BETWEEN @Guid+0 and @Guid+41; +DELETE FROM `creature` WHERE `id`=22175; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`) VALUES +(@Guid+0, 22175, 530, 1, 1, 0, 0, 2608.55, 7075.41, 364.496, 5.71923, 300, 5, 0, 7181, 0, 1), +(@Guid+1, 22175, 530, 1, 1, 0, 0, 2238.57, 7119.23, 365.84, 3.09914, 300, 5, 0, 7181, 0, 1), +(@Guid+2, 22175, 530, 1, 1, 0, 0, 2218.84, 7276.48, 366.109, 3.94579, 300, 5, 0, 7181, 0, 1), +(@Guid+3, 22175, 530, 1, 1, 0, 0, 2154.76, 7242.51, 371.791, 1.50713, 300, 5, 0, 7181, 0, 1), +(@Guid+4, 22175, 530, 1, 1, 0, 0, 1991.99, 7364.78, 366.955, 1.9501, 300, 5, 0, 7181, 0, 1), +(@Guid+5, 22175, 530, 1, 1, 0, 0, 2076.62, 7337.08, 365.808, 0.65419, 300, 5, 0, 7181, 0, 1), +(@Guid+6, 22175, 530, 1, 1, 0, 0, 4079.29, 5129.22, 268.446, 1.09823, 600, 5, 0, 7181, 0, 1), +(@Guid+7, 22175, 530, 1, 1, 0, 0, 2270.3, 7189.96, 364.752, 6.06008, 300, 5, 0, 7181, 0, 1), +(@Guid+8, 22175, 530, 1, 1, 0, 0, 2202.82, 7237.79, 375.415, 2.95619, 300, 5, 0, 7181, 0, 1), +(@Guid+9, 22175, 530, 1, 1, 0, 0, 2008.2, 7182.08, 369.87, 5.39014, 300, 5, 0, 7181, 0, 1), +(@Guid+10, 22175, 530, 1, 1, 0, 0, 1952.68, 7216.42, 368.281, 4.71862, 300, 5, 0, 7181, 0, 1), +(@Guid+11, 22175, 530, 1, 1, 0, 0, 2129.63, 7169.39, 366.483, 2.49909, 300, 5, 0, 7181, 0, 1), +(@Guid+12, 22175, 530, 1, 1, 0, 0, 2494.71, 7263.55, 367.219, 5.21106, 300, 5, 0, 7181, 0, 1), +(@Guid+13, 22175, 530, 1, 1, 0, 0, 2054.45, 7271.76, 365.238, 2.8211, 300, 5, 0, 7181, 0, 1), +(@Guid+14, 22175, 530, 1, 1, 0, 0, 2483.08, 7057.84, 364.585, 3.86333, 300, 5, 0, 7181, 0, 1), +(@Guid+15, 22175, 530, 1, 1, 0, 0, 2525.27, 7252.78, 365.323, 4.43352, 300, 5, 0, 7181, 0, 1), +(@Guid+16, 22175, 530, 1, 1, 0, 0, 2455.15, 7057.42, 366.643, 0.409148, 300, 5, 0, 7181, 0, 1), +(@Guid+17, 22175, 530, 1, 1, 0, 0, 2050.88, 7172.54, 369.315, 4.41232, 300, 5, 0, 7181, 0, 1), +(@Guid+18, 22175, 530, 1, 1, 0, 0, 2402.86, 7068.99, 369.09, 2.95541, 300, 5, 0, 7181, 0, 1), +(@Guid+19, 22175, 530, 1, 1, 0, 0, 2383.77, 7040.89, 379.688, 2.85331, 300, 5, 0, 7181, 0, 1), +(@Guid+20, 22175, 530, 1, 1, 0, 0, 2345.61, 7026.68, 387.225, 2.59727, 300, 5, 0, 7181, 0, 1), +(@Guid+21, 22175, 530, 1, 1, 0, 0, 2209.37, 7124.08, 364.438, 5.00765, 300, 5, 0, 7181, 0, 1), +(@Guid+22, 22175, 530, 1, 1, 0, 0, 1843.45, 7310.6, 369.195, 1.96894, 300, 5, 0, 7181, 0, 1), +(@Guid+23, 22175, 530, 1, 1, 0, 0, 1847.23, 7324.28, 368.691, 5.12624, 300, 5, 0, 7181, 0, 1), +(@Guid+24, 22175, 530, 1, 1, 0, 0, 1853.72, 7366.1, 366.072, 1.24245, 300, 5, 0, 7181, 0, 1), +(@Guid+25, 22175, 530, 1, 1, 0, 0, 2148.09, 7282.4, 368.747, 6.10328, 300, 5, 0, 7181, 0, 1), +(@Guid+26, 22175, 530, 1, 1, 0, 0, 2596.27, 7200.13, 367.541, 1.25031, 300, 5, 0, 7181, 0, 1), +(@Guid+27, 22175, 530, 1, 1, 0, 0, 2176.91, 7309.42, 372.694, 5.73415, 300, 5, 0, 7181, 0, 1), +(@Guid+28, 22175, 530, 1, 1, 0, 0, 2745.14, 7230.82, 368.577, 3.98822, 300, 5, 0, 7181, 0, 1), +(@Guid+29, 22175, 530, 1, 1, 0, 0, 2725.08, 7244.41, 369.344, 6.08051, 300, 5, 0, 7181, 0, 1), +(@Guid+30, 22175, 530, 1, 1, 0, 0, 2591.54, 7220.81, 364.005, 5.91165, 300, 5, 0, 7181, 0, 1), +(@Guid+31, 22175, 530, 1, 1, 0, 0, 2305.98, 7154.86, 365.855, 0.25991, 300, 5, 0, 7181, 0, 1), +(@Guid+32, 22175, 530, 1, 1, 0, 0, 2337.79, 7148.06, 368.183, 1.28878, 300, 5, 0, 7181, 0, 1), +(@Guid+33, 22175, 530, 1, 1, 0, 0, 2425.56, 7173.66, 366.865, 6.19438, 300, 5, 0, 7181, 0, 1), +(@Guid+34, 22175, 530, 1, 1, 0, 0, 2460.97, 7128.22, 367.7, 1.39166, 300, 5, 0, 7181, 0, 1), +(@Guid+35, 22175, 530, 1, 1, 0, 0, 2491.67, 7155.23, 369.61, 3.2884, 300, 5, 0, 7181, 0, 1), +(@Guid+36, 22175, 530, 1, 1, 0, 0, 2451.01, 7296.84, 365.796, 2.66794, 300, 5, 0, 7181, 0, 1), +(@Guid+37, 22175, 530, 1, 1, 0, 0, 2439.87, 7254.54, 369.234, 2.22419, 300, 5, 0, 7181, 0, 1), +(@Guid+38, 22175, 530, 1, 1, 0, 0, 1945.76, 7133.53, 367.456, 3.74865, 300, 5, 0, 7181, 0, 1), +(@Guid+39, 22175, 530, 1, 1, 0, 0, 2037.34, 7265.44, 367.727, 0.68482, 300, 5, 0, 7181, 0, 1), +(@Guid+40, 22175, 530, 1, 1, 0, 0, 1993.1, 7143.76, 373.431, 5.6768, 300, 5, 0, 7181, 0, 1), +(@Guid+41, 22175, 530, 1, 1, 0, 0, 1948.44, 7203.54, 366.609, 1.46472, 300, 5, 0, 7181, 0, 1); From 23153c8bf168175c28fe6f1b20f3c0507c75f316 Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 4 Nov 2015 20:22:25 +0100 Subject: [PATCH 293/524] Core/ScriptMgr: Replace IsDatabaseBound() methods through traits. (cherry picked from commit 12d1993994b11785174c7caa7d7f9b5aa87d8411) --- src/server/game/Scripting/ScriptMgr.cpp | 56 ++++++++++++++++++++++++- src/server/game/Scripting/ScriptMgr.h | 32 -------------- 2 files changed, 55 insertions(+), 33 deletions(-) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index c47df97369..f989222c8b 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -41,6 +41,60 @@ UnusedScriptNamesContainer UnusedScriptNames; // } +// Trait which indicates whether this script type +// must be assigned in the database. +template +struct is_script_database_bound + : std::false_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + +template<> +struct is_script_database_bound + : std::true_type { }; + // This is the global static registry of scripts. template class ScriptRegistry @@ -71,7 +125,7 @@ class ScriptRegistry } } - if (script->IsDatabaseBound()) + if (is_script_database_bound::value) { // Get an ID for the script. An ID only exists if it's a script that is assigned in the database // through a script name (or similar). diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 025cedd84e..046c6c1a00 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -153,10 +153,6 @@ class ScriptObject public: - // Do not override this in scripts; it should be overridden by the various script type classes. It indicates - // whether or not this script type must be assigned in the database. - virtual bool IsDatabaseBound() const { return false; } - const std::string& GetName() const { return _name; } protected: @@ -198,8 +194,6 @@ class SpellScriptLoader : public ScriptObject public: - bool IsDatabaseBound() const final override { return true; } - // Should return a fully valid SpellScript pointer. virtual SpellScript* GetSpellScript() const { return NULL; } @@ -356,8 +350,6 @@ class InstanceMapScript : public ScriptObject, public MapScript public: - bool IsDatabaseBound() const final override { return true; } - // Gets an InstanceScript object for this instance. virtual InstanceScript* GetInstanceScript(InstanceMap* /*map*/) const { return NULL; } }; @@ -377,8 +369,6 @@ class ItemScript : public ScriptObject public: - bool IsDatabaseBound() const final override { return true; } - // Called when a dummy spell effect is triggered on the item. virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Item* /*target*/) { return false; } @@ -426,8 +416,6 @@ class CreatureScript : public UnitScript, public UpdatableScript public: - bool IsDatabaseBound() const final override { return true; } - // Called when a dummy spell effect is triggered on the creature. virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Creature* /*target*/) { return false; } @@ -464,8 +452,6 @@ class GameObjectScript : public ScriptObject, public UpdatableScript public: - bool IsDatabaseBound() const final override { return true; } - // Called when a dummy spell effect is triggered on the gameobject. virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, GameObject* /*target*/) { return false; } @@ -511,8 +497,6 @@ class AreaTriggerScript : public ScriptObject public: - bool IsDatabaseBound() const final override { return true; } - // Called when the area trigger is activated by a player. virtual bool OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) { return false; } }; @@ -525,8 +509,6 @@ class BattlegroundScript : public ScriptObject public: - bool IsDatabaseBound() const final override { return true; } - // Should return a fully valid Battleground object for the type ID. virtual Battleground* GetBattleground() const = 0; }; @@ -539,8 +521,6 @@ class OutdoorPvPScript : public ScriptObject public: - bool IsDatabaseBound() const final override { return true; } - // Should return a fully valid OutdoorPvP object for the type ID. virtual OutdoorPvP* GetOutdoorPvP() const = 0; }; @@ -565,8 +545,6 @@ class WeatherScript : public ScriptObject, public UpdatableScript public: - bool IsDatabaseBound() const final override { return true; } - // Called when the weather changes in the zone this script is associated with. virtual void OnChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/) { } }; @@ -600,8 +578,6 @@ class ConditionScript : public ScriptObject public: - bool IsDatabaseBound() const final override { return true; } - // Called when a single condition is checked for a player. virtual bool OnConditionCheck(Condition const* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; } }; @@ -648,8 +624,6 @@ class TransportScript : public ScriptObject, public UpdatableScript public: - bool IsDatabaseBound() const final override { return true; } - // Called when a player boards the transport. virtual void OnAddPassenger(Transport* /*transport*/, Player* /*player*/) { } @@ -671,8 +645,6 @@ class AchievementCriteriaScript : public ScriptObject public: - bool IsDatabaseBound() const final override { return true; } - // Called when an additional criteria is checked. virtual bool OnCheck(Player* source, Unit* target) = 0; }; @@ -809,8 +781,6 @@ class GuildScript : public ScriptObject public: - bool IsDatabaseBound() const final override { return false; } - // Called when a member is added to the guild. virtual void OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8& /*plRank*/) { } @@ -852,8 +822,6 @@ class GroupScript : public ScriptObject public: - bool IsDatabaseBound() const final override { return false; } - // Called when a member is added to a group. virtual void OnAddMember(Group* /*group*/, ObjectGuid /*guid*/) { } From 3a3a6bbfd2d841f58cb6af191f969830ce852d8c Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 4 Nov 2015 20:06:20 +0100 Subject: [PATCH 294/524] Core/Globals: Use std::string rather than char* to pass script names around. (cherry picked from commit b7b49fe35f87e83813466cb302ff17381792e607) Conflicts: src/server/game/Battlegrounds/BattlegroundMgr.cpp src/server/game/Globals/ObjectMgr.cpp --- .../game/Achievements/AchievementMgr.cpp | 2 +- .../game/Battlegrounds/BattlegroundMgr.cpp | 2 +- src/server/game/Conditions/ConditionMgr.cpp | 2 +- src/server/game/Globals/ObjectMgr.cpp | 37 +++++++++++-------- src/server/game/Globals/ObjectMgr.h | 4 +- src/server/game/Maps/Map.cpp | 2 +- src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp | 2 +- src/server/game/Scripting/ScriptMgr.cpp | 2 +- src/server/game/Weather/WeatherMgr.cpp | 2 +- 9 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 2662273697..2bacaff496 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2344,7 +2344,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() if (dataType != ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT) TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_data` has ScriptName set for non-scripted data type (Entry: %u, type %u), useless data.", criteria_id, dataType); else - scriptId = sObjectMgr->GetScriptId(scriptName.c_str()); + scriptId = sObjectMgr->GetScriptId(scriptName); } AchievementCriteriaData data(dataType, fields[2].GetUInt32(), fields[3].GetUInt32(), scriptId); diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index 5bdaf0e661..3aac3f080f 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -549,7 +549,7 @@ void BattlegroundMgr::LoadBattlegroundTemplates() float dist = fields[9].GetFloat(); bgTemplate.MaxStartDistSq = dist * dist; bgTemplate.Weight = fields[10].GetUInt8(); - bgTemplate.ScriptId = sObjectMgr->GetScriptId(fields[11].GetCString()); + bgTemplate.ScriptId = sObjectMgr->GetScriptId(fields[11].GetString()); bgTemplate.BattlemasterEntry = bl; if (bgTemplate.MaxPlayersPerTeam == 0 || bgTemplate.MinPlayersPerTeam > bgTemplate.MaxPlayersPerTeam) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 3675d43a3b..d9fa125b64 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -967,7 +967,7 @@ void ConditionMgr::LoadConditions(bool isReload) cond->NegativeCondition = fields[10].GetBool(); cond->ErrorType = fields[11].GetUInt32(); cond->ErrorTextId = fields[12].GetUInt32(); - cond->ScriptId = sObjectMgr->GetScriptId(fields[13].GetCString()); + cond->ScriptId = sObjectMgr->GetScriptId(fields[13].GetString()); if (iConditionTypeOrReference >= 0) cond->ConditionType = ConditionTypes(iConditionTypeOrReference); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 7a9302699b..622ed02e2b 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -503,7 +503,7 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields) creatureTemplate.RegenHealth = fields[71].GetBool(); creatureTemplate.MechanicImmuneMask = fields[72].GetUInt32(); creatureTemplate.flags_extra = fields[73].GetUInt32(); - creatureTemplate.ScriptID = GetScriptId(fields[74].GetCString()); + creatureTemplate.ScriptID = GetScriptId(fields[74].GetString()); } void ObjectMgr::LoadCreatureTemplateAddons() @@ -2405,7 +2405,7 @@ void ObjectMgr::LoadItemTemplates() itemTemplate.Duration = fields[129].GetUInt32(); itemTemplate.ItemLimitCategory = uint32(fields[130].GetInt16()); itemTemplate.HolidayId = fields[131].GetUInt32(); - itemTemplate.ScriptId = sObjectMgr->GetScriptId(fields[132].GetCString()); + itemTemplate.ScriptId = sObjectMgr->GetScriptId(fields[132].GetString()); itemTemplate.DisenchantID = fields[133].GetUInt32(); itemTemplate.FoodType = uint32(fields[134].GetUInt8()); itemTemplate.MinMoneyLoot = fields[135].GetUInt32(); @@ -5103,8 +5103,8 @@ void ObjectMgr::LoadSpellScriptNames() Field* fields = result->Fetch(); - int32 spellId = fields[0].GetInt32(); - char const* scriptName = fields[1].GetCString(); + int32 spellId = fields[0].GetInt32(); + std::string const scriptName = fields[1].GetString(); bool allRanks = false; if (spellId < 0) @@ -5116,18 +5116,18 @@ void ObjectMgr::LoadSpellScriptNames() SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) { - TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) does not exist.", scriptName, spellId); + TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) does not exist.", scriptName.c_str(), spellId); continue; } if (allRanks) { if (!spellInfo->IsRanked()) - TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) has no ranks of spell.", scriptName, fields[0].GetInt32()); + TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) has no ranks of spell.", scriptName.c_str(), fields[0].GetInt32()); if (spellInfo->GetFirstRankSpell()->Id != uint32(spellId)) { - TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) is not first rank of spell.", scriptName, fields[0].GetInt32()); + TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) is not first rank of spell.", scriptName.c_str(), fields[0].GetInt32()); continue; } @@ -5140,7 +5140,7 @@ void ObjectMgr::LoadSpellScriptNames() else { if (spellInfo->IsRanked()) - TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) is ranked spell. Perhaps not all ranks are assigned to this script.", scriptName, spellId); + TC_LOG_ERROR("sql.sql", "Scriptname: `%s` spell (Id: %d) is ranked spell. Perhaps not all ranks are assigned to this script.", scriptName.c_str(), spellId); _spellScriptsStore.insert(SpellScriptsContainer::value_type(spellInfo->Id, GetScriptId(scriptName))); } @@ -5178,7 +5178,7 @@ void ObjectMgr::ValidateSpellScripts() bool valid = true; if (!spellScript && !auraScript) { - TC_LOG_ERROR("scripts", "Functions GetSpellScript() and GetAuraScript() of script `%s` do not return objects - script skipped", GetScriptName(sitr->second->second)); + TC_LOG_ERROR("scripts", "Functions GetSpellScript() and GetAuraScript() of script `%s` do not return objects - script skipped", GetScriptName(sitr->second->second).c_str()); valid = false; } if (spellScript) @@ -5314,7 +5314,7 @@ void ObjectMgr::LoadInstanceTemplate() instanceTemplate.AllowMount = fields[3].GetBool(); instanceTemplate.Parent = uint32(fields[1].GetUInt16()); - instanceTemplate.ScriptId = sObjectMgr->GetScriptId(fields[2].GetCString()); + instanceTemplate.ScriptId = sObjectMgr->GetScriptId(fields[2].GetString()); _instanceTemplateStore[mapID] = instanceTemplate; @@ -5779,8 +5779,8 @@ void ObjectMgr::LoadAreaTriggerScripts() { Field* fields = result->Fetch(); - uint32 triggerId = fields[0].GetUInt32(); - char const* scriptName = fields[1].GetCString(); + uint32 triggerId = fields[0].GetUInt32(); + std::string const scriptName = fields[1].GetString(); AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(triggerId); if (!atEntry) @@ -6637,7 +6637,7 @@ void ObjectMgr::LoadGameObjectTemplate() got.raw.data[i] = fields[10 + i].GetInt32(); // data1 and data6 can be -1 got.AIName = fields[34].GetString(); - got.ScriptId = GetScriptId(fields[35].GetCString()); + got.ScriptId = GetScriptId(fields[35].GetString()); // Checks @@ -8585,11 +8585,18 @@ void ObjectMgr::LoadScriptNames() TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " ScriptNames in %u ms", _scriptNamesStore.size(), GetMSTimeDiffToNow(oldMSTime)); } -uint32 ObjectMgr::GetScriptId(char const* name) +std::string const& ObjectMgr::GetScriptName(uint32 id) const +{ + static std::string const empty = ""; + return id < _scriptNamesStore.size() ? _scriptNamesStore[id] : empty; +} + + +uint32 ObjectMgr::GetScriptId(std::string const& name) { // use binary search to find the script name in the sorted vector // assume "" is the first element - if (!name) + if (name.empty()) return 0; ScriptNameContainer::const_iterator itr = std::lower_bound(_scriptNamesStore.begin(), _scriptNamesStore.end(), name); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 033ea48291..396be44020 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1270,8 +1270,8 @@ class ObjectMgr bool IsVendorItemValid(uint32 vendor_entry, uint32 item, int32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* player = NULL, std::set* skip_vendors = NULL, uint32 ORnpcflag = 0) const; void LoadScriptNames(); - char const* GetScriptName(uint32 id) const { return id < _scriptNamesStore.size() ? _scriptNamesStore[id].c_str() : ""; } - uint32 GetScriptId(char const* name); + std::string const& GetScriptName(uint32 id) const; + uint32 GetScriptId(std::string const& name); SpellClickInfoMapBounds GetSpellClickInfoMapBounds(uint32 creature_id) const { diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index db74e71e86..6fbef75222 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3177,7 +3177,7 @@ void InstanceMap::CreateInstanceData(bool load) i_data->SetCompletedEncountersMask(fields[1].GetUInt32()); if (!data.empty()) { - TC_LOG_DEBUG("maps", "Loading instance data for `%s` with id %u", sObjectMgr->GetScriptName(i_script_id), i_InstanceId); + TC_LOG_DEBUG("maps", "Loading instance data for `%s` with id %u", sObjectMgr->GetScriptName(i_script_id).c_str(), i_InstanceId); i_data->Load(data.c_str()); } } diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp index e7b6765c17..37a380bf57 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp @@ -71,7 +71,7 @@ void OutdoorPvPMgr::InitOutdoorPvP() OutdoorPvPData* data = new OutdoorPvPData(); OutdoorPvPTypes realTypeId = OutdoorPvPTypes(typeId); data->TypeId = realTypeId; - data->ScriptId = sObjectMgr->GetScriptId(fields[1].GetCString()); + data->ScriptId = sObjectMgr->GetScriptId(fields[1].GetString()); m_OutdoorPvPDatas[realTypeId] = data; ++count; diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index f989222c8b..734a08dabc 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -129,7 +129,7 @@ class ScriptRegistry { // Get an ID for the script. An ID only exists if it's a script that is assigned in the database // through a script name (or similar). - uint32 id = sObjectMgr->GetScriptId(script->GetName().c_str()); + uint32 id = sObjectMgr->GetScriptId(script->GetName()); if (id) { // Try to find an existing script. diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index 64775a05fa..ff55d2d9a2 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -131,7 +131,7 @@ void LoadWeatherData() } } - wzc.ScriptId = sObjectMgr->GetScriptId(fields[13].GetCString()); + wzc.ScriptId = sObjectMgr->GetScriptId(fields[13].GetString()); ++count; } From d81784194c4a438bf9e02f4b285a79f0944daf8d Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 4 Nov 2015 21:16:39 +0100 Subject: [PATCH 295/524] Core/ScriptMgr: Fix "conditional expression is constant" warning. * introduced in commit 12d1993994b11785 (cherry picked from commit 155a289f052b3a48caadebafe587c0e66685857f) --- src/server/game/Scripting/ScriptMgr.cpp | 121 ++++++++++++------------ 1 file changed, 63 insertions(+), 58 deletions(-) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 734a08dabc..1f55461f6f 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -125,64 +125,7 @@ class ScriptRegistry } } - if (is_script_database_bound::value) - { - // Get an ID for the script. An ID only exists if it's a script that is assigned in the database - // through a script name (or similar). - uint32 id = sObjectMgr->GetScriptId(script->GetName()); - if (id) - { - // Try to find an existing script. - bool existing = false; - for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it) - { - // If the script names match... - if (it->second->GetName() == script->GetName()) - { - // ... It exists. - existing = true; - break; - } - } - - // If the script isn't assigned -> assign it! - if (!existing) - { - ScriptPointerList[id] = script; - sScriptMgr->IncrementScriptCount(); - - #ifdef SCRIPTS - UnusedScriptNamesContainer::iterator itr = std::lower_bound(UnusedScriptNames.begin(), UnusedScriptNames.end(), script->GetName()); - if (itr != UnusedScriptNames.end() && *itr == script->GetName()) - UnusedScriptNames.erase(itr); - #endif - } - else - { - // If the script is already assigned -> delete it! - TC_LOG_ERROR("scripts", "Script '%s' already assigned with the same script name, so the script can't work.", - script->GetName().c_str()); - - ABORT(); // Error that should be fixed ASAP. - } - } - else - { - // The script uses a script name from database, but isn't assigned to anything. - TC_LOG_ERROR("sql.sql", "Script named '%s' does not have a script name assigned in database.", script->GetName().c_str()); - - // Avoid calling "delete script;" because we are currently in the script constructor - // In a valid scenario this will not happen because every script has a name assigned in the database - UnusedScripts.push_back(script); - return; - } - } - else - { - // We're dealing with a code-only script; just add it. - ScriptPointerList[_scriptIdCounter++] = script; - sScriptMgr->IncrementScriptCount(); - } + AddScript(std::integral_constant::value>{}, script); } // Gets a script by its ID (assigned by ObjectMgr). @@ -197,6 +140,68 @@ class ScriptRegistry private: + // Adds a database bound script + static void AddScript(std::true_type, TScript* const script) + { + // Get an ID for the script. An ID only exists if it's a script that is assigned in the database + // through a script name (or similar). + uint32 id = sObjectMgr->GetScriptId(script->GetName()); + if (id) + { + // Try to find an existing script. + bool existing = false; + for (ScriptMapIterator it = ScriptPointerList.begin(); it != ScriptPointerList.end(); ++it) + { + // If the script names match... + if (it->second->GetName() == script->GetName()) + { + // ... It exists. + existing = true; + break; + } + } + + // If the script isn't assigned -> assign it! + if (!existing) + { + ScriptPointerList[id] = script; + sScriptMgr->IncrementScriptCount(); + + #ifdef SCRIPTS + UnusedScriptNamesContainer::iterator itr = std::lower_bound(UnusedScriptNames.begin(), UnusedScriptNames.end(), script->GetName()); + if (itr != UnusedScriptNames.end() && *itr == script->GetName()) + UnusedScriptNames.erase(itr); + #endif + } + else + { + // If the script is already assigned -> delete it! + TC_LOG_ERROR("scripts", "Script '%s' already assigned with the same script name, so the script can't work.", + script->GetName().c_str()); + + ABORT(); // Error that should be fixed ASAP. + } + } + else + { + // The script uses a script name from database, but isn't assigned to anything. + TC_LOG_ERROR("sql.sql", "Script named '%s' does not have a script name assigned in database.", script->GetName().c_str()); + + // Avoid calling "delete script;" because we are currently in the script constructor + // In a valid scenario this will not happen because every script has a name assigned in the database + UnusedScripts.push_back(script); + return; + } + } + + // Adds a non database bound script + static void AddScript(std::false_type, TScript* const script) + { + // We're dealing with a code-only script; just add it. + ScriptPointerList[_scriptIdCounter++] = script; + sScriptMgr->IncrementScriptCount(); + } + // Counter used for code-only scripts. static uint32 _scriptIdCounter; }; From 97dd18cb7818096b2cea5fea4dc414ac25c1799b Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 4 Nov 2015 21:45:38 +0100 Subject: [PATCH 296/524] Core/ScriptMgr: Improve commit 155a289f052b3a48caade (cherry picked from commit 30c421bf57c8d4c1000f8690d439283b858d485d) --- src/server/game/Scripting/ScriptMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 1f55461f6f..3cbdf93ca5 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -125,7 +125,7 @@ class ScriptRegistry } } - AddScript(std::integral_constant::value>{}, script); + AddScript(is_script_database_bound{}, script); } // Gets a script by its ID (assigned by ObjectMgr). From 7593e861de5bcab5bdfd2206e9686694a3aebc9f Mon Sep 17 00:00:00 2001 From: Golrag Date: Sat, 31 Oct 2015 15:46:35 +0100 Subject: [PATCH 297/524] Core/CreatureGroups: Don't set positionZ to ground for flying creatures. (cherry picked from commit df4c856360a56c3abe1c231ed37cd3673515c090) --- src/server/game/Entities/Creature/CreatureGroups.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index 2d353fa154..e8ce0acdc8 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -240,7 +240,8 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z) Trinity::NormalizeMapCoord(dx); Trinity::NormalizeMapCoord(dy); - member->UpdateGroundPositionZ(dx, dy, dz); + if (!member->IsFlying()) + member->UpdateGroundPositionZ(dx, dy, dz); if (member->IsWithinDist(m_leader, dist + MAX_DESYNC)) member->SetUnitMovementFlags(m_leader->GetUnitMovementFlags()); From 82c52e40f4f08d722133fa87335e3ef8a9afa44b Mon Sep 17 00:00:00 2001 From: Carbenium Date: Sat, 7 Nov 2015 15:38:50 +0100 Subject: [PATCH 298/524] TDB 335.60 - 2015/11/07 --- revision_data.h.in.cmake | 2 +- sql/base/auth_database.sql | 8 +- sql/base/characters_database.sql | 21 +- sql/base/dev/world_database.sql | 308 ++++++++++-------- .../59_2015_11_07}/2015_08_21_00_auth.sql | 0 .../2015_08_26_00_characters_335.sql | 0 .../2015_09_28_00_characters_335.sql | 0 .../2015_10_06_00_characters.sql | 0 .../2015_10_07_00_characters.sql | 0 .../2015_10_12_00_characters.sql | 0 .../2015_10_28_00_characters.sql | 0 .../2015_10_29_00_characters_335.sql | 0 .../2015_11_03_00_characters.sql | 0 .../59_2015_11_07}/2015_07_14_00_world.sql | 0 .../2015_07_14_01_world_335.sql | 0 .../59_2015_11_07}/2015_07_14_02_world.sql | 0 .../59_2015_11_07}/2015_07_14_03_world.sql | 0 .../59_2015_11_07}/2015_07_14_04_world.sql | 0 .../59_2015_11_07}/2015_07_14_05_world.sql | 0 .../59_2015_11_07}/2015_07_15_00_world.sql | 0 .../59_2015_11_07}/2015_07_15_01_world.sql | 0 .../59_2015_11_07}/2015_07_15_02_world.sql | 0 .../59_2015_11_07}/2015_07_16_00_world.sql | 0 .../59_2015_11_07}/2015_07_17_00_world.sql | 0 .../59_2015_11_07}/2015_07_17_01_world.sql | 0 .../59_2015_11_07}/2015_07_17_02_world.sql | 0 .../59_2015_11_07}/2015_07_17_03_world.sql | 0 .../59_2015_11_07}/2015_07_17_04_world.sql | 0 .../59_2015_11_07}/2015_07_18_00_world.sql | 0 .../59_2015_11_07}/2015_07_18_01_world.sql | 0 .../2015_07_19_00_world_2015_07_18_04.sql | 0 .../59_2015_11_07}/2015_07_19_01_world.sql | 0 .../59_2015_11_07}/2015_07_19_02_world.sql | 0 .../59_2015_11_07}/2015_07_19_03_world.sql | 0 .../59_2015_11_07}/2015_07_19_04_world.sql | 0 .../59_2015_11_07}/2015_07_19_05_world.sql | 0 .../2015_07_20_02_world_2015_07_19_35.sql | 0 .../59_2015_11_07}/2015_07_21_00_world.sql | 0 .../59_2015_11_07}/2015_07_24_00_world.sql | 0 .../59_2015_11_07}/2015_07_24_01_world.sql | 0 .../59_2015_11_07}/2015_07_24_02_world.sql | 0 .../59_2015_11_07}/2015_07_24_03_world.sql | 0 .../59_2015_11_07}/2015_07_24_04_world.sql | 0 .../59_2015_11_07}/2015_07_24_05_world.sql | 0 .../59_2015_11_07}/2015_07_24_06_world.sql | 0 .../59_2015_11_07}/2015_07_24_07_world.sql | 0 .../59_2015_11_07}/2015_07_25_00_world.sql | 0 .../59_2015_11_07}/2015_07_25_01_world.sql | 0 .../59_2015_11_07}/2015_07_25_02_world.sql | 0 .../59_2015_11_07}/2015_07_25_03_world.sql | 0 .../59_2015_11_07}/2015_07_25_04_world.sql | 0 .../59_2015_11_07}/2015_07_26_00_world.sql | 0 .../59_2015_11_07}/2015_07_26_04_world.sql | 0 .../59_2015_11_07}/2015_07_26_05_world.sql | 0 .../59_2015_11_07}/2015_07_26_06_world.sql | 0 .../59_2015_11_07}/2015_07_27_00_world.sql | 0 .../59_2015_11_07}/2015_07_27_01_world.sql | 0 .../59_2015_11_07}/2015_07_29_00_world.sql | 0 .../59_2015_11_07}/2015_07_29_01_world.sql | 0 .../59_2015_11_07}/2015_08_01_00_world.sql | 0 .../2015_08_02_00_world_335.sql | 0 .../2015_08_02_01_world_335.sql | 0 .../2015_08_03_00_world_335.sql | 0 .../2015_08_08_00_world_335.sql | 0 .../59_2015_11_07}/2015_08_08_01_world.sql | 0 .../2015_08_08_02_world_335.sql | 0 .../59_2015_11_07}/2015_08_08_03_world.sql | 0 .../2015_08_08_04_world_335.sql | 0 .../2015_08_09_00_world_335.sql | 0 .../59_2015_11_07}/2015_08_13_00_world.sql | 0 .../59_2015_11_07}/2015_08_13_01_world.sql | 0 .../59_2015_11_07}/2015_08_13_02_world.sql | 0 .../59_2015_11_07}/2015_08_13_03_world.sql | 0 .../59_2015_11_07}/2015_08_13_04_world.sql | 0 .../59_2015_11_07}/2015_08_21_00_world.sql | 0 .../59_2015_11_07}/2015_08_21_01_world.sql | 0 .../59_2015_11_07}/2015_08_21_02_world.sql | 0 .../59_2015_11_07}/2015_08_23_00_world.sql | 0 .../59_2015_11_07}/2015_08_25_00_world.sql | 0 .../59_2015_11_07}/2015_08_25_01_world.sql | 0 .../59_2015_11_07}/2015_08_26_00_world.sql | 0 .../59_2015_11_07}/2015_08_26_01_world.sql | 0 .../59_2015_11_07}/2015_08_27_00_world.sql | 0 .../59_2015_11_07}/2015_08_29_00_world.sql | 0 .../59_2015_11_07}/2015_08_29_01_world.sql | 0 .../59_2015_11_07}/2015_08_29_02_world.sql | 0 .../59_2015_11_07}/2015_08_29_03_world.sql | 0 .../59_2015_11_07}/2015_08_29_04_world.sql | 0 .../59_2015_11_07}/2015_08_30_00_world.sql | 0 .../59_2015_11_07}/2015_08_31_01_world.sql | 0 .../2015_09_01_00_world_335.sql | 0 .../59_2015_11_07}/2015_09_02_00_world.sql | 0 .../59_2015_11_07}/2015_09_02_01_world.sql | 0 .../2015_09_02_02_world_335.sql | 0 .../2015_09_02_03_world_335.sql | 0 .../59_2015_11_07}/2015_09_02_04_world.sql | 0 .../59_2015_11_07}/2015_09_03_00_world.sql | 0 .../59_2015_11_07}/2015_09_03_01_world.sql | 0 .../59_2015_11_07}/2015_09_03_02_world.sql | 0 .../59_2015_11_07}/2015_09_03_03_world.sql | 0 .../59_2015_11_07}/2015_09_03_04_world.sql | 0 .../2015_09_03_05_world_335.sql | 0 .../59_2015_11_07}/2015_09_03_06_world.sql | 0 .../59_2015_11_07}/2015_09_03_07_world.sql | 0 .../59_2015_11_07}/2015_09_03_08_world.sql | 0 .../59_2015_11_07}/2015_09_03_09_world.sql | 0 .../59_2015_11_07}/2015_09_03_10_world.sql | 0 .../59_2015_11_07}/2015_09_03_11_world.sql | 0 .../59_2015_11_07}/2015_09_04_00_world.sql | 0 .../59_2015_11_07}/2015_09_04_01_world.sql | 0 .../59_2015_11_07}/2015_09_04_02_world.sql | 0 .../59_2015_11_07}/2015_09_04_03_world.sql | 0 .../59_2015_11_07}/2015_09_05_00_world.sql | 0 .../59_2015_11_07}/2015_09_05_01_world.sql | 0 .../2015_09_05_02_world_335.sql | 0 .../59_2015_11_07}/2015_09_06_00_world.sql | 0 .../59_2015_11_07}/2015_09_07_00_world.sql | 0 .../59_2015_11_07}/2015_09_07_01_world.sql | 0 .../59_2015_11_07}/2015_09_07_02_world.sql | 0 .../59_2015_11_07}/2015_09_07_03_world.sql | 0 .../59_2015_11_07}/2015_09_07_04_world.sql | 0 .../59_2015_11_07}/2015_09_07_05_world.sql | 0 .../59_2015_11_07}/2015_09_08_00_world.sql | 0 .../59_2015_11_07}/2015_09_08_01_world.sql | 0 .../59_2015_11_07}/2015_09_08_02_world.sql | 0 .../59_2015_11_07}/2015_09_09_00_world.sql | 0 .../2015_09_10_00_world_335.sql | 0 .../2015_09_10_01_world_335.sql | 0 .../2015_09_11_99_world_335.sql | 0 .../59_2015_11_07}/2015_09_12_00_world.sql | 0 .../2015_09_15_00_world_335.sql | 0 .../59_2015_11_07}/2015_09_15_01_world.sql | 0 .../59_2015_11_07}/2015_09_15_02_world.sql | 0 .../59_2015_11_07}/2015_09_15_03_world.sql | 0 .../59_2015_11_07}/2015_09_16_00_world.sql | 0 .../59_2015_11_07}/2015_09_17_00_world.sql | 0 .../59_2015_11_07}/2015_09_20_00_world.sql | 0 .../59_2015_11_07}/2015_09_21_00_world.sql | 0 .../59_2015_11_07}/2015_09_21_01_world.sql | 0 .../59_2015_11_07}/2015_09_21_02_world.sql | 0 .../59_2015_11_07}/2015_09_21_03_world.sql | 0 .../59_2015_11_07}/2015_09_21_04_world.sql | 0 .../59_2015_11_07}/2015_09_21_05_world.sql | 0 .../59_2015_11_07}/2015_09_21_06_world.sql | 0 .../59_2015_11_07}/2015_09_21_07_world.sql | 0 .../59_2015_11_07}/2015_09_21_08_world.sql | 0 .../59_2015_11_07}/2015_09_21_09_world.sql | 0 .../59_2015_11_07}/2015_09_21_10_world.sql | 0 .../59_2015_11_07}/2015_09_22_00_world.sql | 0 .../59_2015_11_07}/2015_09_22_01_world.sql | 0 .../59_2015_11_07}/2015_09_23_00_world.sql | 0 .../59_2015_11_07}/2015_09_23_01_world.sql | 0 .../59_2015_11_07}/2015_09_23_02_world.sql | 0 .../59_2015_11_07}/2015_09_23_03_world.sql | 0 .../59_2015_11_07}/2015_09_23_04_world.sql | 0 .../59_2015_11_07}/2015_09_23_05_world.sql | 0 .../59_2015_11_07}/2015_09_24_00_world.sql | 0 .../59_2015_11_07}/2015_09_24_01_world.sql | 0 .../59_2015_11_07}/2015_09_24_02_world.sql | 0 .../59_2015_11_07}/2015_09_24_03_world.sql | 0 .../59_2015_11_07}/2015_09_26_00_world.sql | 0 .../59_2015_11_07}/2015_09_26_01_world.sql | 0 .../59_2015_11_07}/2015_09_26_02_world.sql | 0 .../59_2015_11_07}/2015_09_26_03_world.sql | 0 .../59_2015_11_07}/2015_09_26_04_world.sql | 0 .../59_2015_11_07}/2015_09_26_05_world.sql | 0 .../59_2015_11_07}/2015_09_29_00_world.sql | 0 .../59_2015_11_07}/2015_09_29_01_world.sql | 0 .../59_2015_11_07}/2015_09_29_02_world.sql | 0 .../59_2015_11_07}/2015_09_29_03_world.sql | 0 .../59_2015_11_07}/2015_09_30_00_world.sql | 0 .../59_2015_11_07}/2015_10_01_00_world.sql | 0 .../59_2015_11_07}/2015_10_01_01_world.sql | 0 .../59_2015_11_07}/2015_10_01_02_world.sql | 0 .../59_2015_11_07}/2015_10_02_00_world.sql | 0 .../59_2015_11_07}/2015_10_02_01_world.sql | 0 .../59_2015_11_07}/2015_10_03_00_world.sql | 0 .../59_2015_11_07}/2015_10_03_01_world.sql | 0 .../59_2015_11_07}/2015_10_03_02_world.sql | 0 .../59_2015_11_07}/2015_10_04_00_world.sql | 0 .../59_2015_11_07}/2015_10_04_01_world.sql | 0 .../59_2015_11_07}/2015_10_04_02_world.sql | 0 .../59_2015_11_07}/2015_10_04_03_world.sql | 0 .../59_2015_11_07}/2015_10_04_04_world.sql | 0 .../59_2015_11_07}/2015_10_04_05_world.sql | 0 .../59_2015_11_07}/2015_10_05_00_world.sql | 0 .../59_2015_11_07}/2015_10_05_01_world.sql | 0 .../59_2015_11_07}/2015_10_06_00_world.sql | 0 .../59_2015_11_07}/2015_10_06_01_world.sql | 0 .../59_2015_11_07}/2015_10_08_00_world.sql | 0 .../59_2015_11_07}/2015_10_08_01_world.sql | 0 .../59_2015_11_07}/2015_10_10_00_world.sql | 0 .../59_2015_11_07}/2015_10_10_01_world.sql | 0 .../59_2015_11_07}/2015_10_10_02_world.sql | 0 .../59_2015_11_07}/2015_10_10_03_world.sql | 0 .../59_2015_11_07}/2015_10_10_04_world.sql | 0 .../59_2015_11_07}/2015_10_10_05_world.sql | 0 .../59_2015_11_07}/2015_10_11_00_world.sql | 0 .../59_2015_11_07}/2015_10_11_01_world.sql | 0 .../59_2015_11_07}/2015_10_11_02_world.sql | 0 .../59_2015_11_07}/2015_10_11_03_world.sql | 0 .../59_2015_11_07}/2015_10_11_04_world.sql | 0 .../59_2015_11_07}/2015_10_12_00_world.sql | 0 .../2015_10_13_00_world_335.sql | 0 .../59_2015_11_07}/2015_10_14_00_world.sql | 0 .../59_2015_11_07}/2015_10_14_01_world.sql | 0 .../59_2015_11_07}/2015_10_14_02_world.sql | 0 .../59_2015_11_07}/2015_10_14_03_world.sql | 0 .../59_2015_11_07}/2015_10_14_04_world.sql | 0 .../59_2015_11_07}/2015_10_14_05_world.sql | 0 .../59_2015_11_07}/2015_10_14_06_world.sql | 0 .../59_2015_11_07}/2015_10_14_07_world.sql | 0 .../59_2015_11_07}/2015_10_16_00_world.sql | 0 .../59_2015_11_07}/2015_10_16_01_world.sql | 0 .../59_2015_11_07}/2015_10_16_02_world.sql | 0 .../59_2015_11_07}/2015_10_17_00_world.sql | 0 .../59_2015_11_07}/2015_10_17_01_world.sql | 0 .../59_2015_11_07}/2015_10_17_02_world.sql | 0 .../59_2015_11_07}/2015_10_20_00_world.sql | 0 .../59_2015_11_07}/2015_10_20_01_world.sql | 0 .../59_2015_11_07}/2015_10_20_02_world.sql | 0 .../59_2015_11_07}/2015_10_20_03_world.sql | 0 .../59_2015_11_07}/2015_10_21_00_world.sql | 0 .../59_2015_11_07}/2015_10_21_01_world.sql | 0 .../59_2015_11_07}/2015_10_22_00_world.sql | 0 .../59_2015_11_07}/2015_10_22_01_world.sql | 0 .../59_2015_11_07}/2015_10_23_00_world.sql | 0 .../59_2015_11_07}/2015_10_23_01_world.sql | 0 .../59_2015_11_07}/2015_10_23_02_world.sql | 0 .../59_2015_11_07}/2015_10_23_03_world.sql | 0 .../59_2015_11_07}/2015_10_27_00_world335.sql | 0 .../59_2015_11_07}/2015_10_27_01_world.sql | 0 .../59_2015_11_07}/2015_10_27_02_world.sql | 0 .../59_2015_11_07}/2015_10_28_00_world.sql | 0 .../59_2015_11_07}/2015_10_29_00_world.sql | 0 .../59_2015_11_07}/2015_10_30_00_world.sql | 0 .../2015_10_30_01_world_335.sql | 0 .../59_2015_11_07}/2015_10_30_02_world.sql | 0 .../59_2015_11_07}/2015_10_30_03_world.sql | 0 .../59_2015_11_07}/2015_10_31_00_world.sql | 0 .../59_2015_11_07}/2015_10_31_01_world.sql | 0 .../59_2015_11_07}/2015_10_31_02_world.sql | 0 .../2015_10_31_03_world_2015_08_01_01.sql | 0 .../59_2015_11_07}/2015_11_01_00_world.sql | 0 .../59_2015_11_07}/2015_11_01_01_world.sql | 0 .../59_2015_11_07}/2015_11_01_02_world.sql | 0 .../59_2015_11_07}/2015_11_01_03_world.sql | 0 .../59_2015_11_07}/2015_11_01_04_world.sql | 0 .../59_2015_11_07}/2015_11_02_00_world.sql | 0 .../59_2015_11_07}/2015_11_02_01_world.sql | 0 .../59_2015_11_07}/2015_11_03_00_world.sql | 0 .../59_2015_11_07}/2015_11_03_01_world.sql | 0 .../59_2015_11_07}/2015_11_03_02_world.sql | 0 .../2015_11_06_00_world_335.sql | 0 .../59_2015_11_07}/2015_11_07_00_world.sql | 0 .../59_2015_11_07}/2015_11_07_01_world.sql | 0 sql/updates/auth/2015_11_07_00_auth.sql | 1 + .../characters/2015_11_07_00_characters.sql | 1 + sql/updates/world/2015_11_07_02_world.sql | 3 + 259 files changed, 196 insertions(+), 148 deletions(-) rename sql/{updates/auth => old/3.3.5a/auth/59_2015_11_07}/2015_08_21_00_auth.sql (100%) rename sql/{updates/characters => old/3.3.5a/characters/59_2015_11_07}/2015_08_26_00_characters_335.sql (100%) rename sql/{updates/characters => old/3.3.5a/characters/59_2015_11_07}/2015_09_28_00_characters_335.sql (100%) rename sql/{updates/characters => old/3.3.5a/characters/59_2015_11_07}/2015_10_06_00_characters.sql (100%) rename sql/{updates/characters => old/3.3.5a/characters/59_2015_11_07}/2015_10_07_00_characters.sql (100%) rename sql/{updates/characters => old/3.3.5a/characters/59_2015_11_07}/2015_10_12_00_characters.sql (100%) rename sql/{updates/characters => old/3.3.5a/characters/59_2015_11_07}/2015_10_28_00_characters.sql (100%) rename sql/{updates/characters => old/3.3.5a/characters/59_2015_11_07}/2015_10_29_00_characters_335.sql (100%) rename sql/{updates/characters => old/3.3.5a/characters/59_2015_11_07}/2015_11_03_00_characters.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_14_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_14_01_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_14_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_14_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_14_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_14_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_15_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_15_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_15_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_16_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_17_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_17_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_17_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_17_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_17_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_18_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_18_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_19_00_world_2015_07_18_04.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_19_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_19_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_19_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_19_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_19_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_20_02_world_2015_07_19_35.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_21_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_24_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_24_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_24_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_24_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_24_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_24_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_24_06_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_24_07_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_25_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_25_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_25_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_25_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_25_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_26_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_26_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_26_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_26_06_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_27_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_27_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_29_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_07_29_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_01_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_02_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_02_01_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_03_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_08_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_08_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_08_02_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_08_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_08_04_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_09_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_13_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_13_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_13_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_13_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_13_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_21_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_21_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_21_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_23_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_25_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_25_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_26_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_26_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_27_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_29_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_29_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_29_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_29_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_29_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_30_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_08_31_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_01_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_02_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_02_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_02_02_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_02_03_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_02_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_05_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_06_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_07_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_08_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_09_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_10_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_03_11_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_04_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_04_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_04_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_04_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_05_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_05_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_05_02_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_06_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_07_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_07_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_07_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_07_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_07_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_07_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_08_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_08_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_08_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_09_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_10_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_10_01_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_11_99_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_12_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_15_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_15_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_15_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_15_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_16_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_17_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_20_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_06_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_07_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_08_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_09_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_21_10_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_22_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_22_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_23_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_23_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_23_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_23_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_23_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_23_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_24_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_24_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_24_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_24_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_26_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_26_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_26_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_26_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_26_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_26_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_29_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_29_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_29_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_29_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_09_30_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_01_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_01_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_01_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_02_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_02_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_03_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_03_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_03_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_04_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_04_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_04_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_04_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_04_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_04_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_05_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_05_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_06_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_06_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_08_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_08_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_10_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_10_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_10_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_10_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_10_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_10_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_11_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_11_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_11_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_11_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_11_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_12_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_13_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_14_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_14_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_14_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_14_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_14_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_14_05_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_14_06_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_14_07_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_16_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_16_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_16_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_17_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_17_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_17_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_20_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_20_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_20_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_20_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_21_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_21_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_22_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_22_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_23_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_23_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_23_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_23_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_27_00_world335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_27_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_27_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_28_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_29_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_30_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_30_01_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_30_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_30_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_31_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_31_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_31_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_10_31_03_world_2015_08_01_01.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_01_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_01_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_01_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_01_03_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_01_04_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_02_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_02_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_03_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_03_01_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_03_02_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_06_00_world_335.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_07_00_world.sql (100%) rename sql/{updates/world => old/3.3.5a/world/59_2015_11_07}/2015_11_07_01_world.sql (100%) create mode 100644 sql/updates/auth/2015_11_07_00_auth.sql create mode 100644 sql/updates/characters/2015_11_07_00_characters.sql create mode 100644 sql/updates/world/2015_11_07_02_world.sql diff --git a/revision_data.h.in.cmake b/revision_data.h.in.cmake index cd9d06c0e6..f21c3d26bd 100644 --- a/revision_data.h.in.cmake +++ b/revision_data.h.in.cmake @@ -5,7 +5,7 @@ #define _BRANCH "@rev_branch@" #define _SOURCE_DIRECTORY "@CMAKE_SOURCE_DIR@" #define _MYSQL_EXECUTABLE "@MYSQL_EXECUTABLE@" - #define _FULL_DATABASE "TDB_full_world_335.59_2015_07_14.sql" + #define _FULL_DATABASE "TDB_full_world_335.60_2015_11_07.sql" #define VER_COMPANYNAME_STR "TrinityCore Developers" #define VER_LEGALCOPYRIGHT_STR "(c)2008-2015 TrinityCore" #define VER_FILEVERSION 0,0,0 diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index d06aa3ac8a..b11f5002bc 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -1,8 +1,8 @@ --- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64) +-- MySQL dump 10.13 Distrib 5.6.26, for Win64 (x86_64) -- -- Host: localhost Database: auth335 -- ------------------------------------------------------ --- Server version 5.6.9-rc +-- Server version 5.6.26-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -486,7 +486,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2014_11_10_00_auth.sql','0E3CB119442D09DD88E967015319BBC8DAFBBFE0','ARCHIVED','2015-03-21 21:44:12',0),('2014_11_10_01_auth.sql','327E77A1DA3546D5275AB249915DD57EDD6FDD3D','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_10_00_auth.sql','821703A96D80F9080074852B5A46E2909C9562EA','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_21_00_auth.sql','CE2E5D2CD82E79C25294539ADED27A1429105B43','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_00_auth.sql','E8C5B74BB45F0F35DEC182C72BACF435C7066FB0','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_01_auth.sql','862961815354DA2746F5F71FBC8155F57CBE75AB','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_02_auth.sql','33E4F94086590768EF5D4855DD43D7DE7C06ADA4','ARCHIVED','2015-03-21 21:44:51',0),('2015_08_21_00_auth.sql','C31A9E1D28E11B60BE8F8198637DD51F6D75123F','RELEASED','2015-10-05 23:16:19',0); +INSERT INTO `updates` VALUES ('2014_11_10_00_auth.sql','0E3CB119442D09DD88E967015319BBC8DAFBBFE0','ARCHIVED','2015-03-21 21:44:12',0),('2014_11_10_01_auth.sql','327E77A1DA3546D5275AB249915DD57EDD6FDD3D','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_10_00_auth.sql','821703A96D80F9080074852B5A46E2909C9562EA','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_21_00_auth.sql','CE2E5D2CD82E79C25294539ADED27A1429105B43','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_00_auth.sql','E8C5B74BB45F0F35DEC182C72BACF435C7066FB0','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_01_auth.sql','862961815354DA2746F5F71FBC8155F57CBE75AB','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_02_auth.sql','33E4F94086590768EF5D4855DD43D7DE7C06ADA4','ARCHIVED','2015-03-21 21:44:51',0),('2015_08_21_00_auth.sql','C31A9E1D28E11B60BE8F8198637DD51F6D75123F','ARCHIVED','2015-10-05 23:16:19',0),('2015_11_07_00_auth.sql','BAF9F6B8F97A30D04BDBBA8127A62A1720F9B904','RELEASED','2015-11-07 15:40:47',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; @@ -549,4 +549,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2015-07-14 1:06:49 +-- Dump completed on 2015-11-07 14:42:34 diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 4e2d933227..69c6c990e1 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1,8 +1,8 @@ --- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64) +-- MySQL dump 10.13 Distrib 5.6.26, for Win64 (x86_64) -- -- Host: localhost Database: characters335 -- ------------------------------------------------------ --- Server version 5.6.9-rc +-- Server version 5.6.26-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -253,6 +253,15 @@ CREATE TABLE `battleground_deserters` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Dumping data for table `battleground_deserters` +-- + +LOCK TABLES `battleground_deserters` WRITE; +/*!40000 ALTER TABLE `battleground_deserters` DISABLE KEYS */; +/*!40000 ALTER TABLE `battleground_deserters` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `bugreport` -- @@ -1541,7 +1550,7 @@ DROP TABLE IF EXISTS `gm_ticket`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `gm_ticket` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `type` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0 open, 1 closed, 2 character deleted', + `type` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '0 open, 1 closed, 2 character deleted', `playerGuid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier of ticket creator', `name` varchar(12) NOT NULL COMMENT 'Name of ticket creator', `description` text NOT NULL, @@ -1559,7 +1568,7 @@ CREATE TABLE `gm_ticket` ( `escalated` tinyint(3) unsigned NOT NULL DEFAULT '0', `viewed` tinyint(3) unsigned NOT NULL DEFAULT '0', `needMoreHelp` tinyint(3) unsigned NOT NULL DEFAULT '0', - `resolvedBy` INT(10) NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket', + `resolvedBy` int(10) NOT NULL DEFAULT '0' COMMENT 'GUID of GM who resolved the ticket', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System'; /*!40101 SET character_set_client = @saved_cs_client */; @@ -2530,7 +2539,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0),('2015_10_29_00_characters_335.sql','4555A7F35C107E54C13D74D20F141039ED42943E','RELEASED','2015-10-29 17:05:43',0),('2015_11_03_00_characters.sql','CC045717B8FDD9733351E52A5302560CD08AAD57','RELEASED','2015-10-12 15:23:33',0); +INSERT INTO `updates` VALUES ('2015_03_20_00_characters.sql','B761760804EA73BD297F296C5C1919687DF7191C','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_01_characters.sql','894F08B70449A5481FFAF394EE5571D7FC4D8A3A','ARCHIVED','2015-03-21 21:44:15',0),('2015_03_20_02_characters.sql','97D7BE0CAADC79F3F11B9FD296B8C6CD40FE593B','ARCHIVED','2015-03-21 21:44:51',0),('2015_06_26_00_characters_335.sql','C2CC6E50AFA1ACCBEBF77CC519AAEB09F3BBAEBC','ARCHIVED','2015-07-13 23:49:22',0),('2015_09_28_00_characters_335.sql','F8682A431D50E54BDC4AC0E7DBED21AE8AAB6AD4','ARCHIVED','2015-09-28 21:00:00',0),('2015_08_26_00_characters_335.sql','C7D6A3A00FECA3EBFF1E71744CA40D3076582374','ARCHIVED','2015-08-26 21:00:00',0),('2015_10_06_00_characters.sql','16842FDD7E8547F2260D3312F53EFF8761EFAB35','ARCHIVED','2015-10-06 16:06:38',0),('2015_10_07_00_characters.sql','E15AB463CEBE321001D7BFDEA4B662FF618728FD','ARCHIVED','2015-10-07 23:32:00',0),('2015_10_12_00_characters.sql','D6F9927BDED72AD0A81D6EC2C6500CBC34A39FA2','ARCHIVED','2015-10-12 15:35:47',0),('2015_10_28_00_characters.sql','622A9CA8FCE690429EBE23BA071A37C7A007BF8B','ARCHIVED','2015-10-19 14:32:22',0),('2015_10_29_00_characters_335.sql','4555A7F35C107E54C13D74D20F141039ED42943E','ARCHIVED','2015-10-29 17:05:43',0),('2015_11_03_00_characters.sql','CC045717B8FDD9733351E52A5302560CD08AAD57','ARCHIVED','2015-10-12 15:23:33',0),('2015_11_07_00_characters.sql','BAF9F6B8F97A30D04BDBBA8127A62A1720F9B904','RELEASED','2015-11-07 15:40:47',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; @@ -2615,4 +2624,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2015-07-14 1:06:50 +-- Dump completed on 2015-11-07 14:42:34 diff --git a/sql/base/dev/world_database.sql b/sql/base/dev/world_database.sql index e2277d77a6..0231898744 100644 --- a/sql/base/dev/world_database.sql +++ b/sql/base/dev/world_database.sql @@ -1,8 +1,8 @@ --- MySQL dump 10.13 Distrib 5.6.9-rc, for Win64 (x86_64) +-- MySQL dump 10.13 Distrib 5.6.26, for Win64 (x86_64) -- -- Host: localhost Database: world335 -- ------------------------------------------------------ --- Server version 5.6.9-rc +-- Server version 5.6.26-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -469,6 +469,7 @@ CREATE TABLE `creature_questitem` ( `CreatureEntry` int(10) unsigned NOT NULL DEFAULT '0', `Idx` int(10) unsigned NOT NULL DEFAULT '0', `ItemId` int(10) unsigned NOT NULL DEFAULT '0', + `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0', PRIMARY KEY (`CreatureEntry`,`Idx`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; @@ -616,6 +617,23 @@ CREATE TABLE `creature_template_addon` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `creature_template_locale` +-- + +DROP TABLE IF EXISTS `creature_template_locale`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `creature_template_locale` ( + `entry` mediumint(8) unsigned NOT NULL DEFAULT '0', + `locale` varchar(4) NOT NULL, + `Name` text, + `Title` text, + `VerifiedBuild` smallint(5) DEFAULT '0', + PRIMARY KEY (`entry`,`locale`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `creature_text` -- @@ -1126,6 +1144,7 @@ CREATE TABLE `gameobject_questitem` ( `GameObjectEntry` int(10) unsigned NOT NULL DEFAULT '0', `Idx` int(10) unsigned NOT NULL DEFAULT '0', `ItemId` int(10) unsigned NOT NULL DEFAULT '0', + `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0', PRIMARY KEY (`GameObjectEntry`,`Idx`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; @@ -1194,6 +1213,23 @@ CREATE TABLE `gameobject_template` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Gameobject System'; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `gameobject_template_locale` +-- + +DROP TABLE IF EXISTS `gameobject_template_locale`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `gameobject_template_locale` ( + `entry` mediumint(8) unsigned NOT NULL DEFAULT '0', + `locale` varchar(4) NOT NULL, + `name` text, + `castBarCaption` text, + `VerifiedBuild` smallint(5) DEFAULT '0', + PRIMARY KEY (`entry`,`locale`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `gossip_menu` -- @@ -1581,36 +1617,6 @@ CREATE TABLE `locales_broadcast_text` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Table structure for table `locales_creature` --- - -DROP TABLE IF EXISTS `locales_creature`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `locales_creature` ( - `entry` mediumint(8) unsigned NOT NULL DEFAULT '0', - `name_loc1` varchar(100) NOT NULL DEFAULT '', - `name_loc2` varchar(100) NOT NULL DEFAULT '', - `name_loc3` varchar(100) NOT NULL DEFAULT '', - `name_loc4` varchar(100) NOT NULL DEFAULT '', - `name_loc5` varchar(100) NOT NULL DEFAULT '', - `name_loc6` varchar(100) NOT NULL DEFAULT '', - `name_loc7` varchar(100) NOT NULL DEFAULT '', - `name_loc8` varchar(100) NOT NULL DEFAULT '', - `subname_loc1` varchar(100) DEFAULT NULL, - `subname_loc2` varchar(100) DEFAULT NULL, - `subname_loc3` varchar(100) DEFAULT NULL, - `subname_loc4` varchar(100) DEFAULT NULL, - `subname_loc5` varchar(100) DEFAULT NULL, - `subname_loc6` varchar(100) DEFAULT NULL, - `subname_loc7` varchar(100) DEFAULT NULL, - `subname_loc8` varchar(100) DEFAULT NULL, - `VerifiedBuild` smallint(5) DEFAULT '0', - PRIMARY KEY (`entry`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - -- -- Table structure for table `locales_creature_text` -- @@ -1634,36 +1640,6 @@ CREATE TABLE `locales_creature_text` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; --- --- Table structure for table `locales_gameobject` --- - -DROP TABLE IF EXISTS `locales_gameobject`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `locales_gameobject` ( - `entry` mediumint(8) unsigned NOT NULL DEFAULT '0', - `name_loc1` varchar(100) NOT NULL DEFAULT '', - `name_loc2` varchar(100) NOT NULL DEFAULT '', - `name_loc3` varchar(100) NOT NULL DEFAULT '', - `name_loc4` varchar(100) NOT NULL DEFAULT '', - `name_loc5` varchar(100) NOT NULL DEFAULT '', - `name_loc6` varchar(100) NOT NULL DEFAULT '', - `name_loc7` varchar(100) NOT NULL DEFAULT '', - `name_loc8` varchar(100) NOT NULL DEFAULT '', - `castbarcaption_loc1` varchar(100) NOT NULL DEFAULT '', - `castbarcaption_loc2` varchar(100) NOT NULL DEFAULT '', - `castbarcaption_loc3` varchar(100) NOT NULL DEFAULT '', - `castbarcaption_loc4` varchar(100) NOT NULL DEFAULT '', - `castbarcaption_loc5` varchar(100) NOT NULL DEFAULT '', - `castbarcaption_loc6` varchar(100) NOT NULL DEFAULT '', - `castbarcaption_loc7` varchar(100) NOT NULL DEFAULT '', - `castbarcaption_loc8` varchar(100) NOT NULL DEFAULT '', - `VerifiedBuild` smallint(5) DEFAULT '0', - PRIMARY KEY (`entry`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - -- -- Table structure for table `locales_gossip_menu_option` -- @@ -2689,6 +2665,51 @@ CREATE TABLE `prospecting_loot_template` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System'; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `quest_details` +-- + +DROP TABLE IF EXISTS `quest_details`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `quest_details` ( + `ID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `Emote1` smallint(5) unsigned NOT NULL DEFAULT '0', + `Emote2` smallint(5) unsigned NOT NULL DEFAULT '0', + `Emote3` smallint(5) unsigned NOT NULL DEFAULT '0', + `Emote4` smallint(5) unsigned NOT NULL DEFAULT '0', + `EmoteDelay1` int(10) unsigned NOT NULL DEFAULT '0', + `EmoteDelay2` int(10) unsigned NOT NULL DEFAULT '0', + `EmoteDelay3` int(10) unsigned NOT NULL DEFAULT '0', + `EmoteDelay4` int(10) unsigned NOT NULL DEFAULT '0', + `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `quest_offer_reward` +-- + +DROP TABLE IF EXISTS `quest_offer_reward`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `quest_offer_reward` ( + `ID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `Emote1` smallint(5) unsigned NOT NULL DEFAULT '0', + `Emote2` smallint(5) unsigned NOT NULL DEFAULT '0', + `Emote3` smallint(5) unsigned NOT NULL DEFAULT '0', + `Emote4` smallint(5) unsigned NOT NULL DEFAULT '0', + `EmoteDelay1` int(10) unsigned NOT NULL DEFAULT '0', + `EmoteDelay2` int(10) unsigned NOT NULL DEFAULT '0', + `EmoteDelay3` int(10) unsigned NOT NULL DEFAULT '0', + `EmoteDelay4` int(10) unsigned NOT NULL DEFAULT '0', + `RewardText` text, + `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `quest_poi` -- @@ -2730,6 +2751,23 @@ CREATE TABLE `quest_poi_points` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `quest_request_items` +-- + +DROP TABLE IF EXISTS `quest_request_items`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `quest_request_items` ( + `ID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `EmoteOnComplete` smallint(5) unsigned NOT NULL DEFAULT '0', + `EmoteOnIncomplete` smallint(5) unsigned NOT NULL DEFAULT '0', + `CompletionText` text, + `VerifiedBuild` smallint(5) NOT NULL DEFAULT '0', + PRIMARY KEY (`ID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `quest_template` -- @@ -2739,77 +2777,83 @@ DROP TABLE IF EXISTS `quest_template`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `quest_template` ( `ID` mediumint(8) unsigned NOT NULL DEFAULT '0', - `Method` tinyint(3) unsigned NOT NULL DEFAULT '2', + `QuestType` tinyint(3) unsigned NOT NULL DEFAULT '2', `QuestLevel` smallint(3) NOT NULL DEFAULT '1', `MinLevel` tinyint(3) unsigned NOT NULL DEFAULT '0', `QuestSortID` smallint(6) NOT NULL DEFAULT '0', - `QuestType` smallint(5) unsigned NOT NULL DEFAULT '0', + `QuestInfoID` smallint(5) unsigned NOT NULL DEFAULT '0', `SuggestedGroupNum` tinyint(3) unsigned NOT NULL DEFAULT '0', - `LimitTime` int(10) unsigned NOT NULL DEFAULT '0', - `RequiredRaces` smallint(5) unsigned NOT NULL DEFAULT '0', `RequiredFactionId1` smallint(5) unsigned NOT NULL DEFAULT '0', `RequiredFactionId2` smallint(5) unsigned NOT NULL DEFAULT '0', `RequiredFactionValue1` mediumint(8) NOT NULL DEFAULT '0', `RequiredFactionValue2` mediumint(8) NOT NULL DEFAULT '0', - `NextQuestIdChain` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardXPId` tinyint(3) unsigned NOT NULL DEFAULT '0', - `RewardOrRequiredMoney` int(11) NOT NULL DEFAULT '0', - `RewardMoneyMaxLevel` int(10) unsigned NOT NULL DEFAULT '0', - `RewardSpell` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardSpellCast` int(11) NOT NULL DEFAULT '0', + `RewardNextQuest` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardXPDifficulty` tinyint(3) unsigned NOT NULL DEFAULT '0', + `RewardMoney` int(11) NOT NULL DEFAULT '0', + `RewardBonusMoney` int(10) unsigned NOT NULL DEFAULT '0', + `RewardDisplaySpell` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardSpell` int(11) NOT NULL DEFAULT '0', `RewardHonor` int(11) NOT NULL DEFAULT '0', - `RewardHonorMultiplier` float NOT NULL DEFAULT '0', - `SourceItemId` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardKillHonor` float NOT NULL DEFAULT '0', + `StartItem` mediumint(8) unsigned NOT NULL DEFAULT '0', `Flags` int(10) unsigned NOT NULL DEFAULT '0', - `RewardTitle` tinyint(3) unsigned NOT NULL DEFAULT '0', `RequiredPlayerKills` tinyint(3) unsigned NOT NULL DEFAULT '0', + `RewardItem1` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardAmount1` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardItem2` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardAmount2` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardItem3` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardAmount3` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardItem4` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardAmount4` smallint(5) unsigned NOT NULL DEFAULT '0', + `ItemDrop1` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ItemDropQuantity1` smallint(5) unsigned NOT NULL DEFAULT '0', + `ItemDrop2` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ItemDropQuantity2` smallint(5) unsigned NOT NULL DEFAULT '0', + `ItemDrop3` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ItemDropQuantity3` smallint(5) unsigned NOT NULL DEFAULT '0', + `ItemDrop4` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ItemDropQuantity4` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemID1` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemQuantity1` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemID2` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemQuantity2` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemID3` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemQuantity3` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemID4` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemQuantity4` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemID5` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemQuantity5` smallint(5) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemID6` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardChoiceItemQuantity6` smallint(5) unsigned NOT NULL DEFAULT '0', + `POIContinent` smallint(5) unsigned NOT NULL DEFAULT '0', + `POIx` float NOT NULL DEFAULT '0', + `POIy` float NOT NULL DEFAULT '0', + `POIPriority` mediumint(8) unsigned NOT NULL DEFAULT '0', + `RewardTitle` tinyint(3) unsigned NOT NULL DEFAULT '0', `RewardTalents` tinyint(3) unsigned NOT NULL DEFAULT '0', `RewardArenaPoints` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardItem1` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardItem2` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardItem3` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardItem4` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardAmount1` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardAmount2` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardAmount3` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardAmount4` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemID1` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemID2` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemID3` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemID4` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemID5` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemID6` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemQuantity1` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemQuantity2` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemQuantity3` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemQuantity4` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemQuantity5` smallint(5) unsigned NOT NULL DEFAULT '0', - `RewardChoiceItemQuantity6` smallint(5) unsigned NOT NULL DEFAULT '0', `RewardFactionID1` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', - `RewardFactionID2` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', - `RewardFactionID3` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', - `RewardFactionID4` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', - `RewardFactionID5` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', `RewardFactionValue1` mediumint(8) NOT NULL DEFAULT '0', - `RewardFactionValue2` mediumint(8) NOT NULL DEFAULT '0', - `RewardFactionValue3` mediumint(8) NOT NULL DEFAULT '0', - `RewardFactionValue4` mediumint(8) NOT NULL DEFAULT '0', - `RewardFactionValue5` mediumint(8) NOT NULL DEFAULT '0', `RewardFactionOverride1` mediumint(8) NOT NULL DEFAULT '0', + `RewardFactionID2` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', + `RewardFactionValue2` mediumint(8) NOT NULL DEFAULT '0', `RewardFactionOverride2` mediumint(8) NOT NULL DEFAULT '0', + `RewardFactionID3` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', + `RewardFactionValue3` mediumint(8) NOT NULL DEFAULT '0', `RewardFactionOverride3` mediumint(8) NOT NULL DEFAULT '0', + `RewardFactionID4` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', + `RewardFactionValue4` mediumint(8) NOT NULL DEFAULT '0', `RewardFactionOverride4` mediumint(8) NOT NULL DEFAULT '0', + `RewardFactionID5` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'faction id from Faction.dbc in this case', + `RewardFactionValue5` mediumint(8) NOT NULL DEFAULT '0', `RewardFactionOverride5` mediumint(8) NOT NULL DEFAULT '0', - `PointMapId` smallint(5) unsigned NOT NULL DEFAULT '0', - `PointX` float NOT NULL DEFAULT '0', - `PointY` float NOT NULL DEFAULT '0', - `PointOption` mediumint(8) unsigned NOT NULL DEFAULT '0', + `TimeAllowed` int(10) unsigned NOT NULL DEFAULT '0', + `AllowableRaces` smallint(5) unsigned NOT NULL DEFAULT '0', `LogTitle` text, `LogDescription` text, `QuestDescription` text, - `EndText` text, - `OfferRewardText` text, - `RequestItemsText` text, + `AreaDescription` text, `QuestCompletionLog` text, `RequiredNpcOrGo1` mediumint(8) NOT NULL DEFAULT '0', `RequiredNpcOrGo2` mediumint(8) NOT NULL DEFAULT '0', @@ -2819,14 +2863,6 @@ CREATE TABLE `quest_template` ( `RequiredNpcOrGoCount2` smallint(5) unsigned NOT NULL DEFAULT '0', `RequiredNpcOrGoCount3` smallint(5) unsigned NOT NULL DEFAULT '0', `RequiredNpcOrGoCount4` smallint(5) unsigned NOT NULL DEFAULT '0', - `RequiredSourceItemId1` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RequiredSourceItemId2` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RequiredSourceItemId3` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RequiredSourceItemId4` mediumint(8) unsigned NOT NULL DEFAULT '0', - `RequiredSourceItemCount1` smallint(5) unsigned NOT NULL DEFAULT '0', - `RequiredSourceItemCount2` smallint(5) unsigned NOT NULL DEFAULT '0', - `RequiredSourceItemCount3` smallint(5) unsigned NOT NULL DEFAULT '0', - `RequiredSourceItemCount4` smallint(5) unsigned NOT NULL DEFAULT '0', `RequiredItemId1` mediumint(8) unsigned NOT NULL DEFAULT '0', `RequiredItemId2` mediumint(8) unsigned NOT NULL DEFAULT '0', `RequiredItemId3` mediumint(8) unsigned NOT NULL DEFAULT '0', @@ -2844,24 +2880,6 @@ CREATE TABLE `quest_template` ( `ObjectiveText2` text, `ObjectiveText3` text, `ObjectiveText4` text, - `DetailsEmote1` smallint(5) unsigned NOT NULL DEFAULT '0', - `DetailsEmote2` smallint(5) unsigned NOT NULL DEFAULT '0', - `DetailsEmote3` smallint(5) unsigned NOT NULL DEFAULT '0', - `DetailsEmote4` smallint(5) unsigned NOT NULL DEFAULT '0', - `DetailsEmoteDelay1` int(10) unsigned NOT NULL DEFAULT '0', - `DetailsEmoteDelay2` int(10) unsigned NOT NULL DEFAULT '0', - `DetailsEmoteDelay3` int(10) unsigned NOT NULL DEFAULT '0', - `DetailsEmoteDelay4` int(10) unsigned NOT NULL DEFAULT '0', - `EmoteOnIncomplete` smallint(5) unsigned NOT NULL DEFAULT '0', - `EmoteOnComplete` smallint(5) unsigned NOT NULL DEFAULT '0', - `OfferRewardEmote1` smallint(5) unsigned NOT NULL DEFAULT '0', - `OfferRewardEmote2` smallint(5) unsigned NOT NULL DEFAULT '0', - `OfferRewardEmote3` smallint(5) unsigned NOT NULL DEFAULT '0', - `OfferRewardEmote4` smallint(5) unsigned NOT NULL DEFAULT '0', - `OfferRewardEmoteDelay1` int(10) unsigned NOT NULL DEFAULT '0', - `OfferRewardEmoteDelay2` int(10) unsigned NOT NULL DEFAULT '0', - `OfferRewardEmoteDelay3` int(10) unsigned NOT NULL DEFAULT '0', - `OfferRewardEmoteDelay4` int(10) unsigned NOT NULL DEFAULT '0', `VerifiedBuild` smallint(5) DEFAULT '0', PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Quest System'; @@ -3028,6 +3046,22 @@ CREATE TABLE `skill_fishing_base_level` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Fishing system'; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `skill_perfect_item_template` +-- + +DROP TABLE IF EXISTS `skill_perfect_item_template`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `skill_perfect_item_template` ( + `spellId` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'SpellId of the item creation spell', + `requiredSpecialization` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Specialization spell id', + `perfectCreateChance` float NOT NULL DEFAULT '0' COMMENT 'chance to create the perfect item instead', + `perfectItemType` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'perfect item type to create instead', + PRIMARY KEY (`spellId`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Crafting Perfection System'; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `skinning_loot_template` -- @@ -3751,4 +3785,4 @@ CREATE TABLE `waypoints` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2015-07-14 1:06:51 +-- Dump completed on 2015-11-07 14:42:45 diff --git a/sql/updates/auth/2015_08_21_00_auth.sql b/sql/old/3.3.5a/auth/59_2015_11_07/2015_08_21_00_auth.sql similarity index 100% rename from sql/updates/auth/2015_08_21_00_auth.sql rename to sql/old/3.3.5a/auth/59_2015_11_07/2015_08_21_00_auth.sql diff --git a/sql/updates/characters/2015_08_26_00_characters_335.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_08_26_00_characters_335.sql similarity index 100% rename from sql/updates/characters/2015_08_26_00_characters_335.sql rename to sql/old/3.3.5a/characters/59_2015_11_07/2015_08_26_00_characters_335.sql diff --git a/sql/updates/characters/2015_09_28_00_characters_335.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_09_28_00_characters_335.sql similarity index 100% rename from sql/updates/characters/2015_09_28_00_characters_335.sql rename to sql/old/3.3.5a/characters/59_2015_11_07/2015_09_28_00_characters_335.sql diff --git a/sql/updates/characters/2015_10_06_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_06_00_characters.sql similarity index 100% rename from sql/updates/characters/2015_10_06_00_characters.sql rename to sql/old/3.3.5a/characters/59_2015_11_07/2015_10_06_00_characters.sql diff --git a/sql/updates/characters/2015_10_07_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_07_00_characters.sql similarity index 100% rename from sql/updates/characters/2015_10_07_00_characters.sql rename to sql/old/3.3.5a/characters/59_2015_11_07/2015_10_07_00_characters.sql diff --git a/sql/updates/characters/2015_10_12_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_12_00_characters.sql similarity index 100% rename from sql/updates/characters/2015_10_12_00_characters.sql rename to sql/old/3.3.5a/characters/59_2015_11_07/2015_10_12_00_characters.sql diff --git a/sql/updates/characters/2015_10_28_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_28_00_characters.sql similarity index 100% rename from sql/updates/characters/2015_10_28_00_characters.sql rename to sql/old/3.3.5a/characters/59_2015_11_07/2015_10_28_00_characters.sql diff --git a/sql/updates/characters/2015_10_29_00_characters_335.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_10_29_00_characters_335.sql similarity index 100% rename from sql/updates/characters/2015_10_29_00_characters_335.sql rename to sql/old/3.3.5a/characters/59_2015_11_07/2015_10_29_00_characters_335.sql diff --git a/sql/updates/characters/2015_11_03_00_characters.sql b/sql/old/3.3.5a/characters/59_2015_11_07/2015_11_03_00_characters.sql similarity index 100% rename from sql/updates/characters/2015_11_03_00_characters.sql rename to sql/old/3.3.5a/characters/59_2015_11_07/2015_11_03_00_characters.sql diff --git a/sql/updates/world/2015_07_14_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_14_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_00_world.sql diff --git a/sql/updates/world/2015_07_14_01_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_01_world_335.sql similarity index 100% rename from sql/updates/world/2015_07_14_01_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_01_world_335.sql diff --git a/sql/updates/world/2015_07_14_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_02_world.sql similarity index 100% rename from sql/updates/world/2015_07_14_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_02_world.sql diff --git a/sql/updates/world/2015_07_14_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_03_world.sql similarity index 100% rename from sql/updates/world/2015_07_14_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_03_world.sql diff --git a/sql/updates/world/2015_07_14_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_04_world.sql similarity index 100% rename from sql/updates/world/2015_07_14_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_04_world.sql diff --git a/sql/updates/world/2015_07_14_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_05_world.sql similarity index 100% rename from sql/updates/world/2015_07_14_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_14_05_world.sql diff --git a/sql/updates/world/2015_07_15_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_15_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_00_world.sql diff --git a/sql/updates/world/2015_07_15_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_01_world.sql similarity index 100% rename from sql/updates/world/2015_07_15_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_01_world.sql diff --git a/sql/updates/world/2015_07_15_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_02_world.sql similarity index 100% rename from sql/updates/world/2015_07_15_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_15_02_world.sql diff --git a/sql/updates/world/2015_07_16_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_16_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_16_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_16_00_world.sql diff --git a/sql/updates/world/2015_07_17_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_17_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_00_world.sql diff --git a/sql/updates/world/2015_07_17_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_01_world.sql similarity index 100% rename from sql/updates/world/2015_07_17_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_01_world.sql diff --git a/sql/updates/world/2015_07_17_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_02_world.sql similarity index 100% rename from sql/updates/world/2015_07_17_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_02_world.sql diff --git a/sql/updates/world/2015_07_17_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_03_world.sql similarity index 100% rename from sql/updates/world/2015_07_17_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_03_world.sql diff --git a/sql/updates/world/2015_07_17_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_04_world.sql similarity index 100% rename from sql/updates/world/2015_07_17_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_17_04_world.sql diff --git a/sql/updates/world/2015_07_18_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_18_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_00_world.sql diff --git a/sql/updates/world/2015_07_18_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_01_world.sql similarity index 100% rename from sql/updates/world/2015_07_18_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_18_01_world.sql diff --git a/sql/updates/world/2015_07_19_00_world_2015_07_18_04.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_00_world_2015_07_18_04.sql similarity index 100% rename from sql/updates/world/2015_07_19_00_world_2015_07_18_04.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_00_world_2015_07_18_04.sql diff --git a/sql/updates/world/2015_07_19_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_01_world.sql similarity index 100% rename from sql/updates/world/2015_07_19_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_01_world.sql diff --git a/sql/updates/world/2015_07_19_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_02_world.sql similarity index 100% rename from sql/updates/world/2015_07_19_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_02_world.sql diff --git a/sql/updates/world/2015_07_19_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_03_world.sql similarity index 100% rename from sql/updates/world/2015_07_19_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_03_world.sql diff --git a/sql/updates/world/2015_07_19_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_04_world.sql similarity index 100% rename from sql/updates/world/2015_07_19_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_04_world.sql diff --git a/sql/updates/world/2015_07_19_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_05_world.sql similarity index 100% rename from sql/updates/world/2015_07_19_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_19_05_world.sql diff --git a/sql/updates/world/2015_07_20_02_world_2015_07_19_35.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_20_02_world_2015_07_19_35.sql similarity index 100% rename from sql/updates/world/2015_07_20_02_world_2015_07_19_35.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_20_02_world_2015_07_19_35.sql diff --git a/sql/updates/world/2015_07_21_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_21_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_21_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_21_00_world.sql diff --git a/sql/updates/world/2015_07_24_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_24_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_00_world.sql diff --git a/sql/updates/world/2015_07_24_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_01_world.sql similarity index 100% rename from sql/updates/world/2015_07_24_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_01_world.sql diff --git a/sql/updates/world/2015_07_24_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_02_world.sql similarity index 100% rename from sql/updates/world/2015_07_24_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_02_world.sql diff --git a/sql/updates/world/2015_07_24_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_03_world.sql similarity index 100% rename from sql/updates/world/2015_07_24_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_03_world.sql diff --git a/sql/updates/world/2015_07_24_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_04_world.sql similarity index 100% rename from sql/updates/world/2015_07_24_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_04_world.sql diff --git a/sql/updates/world/2015_07_24_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_05_world.sql similarity index 100% rename from sql/updates/world/2015_07_24_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_05_world.sql diff --git a/sql/updates/world/2015_07_24_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_06_world.sql similarity index 100% rename from sql/updates/world/2015_07_24_06_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_06_world.sql diff --git a/sql/updates/world/2015_07_24_07_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_07_world.sql similarity index 100% rename from sql/updates/world/2015_07_24_07_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_24_07_world.sql diff --git a/sql/updates/world/2015_07_25_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_25_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_00_world.sql diff --git a/sql/updates/world/2015_07_25_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_01_world.sql similarity index 100% rename from sql/updates/world/2015_07_25_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_01_world.sql diff --git a/sql/updates/world/2015_07_25_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_02_world.sql similarity index 100% rename from sql/updates/world/2015_07_25_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_02_world.sql diff --git a/sql/updates/world/2015_07_25_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_03_world.sql similarity index 100% rename from sql/updates/world/2015_07_25_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_03_world.sql diff --git a/sql/updates/world/2015_07_25_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_04_world.sql similarity index 100% rename from sql/updates/world/2015_07_25_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_25_04_world.sql diff --git a/sql/updates/world/2015_07_26_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_26_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_00_world.sql diff --git a/sql/updates/world/2015_07_26_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_04_world.sql similarity index 100% rename from sql/updates/world/2015_07_26_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_04_world.sql diff --git a/sql/updates/world/2015_07_26_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_05_world.sql similarity index 100% rename from sql/updates/world/2015_07_26_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_05_world.sql diff --git a/sql/updates/world/2015_07_26_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_06_world.sql similarity index 100% rename from sql/updates/world/2015_07_26_06_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_26_06_world.sql diff --git a/sql/updates/world/2015_07_27_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_27_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_00_world.sql diff --git a/sql/updates/world/2015_07_27_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_01_world.sql similarity index 100% rename from sql/updates/world/2015_07_27_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_27_01_world.sql diff --git a/sql/updates/world/2015_07_29_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_00_world.sql similarity index 100% rename from sql/updates/world/2015_07_29_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_00_world.sql diff --git a/sql/updates/world/2015_07_29_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_01_world.sql similarity index 100% rename from sql/updates/world/2015_07_29_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_07_29_01_world.sql diff --git a/sql/updates/world/2015_08_01_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_01_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_01_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_01_00_world.sql diff --git a/sql/updates/world/2015_08_02_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_08_02_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_00_world_335.sql diff --git a/sql/updates/world/2015_08_02_01_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_01_world_335.sql similarity index 100% rename from sql/updates/world/2015_08_02_01_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_02_01_world_335.sql diff --git a/sql/updates/world/2015_08_03_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_03_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_08_03_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_03_00_world_335.sql diff --git a/sql/updates/world/2015_08_08_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_08_08_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_00_world_335.sql diff --git a/sql/updates/world/2015_08_08_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_01_world.sql similarity index 100% rename from sql/updates/world/2015_08_08_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_01_world.sql diff --git a/sql/updates/world/2015_08_08_02_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_02_world_335.sql similarity index 100% rename from sql/updates/world/2015_08_08_02_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_02_world_335.sql diff --git a/sql/updates/world/2015_08_08_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_03_world.sql similarity index 100% rename from sql/updates/world/2015_08_08_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_03_world.sql diff --git a/sql/updates/world/2015_08_08_04_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_04_world_335.sql similarity index 100% rename from sql/updates/world/2015_08_08_04_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_08_04_world_335.sql diff --git a/sql/updates/world/2015_08_09_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_09_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_08_09_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_09_00_world_335.sql diff --git a/sql/updates/world/2015_08_13_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_13_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_00_world.sql diff --git a/sql/updates/world/2015_08_13_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_01_world.sql similarity index 100% rename from sql/updates/world/2015_08_13_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_01_world.sql diff --git a/sql/updates/world/2015_08_13_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_02_world.sql similarity index 100% rename from sql/updates/world/2015_08_13_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_02_world.sql diff --git a/sql/updates/world/2015_08_13_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_03_world.sql similarity index 100% rename from sql/updates/world/2015_08_13_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_03_world.sql diff --git a/sql/updates/world/2015_08_13_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_04_world.sql similarity index 100% rename from sql/updates/world/2015_08_13_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_13_04_world.sql diff --git a/sql/updates/world/2015_08_21_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_21_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_00_world.sql diff --git a/sql/updates/world/2015_08_21_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_01_world.sql similarity index 100% rename from sql/updates/world/2015_08_21_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_01_world.sql diff --git a/sql/updates/world/2015_08_21_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_02_world.sql similarity index 100% rename from sql/updates/world/2015_08_21_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_21_02_world.sql diff --git a/sql/updates/world/2015_08_23_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_23_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_23_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_23_00_world.sql diff --git a/sql/updates/world/2015_08_25_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_25_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_00_world.sql diff --git a/sql/updates/world/2015_08_25_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_01_world.sql similarity index 100% rename from sql/updates/world/2015_08_25_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_25_01_world.sql diff --git a/sql/updates/world/2015_08_26_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_26_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_00_world.sql diff --git a/sql/updates/world/2015_08_26_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_01_world.sql similarity index 100% rename from sql/updates/world/2015_08_26_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_26_01_world.sql diff --git a/sql/updates/world/2015_08_27_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_27_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_27_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_27_00_world.sql diff --git a/sql/updates/world/2015_08_29_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_29_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_00_world.sql diff --git a/sql/updates/world/2015_08_29_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_01_world.sql similarity index 100% rename from sql/updates/world/2015_08_29_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_01_world.sql diff --git a/sql/updates/world/2015_08_29_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_02_world.sql similarity index 100% rename from sql/updates/world/2015_08_29_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_02_world.sql diff --git a/sql/updates/world/2015_08_29_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_03_world.sql similarity index 100% rename from sql/updates/world/2015_08_29_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_03_world.sql diff --git a/sql/updates/world/2015_08_29_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_04_world.sql similarity index 100% rename from sql/updates/world/2015_08_29_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_29_04_world.sql diff --git a/sql/updates/world/2015_08_30_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_30_00_world.sql similarity index 100% rename from sql/updates/world/2015_08_30_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_30_00_world.sql diff --git a/sql/updates/world/2015_08_31_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_08_31_01_world.sql similarity index 100% rename from sql/updates/world/2015_08_31_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_08_31_01_world.sql diff --git a/sql/updates/world/2015_09_01_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_01_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_01_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_01_00_world_335.sql diff --git a/sql/updates/world/2015_09_02_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_02_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_00_world.sql diff --git a/sql/updates/world/2015_09_02_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_02_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_01_world.sql diff --git a/sql/updates/world/2015_09_02_02_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_02_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_02_02_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_02_world_335.sql diff --git a/sql/updates/world/2015_09_02_03_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_03_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_02_03_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_03_world_335.sql diff --git a/sql/updates/world/2015_09_02_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_04_world.sql similarity index 100% rename from sql/updates/world/2015_09_02_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_02_04_world.sql diff --git a/sql/updates/world/2015_09_03_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_00_world.sql diff --git a/sql/updates/world/2015_09_03_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_01_world.sql diff --git a/sql/updates/world/2015_09_03_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_02_world.sql diff --git a/sql/updates/world/2015_09_03_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_03_world.sql diff --git a/sql/updates/world/2015_09_03_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_04_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_04_world.sql diff --git a/sql/updates/world/2015_09_03_05_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_05_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_03_05_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_05_world_335.sql diff --git a/sql/updates/world/2015_09_03_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_06_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_06_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_06_world.sql diff --git a/sql/updates/world/2015_09_03_07_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_07_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_07_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_07_world.sql diff --git a/sql/updates/world/2015_09_03_08_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_08_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_08_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_08_world.sql diff --git a/sql/updates/world/2015_09_03_09_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_09_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_09_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_09_world.sql diff --git a/sql/updates/world/2015_09_03_10_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_10_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_10_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_10_world.sql diff --git a/sql/updates/world/2015_09_03_11_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_11_world.sql similarity index 100% rename from sql/updates/world/2015_09_03_11_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_03_11_world.sql diff --git a/sql/updates/world/2015_09_04_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_04_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_00_world.sql diff --git a/sql/updates/world/2015_09_04_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_04_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_01_world.sql diff --git a/sql/updates/world/2015_09_04_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_04_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_02_world.sql diff --git a/sql/updates/world/2015_09_04_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_04_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_04_03_world.sql diff --git a/sql/updates/world/2015_09_05_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_05_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_00_world.sql diff --git a/sql/updates/world/2015_09_05_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_05_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_01_world.sql diff --git a/sql/updates/world/2015_09_05_02_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_02_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_05_02_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_05_02_world_335.sql diff --git a/sql/updates/world/2015_09_06_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_06_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_06_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_06_00_world.sql diff --git a/sql/updates/world/2015_09_07_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_07_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_00_world.sql diff --git a/sql/updates/world/2015_09_07_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_07_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_01_world.sql diff --git a/sql/updates/world/2015_09_07_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_07_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_02_world.sql diff --git a/sql/updates/world/2015_09_07_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_07_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_03_world.sql diff --git a/sql/updates/world/2015_09_07_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_04_world.sql similarity index 100% rename from sql/updates/world/2015_09_07_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_04_world.sql diff --git a/sql/updates/world/2015_09_07_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_05_world.sql similarity index 100% rename from sql/updates/world/2015_09_07_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_07_05_world.sql diff --git a/sql/updates/world/2015_09_08_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_08_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_00_world.sql diff --git a/sql/updates/world/2015_09_08_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_08_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_01_world.sql diff --git a/sql/updates/world/2015_09_08_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_08_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_08_02_world.sql diff --git a/sql/updates/world/2015_09_09_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_09_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_09_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_09_00_world.sql diff --git a/sql/updates/world/2015_09_10_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_10_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_00_world_335.sql diff --git a/sql/updates/world/2015_09_10_01_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_01_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_10_01_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_10_01_world_335.sql diff --git a/sql/updates/world/2015_09_11_99_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_11_99_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_11_99_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_11_99_world_335.sql diff --git a/sql/updates/world/2015_09_12_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_12_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_12_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_12_00_world.sql diff --git a/sql/updates/world/2015_09_15_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_09_15_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_00_world_335.sql diff --git a/sql/updates/world/2015_09_15_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_15_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_01_world.sql diff --git a/sql/updates/world/2015_09_15_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_15_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_02_world.sql diff --git a/sql/updates/world/2015_09_15_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_15_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_15_03_world.sql diff --git a/sql/updates/world/2015_09_16_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_16_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_16_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_16_00_world.sql diff --git a/sql/updates/world/2015_09_17_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_17_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_17_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_17_00_world.sql diff --git a/sql/updates/world/2015_09_20_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_20_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_20_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_20_00_world.sql diff --git a/sql/updates/world/2015_09_21_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_00_world.sql diff --git a/sql/updates/world/2015_09_21_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_01_world.sql diff --git a/sql/updates/world/2015_09_21_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_02_world.sql diff --git a/sql/updates/world/2015_09_21_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_03_world.sql diff --git a/sql/updates/world/2015_09_21_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_04_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_04_world.sql diff --git a/sql/updates/world/2015_09_21_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_05_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_05_world.sql diff --git a/sql/updates/world/2015_09_21_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_06_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_06_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_06_world.sql diff --git a/sql/updates/world/2015_09_21_07_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_07_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_07_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_07_world.sql diff --git a/sql/updates/world/2015_09_21_08_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_08_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_08_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_08_world.sql diff --git a/sql/updates/world/2015_09_21_09_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_09_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_09_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_09_world.sql diff --git a/sql/updates/world/2015_09_21_10_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_10_world.sql similarity index 100% rename from sql/updates/world/2015_09_21_10_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_21_10_world.sql diff --git a/sql/updates/world/2015_09_22_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_22_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_00_world.sql diff --git a/sql/updates/world/2015_09_22_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_22_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_22_01_world.sql diff --git a/sql/updates/world/2015_09_23_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_23_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_00_world.sql diff --git a/sql/updates/world/2015_09_23_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_23_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_01_world.sql diff --git a/sql/updates/world/2015_09_23_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_23_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_02_world.sql diff --git a/sql/updates/world/2015_09_23_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_23_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_03_world.sql diff --git a/sql/updates/world/2015_09_23_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_04_world.sql similarity index 100% rename from sql/updates/world/2015_09_23_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_04_world.sql diff --git a/sql/updates/world/2015_09_23_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_05_world.sql similarity index 100% rename from sql/updates/world/2015_09_23_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_23_05_world.sql diff --git a/sql/updates/world/2015_09_24_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_24_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_00_world.sql diff --git a/sql/updates/world/2015_09_24_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_24_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_01_world.sql diff --git a/sql/updates/world/2015_09_24_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_24_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_02_world.sql diff --git a/sql/updates/world/2015_09_24_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_24_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_24_03_world.sql diff --git a/sql/updates/world/2015_09_26_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_26_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_00_world.sql diff --git a/sql/updates/world/2015_09_26_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_26_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_01_world.sql diff --git a/sql/updates/world/2015_09_26_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_26_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_02_world.sql diff --git a/sql/updates/world/2015_09_26_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_26_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_03_world.sql diff --git a/sql/updates/world/2015_09_26_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_04_world.sql similarity index 100% rename from sql/updates/world/2015_09_26_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_04_world.sql diff --git a/sql/updates/world/2015_09_26_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_05_world.sql similarity index 100% rename from sql/updates/world/2015_09_26_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_26_05_world.sql diff --git a/sql/updates/world/2015_09_29_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_29_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_00_world.sql diff --git a/sql/updates/world/2015_09_29_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_01_world.sql similarity index 100% rename from sql/updates/world/2015_09_29_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_01_world.sql diff --git a/sql/updates/world/2015_09_29_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_02_world.sql similarity index 100% rename from sql/updates/world/2015_09_29_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_02_world.sql diff --git a/sql/updates/world/2015_09_29_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_03_world.sql similarity index 100% rename from sql/updates/world/2015_09_29_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_29_03_world.sql diff --git a/sql/updates/world/2015_09_30_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_09_30_00_world.sql similarity index 100% rename from sql/updates/world/2015_09_30_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_09_30_00_world.sql diff --git a/sql/updates/world/2015_10_01_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_01_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_00_world.sql diff --git a/sql/updates/world/2015_10_01_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_01_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_01_world.sql diff --git a/sql/updates/world/2015_10_01_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_01_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_01_02_world.sql diff --git a/sql/updates/world/2015_10_02_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_02_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_00_world.sql diff --git a/sql/updates/world/2015_10_02_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_02_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_02_01_world.sql diff --git a/sql/updates/world/2015_10_03_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_03_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_00_world.sql diff --git a/sql/updates/world/2015_10_03_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_03_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_01_world.sql diff --git a/sql/updates/world/2015_10_03_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_03_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_03_02_world.sql diff --git a/sql/updates/world/2015_10_04_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_04_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_00_world.sql diff --git a/sql/updates/world/2015_10_04_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_04_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_01_world.sql diff --git a/sql/updates/world/2015_10_04_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_04_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_02_world.sql diff --git a/sql/updates/world/2015_10_04_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_03_world.sql similarity index 100% rename from sql/updates/world/2015_10_04_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_03_world.sql diff --git a/sql/updates/world/2015_10_04_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_04_world.sql similarity index 100% rename from sql/updates/world/2015_10_04_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_04_world.sql diff --git a/sql/updates/world/2015_10_04_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_05_world.sql similarity index 100% rename from sql/updates/world/2015_10_04_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_04_05_world.sql diff --git a/sql/updates/world/2015_10_05_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_05_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_00_world.sql diff --git a/sql/updates/world/2015_10_05_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_05_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_05_01_world.sql diff --git a/sql/updates/world/2015_10_06_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_06_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_00_world.sql diff --git a/sql/updates/world/2015_10_06_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_06_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_06_01_world.sql diff --git a/sql/updates/world/2015_10_08_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_08_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_00_world.sql diff --git a/sql/updates/world/2015_10_08_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_08_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_08_01_world.sql diff --git a/sql/updates/world/2015_10_10_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_10_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_00_world.sql diff --git a/sql/updates/world/2015_10_10_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_10_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_01_world.sql diff --git a/sql/updates/world/2015_10_10_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_10_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_02_world.sql diff --git a/sql/updates/world/2015_10_10_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_03_world.sql similarity index 100% rename from sql/updates/world/2015_10_10_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_03_world.sql diff --git a/sql/updates/world/2015_10_10_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_04_world.sql similarity index 100% rename from sql/updates/world/2015_10_10_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_04_world.sql diff --git a/sql/updates/world/2015_10_10_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_05_world.sql similarity index 100% rename from sql/updates/world/2015_10_10_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_10_05_world.sql diff --git a/sql/updates/world/2015_10_11_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_11_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_00_world.sql diff --git a/sql/updates/world/2015_10_11_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_11_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_01_world.sql diff --git a/sql/updates/world/2015_10_11_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_11_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_02_world.sql diff --git a/sql/updates/world/2015_10_11_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_03_world.sql similarity index 100% rename from sql/updates/world/2015_10_11_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_03_world.sql diff --git a/sql/updates/world/2015_10_11_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_04_world.sql similarity index 100% rename from sql/updates/world/2015_10_11_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_11_04_world.sql diff --git a/sql/updates/world/2015_10_12_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_12_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_12_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_12_00_world.sql diff --git a/sql/updates/world/2015_10_13_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_13_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_10_13_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_13_00_world_335.sql diff --git a/sql/updates/world/2015_10_14_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_14_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_00_world.sql diff --git a/sql/updates/world/2015_10_14_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_14_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_01_world.sql diff --git a/sql/updates/world/2015_10_14_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_14_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_02_world.sql diff --git a/sql/updates/world/2015_10_14_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_03_world.sql similarity index 100% rename from sql/updates/world/2015_10_14_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_03_world.sql diff --git a/sql/updates/world/2015_10_14_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_04_world.sql similarity index 100% rename from sql/updates/world/2015_10_14_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_04_world.sql diff --git a/sql/updates/world/2015_10_14_05_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_05_world.sql similarity index 100% rename from sql/updates/world/2015_10_14_05_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_05_world.sql diff --git a/sql/updates/world/2015_10_14_06_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_06_world.sql similarity index 100% rename from sql/updates/world/2015_10_14_06_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_06_world.sql diff --git a/sql/updates/world/2015_10_14_07_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_07_world.sql similarity index 100% rename from sql/updates/world/2015_10_14_07_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_14_07_world.sql diff --git a/sql/updates/world/2015_10_16_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_16_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_00_world.sql diff --git a/sql/updates/world/2015_10_16_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_16_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_01_world.sql diff --git a/sql/updates/world/2015_10_16_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_16_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_16_02_world.sql diff --git a/sql/updates/world/2015_10_17_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_17_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_00_world.sql diff --git a/sql/updates/world/2015_10_17_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_17_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_01_world.sql diff --git a/sql/updates/world/2015_10_17_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_17_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_17_02_world.sql diff --git a/sql/updates/world/2015_10_20_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_20_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_00_world.sql diff --git a/sql/updates/world/2015_10_20_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_20_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_01_world.sql diff --git a/sql/updates/world/2015_10_20_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_20_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_02_world.sql diff --git a/sql/updates/world/2015_10_20_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_03_world.sql similarity index 100% rename from sql/updates/world/2015_10_20_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_20_03_world.sql diff --git a/sql/updates/world/2015_10_21_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_21_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_00_world.sql diff --git a/sql/updates/world/2015_10_21_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_21_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_21_01_world.sql diff --git a/sql/updates/world/2015_10_22_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_22_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_00_world.sql diff --git a/sql/updates/world/2015_10_22_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_22_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_22_01_world.sql diff --git a/sql/updates/world/2015_10_23_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_23_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_00_world.sql diff --git a/sql/updates/world/2015_10_23_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_23_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_01_world.sql diff --git a/sql/updates/world/2015_10_23_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_23_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_02_world.sql diff --git a/sql/updates/world/2015_10_23_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_03_world.sql similarity index 100% rename from sql/updates/world/2015_10_23_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_23_03_world.sql diff --git a/sql/updates/world/2015_10_27_00_world335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_00_world335.sql similarity index 100% rename from sql/updates/world/2015_10_27_00_world335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_00_world335.sql diff --git a/sql/updates/world/2015_10_27_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_27_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_01_world.sql diff --git a/sql/updates/world/2015_10_27_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_27_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_27_02_world.sql diff --git a/sql/updates/world/2015_10_28_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_28_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_28_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_28_00_world.sql diff --git a/sql/updates/world/2015_10_29_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_29_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_29_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_29_00_world.sql diff --git a/sql/updates/world/2015_10_30_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_30_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_00_world.sql diff --git a/sql/updates/world/2015_10_30_01_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_01_world_335.sql similarity index 100% rename from sql/updates/world/2015_10_30_01_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_01_world_335.sql diff --git a/sql/updates/world/2015_10_30_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_30_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_02_world.sql diff --git a/sql/updates/world/2015_10_30_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_03_world.sql similarity index 100% rename from sql/updates/world/2015_10_30_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_30_03_world.sql diff --git a/sql/updates/world/2015_10_31_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_00_world.sql similarity index 100% rename from sql/updates/world/2015_10_31_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_00_world.sql diff --git a/sql/updates/world/2015_10_31_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_31_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_01_world.sql diff --git a/sql/updates/world/2015_10_31_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_02_world.sql similarity index 100% rename from sql/updates/world/2015_10_31_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_02_world.sql diff --git a/sql/updates/world/2015_10_31_03_world_2015_08_01_01.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_03_world_2015_08_01_01.sql similarity index 100% rename from sql/updates/world/2015_10_31_03_world_2015_08_01_01.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_10_31_03_world_2015_08_01_01.sql diff --git a/sql/updates/world/2015_11_01_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_00_world.sql similarity index 100% rename from sql/updates/world/2015_11_01_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_00_world.sql diff --git a/sql/updates/world/2015_11_01_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_01_world.sql similarity index 100% rename from sql/updates/world/2015_11_01_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_01_world.sql diff --git a/sql/updates/world/2015_11_01_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_02_world.sql similarity index 100% rename from sql/updates/world/2015_11_01_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_02_world.sql diff --git a/sql/updates/world/2015_11_01_03_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_03_world.sql similarity index 100% rename from sql/updates/world/2015_11_01_03_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_03_world.sql diff --git a/sql/updates/world/2015_11_01_04_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_04_world.sql similarity index 100% rename from sql/updates/world/2015_11_01_04_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_01_04_world.sql diff --git a/sql/updates/world/2015_11_02_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_00_world.sql similarity index 100% rename from sql/updates/world/2015_11_02_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_00_world.sql diff --git a/sql/updates/world/2015_11_02_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_01_world.sql similarity index 100% rename from sql/updates/world/2015_11_02_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_02_01_world.sql diff --git a/sql/updates/world/2015_11_03_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_00_world.sql similarity index 100% rename from sql/updates/world/2015_11_03_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_00_world.sql diff --git a/sql/updates/world/2015_11_03_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_01_world.sql similarity index 100% rename from sql/updates/world/2015_11_03_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_01_world.sql diff --git a/sql/updates/world/2015_11_03_02_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_02_world.sql similarity index 100% rename from sql/updates/world/2015_11_03_02_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_03_02_world.sql diff --git a/sql/updates/world/2015_11_06_00_world_335.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_06_00_world_335.sql similarity index 100% rename from sql/updates/world/2015_11_06_00_world_335.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_06_00_world_335.sql diff --git a/sql/updates/world/2015_11_07_00_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_00_world.sql similarity index 100% rename from sql/updates/world/2015_11_07_00_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_00_world.sql diff --git a/sql/updates/world/2015_11_07_01_world.sql b/sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_01_world.sql similarity index 100% rename from sql/updates/world/2015_11_07_01_world.sql rename to sql/old/3.3.5a/world/59_2015_11_07/2015_11_07_01_world.sql diff --git a/sql/updates/auth/2015_11_07_00_auth.sql b/sql/updates/auth/2015_11_07_00_auth.sql new file mode 100644 index 0000000000..be8a4d21b6 --- /dev/null +++ b/sql/updates/auth/2015_11_07_00_auth.sql @@ -0,0 +1 @@ +UPDATE `updates` SET `state`='ARCHIVED'; diff --git a/sql/updates/characters/2015_11_07_00_characters.sql b/sql/updates/characters/2015_11_07_00_characters.sql new file mode 100644 index 0000000000..be8a4d21b6 --- /dev/null +++ b/sql/updates/characters/2015_11_07_00_characters.sql @@ -0,0 +1 @@ +UPDATE `updates` SET `state`='ARCHIVED'; diff --git a/sql/updates/world/2015_11_07_02_world.sql b/sql/updates/world/2015_11_07_02_world.sql new file mode 100644 index 0000000000..3e23e0e629 --- /dev/null +++ b/sql/updates/world/2015_11_07_02_world.sql @@ -0,0 +1,3 @@ +UPDATE `version` SET `db_version`='TDB 335.60', `cache_id`=60 LIMIT 1; + +UPDATE `updates` SET `state`='ARCHIVED'; From ff9001ce1da5160ef5dc245a822693f12dc9ddff Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 7 Nov 2015 11:21:58 +0100 Subject: [PATCH 299/524] Updated url for tc wiki (cherry picked from commit 6d01960448d3d2f53cd532acafb707e517e23dd5) --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- src/server/database/Database/DatabaseLoader.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 660825c9d8..4baa119796 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,7 +62,7 @@ Requirements ============ -Software requirements are available in the [wiki](http://collab.kpsn.org/display/tc/Requirements) for +Software requirements are available in the [wiki](http://www.trinitycore.info/display/tc/Requirements) for Windows, Linux and Mac OSX. If you choose Linux, we recommend to use Debian 8, since it's the Linux that we use to test compilations. diff --git a/README.md b/README.md index 0c9199e8c7..066249f062 100644 --- a/README.md +++ b/README.md @@ -29,13 +29,13 @@ website at [TrinityCore.org](http://www.trinitycore.org). ## Requirements -Software requirements are available in the [wiki](http://collab.kpsn.org/display/tc/Requirements) for +Software requirements are available in the [wiki](http://www.trinitycore.info/display/tc/Requirements) for Windows, Linux and Mac OSX. ## Install -Detailed installation guides are available in the [wiki](http://collab.kpsn.org/display/tc/Installation+Guide) for +Detailed installation guides are available in the [wiki](http://www.trinitycore.info/display/tc/Installation+Guide) for Windows, Linux and Mac OSX. diff --git a/src/server/database/Database/DatabaseLoader.cpp b/src/server/database/Database/DatabaseLoader.cpp index a3e2083fff..69e212cf7e 100644 --- a/src/server/database/Database/DatabaseLoader.cpp +++ b/src/server/database/Database/DatabaseLoader.cpp @@ -66,7 +66,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool& pool, std::st if (error) { TC_LOG_ERROR("sql.driver", "\nDatabasePool %s NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile " - "for specific errors. Read wiki at http://collab.kpsn.org/display/tc/TrinityCore+Home", name.c_str()); + "for specific errors. Read wiki at http://www.trinitycore.info/display/tc/TrinityCore+Home", name.c_str()); return false; } From 7d5e7102cdd407846fa340892df39ea49938ee69 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 7 Nov 2015 20:01:35 +0100 Subject: [PATCH 300/524] Core: Whitespace cleanup --- src/common/Debugging/Errors.h | 2 +- src/server/game/AI/SmartScripts/SmartScript.h | 6 +++--- src/server/game/Entities/Creature/Creature.cpp | 4 ++-- src/server/game/Entities/Object/Object.cpp | 2 +- src/server/game/OutdoorPvP/OutdoorPvP.h | 4 ++-- src/server/game/Skills/SkillExtraItems.cpp | 4 ++-- src/server/game/Spells/SpellHistory.h | 2 +- src/server/scripts/Commands/cs_cast.cpp | 6 +++--- .../Northrend/Naxxramas/boss_anubrekhan.cpp | 6 +++--- .../scripts/Northrend/Naxxramas/boss_heigan.cpp | 4 ++-- .../scripts/Northrend/Naxxramas/boss_noth.cpp | 10 +++++----- src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp | 2 +- .../ShatteredHalls/shattered_halls.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 14 +++++++------- .../scripts/Outland/zone_hellfire_peninsula.cpp | 10 +++++----- src/server/shared/Dynamic/TypeContainer.h | 6 +++--- 16 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/common/Debugging/Errors.h b/src/common/Debugging/Errors.h index edf56b2913..3ceaf2c328 100644 --- a/src/common/Debugging/Errors.h +++ b/src/common/Debugging/Errors.h @@ -29,7 +29,7 @@ namespace Trinity DECLSPEC_NORETURN void Fatal(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; DECLSPEC_NORETURN void Error(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; - + DECLSPEC_NORETURN void Abort(char const* file, int line, char const* function) ATTR_NORETURN; void Warning(char const* file, int line, char const* function, char const* message); diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 96aa1f735f..6f9046520b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -246,10 +246,10 @@ class SmartScript DecPhase(abs(p)); } - void DecPhase(int32 p = 1) - { + void DecPhase(int32 p = 1) + { if(mEventPhase > (uint32)p) - mEventPhase -= (uint32)p; + mEventPhase -= (uint32)p; else mEventPhase = 0; } diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 6a994d6185..4765a87f9a 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1411,11 +1411,11 @@ bool Creature::CanStartAttack(Unit const* who, bool force) const return false; // This set of checks is should be done only for creatures - if ((HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) // flag is valid only for non player characters + if ((HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) // flag is valid only for non player characters || (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) && who->GetTypeId() == TYPEID_PLAYER) // immune to PC and target is a player, return false || (who->GetOwner() && who->GetOwner()->GetTypeId() == TYPEID_PLAYER && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))) // player pets are immune to pc as well return false; - + // Do not attack non-combat pets if (who->GetTypeId() == TYPEID_UNIT && who->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET) return false; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index e4d9e61bca..afb987f198 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1863,7 +1863,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert summon = new Minion(properties, summoner, false); break; } - + if (!summon->Create(GenerateLowGuid(), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId)) { delete summon; diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h index b35147a850..4a423a8da5 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.h +++ b/src/server/game/OutdoorPvP/OutdoorPvP.h @@ -308,12 +308,12 @@ class OutdoorPvP : public ZoneScript template void BroadcastWorker(Worker& _worker, uint32 zoneId); - + // Hack to store map because this code is just shit void SetMapFromZone(uint32 zone); std::map m_GoScriptStore; std::map m_CreatureScriptStore; - + Map* m_map; }; diff --git a/src/server/game/Skills/SkillExtraItems.cpp b/src/server/game/Skills/SkillExtraItems.cpp index 2c9a2a7bcf..50e00b2413 100644 --- a/src/server/game/Skills/SkillExtraItems.cpp +++ b/src/server/game/Skills/SkillExtraItems.cpp @@ -210,7 +210,7 @@ bool CanCreatePerfectItem(Player* player, uint32 spellId, float &perfectCreateCh // lack of entry means no perfection proc possible if (!thisEntry) return false; - + // if you don't have the spell needed, then no procs for you if (!player->HasSpell(thisEntry->requiredSpecialization)) return false; @@ -218,7 +218,7 @@ bool CanCreatePerfectItem(Player* player, uint32 spellId, float &perfectCreateCh // set values as appropriate perfectCreateChance = thisEntry->perfectCreateChance; perfectItemType = thisEntry->perfectItemType; - + // and tell the caller to start rolling the dice return true; } diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h index 572f407da9..6a1da28f08 100644 --- a/src/server/game/Spells/SpellHistory.h +++ b/src/server/game/Spells/SpellHistory.h @@ -122,7 +122,7 @@ public: CooldownStorageType::size_type GetCooldownsSizeForPacket() const { return _spellCooldowns.size(); } void SaveCooldownStateBeforeDuel(); void RestoreCooldownStateAfterDuel(); - + private: Player* GetPlayerOwner() const; void SendClearCooldowns(std::vector const& cooldowns) const; diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp index f45e73b7c5..5252d5e368 100644 --- a/src/server/scripts/Commands/cs_cast.cpp +++ b/src/server/scripts/Commands/cs_cast.cpp @@ -120,7 +120,7 @@ public: uint32 spellId = handler->extractSpellIdFromLink((char*)args); if (!spellId) return false; - + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; @@ -218,7 +218,7 @@ public: uint32 spellId = handler->extractSpellIdFromLink((char*)args); if (!spellId) return false; - + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; @@ -251,7 +251,7 @@ public: uint32 spellId = handler->extractSpellIdFromLink((char*)args); if (!spellId) return false; - + if (!CheckSpellExistsAndIsValid(handler, spellId)) return false; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 471a7adc9d..47569a6b85 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -116,7 +116,7 @@ public: void JustSummoned(Creature* summon) override { BossAI::JustSummoned(summon); - + if (me->IsInCombat()) if (summon->GetEntry() == NPC_CRYPT_GUARD) summon->AI()->Talk(EMOTE_SPAWN, me); @@ -160,7 +160,7 @@ public: Talk(SAY_AGGRO); summons.DoZoneInCombat(); - + events.SetPhase(PHASE_NORMAL); events.ScheduleEvent(EVENT_IMPALE, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_NORMAL); events.ScheduleEvent(EVENT_SCARABS, urand(20 * IN_MILLISECONDS, 30 * IN_MILLISECONDS), 0, PHASE_NORMAL); @@ -209,7 +209,7 @@ public: Talk(EMOTE_LOCUST); DoCast(me, SPELL_LOCUST_SWARM); events.ScheduleEvent(EVENT_SPAWN_GUARD, 3 * IN_MILLISECONDS); - + events.ScheduleEvent(EVENT_LOCUST_ENDS, RAID_MODE(19, 23) * IN_MILLISECONDS); events.ScheduleEvent(EVENT_LOCUST, 90000); events.SetPhase(PHASE_SWARM); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index 5248c48029..36e48d068b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -103,7 +103,7 @@ public: { _EnterCombat(); Talk(SAY_AGGRO); - + eruptSection = 3; events.ScheduleEvent(EVENT_DISRUPT, urand(15 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_FIGHT); events.ScheduleEvent(EVENT_FEVER, urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS), 0, PHASE_FIGHT); @@ -182,7 +182,7 @@ public: private: uint32 eruptSection; bool eruptDirection; - + bool safetyDance; // is achievement still possible? (= no player deaths yet) }; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index f6dc75c7b3..106661b70b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -178,7 +178,7 @@ public: return; if (damage < me->GetHealth()) return; - + me->SetHealth(1u); damage = 0u; } @@ -226,7 +226,7 @@ public: case EVENT_WARRIOR: Talk(SAY_SUMMON); Talk(EMOTE_SUMMON); - + CastSummon(RAID_MODE(2, 3), 0, 0); events.ScheduleEvent(EVENT_WARRIOR, 40 * IN_MILLISECONDS, 0, PHASE_GROUND); @@ -291,7 +291,7 @@ public: break; case EVENT_GROUND: ++balconyCount; - + DoCastAOE(SPELL_TELEPORT_BACK); Talk(EMOTE_TELEPORT_2); @@ -308,7 +308,7 @@ public: { /* workaround for movechase breaking after blinking without this noth would just stand there unless his current target moves */ - if (justBlinked && me->GetVictim() && !me->IsWithinMeleeRange(me->EnsureVictim())) + if (justBlinked && me->GetVictim() && !me->IsWithinMeleeRange(me->EnsureVictim())) { me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(me->EnsureVictim()); @@ -321,7 +321,7 @@ public: private: uint32 balconyCount; - + bool justBlinked; uint32 _SummonWarriorSpells[N_WARRIOR_SPELLS]; diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp index 9224817b69..89f35457a4 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp @@ -75,7 +75,7 @@ void OPvPCapturePointEP_EWT::ChangeState() auto bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_capturePointSpawnId); for (auto itr = bounds.first; itr != bounds.second; ++itr) itr->second->SetGoArtKit(artkit); - + bounds = map->GetGameObjectBySpawnIdStore().equal_range(m_Objects[EP_EWT_FLAGS]); for (auto itr = bounds.first; itr != bounds.second; ++itr) itr->second->SetGoArtKit(artkit); diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp index 500b0ae4bc..f47e191c11 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp @@ -82,7 +82,7 @@ class boss_shattered_executioner : public CreatureScript void Reset() override { _Reset(); - + // _Reset() resets the loot mode, so we add them again, if any uint32 prisonersExecuted = instance->GetData(DATA_PRISONERS_EXECUTED); if (prisonersExecuted == 0) diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 0dc75ff8ef..872269fd19 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -297,7 +297,7 @@ const float CAPERNIAN_DISTANCE = 20.0f; //she casts away fro Position const afGravityPos = {795.0f, 0.0f, 70.0f}; -Position const TransitionPos[6] = +Position const TransitionPos[6] = { // First two values are not static, they seem to differ on each sniff. { 794.0522f, -0.96732f, 48.97848f, 0.0f }, @@ -869,7 +869,7 @@ class boss_thaladred_the_darkener : public CreatureScript public: boss_thaladred_the_darkener() : CreatureScript("boss_thaladred_the_darkener") { } - + struct boss_thaladred_the_darkenerAI : public advisorbase_ai { boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature) @@ -963,7 +963,7 @@ class boss_lord_sanguinar : public CreatureScript public: boss_lord_sanguinar() : CreatureScript("boss_lord_sanguinar") { } - + struct boss_lord_sanguinarAI : public advisorbase_ai { boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature) @@ -1027,7 +1027,7 @@ class boss_grand_astromancer_capernian : public CreatureScript public: boss_grand_astromancer_capernian() : CreatureScript("boss_grand_astromancer_capernian") { } - + struct boss_grand_astromancer_capernianAI : public advisorbase_ai { boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature) @@ -1307,7 +1307,7 @@ class npc_phoenix_tk : public CreatureScript public: npc_phoenix_tk() : CreatureScript("npc_phoenix_tk") { } - + struct npc_phoenix_tkAI : public ScriptedAI { npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature) @@ -1366,7 +1366,7 @@ class npc_phoenix_egg_tk : public CreatureScript public: npc_phoenix_egg_tk() : CreatureScript("npc_phoenix_egg_tk") { } - + struct npc_phoenix_egg_tkAI : public ScriptedAI { npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature) @@ -1464,7 +1464,7 @@ class spell_kael_gravity_lapse : public SpellScriptLoader { OnEffectHitTarget += SpellEffectFn(spell_kael_gravity_lapse_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } - + private: uint8 _targetCount; }; diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index fcfa77bc2e..0a9f8640ad 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -483,7 +483,7 @@ class npc_barada : public CreatureScript { public: npc_barada() : CreatureScript("npc_barada") { } - + struct npc_baradaAI : public ScriptedAI { npc_baradaAI(Creature* creature) : ScriptedAI(creature) @@ -779,7 +779,7 @@ public: me->SetCanFly(true); me->SetSpeed(MOVE_RUN, 0.2f); - + me->SetFacingTo(3.207566f); me->GetMotionMaster()->MoveJump(exorcismPos[2], 2.0f, 2.0f); @@ -860,14 +860,14 @@ public: } } } - + private: EventMap events; SummonList summons; - + uint8 circleRounds; uint8 point; - + bool wpreached; }; diff --git a/src/server/shared/Dynamic/TypeContainer.h b/src/server/shared/Dynamic/TypeContainer.h index b68dec00da..7addf8028b 100644 --- a/src/server/shared/Dynamic/TypeContainer.h +++ b/src/server/shared/Dynamic/TypeContainer.h @@ -47,7 +47,7 @@ template<> struct ContainerMapList /* nothing is in type null */ { }; -template +template struct ContainerMapList > { ContainerMapList _elements; @@ -105,7 +105,7 @@ class TypeMapContainer template size_t Count() const { return Trinity::Count(i_elements, (SPECIFIC_TYPE*)NULL); } /// inserts a specific object into the container - template + template bool insert(SPECIFIC_TYPE *obj) { SPECIFIC_TYPE* t = Trinity::Insert(i_elements, obj); @@ -113,7 +113,7 @@ class TypeMapContainer } /// Removes the object from the container, and returns the removed object - //template + //template //bool remove(SPECIFIC_TYPE* obj) //{ // SPECIFIC_TYPE* t = Trinity::Remove(i_elements, obj); From 3b1db7a514c1385aed5e472ef4c498803fae51c1 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Wed, 28 Oct 2015 18:05:30 +0100 Subject: [PATCH 301/524] Scripts/DuelReset: - do not reset when duel is fled - minor improvement to SpellHistory::RestoreCooldonStateAfter duel method --- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Spells/SpellHistory.cpp | 12 +++++++----- src/server/scripts/World/duel_reset.cpp | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1eda4dc636..46222daf86 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1946,7 +1946,7 @@ class Player : public Unit, public GridObject uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const; void SetHonorPoints(uint32 value); void SetArenaPoints(uint32 value); - + // duel health and mana reset methods void SaveHealthBeforeDuel() { healthBeforeDuel = GetHealth(); } void SaveManaBeforeDuel() { manaBeforeDuel = GetPower(POWER_MANA); } diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index c76c454564..c822e8961b 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -652,15 +652,17 @@ void SpellHistory::RestoreCooldownStateAfterDuel() SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); if (spellInfo->RecoveryTime > 10 * MINUTE * IN_MILLISECONDS || - spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS) + spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS) _spellCooldownsBeforeDuel[itr->first] = _spellCooldowns[itr->first]; } - //check for spell with onHold active before and during the duel + + // check for spell with onHold active before and during the duel for (auto itr = _spellCooldownsBeforeDuel.begin(); itr != _spellCooldownsBeforeDuel.end(); ++itr) { - if (!itr->second.OnHold) - if (!_spellCooldowns[itr->first].OnHold) - _spellCooldowns[itr->first] = _spellCooldownsBeforeDuel[itr->first]; + if (!itr->second.OnHold && + _spellCooldowns.find(itr->first) != _spellCooldowns.end() && + !_spellCooldowns[itr->first].OnHold) + _spellCooldowns[itr->first] = _spellCooldownsBeforeDuel[itr->first]; } // update the client: restore old cooldowns diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp index 593906074c..ae98c0eb4a 100644 --- a/src/server/scripts/World/duel_reset.cpp +++ b/src/server/scripts/World/duel_reset.cpp @@ -66,8 +66,8 @@ class DuelResetScript : public PlayerScript // Called when a duel ends void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType type) override { - // do not reset anything if DUEL_INTERRUPTED - if (type != DUEL_INTERRUPTED) + // do not reset anything if DUEL_INTERRUPTED or DUEL_FLED + if (type == DUEL_WON) { // Cooldown restore if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) @@ -96,7 +96,7 @@ class DuelResetScript : public PlayerScript } } } - + void ResetSpellCooldowns(Player* player, bool removeActivePetCooldowns) { // remove cooldowns on spells that have < 10 min CD and has no onHold From 29feae5901c049ef2204d956e83cf20507bed37a Mon Sep 17 00:00:00 2001 From: treeston Date: Tue, 15 Sep 2015 02:19:26 +0200 Subject: [PATCH 302/524] Scripts/Naxxramas: Complete rewrite of the Thaddius encounter. --- sql/updates/world/2015_10_PR15523_world.sql | 93 ++ .../Northrend/Naxxramas/boss_thaddius.cpp | 1441 ++++++++++++----- .../Naxxramas/instance_naxxramas.cpp | 38 +- .../scripts/Northrend/Naxxramas/naxxramas.h | 9 +- 4 files changed, 1196 insertions(+), 385 deletions(-) create mode 100644 sql/updates/world/2015_10_PR15523_world.sql diff --git a/sql/updates/world/2015_10_PR15523_world.sql b/sql/updates/world/2015_10_PR15523_world.sql new file mode 100644 index 0000000000..c08ebda247 --- /dev/null +++ b/sql/updates/world/2015_10_PR15523_world.sql @@ -0,0 +1,93 @@ +-- creature (2 entries) +SET @CGUID = 49818; +-- gameobject (2 entries) +SET @OGUID = 5747; + +-- ensure spell data for difficulties is there +DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (28134,28135,28167); +INSERT INTO `spelldifficulty_dbc` (`id`,`spellid0`,`spellid1`,`spellid2`,`spellid3`) VALUES +(28134,54529,28134,0,0), -- Stalagg - Power Surge (yes, these are supposed to be backwards) +(28135,28135,54528,0,0), -- Feugen - Static Field +(28167,28167,54531,0,0); -- Thaddius - Chain Lightning + +-- magnetic pull +DELETE FROM `spell_scripts` WHERE `id`=54517; +DELETE FROM `spell_script_names` WHERE `spell_id`=54517; +INSERT INTO `spell_script_names` (`spell_id`,`scriptname`) VALUES (54517,"spell_thaddius_magnetic_pull"); + +-- thaddius +UPDATE `creature_template` set `unit_flags`=64 WHERE `entry`=15928; +UPDATE `creature` set `MovementType`=0 WHERE `id`=15928; + +-- tesla coil +UPDATE `creature_template` set `inhabittype`=4,`unit_flags`=33554688,`unit_flags2`=2048,`ScriptName`="npc_tesla",`MovementType`=0,`flags_extra`=0 WHERE `entry`=16218; +DELETE FROM `creature_addon` WHERE `guid` IN (select `guid` from `creature` WHERE `id` = 16218); +DELETE FROM `creature` WHERE `id` = 16218; +INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`movementtype`,`VerifiedBuild`) VALUES +(@CGUID+0,16218,533,3,1,3527.807,-2952.382,319.3258,3.909538,0,0,0,0), +(@CGUID+1,16218,533,3,1,3487.762,-2911.198,319.4061,3.909538,0,0,0,0); +INSERT INTO `creature_addon` (`guid`,`auras`) VALUES +(@CGUID+0,28109), +(@CGUID+1,28097); + +-- tesla coil search trigger range (index 30 is 500 yards) +UPDATE `spell_dbc` set `EffectRadiusIndex1`=30, `AttributesEx2`=0 WHERE `Id` IN (28098,28110); +-- tesla coil search ignores LoS +DELETE FROM `disables` WHERE `sourceType`=0 AND `entry` IN (28096,28098,28110,28111); +INSERT INTO `disables` (`sourceType`,`entry`,`flags`,`comment`) VALUES +(0,28098,64,"Stalagg Tesla Periodic - Ignore LoS"), +(0,28096,64,"Stalagg Tesla Visual - Ignore LoS"), +(0,28110,64,"Feugen Tesla Periodic - Ignore LoS"), +(0,28111,64,"Feugen Tesla Visual - Ignore LoS"); +-- tesla coil shock visual needs implicit target +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (28096,28111,28159); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`Comment`) VALUES +(13,1,28096,0,0,31,0,3,15929,0,0,"Stalagg Chain Visual - Target Stalagg"), +(13,1,28111,0,0,31,0,3,15930,0,0,"Feugen Chain Visual - Target Feugen"), +(13,1,28159,0,0,31,0,3,15928,0,0,"Thaddius Shock Visual - Target Thaddius"); + +-- tesla coil visual +DELETE FROM `gameobject` WHERE `id` IN (181477,181478); +INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`VerifiedBuild`) VALUES +(@OGUID+0,181477,533,3,1,3527.94,-2952.263,318.8983,3.141593,0,0,-1,0,0,0), +(@OGUID+1,181478,533,3,1,3487.324,-2911.383,318.8983,3.141593,0,0,-1,0,0,0); + +-- polarity shift scripts +DELETE FROM `spell_scripts` WHERE `id` IN (28059,28062,28084,28085,28089,29659,29660); +DELETE FROM `spell_script_names` WHERE `spell_id` IN (28059,28062,28084,28085,28089,29659,29660); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(28062,"spell_thaddius_polarity_charge"), +(28085,"spell_thaddius_polarity_charge"), +(28089,"spell_thaddius_polarity_shift"); + +-- shocking! achievement +DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (7604,7605); +INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) VALUES +(7604,11,0,0,"achievement_thaddius_shocking"), +(7604,12,0,0,""), +(7605,11,0,0,"achievement_thaddius_shocking"), +(7605,12,1,0,""); + +-- move 20% trigger rate for "killed target" texts from script to DB +UPDATE `creature_text` set `probability`=20 WHERE `entry`=15929 AND `groupid`=1; +UPDATE `creature_text` set `probability`=20 WHERE `entry`=15930 AND `groupid`=1; +UPDATE `creature_text` set `probability`=20 WHERE `entry`=15928 AND `groupid`=2; + +-- add missing creature_text entries for thaddius, feugen, stalagg and tesla coil +DELETE FROM `creature_text` WHERE `entry`=15928 AND `groupid`=6; +DELETE FROM `creature_text` WHERE `entry` IN (15929,15930) AND `groupid` IN (3,4); +DELETE FROM `creature_text` WHERE `entry`=16218; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(15928,6,0,"The polarity has shifted!",41,100,32324,3,"Thaddius EMOTE_POLARITY_SHIFTED"), +(15929,3,0,"%s dies.",16,100,10453,3,"Stalagg EMOTE_FEIGN_DEATH"), +(15930,3,0,"%s dies.",16,100,10453,3,"Feugen EMOTE_FEIGN_DEATH"), +(15929,4,0,"%s is jolted back to life!",16,100,12155,3,"Stalagg EMOTE_FEIGN_REVIVE"), +(15930,4,0,"%s is jolted back to life!",16,100,12155,3,"Feugen EMOTE_FEIGN_REVIVE"), +(16218,0,0,"%s loses its link!",41,100,12156,3,"Tesla Coil EMOTE_TESLA_LINK_BREAKS"), +(16218,1,0,"%s overloads!",41,100,12178,3,"Tesla Coil EMOTE_TESLA_OVERLOAD"); + + +-- trigger when entering thaddius' room +DELETE FROM `areatrigger_scripts` WHERE `entry`=4113; +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(4113,"at_thaddius_entrance"); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index d74fd5a03f..1563765eb4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -19,48 +19,104 @@ #include "ScriptedCreature.h" #include "SpellScript.h" #include "Player.h" +#include "ObjectGuid.h" #include "naxxramas.h" -//Stalagg -enum StalaggYells + +enum Phases { - SAY_STAL_AGGRO = 0, - SAY_STAL_SLAY = 1, - SAY_STAL_DEATH = 2 + PHASE_NOT_ENGAGED = 1, + PHASE_PETS, + PHASE_TRANSITION, + PHASE_THADDIUS, + PHASE_RESETTING }; -enum StalagSpells +enum AIActions { - SPELL_POWERSURGE = 28134, - SPELL_MAGNETIC_PULL = 28338, - SPELL_STALAGG_TESLA = 28097 + ACTION_RESET_ENCOUNTER_TIMER = -1, // sent from instance AI + ACTION_BEGIN_RESET_ENCOUNTER = 0, // sent from thaddius to pets to trigger despawn and encounter reset + ACTION_RESET_ENCOUNTER, // sent from thaddius to pets to trigger respawn and full reset + ACTION_FEUGEN_DIED, // sent from respective pet to thaddius to indicate death + ACTION_STALAGG_DIED, // ^ + ACTION_FEUGEN_RESET, // pet to thaddius + ACTION_STALAGG_RESET, // ^ + ACTION_FEUGEN_AGGRO, // pet to thaddius on combat start + ACTION_STALAGG_AGGRO, // ^ + ACTION_FEUGEN_REVIVING_FX, // thaddius to pet when pet reports its death + ACTION_STALAGG_REVIVING_FX, // ^ + ACTION_FEUGEN_REVIVED, // thaddius to pet when pet should revive + ACTION_STALAGG_REVIVED, // ^ + ACTION_TRANSITION, // thaddius to pets when transition starts (coil overload anim) + ACTION_TRANSITION_2, // thaddius to pets to make the coils shock him + ACTION_TRANSITION_3, // thaddius to pets to disable coil GO after spawn + + ACTION_POLARITY_CROSSED // triggers achievement failure, sent from spellscript }; -//Feugen -enum FeugenYells +enum Events { - SAY_FEUG_AGGRO = 0, - SAY_FEUG_SLAY = 1, - SAY_FEUG_DEATH = 2 + EVENT_SHIFT = 1, // polarity shift + EVENT_SHIFT_TALK, // polarity shift yell (hack? couldn't find any event for cast finish) + EVENT_CHAIN, // chain lightning + EVENT_BERSERK, // enrage timer + EVENT_REVIVE_FEUGEN, // timer until feugen is revived (if stalagg still lives) + EVENT_REVIVE_STALAGG, // timer until stalagg is revived (if feugen still lives) + EVENT_TRANSITION_1, // timer until overload emote + EVENT_TRANSITION_2, // timer until thaddius gets zapped by the coils + EVENT_TRANSITION_3, // timer until thaddius engages + EVENT_ENABLE_BALL_LIGHTNING // grace period after thaddius aggro after which he starts being a baller (e.g. tossing ball lightning at out of range targets) }; -enum FeugenSpells +enum Misc { - SPELL_STATICFIELD = 28135, - SPELL_FEUGEN_TESLA = 28109 + MAX_POLARITY_10M = 5, + MAX_POLARITY_25M = 13, + + DATA_POLARITY_CROSSED = 1, }; -// Thaddius DoAction -enum ThaddiusActions +// Feugen & Stalagg +enum PetYells { - ACTION_FEUGEN_RESET, - ACTION_FEUGEN_DIED, - ACTION_STALAGG_RESET, - ACTION_STALAGG_DIED + SAY_STALAGG_AGGRO = 0, + SAY_STALAGG_SLAY = 1, + SAY_STALAGG_DEATH = 2, + + SAY_FEUGEN_AGGRO = 0, + SAY_FEUGEN_SLAY = 1, + SAY_FEUGEN_DEATH = 2, + + EMOTE_FEIGN_DEATH = 3, + EMOTE_FEIGN_REVIVE = 4, + + EMOTE_TESLA_LINK_BREAKS = 0, + EMOTE_TESLA_OVERLOAD = 1 +}; + +enum PetSpells +{ + SPELL_STALAGG_POWERSURGE = 28134, + //SPELL_STALAGG_TESLA = 28097, + SPELL_STALAGG_TESLA_PERIODIC = 28098, + SPELL_STALAGG_CHAIN_VISUAL = 28096, + + SPELL_FEUGEN_STATICFIELD = 28135, + //SPELL_FEUGEN_TESLA = 28109, + SPELL_FEUGEN_TESLA_PERIODIC = 28110, + SPELL_FEUGEN_CHAIN_VISUAL = 28111, + + SPELL_MAGNETIC_PULL = 54517, + SPELL_MAGNETIC_PULL_EFFECT = 28337, + + SPELL_TESLA_SHOCK = 28099 +}; + +enum PetMisc +{ + OVERLOAD_DISTANCE = 28 }; -//generic -#define C_TESLA_COIL 16218 //the coils (emotes "Tesla Coil overloads!") //Thaddius enum ThaddiusYells @@ -70,34 +126,31 @@ enum ThaddiusYells SAY_SLAY = 2, SAY_ELECT = 3, SAY_DEATH = 4, - SAY_SCREAM = 5 + SAY_SCREAM = 5, + + EMOTE_POLARITY_SHIFTED = 6 }; enum ThaddiusSpells { - SPELL_POLARITY_SHIFT = 28089, - SPELL_BALL_LIGHTNING = 28299, - SPELL_CHAIN_LIGHTNING = 28167, - SPELL_BERSERK = 27680, - SPELL_POSITIVE_CHARGE = 28062, - SPELL_POSITIVE_CHARGE_STACK = 29659, - SPELL_NEGATIVE_CHARGE = 28085, - SPELL_NEGATIVE_CHARGE_STACK = 29660, - SPELL_POSITIVE_POLARITY = 28059, - SPELL_NEGATIVE_POLARITY = 28084, -}; + SPELL_THADDIUS_INACTIVE_VISUAL = 28160, + SPELL_THADDIUS_SPARK_VISUAL = 28136, + SPELL_SHOCK_VISUAL = 28159, -enum Events -{ - EVENT_NONE, - EVENT_SHIFT, - EVENT_CHAIN, - EVENT_BERSERK, -}; + SPELL_BALL_LIGHTNING = 28299, + SPELL_CHAIN_LIGHTNING = 28167, + SPELL_BERSERK = 27680, -enum Achievement -{ - DATA_POLARITY_SWITCH = 76047605, + // polarity handling + SPELL_POLARITY_SHIFT = 28089, + + SPELL_POSITIVE_CHARGE_APPLY = 28059, + SPELL_POSITIVE_CHARGE_TICK = 28062, + SPELL_POSITIVE_CHARGE_AMP = 29659, + + SPELL_NEGATIVE_CHARGE_APPLY = 28084, + SPELL_NEGATIVE_CHARGE_TICK = 28085, + SPELL_NEGATIVE_CHARGE_AMP = 29660, }; class boss_thaddius : public CreatureScript @@ -112,166 +165,271 @@ public: struct boss_thaddiusAI : public BossAI { - boss_thaddiusAI(Creature* creature) : BossAI(creature, BOSS_THADDIUS) - { - // init is a bit tricky because thaddius shall track the life of both adds, but not if there was a wipe - // and, in particular, if there was a crash after both adds were killed (should not respawn) - - // Moreover, the adds may not yet be spawn. So just track down the status if mob is spawn - // and each mob will send its status at reset (meaning that it is alive) - checkFeugenAlive = false; - if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) - checkFeugenAlive = pFeugen->IsAlive(); - - checkStalaggAlive = false; - if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) - checkStalaggAlive = pStalagg->IsAlive(); - - if (!checkFeugenAlive && !checkStalaggAlive) + public: + boss_thaddiusAI(Creature* creature) : BossAI(creature, BOSS_THADDIUS), stalaggAlive(true), feugenAlive(true), ballLightningEnabled(false), shockingEligibility(true) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); - me->SetReactState(REACT_AGGRESSIVE); - } - else - { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); - me->SetReactState(REACT_PASSIVE); + if (instance->GetBossState(BOSS_THADDIUS) != DONE) + { + events.SetPhase(PHASE_NOT_ENGAGED); + SetCombatMovement(false); + + BeginResetEncounter(); // initialize everything properly, and ensure that the coils are loaded by the time we initialize + } } - polaritySwitch = false; - uiAddsTimer = 0; - } - - bool checkStalaggAlive; - bool checkFeugenAlive; - bool polaritySwitch; - uint32 uiAddsTimer; - - void KilledUnit(Unit* /*victim*/) override - { - if (!(rand32() % 5)) - Talk(SAY_SLAY); - } - - void JustDied(Unit* /*killer*/) override - { - _JustDied(); - Talk(SAY_DEATH); - } - - void DoAction(int32 action) override - { - switch (action) + void KilledUnit(Unit* victim) override { - case ACTION_FEUGEN_RESET: - checkFeugenAlive = true; - break; - case ACTION_FEUGEN_DIED: - checkFeugenAlive = false; - break; - case ACTION_STALAGG_RESET: - checkStalaggAlive = true; - break; - case ACTION_STALAGG_DIED: - checkStalaggAlive = false; - break; + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); } - if (!checkFeugenAlive && !checkStalaggAlive) + void Reset() override { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); - // REACT_AGGRESSIVE only reset when he takes damage. - DoZoneInCombat(); + if(events.IsInPhase(PHASE_TRANSITION) || events.IsInPhase(PHASE_THADDIUS)) + BeginResetEncounter(); } - else + + void JustDied(Unit* /*killer*/) override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); - me->SetReactState(REACT_PASSIVE); + _JustDied(); + me->setActive(false); + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->setActive(false); + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->setActive(false); + Talk(SAY_DEATH); } - } - void EnterCombat(Unit* /*who*/) override - { - _EnterCombat(); - Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SHIFT, 30000); - events.ScheduleEvent(EVENT_CHAIN, urand(10000, 20000)); - events.ScheduleEvent(EVENT_BERSERK, 360000); - } - - void DamageTaken(Unit* /*pDoneBy*/, uint32 & /*uiDamage*/) override - { - me->SetReactState(REACT_AGGRESSIVE); - } - - void SetData(uint32 id, uint32 data) override - { - if (id == DATA_POLARITY_SWITCH) - polaritySwitch = data ? true : false; - } - - uint32 GetData(uint32 id) const override - { - if (id != DATA_POLARITY_SWITCH) - return 0; - - return uint32(polaritySwitch); - } - - void UpdateAI(uint32 diff) override - { - if (checkFeugenAlive && checkStalaggAlive) - uiAddsTimer = 0; - - if (checkStalaggAlive != checkFeugenAlive) + void DoAction(int32 action) override { - uiAddsTimer += diff; - if (uiAddsTimer > 5000) + switch (action) { - if (!checkStalaggAlive) + case ACTION_RESET_ENCOUNTER_TIMER: + if (events.IsInPhase(PHASE_RESETTING)) + ResetEncounter(); + break; + case ACTION_FEUGEN_RESET: + case ACTION_STALAGG_RESET: + if (!events.IsInPhase(PHASE_NOT_ENGAGED) && !events.IsInPhase(PHASE_RESETTING)) + BeginResetEncounter(); + break; + case ACTION_FEUGEN_AGGRO: + case ACTION_STALAGG_AGGRO: + if (events.IsInPhase(PHASE_RESETTING)) + return BeginResetEncounter(); + if (!events.IsInPhase(PHASE_NOT_ENGAGED)) + return; + events.SetPhase(PHASE_PETS); + + shockingEligibility = true; + + if (!instance->CheckRequiredBosses(BOSS_THADDIUS)) + return BeginResetEncounter(); + instance->SetBossState(BOSS_THADDIUS, IN_PROGRESS); + + me->setActive(true); + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->setActive(true); + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->setActive(true); + break; + case ACTION_FEUGEN_DIED: + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->AI()->DoAction(ACTION_FEUGEN_REVIVING_FX); + feugenAlive = false; + if (stalaggAlive) + events.ScheduleEvent(EVENT_REVIVE_FEUGEN, 5 * IN_MILLISECONDS, 0, PHASE_PETS); + else + Transition(); + + break; + case ACTION_STALAGG_DIED: + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->AI()->DoAction(ACTION_STALAGG_REVIVING_FX); + stalaggAlive = false; + if (feugenAlive) + events.ScheduleEvent(EVENT_REVIVE_STALAGG, 5 * IN_MILLISECONDS, 0, PHASE_PETS); + else + Transition(); + + break; + + case ACTION_POLARITY_CROSSED: + shockingEligibility = false; + break; + default: + break; + } + } + + uint32 GetData(uint32 id) const override + { + return (id == DATA_POLARITY_CROSSED && shockingEligibility) ? 1u : 0u; + } + + void Transition() // initiate transition between pet phase and thaddius phase + { + events.SetPhase(PHASE_TRANSITION); + + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + + events.ScheduleEvent(EVENT_TRANSITION_1, 10 * IN_MILLISECONDS, 0, PHASE_TRANSITION); + events.ScheduleEvent(EVENT_TRANSITION_2, 12 * IN_MILLISECONDS, 0, PHASE_TRANSITION); + events.ScheduleEvent(EVENT_TRANSITION_3, 14 * IN_MILLISECONDS, 0, PHASE_TRANSITION); + } + + void BeginResetEncounter() + { + if (!me->IsAlive()) + return; + if (events.IsInPhase(PHASE_RESETTING)) + return; + + instance->ProcessEvent(me, EVENT_THADDIUS_BEGIN_RESET); + + instance->SetBossState(BOSS_THADDIUS, NOT_STARTED); + + // remove polarity shift debuffs on reset + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_POSITIVE_CHARGE_APPLY); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_NEGATIVE_CHARGE_APPLY); + + me->DespawnOrUnsummon(); + + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); + events.SetPhase(PHASE_RESETTING); + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER); + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER); + + me->setActive(false); + } + + void ResetEncounter() + { + events.SetPhase(PHASE_NOT_ENGAGED); + feugenAlive = true; + stalaggAlive = true; + me->Respawn(true); + me->CastSpell(me, SPELL_THADDIUS_INACTIVE_VISUAL); + + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->AI()->DoAction(ACTION_RESET_ENCOUNTER); + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->AI()->DoAction(ACTION_RESET_ENCOUNTER); + _Reset(); + } + + void UpdateAI(uint32 diff) override + { + if (events.IsInPhase(PHASE_NOT_ENGAGED)) + return; + if (events.IsInPhase(PHASE_THADDIUS) && !UpdateVictim()) + return; + + events.Update(diff); + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) { - if (Creature* pStalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) - pStalagg->Respawn(); + case EVENT_REVIVE_FEUGEN: + feugenAlive = true; + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->AI()->DoAction(ACTION_FEUGEN_REVIVED); + break; + case EVENT_REVIVE_STALAGG: + stalaggAlive = true; + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->AI()->DoAction(ACTION_STALAGG_REVIVED); + break; + case EVENT_TRANSITION_1: // tesla coils overload + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->AI()->DoAction(ACTION_TRANSITION); + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->AI()->DoAction(ACTION_TRANSITION); + break; + case EVENT_TRANSITION_2: // tesla coils shock thaddius + me->CastSpell(me, SPELL_THADDIUS_SPARK_VISUAL, true); + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->AI()->DoAction(ACTION_TRANSITION_2); + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->AI()->DoAction(ACTION_TRANSITION_2); + break; + case EVENT_TRANSITION_3: // thaddius becomes active + me->CastSpell(me, SPELL_THADDIUS_SPARK_VISUAL, true); + ballLightningEnabled = false; + me->RemoveAura(SPELL_THADDIUS_INACTIVE_VISUAL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + + DoZoneInCombat(); + if (Unit* closest = SelectTarget(SELECT_TARGET_NEAREST, 0, 500.0f)) + AttackStart(closest); + else // if there is no nearest target, then there is no target, meaning we should reset + return BeginResetEncounter(); + + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + feugen->AI()->DoAction(ACTION_TRANSITION_3); + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + stalagg->AI()->DoAction(ACTION_TRANSITION_3); + + events.SetPhase(PHASE_THADDIUS); + + Talk(SAY_AGGRO); + + events.ScheduleEvent(EVENT_ENABLE_BALL_LIGHTNING, 5 * IN_MILLISECONDS, 0, PHASE_THADDIUS); + events.ScheduleEvent(EVENT_SHIFT, 10 * IN_MILLISECONDS, 0, PHASE_THADDIUS); + events.ScheduleEvent(EVENT_CHAIN, urand(10, 20) * IN_MILLISECONDS, 0, PHASE_THADDIUS); + events.ScheduleEvent(EVENT_BERSERK, 6 * MINUTE * IN_MILLISECONDS, 0, PHASE_THADDIUS); + + break; + case EVENT_ENABLE_BALL_LIGHTNING: + ballLightningEnabled = true; + break; + case EVENT_SHIFT: + me->CastStop(); // shift overrides all other spells + DoCastAOE(SPELL_POLARITY_SHIFT); + events.ScheduleEvent(EVENT_SHIFT_TALK, 3 * IN_MILLISECONDS, PHASE_THADDIUS); + events.ScheduleEvent(EVENT_SHIFT, 30 * IN_MILLISECONDS, PHASE_THADDIUS); + break; + case EVENT_SHIFT_TALK: + Talk(SAY_ELECT); + Talk(EMOTE_POLARITY_SHIFTED); + case EVENT_CHAIN: + if (me->FindCurrentSpellBySpellId(SPELL_POLARITY_SHIFT)) // delay until shift is over + events.ScheduleEvent(EVENT_CHAIN, 3 * IN_MILLISECONDS, 0, PHASE_THADDIUS); + else + { + me->CastStop(); + DoCastVictim(SPELL_CHAIN_LIGHTNING); + events.ScheduleEvent(EVENT_CHAIN, urand(10, 20) * IN_MILLISECONDS, PHASE_THADDIUS); + } + break; + case EVENT_BERSERK: + me->CastStop(); + DoCast(me, SPELL_BERSERK); + break; + default: + break; } + } + + if (events.IsInPhase(PHASE_THADDIUS)) + { + if (me->IsWithinMeleeRange(me->GetVictim())) + DoMeleeAttackIfReady(); else - { - if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) - pFeugen->Respawn(); - } + if (ballLightningEnabled) + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) + DoCast(target, SPELL_BALL_LIGHTNING); } } - if (!UpdateVictim()) - return; - - events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - while (uint32 eventId = events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_SHIFT: - DoCastAOE(SPELL_POLARITY_SHIFT); - events.ScheduleEvent(EVENT_SHIFT, 30000); - return; - case EVENT_CHAIN: - DoCastVictim(SPELL_CHAIN_LIGHTNING); - events.ScheduleEvent(EVENT_CHAIN, urand(10000, 20000)); - return; - case EVENT_BERSERK: - DoCast(me, SPELL_BERSERK); - return; - } - } - - if (events.GetTimer() > 15000 && !me->IsWithinMeleeRange(me->GetVictim())) - DoCastVictim(SPELL_BALL_LIGHTNING); - else - DoMeleeAttackIfReady(); - } + private: + bool stalaggAlive; + bool feugenAlive; + bool ballLightningEnabled; + bool shockingEligibility; }; }; @@ -288,88 +446,256 @@ public: struct npc_stalaggAI : public ScriptedAI { - npc_stalaggAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = creature->GetInstanceScript(); - } - - void Initialize() - { - powerSurgeTimer = urand(20000, 25000); - magneticPullTimer = 20000; - } - - InstanceScript* instance; - - uint32 powerSurgeTimer; - uint32 magneticPullTimer; - - void Reset() override - { - if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) - if (pThaddius->AI()) - pThaddius->AI()->DoAction(ACTION_STALAGG_RESET); - Initialize(); - } - - void KilledUnit(Unit* /*victim*/) override - { - if (!(rand32() % 5)) - Talk(SAY_STAL_SLAY); - } - - void EnterCombat(Unit* /*who*/) override - { - Talk(SAY_STAL_AGGRO); - DoCast(SPELL_STALAGG_TESLA); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_STAL_DEATH); - if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) - if (pThaddius->AI()) - pThaddius->AI()->DoAction(ACTION_STALAGG_DIED); - } - - void UpdateAI(uint32 uiDiff) override - { - if (!UpdateVictim()) - return; - - if (magneticPullTimer <= uiDiff) + public: + npc_stalaggAI(Creature* creature) : ScriptedAI(creature), _myCoil(ObjectGuid::Empty), _myCoilGO(ObjectGuid::Empty), isOverloading(false), refreshBeam(false), isFeignDeath(false) { - if (Creature* pFeugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + Initialize(); + instance = creature->GetInstanceScript(); + } + + void Initialize() + { + if (GameObject* coil = myCoilGO()) + coil->SetGoState(GO_STATE_ACTIVE); + + // if the encounter reset while feigning death + me->SetStandState(UNIT_STAND_STATE_STAND); + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + isOverloading = false; + isFeignDeath = false; + + // force tesla coil state refresh + refreshBeam = true; + + powerSurgeTimer = 10 * IN_MILLISECONDS; + } + + void Reset() override + { + if (isFeignDeath || !me->IsAlive()) + return; + if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) + thaddius->AI()->DoAction(ACTION_STALAGG_RESET); + } + + void BeginResetEncounter() + { + if (GameObject* coil = myCoilGO()) + coil->SetGoState(GO_STATE_READY); + me->DespawnOrUnsummon(); + me->setActive(false); + } + + void ResetEncounter() + { + me->Respawn(true); + Initialize(); + } + + void DoAction(int32 action) override + { + switch (action) { - Unit* pStalaggVictim = me->GetVictim(); - Unit* pFeugenVictim = pFeugen->GetVictim(); + case ACTION_BEGIN_RESET_ENCOUNTER: + BeginResetEncounter(); + break; + case ACTION_RESET_ENCOUNTER: + ResetEncounter(); + break; + case ACTION_STALAGG_REVIVING_FX: + break; + case ACTION_STALAGG_REVIVED: + if (!isFeignDeath) + break; - if (pFeugenVictim && pStalaggVictim) + me->SetFullHealth(); + me->SetStandState(UNIT_STAND_STATE_STAND); + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Talk(EMOTE_FEIGN_REVIVE); + isFeignDeath = false; + + refreshBeam = true; // force beam refresh + + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + if (feugen->GetVictim()) + { + me->AddThreat(feugen->EnsureVictim(), 0.0f); + me->SetInCombatWith(feugen->EnsureVictim()); + } + break; + case ACTION_TRANSITION: + me->Kill(me); // true death + me->DespawnOrUnsummon(); + + if (Creature* coil = myCoil()) + { + coil->CastStop(); + coil->AI()->Talk(EMOTE_TESLA_OVERLOAD); + } + break; + case ACTION_TRANSITION_2: + if (Creature* coil = myCoil()) + if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) + coil->CastSpell(thaddius, SPELL_SHOCK_VISUAL); + case ACTION_TRANSITION_3: + if (GameObject* coil = myCoilGO()) + coil->SetGoState(GO_STATE_READY); + break; + default: + break; + } + } + + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_STALAGG_SLAY); + } + + void EnterCombat(Unit* who) override + { + Talk(SAY_STALAGG_AGGRO); + + if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) + thaddius->AI()->DoAction(ACTION_STALAGG_AGGRO); + + if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) + if (!feugen->IsInCombat()) { - // magnetic pull is not working. So just jump. + feugen->AddThreat(who, 0.0f); + feugen->SetInCombatWith(who); + } + } - // reset aggro to be sure that feugen will not follow the jump - pFeugen->getThreatManager().modifyThreatPercent(pFeugenVictim, -100); - pFeugenVictim->JumpTo(me, 0.3f); + void DamageTaken(Unit* /*who*/, uint32& damage) override + { + if (damage < me->GetHealth()) + return; - me->getThreatManager().modifyThreatPercent(pStalaggVictim, -100); - pStalaggVictim->JumpTo(pFeugen, 0.3f); + if (isFeignDeath) // don't take damage while feigning death + { + damage = 0; + return; + } + + isFeignDeath = true; + isOverloading = false; + + Talk(EMOTE_FEIGN_DEATH); + if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) + thaddius->AI()->DoAction(ACTION_STALAGG_DIED); + + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveAllAuras(); + me->SetReactState(REACT_PASSIVE); + me->AttackStop(); + me->StopMoving(); + me->SetStandState(UNIT_STAND_STATE_DEAD); + + damage = 0; + + // force beam refresh as we just removed auras + refreshBeam = true; + } + + void SpellHit(Unit* caster, SpellInfo const* spell) override + { + if (!caster) + return; + if (spell->Id != SPELL_STALAGG_TESLA_PERIODIC) + return; + if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE)) + { + if (!isOverloading) + { + isOverloading = true; + caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + if (Creature* creatureCaster = caster->ToCreature()) + creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); + me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL); + } + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM)) + { + caster->CastStop(SPELL_TESLA_SHOCK); + caster->CastSpell(target, SPELL_TESLA_SHOCK,true); } } - - magneticPullTimer = 20000; + else if (isOverloading || refreshBeam) + { + isOverloading = false; + refreshBeam = false; + caster->CastStop(); + caster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true); + caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + } } - else magneticPullTimer -= uiDiff; - if (powerSurgeTimer <= uiDiff) + void UpdateAI(uint32 uiDiff) override { - DoCast(me, SPELL_POWERSURGE); - powerSurgeTimer = urand(15000, 20000); - } else powerSurgeTimer -= uiDiff; + if(!isFeignDeath) + if (!UpdateVictim()) + return; - DoMeleeAttackIfReady(); - } + if (powerSurgeTimer <= uiDiff) + { + if (isFeignDeath) // delay until potential revive + powerSurgeTimer = 0u; + else + { + DoCast(me, SPELL_STALAGG_POWERSURGE); + powerSurgeTimer = urand(25, 30) * IN_MILLISECONDS; + } + } + else + powerSurgeTimer -= uiDiff; + + if(!isFeignDeath) + DoMeleeAttackIfReady(); + } + + private: + Creature* myCoil() + { + Creature* coil = nullptr; + if (_myCoil) + coil = ObjectAccessor::GetCreature(*me, _myCoil); + if (!coil) + { + coil = me->FindNearestCreature(NPC_TESLA, 1000.0f, true); + if (coil) + { + _myCoil = coil->GetGUID(); + coil->SetReactState(REACT_PASSIVE); + } + } + return coil; + } + + GameObject* myCoilGO() + { + GameObject* coil = nullptr; + if (_myCoilGO) + coil = ObjectAccessor::GetGameObject(*me, _myCoilGO); + if (!coil) + { + coil = me->FindNearestGameObject(GO_CONS_NOX_TESLA_STALAGG, 1000.0f); + if (coil) + _myCoilGO = coil->GetGUID(); + } + return coil; + } + + InstanceScript* instance; + + uint32 powerSurgeTimer; + + ObjectGuid _myCoil; + ObjectGuid _myCoilGO; + bool isOverloading; + bool refreshBeam; + bool isFeignDeath; }; }; @@ -386,142 +712,380 @@ public: struct npc_feugenAI : public ScriptedAI { - npc_feugenAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - instance = creature->GetInstanceScript(); - } - - void Initialize() - { - staticFieldTimer = 5000; - } - - InstanceScript* instance; - - uint32 staticFieldTimer; - - void Reset() override - { - if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) - if (pThaddius->AI()) - pThaddius->AI()->DoAction(ACTION_FEUGEN_RESET); - Initialize(); - } - - void KilledUnit(Unit* /*victim*/) override - { - if (!(rand32() % 5)) - Talk(SAY_FEUG_SLAY); - } - - void EnterCombat(Unit* /*who*/) override - { - Talk(SAY_FEUG_AGGRO); - DoCast(SPELL_FEUGEN_TESLA); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_FEUG_DEATH); - if (Creature* pThaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) - if (pThaddius->AI()) - pThaddius->AI()->DoAction(ACTION_FEUGEN_DIED); - } - - void UpdateAI(uint32 uiDiff) override - { - if (!UpdateVictim()) - return; - - if (staticFieldTimer <= uiDiff) + public: + npc_feugenAI(Creature* creature) : ScriptedAI(creature), _myCoil(ObjectGuid::Empty), _myCoilGO(ObjectGuid::Empty), isOverloading(false), refreshBeam(false), isFeignDeath(false) { - DoCast(me, SPELL_STATICFIELD); - staticFieldTimer = 5000; - } else staticFieldTimer -= uiDiff; - - DoMeleeAttackIfReady(); - } - }; - -}; - -class spell_thaddius_pos_neg_charge : public SpellScriptLoader -{ - public: - spell_thaddius_pos_neg_charge() : SpellScriptLoader("spell_thaddius_pos_neg_charge") { } - - class spell_thaddius_pos_neg_charge_SpellScript : public SpellScript - { - PrepareSpellScript(spell_thaddius_pos_neg_charge_SpellScript); - - bool Validate(SpellInfo const* /*spell*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE)) - return false; - if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_STACK)) - return false; - if (!sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE)) - return false; - if (!sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_STACK)) - return false; - return true; + Initialize(); + instance = creature->GetInstanceScript(); } - bool Load() override + void Initialize() { - return GetCaster()->GetTypeId() == TYPEID_UNIT; + if (GameObject* coil = myCoilGO()) + coil->SetGoState(GO_STATE_ACTIVE); + + // if the encounter reset while feigning death + me->SetStandState(UNIT_STAND_STATE_STAND); + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + isOverloading = false; + isFeignDeath = false; + + // force coil state to refresh + refreshBeam = true; + + staticFieldTimer = 6 * IN_MILLISECONDS; + magneticPullTimer = 20 * IN_MILLISECONDS; } - void HandleTargets(std::list& targets) + void Reset() override { - uint8 count = 0; - for (std::list::iterator ihit = targets.begin(); ihit != targets.end(); ++ihit) - if ((*ihit)->GetGUID() != GetCaster()->GetGUID()) - if (Player* target = (*ihit)->ToPlayer()) - if (target->HasAura(GetTriggeringSpell()->Id)) - ++count; + if (isFeignDeath || !me->IsAlive()) + return; + if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) + thaddius->AI()->DoAction(ACTION_FEUGEN_RESET); + } - if (count) + void BeginResetEncounter() + { + if (GameObject* coil = myCoilGO()) + coil->SetGoState(GO_STATE_READY); + me->DespawnOrUnsummon(); + me->setActive(false); + } + + void ResetEncounter() + { + me->Respawn(true); + Initialize(); + } + + void DoAction(int32 action) override + { + switch (action) { - uint32 spellId = 0; + case ACTION_BEGIN_RESET_ENCOUNTER: + BeginResetEncounter(); + break; + case ACTION_RESET_ENCOUNTER: + ResetEncounter(); + break; + case ACTION_FEUGEN_REVIVING_FX: + break; + case ACTION_FEUGEN_REVIVED: + if (!isFeignDeath) + break; - if (GetSpellInfo()->Id == SPELL_POSITIVE_CHARGE) - spellId = SPELL_POSITIVE_CHARGE_STACK; - else // if (GetSpellInfo()->Id == SPELL_NEGATIVE_CHARGE) - spellId = SPELL_NEGATIVE_CHARGE_STACK; + me->SetFullHealth(); + me->SetStandState(UNIT_STAND_STATE_STAND); + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Talk(EMOTE_FEIGN_REVIVE); + isFeignDeath = false; + + refreshBeam = true; // force beam refresh - GetCaster()->SetAuraStack(spellId, GetCaster(), count); + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + if (stalagg->GetVictim()) + { + me->AddThreat(stalagg->EnsureVictim(), 0.0f); + me->SetInCombatWith(stalagg->EnsureVictim()); + } + staticFieldTimer = 6 * IN_MILLISECONDS; + magneticPullTimer = 30 * IN_MILLISECONDS; + break; + case ACTION_TRANSITION: + me->Kill(me); // true death this time around + me->DespawnOrUnsummon(); + + if (Creature* coil = myCoil()) + { + coil->CastStop(); + coil->AI()->Talk(EMOTE_TESLA_OVERLOAD); + } + break; + case ACTION_TRANSITION_2: + if (Creature* coil = myCoil()) + if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) + coil->CastSpell(thaddius, SPELL_SHOCK_VISUAL); + case ACTION_TRANSITION_3: + if (GameObject* coil = myCoilGO()) + coil->SetGoState(GO_STATE_READY); + default: + break; } } - void HandleDamage(SpellEffIndex /*effIndex*/) + void KilledUnit(Unit* victim) override + { + if(victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_FEUGEN_SLAY); + } + + void EnterCombat(Unit* who) override + { + Talk(SAY_FEUGEN_AGGRO); + + if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) + thaddius->AI()->DoAction(ACTION_STALAGG_AGGRO); + + if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) + if (!stalagg->IsInCombat()) + { + stalagg->AddThreat(who, 0.0f); + stalagg->SetInCombatWith(who); + } + } + + void DamageTaken(Unit* /*who*/, uint32& damage) override + { + if (damage < me->GetHealth()) + return; + + if (isFeignDeath) // don't take damage while feigning death + { + damage = 0; + return; + } + + isFeignDeath = true; + isOverloading = false; + + Talk(EMOTE_FEIGN_DEATH); + if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) + thaddius->AI()->DoAction(ACTION_FEUGEN_DIED); + + me->RemoveAllAuras(); + me->SetReactState(REACT_PASSIVE); + me->AttackStop(); + me->StopMoving(); + me->SetStandState(UNIT_STAND_STATE_DEAD); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + + damage = 0; + + // force beam refresh as we just removed auras + refreshBeam = true; + } + + void SpellHit(Unit* caster, SpellInfo const* spell) override + { + if (!caster) + return; + if (spell->Id != SPELL_FEUGEN_TESLA_PERIODIC) + return; + if (!isFeignDeath && me->IsInCombat() && !me->GetHomePosition().IsInDist(me, OVERLOAD_DISTANCE)) + { + if (!isOverloading) + { + isOverloading = true; + caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + if (Creature* creatureCaster = caster->ToCreature()) + creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); + me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL); + } + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) + { + caster->CastStop(SPELL_TESLA_SHOCK); + caster->CastSpell(target, SPELL_TESLA_SHOCK,true); + } + } + else if (isOverloading || refreshBeam) + { + isOverloading = false; + refreshBeam = false; + caster->CastStop(); + caster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true); + caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + } + } + + void UpdateAI(uint32 uiDiff) override + { + if (isFeignDeath) + return; + if (!UpdateVictim()) + return; + + if (magneticPullTimer <= uiDiff) + { + DoCast(me, SPELL_MAGNETIC_PULL); + magneticPullTimer = 20 * IN_MILLISECONDS; + } + else magneticPullTimer -= uiDiff; + + if (staticFieldTimer <= uiDiff) + { + DoCast(me, SPELL_FEUGEN_STATICFIELD); + staticFieldTimer = 6 * IN_MILLISECONDS; + } + else staticFieldTimer -= uiDiff; + + DoMeleeAttackIfReady(); + } + + private: + Creature* myCoil() + { + Creature* coil = nullptr; + if (_myCoil) + coil = ObjectAccessor::GetCreature(*me, _myCoil); + if (!coil) + { + coil = me->FindNearestCreature(NPC_TESLA, 1000.0f, true); + if (coil) + { + _myCoil = coil->GetGUID(); + coil->SetReactState(REACT_PASSIVE); + } + } + return coil; + } + + GameObject* myCoilGO() + { + GameObject* coil = nullptr; + if (_myCoilGO) + coil = ObjectAccessor::GetGameObject(*me, _myCoilGO); + if (!coil) + { + coil = me->FindNearestGameObject(GO_CONS_NOX_TESLA_FEUGEN, 1000.0f); + if (coil) + _myCoilGO = coil->GetGUID(); + } + return coil; + } + InstanceScript* instance; + + uint32 magneticPullTimer; + uint32 staticFieldTimer; + + ObjectGuid _myCoil; + ObjectGuid _myCoilGO; + + bool isOverloading; + bool refreshBeam; + bool isFeignDeath; + }; +}; + +class npc_tesla : public CreatureScript +{ +public: + npc_tesla() : CreatureScript("npc_tesla") { } + + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI(creature); + } + + struct npc_teslaAI : public ScriptedAI + { + public: + npc_teslaAI(Creature* creature) : ScriptedAI(creature) { } + void EnterEvadeMode() override { } // never stop casting due to evade + void UpdateAI(uint32 /*diff*/) override { } // never do anything unless told + void EnterCombat(Unit* /*who*/) override { } + void DamageTaken(Unit* /*who*/, uint32& damage) { damage = 0; } // no, you can't kill it + }; +}; + +class spell_thaddius_polarity_charge : public SpellScriptLoader +{ + public: + spell_thaddius_polarity_charge() : SpellScriptLoader("spell_thaddius_polarity_charge") { } + + class spell_thaddius_polarity_charge_SpellScript : public SpellScript + { + PrepareSpellScript(spell_thaddius_polarity_charge_SpellScript); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ( + sSpellMgr->GetSpellInfo(SPELL_POLARITY_SHIFT) && + sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_APPLY) && + sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_TICK) && + sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_AMP) && + sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_APPLY) && + sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_TICK) && + sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_AMP) + ); + } + + void HandleTargets(std::list& targetList) { if (!GetTriggeringSpell()) return; - Unit* target = GetHitUnit(); - Unit* caster = GetCaster(); - - if (target->HasAura(GetTriggeringSpell()->Id)) - SetHitDamage(0); - else + uint32 triggeringId = GetTriggeringSpell()->Id; + uint32 ampId = 0u; + switch (triggeringId) { - if (target->GetTypeId() == TYPEID_PLAYER && caster->IsAIEnabled) - caster->ToCreature()->AI()->SetData(DATA_POLARITY_SWITCH, 1); + case SPELL_POSITIVE_CHARGE_APPLY: + ampId = SPELL_POSITIVE_CHARGE_AMP; + break; + case SPELL_NEGATIVE_CHARGE_APPLY: + ampId = SPELL_NEGATIVE_CHARGE_AMP; + break; + default: + return; + } + + uint8 maxStacks = 0; + if (GetCaster()) + switch (GetCaster()->GetMap()->GetDifficulty()) + { + case RAID_DIFFICULTY_10MAN_NORMAL: + maxStacks = MAX_POLARITY_10M; + break; + case RAID_DIFFICULTY_25MAN_NORMAL: + maxStacks = MAX_POLARITY_25M; + break; + default: + break; + } + + uint8 stacksCount = 1; // do we get a stack for our own debuff? + std::list::iterator it = targetList.begin(); + while(it != targetList.end()) + { + if ((*it)->GetTypeId() != TYPEID_PLAYER) + { + it = targetList.erase(it); + continue; + } + if ((*it)->ToPlayer()->HasAura(triggeringId)) + { + it = targetList.erase(it); + if (stacksCount < maxStacks) + stacksCount++; + continue; + } + + // this guy will get hit - achievement failure trigger + if (Creature* thaddius = (*it)->FindNearestCreature(NPC_THADDIUS,200.0f)) + thaddius->AI()->DoAction(ACTION_POLARITY_CROSSED); + + ++it; + } + + if (GetCaster() && GetCaster()->ToPlayer()) + { + if (!GetCaster()->ToPlayer()->HasAura(ampId)) + GetCaster()->ToPlayer()->AddAura(ampId, GetCaster()); + GetCaster()->ToPlayer()->SetAuraStack(ampId, GetCaster(), stacksCount); } } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_thaddius_polarity_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); } }; SpellScript* GetSpellScript() const override { - return new spell_thaddius_pos_neg_charge_SpellScript(); + return new spell_thaddius_polarity_charge_SpellScript; } }; @@ -536,16 +1100,33 @@ class spell_thaddius_polarity_shift : public SpellScriptLoader bool Validate(SpellInfo const* /*spell*/) override { - if (!sSpellMgr->GetSpellInfo(SPELL_POSITIVE_POLARITY) || !sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_POLARITY)) - return false; - return true; + return ( + sSpellMgr->GetSpellInfo(SPELL_POLARITY_SHIFT) && + sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_APPLY) && + sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_TICK) && + sSpellMgr->GetSpellInfo(SPELL_POSITIVE_CHARGE_AMP) && + sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_APPLY) && + sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_TICK) && + sSpellMgr->GetSpellInfo(SPELL_NEGATIVE_CHARGE_AMP) + ); } - void HandleDummy(SpellEffIndex /* effIndex */) + void HandleDummy(SpellEffIndex /*effIndex*/) { - Unit* caster = GetCaster(); if (Unit* target = GetHitUnit()) - target->CastSpell(target, roll_chance_i(50) ? SPELL_POSITIVE_POLARITY : SPELL_NEGATIVE_POLARITY, true, NULL, NULL, caster->GetGUID()); + if (target->GetTypeId() == TYPEID_PLAYER) + { + if (roll_chance_i(50)) + { // positive + target->CastSpell(target, SPELL_POSITIVE_CHARGE_APPLY, true); + target->RemoveAura(SPELL_POSITIVE_CHARGE_AMP); + } + else + { // negative + target->CastSpell(target, SPELL_NEGATIVE_CHARGE_APPLY, true); + target->RemoveAura(SPELL_NEGATIVE_CHARGE_AMP); + } + } } void Register() override @@ -560,23 +1141,131 @@ class spell_thaddius_polarity_shift : public SpellScriptLoader } }; -class achievement_polarity_switch : public AchievementCriteriaScript +class spell_thaddius_magnetic_pull : public SpellScriptLoader { public: - achievement_polarity_switch() : AchievementCriteriaScript("achievement_polarity_switch") { } + spell_thaddius_magnetic_pull() : SpellScriptLoader("spell_thaddius_magnetic_pull") { }; + + class spell_thaddius_magnetic_pull_SpellScript : public SpellScript + { + PrepareSpellScript(spell_thaddius_magnetic_pull_SpellScript); + + bool Validate(SpellInfo const* /*spell*/) override + { + return sSpellMgr->GetSpellInfo(SPELL_MAGNETIC_PULL) ? true : false; + } + + void HandleCast() // only feugen ever casts this according to wowhead data + { + Unit* feugen = GetCaster(); + if (!feugen || feugen->GetEntry() != NPC_FEUGEN) + return; + + Unit* stalagg = ObjectAccessor::GetCreature(*feugen, feugen->GetInstanceScript()->GetGuidData(DATA_STALAGG)); + if (!stalagg) + return; + + Unit* feugenTank = feugen->GetVictim(); + Unit* stalaggTank = stalagg->GetVictim(); + + if (!feugenTank || !stalaggTank) + return; + + ThreatManager& feugenThreat = feugen->getThreatManager(); + ThreatManager& stalaggThreat = stalagg->getThreatManager(); + + if (feugenTank == stalaggTank) // special behavior if the tanks are the same (taken from retail) + { + float feugenTankThreat = feugenThreat.getThreat(feugenTank); + float stalaggTankThreat = stalaggThreat.getThreat(stalaggTank); + + feugenThreat.addThreat(feugenTank, stalaggTankThreat - feugenTankThreat); + stalaggThreat.addThreat(stalaggTank, feugenTankThreat - stalaggTankThreat); + + feugen->CastSpell(stalaggTank, SPELL_MAGNETIC_PULL_EFFECT, true); + } + else // normal case, two tanks + { + float feugenTankThreat = feugenThreat.getThreat(feugenTank); + float feugenOtherThreat = feugenThreat.getThreat(stalaggTank); + float stalaggTankThreat = stalaggThreat.getThreat(stalaggTank); + float stalaggOtherThreat = stalaggThreat.getThreat(feugenTank); + + // set the two entries in feugen's threat table to be equal to the ones in stalagg's + feugenThreat.addThreat(stalaggTank, stalaggTankThreat - feugenOtherThreat); + feugenThreat.addThreat(feugenTank, stalaggOtherThreat - feugenTankThreat); + + // set the two entries in stalagg's threat table to be equal to the ones in feugen's + stalaggThreat.addThreat(feugenTank, feugenTankThreat - stalaggOtherThreat); + stalaggThreat.addThreat(stalaggTank, feugenOtherThreat - stalaggTankThreat); + + // pull the two tanks across + feugenTank->CastSpell(stalaggTank, SPELL_MAGNETIC_PULL_EFFECT, true); + stalaggTank->CastSpell(feugenTank, SPELL_MAGNETIC_PULL_EFFECT, true); + + // and make both attack their respective new tanks + if (feugen->GetAI()) + feugen->GetAI()->AttackStart(stalaggTank); + if (stalagg->GetAI()) + stalagg->GetAI()->AttackStart(feugenTank); + } + } + + void Register() override + { + OnCast += SpellCastFn(spell_thaddius_magnetic_pull_SpellScript::HandleCast); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_thaddius_magnetic_pull_SpellScript(); + } +}; + +class at_thaddius_entrance : public AreaTriggerScript +{ + public: + at_thaddius_entrance() : AreaTriggerScript("at_thaddius_entrance") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + { + InstanceScript* instance = player->GetInstanceScript(); + if (!instance || instance->GetData(DATA_HAD_THADDIUS_GREET) || instance->GetBossState(BOSS_THADDIUS) == DONE) + return true; + + if (Creature* thaddius = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_THADDIUS))) + thaddius->AI()->Talk(SAY_GREET); + instance->SetData(DATA_HAD_THADDIUS_GREET, 1u); + + return true; + } +}; + +class achievement_thaddius_shocking : public AchievementCriteriaScript +{ + public: + achievement_thaddius_shocking() : AchievementCriteriaScript("achievement_thaddius_shocking") { } bool OnCheck(Player* /*source*/, Unit* target) override { - return target && target->GetAI()->GetData(DATA_POLARITY_SWITCH); + return target && target->GetAI() && target->GetAI()->GetData(DATA_POLARITY_CROSSED); } }; + void AddSC_boss_thaddius() { new boss_thaddius(); new npc_stalagg(); new npc_feugen(); - new spell_thaddius_pos_neg_charge(); + new npc_tesla(); + + new spell_thaddius_polarity_charge(); new spell_thaddius_polarity_shift(); - new achievement_polarity_switch(); + new spell_thaddius_magnetic_pull(); + + new at_thaddius_entrance(); + + new achievement_thaddius_shocking(); } diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 9b10fab2d6..60999d1d88 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -127,6 +127,7 @@ class instance_naxxramas : public InstanceMapScript AbominationCount = 0; hadAnubRekhanGreet = false; hadFaerlinaGreet = false; + hadThaddiusGreet = false; CurrentWingTaunt = SAY_KELTHUZAD_FIRST_WING_TAUNT; playerDied = 0; @@ -154,12 +155,12 @@ class instance_naxxramas : public InstanceMapScript case NPC_SIR: SirGUID = creature->GetGUID(); break; - case NPC_THADDIUS: - ThaddiusGUID = creature->GetGUID(); - break; case NPC_HEIGAN: HeiganGUID = creature->GetGUID(); break; + case NPC_THADDIUS: + ThaddiusGUID = creature->GetGUID(); + break; case NPC_FEUGEN: FeugenGUID = creature->GetGUID(); break; @@ -187,6 +188,18 @@ class instance_naxxramas : public InstanceMapScript AddMinion(creature, false); } + void ProcessEvent(WorldObject* source, uint32 eventId) override + { + switch (eventId) + { + case EVENT_THADDIUS_BEGIN_RESET: + if (!source->ToCreature() || source->ToCreature()->GetEntry() != NPC_THADDIUS) + return; + events.ScheduleEvent(EVENT_THADDIUS_RESET, 30 * IN_MILLISECONDS); + break; + } + } + void OnGameObjectCreate(GameObject* go) override { if (go->GetGOInfo()->displayId == 6785 || go->GetGOInfo()->displayId == 1287) @@ -329,6 +342,9 @@ class instance_naxxramas : public InstanceMapScript case DATA_HAD_FAERLINA_GREET: hadFaerlinaGreet = (value == 1u); break; + case DATA_HAD_THADDIUS_GREET: + hadThaddiusGreet = (value == 1u); + break; default: break; } @@ -341,9 +357,11 @@ class instance_naxxramas : public InstanceMapScript case DATA_ABOMINATION_KILLED: return AbominationCount; case DATA_HAD_ANUBREKHAN_GREET: - return (uint32)hadAnubRekhanGreet; + return hadAnubRekhanGreet ? 1u : 0u; case DATA_HAD_FAERLINA_GREET: - return (uint32)hadFaerlinaGreet; + return hadFaerlinaGreet ? 1u : 0u; + case DATA_HAD_THADDIUS_GREET: + return hadThaddiusGreet ? 1u : 0u; default: break; } @@ -367,14 +385,14 @@ class instance_naxxramas : public InstanceMapScript return BaronGUID; case DATA_SIR: return SirGUID; - case DATA_THADDIUS: - return ThaddiusGUID; case DATA_HEIGAN: return HeiganGUID; case DATA_FEUGEN: return FeugenGUID; case DATA_STALAGG: return StalaggGUID; + case DATA_THADDIUS: + return ThaddiusGUID; case DATA_KELTHUZAD: return KelthuzadGUID; case DATA_KELTHUZAD_PORTAL01: @@ -543,6 +561,11 @@ class instance_naxxramas : public InstanceMapScript kelthuzad->AI()->Talk(SAY_DIALOGUE_SAPPHIRON_KELTHUZAD4); HandleGameObject(KelthuzadDoorGUID, true); break; + case EVENT_THADDIUS_RESET: + if (GetBossState(BOSS_THADDIUS) != DONE) + if (Creature* thaddius = instance->GetCreature(ThaddiusGUID)) + thaddius->AI()->DoAction(-1); + break; default: break; } @@ -657,6 +680,7 @@ class instance_naxxramas : public InstanceMapScript uint8 AbominationCount; bool hadAnubRekhanGreet; bool hadFaerlinaGreet; + bool hadThaddiusGreet; uint8 CurrentWingTaunt; /* The Immortal / The Undying */ diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index 6289b70741..9c5a4afba9 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -47,8 +47,8 @@ enum Data DATA_GOTHIK_GATE, DATA_SAPPHIRON_BIRTH, DATA_HAD_ANUBREKHAN_GREET, - DATA_HAD_FAERLINA_GREET, + DATA_HAD_THADDIUS_GREET, DATA_HORSEMEN0, DATA_HORSEMEN1, @@ -91,10 +91,11 @@ enum CreaturesIds NPC_LADY = 16065, NPC_BARON = 30549, NPC_SIR = 16063, - NPC_THADDIUS = 15928, NPC_HEIGAN = 15936, + NPC_THADDIUS = 15928, NPC_FEUGEN = 15930, NPC_STALAGG = 15929, + NPC_TESLA = 16218, NPC_SAPPHIRON = 15989, NPC_KEL_THUZAD = 15990, NPC_CRYPT_GUARD = 16573, @@ -174,6 +175,10 @@ enum InstanceEvents EVENT_DIALOGUE_GOTHIK_KORTHAZZ2, EVENT_DIALOGUE_GOTHIK_RIVENDARE2, + // Thaddius AI requesting timed encounter respawn + EVENT_THADDIUS_BEGIN_RESET, + EVENT_THADDIUS_RESET, + // Dialogue that happens after each wing. EVENT_KELTHUZAD_WING_TAUNT, From ee161a0bfa9e17e8e4451918533d75e7fb627393 Mon Sep 17 00:00:00 2001 From: ariel- Date: Sun, 8 Nov 2015 15:13:07 -0300 Subject: [PATCH 303/524] Reload creature addons on UpdateEntry. --- src/server/game/Entities/Creature/Creature.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 4765a87f9a..6c48cfd650 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -440,6 +440,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/) ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); } + LoadCreaturesAddon(true); UpdateMovementFlags(); return true; } From 104053111f5f8ef1795698aaa9a81f5f6816445c Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 8 Nov 2015 19:02:20 +0000 Subject: [PATCH 304/524] DB/Event: Day of the Dead * spawn all event creatures and gos. Respawn creature spawns as some of these where found to be incorrect positions Spawn all the missing gos for this event. Ghostly cooking fires are meant to also require orange marigolds to be visible but atm is visible while event is active The spell 30628 http://www.wowhead.com/spell=30628/arcane-invisibility is not sniffed (in fact in sniff there appears to be no invisibility spell used on these npcs, this is the spell we was already using on these npcs but is not from sniff) Npcs/gos missing from stormwind as dont have valid sniff for those. --- sql/updates/world/2015_11_8_00_world.sql | 1550 ++++++++++++++++++++++ 1 file changed, 1550 insertions(+) create mode 100644 sql/updates/world/2015_11_8_00_world.sql diff --git a/sql/updates/world/2015_11_8_00_world.sql b/sql/updates/world/2015_11_8_00_world.sql new file mode 100644 index 0000000000..fea6f43bc6 --- /dev/null +++ b/sql/updates/world/2015_11_8_00_world.sql @@ -0,0 +1,1550 @@ +SET @OGUID := 78409; +SET @CGUID := 144843; + +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+566; +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, 195087, 571, 1, 1, 5851.9, 765.9167, 641.0652, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 4613) +(@OGUID+1, 195087, 1, 1, 1, 1181.967, -4466.106, 21.32664, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 4982) +(@OGUID+2, 195087, 0, 1, 1, 1803.686, 217.2379, 60.58969, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 1497) +(@OGUID+3, 195087, 530, 1, 1, 9410.952, -6840.467, 16.09267, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 3482) +(@OGUID+4, 195087, 530, 1, 1, -1790.766, 4923.897, -21.78506, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 0) +(@OGUID+5, 195087, 530, 1, 1, -4323.897, -12446.65, 17.0041, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 3524) +(@OGUID+6, 195087, 1, 1, 1, 10051.27, 2122.431, 1329.658, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 0) +(@OGUID+7, 180338, 1, 1, 1, -983.618, -70.35069, 20.84995, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+8, 195066, 1, 1, 1, -984.309, -72.32986, 20.99182, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5345) +(@OGUID+9, 195068, 1, 1, 1, -983.0087, -70.09549, 20.78351, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5345) +(@OGUID+10, 195087, 0, 1, 1, -5147.768, -856.9913, 508.4915, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 809) +(@OGUID+11, 195063, 571, 1, 1, 5848.714, 768.3906, 641.631, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613) +(@OGUID+12, 195063, 571, 1, 1, 5852.234, 767.9549, 641.103, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613) +(@OGUID+13, 195063, 571, 1, 1, 5849.202, 772.2066, 640.4767, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613) +(@OGUID+14, 195063, 571, 1, 1, 5857.072, 765.0121, 641.2158, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613) +(@OGUID+15, 195063, 571, 1, 1, 5850.005, 771.9219, 640.5843, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4613) +(@OGUID+16, 195063, 571, 1, 1, 5856.767, 766.2274, 641.33, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+17, 195063, 1, 1, 1, 1191.095, -4465.377, 21.48901, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982) +(@OGUID+18, 195063, 1, 1, 1, 1185.155, -4469.573, 21.33183, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982) +(@OGUID+19, 195063, 1, 1, 1, 1176.061, -4456.295, 21.52715, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982) +(@OGUID+20, 195063, 1, 1, 1, 1174.722, -4455.491, 21.53682, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982) +(@OGUID+21, 195063, 1, 1, 1, 1176.774, -4463.587, 22.47352, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982) +(@OGUID+22, 195063, 1, 1, 1, 1177.625, -4467.955, 21.30696, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 4982) +(@OGUID+23, 195063, 0, 1, 1, 1776.349, 223.1736, 59.50775, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497) +(@OGUID+24, 195063, 0, 1, 1, 1776.75, 250.7431, 59.88243, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497) +(@OGUID+25, 195063, 0, 1, 1, 1781.599, 252.3177, 59.52622, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497) +(@OGUID+26, 195063, 0, 1, 1, 1782.601, 260.5486, 59.42002, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497) +(@OGUID+27, 195063, 0, 1, 1, 1779.512, 268.9236, 59.89299, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 1497) +(@OGUID+28, 195063, 530, 1, 1, 9419.169, -6852.986, 14.97407, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482) +(@OGUID+29, 195063, 530, 1, 1, 9414.444, -6857.547, 14.74677, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482) +(@OGUID+30, 195063, 530, 1, 1, 9415.489, -6857.064, 14.79821, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482) +(@OGUID+31, 195063, 530, 1, 1, 9418.024, -6846.972, 15.29444, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482) +(@OGUID+32, 195063, 530, 1, 1, 9416.951, -6845.929, 15.41893, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3482) +(@OGUID+33, 195063, 530, 1, 1, -1836.826, 4923.663, -21.17379, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+34, 195063, 530, 1, 1, -1815.741, 4911.45, -21.24386, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+35, 180340, 530, 1, 1, -1830.755, 4918.104, -18.9403, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+36, 195063, 530, 1, 1, -1791.418, 4919.373, -21.02562, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+37, 195063, 530, 1, 1, -1791.957, 4916.519, -21.02558, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+38, 195063, 530, 1, 1, -1783.134, 4926.91, -21.13906, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+39, 195063, 530, 1, 1, -1790.319, 4921.727, -21.08779, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+40, 195063, 530, 1, 1, -4310.884, -12445.17, 17.40245, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524) +(@OGUID+41, 195063, 530, 1, 1, -4325.502, -12449.76, 16.71575, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524) +(@OGUID+42, 195063, 530, 1, 1, -4318.972, -12441.63, 18.41204, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524) +(@OGUID+43, 195063, 530, 1, 1, -4315.609, -12442.86, 17.24089, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524) +(@OGUID+44, 195063, 530, 1, 1, -4323.721, -12439.26, 17.49479, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 3524) +(@OGUID+45, 195063, 1, 1, 1, 10050.31, 2118.57, 1330.741, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+46, 195063, 1, 1, 1, 10055.02, 2111.276, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+47, 195063, 1, 1, 1, 10046.66, 2110.08, 1329.649, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+48, 195063, 1, 1, 1, 10066.38, 2120.483, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+49, 195063, 1, 1, 1, 10063.6, 2112.158, 1329.656, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 0) +(@OGUID+50, 195069, 1, 1, 1, -979.8663, -71.9184, 20.70171, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195069 (Area: 5345) +(@OGUID+51, 180338, 1, 1, 1, -984.8542, -76.17361, 20.92023, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+52, 180338, 1, 1, 1, -982.4827, -69.96007, 20.57871, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+53, 182807, 1, 1, 1, -980.7708, -79.82291, 20.13352, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5345) +(@OGUID+54, 195063, 1, 1, 1, -983.493, -72.63021, 20.66981, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345) +(@OGUID+55, 180338, 1, 1, 1, -982.8646, -68.86111, 23.79464, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+56, 195063, 1, 1, 1, -984.1493, -77.33334, 20.75268, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345) +(@OGUID+57, 195066, 1, 1, 1, -984.9132, -75.15972, 20.9375, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5345) +(@OGUID+58, 195069, 1, 1, 1, -980.3646, -72.38715, 20.70848, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 195069 (Area: 5345) +(@OGUID+59, 180338, 1, 1, 1, -983.3958, -69.59202, 23.80661, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+60, 180338, 1, 1, 1, -984.9861, -77.32639, 24.26638, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+61, 182807, 1, 1, 1, -984.7379, -73.1875, 20.9946, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5345) +(@OGUID+62, 195090, 1, 1, 1, -981.625, -66.97916, 20.97347, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 5345) +(@OGUID+63, 180338, 1, 1, 1, -984.9184, -73.05903, 23.8784, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+64, 180339, 1, 1, 1, -982.2309, -68.62674, 20.82022, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 5345) +(@OGUID+65, 195307, 1, 1, 1, -984.5347, -75.82813, 20.86416, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5345) +(@OGUID+66, 195063, 1, 1, 1, -982.1302, -68.07639, 20.88359, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345) +(@OGUID+67, 180338, 1, 1, 1, -980.5104, -79.84028, 20.08269, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+68, 195069, 1, 1, 1, -980.8941, -71.7934, 20.70992, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 195069 (Area: 5345) +(@OGUID+69, 195063, 0, 1, 1, -8443.87, 906.762, 99.3449, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5314) +(@OGUID+70, 195063, 0, 1, 1, -8445.61, 905.467, 99.4309, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5314) +(@OGUID+71, 195063, 0, 1, 1, -8467.02, 914.174, 98.4846, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5314) +(@OGUID+72, 195063, 0, 1, 1, -5149.59, -854.4288, 509.4989, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809) +(@OGUID+73, 195063, 0, 1, 1, -5160.054, -871.7535, 507.3147, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809) +(@OGUID+74, 195063, 0, 1, 1, -5149.858, -882.2344, 508.2253, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809) +(@OGUID+75, 195063, 0, 1, 1, -5162.099, -870.6007, 507.1854, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809) +(@OGUID+76, 195063, 0, 1, 1, -5161.04, -868.9688, 507.2333, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809) +(@OGUID+77, 195063, 0, 1, 1, -5158.944, -869.9549, 507.3573, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 809) +(@OGUID+78, 195069, 571, 1, 1, 5849.256, 767.816, 641.601, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4613) +(@OGUID+79, 195069, 571, 1, 1, 5848.229, 767.941, 641.6459, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4613) +(@OGUID+80, 195069, 571, 1, 1, 5848.76, 767.3472, 641.611, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4613) +(@OGUID+81, 195069, 1, 1, 1, 1176.29, -4464.037, 22.45014, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4982) +(@OGUID+82, 195069, 1, 1, 1, 1177.318, -4464.162, 22.46108, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4982) +(@OGUID+83, 195069, 1, 1, 1, 1176.819, -4464.63, 22.45066, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 4982) +(@OGUID+84, 195069, 0, 1, 1, 1806.354, 217.283, 61.54374, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 1497) +(@OGUID+85, 195069, 0, 1, 1, 1805.326, 217.408, 61.53273, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 1497) +(@OGUID+86, 195069, 0, 1, 1, 1805.856, 216.8142, 61.58862, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 1497) +(@OGUID+87, 195069, 530, 1, 1, 9411.333, -6838.778, 17.29001, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3482) +(@OGUID+88, 195069, 530, 1, 1, 9410.804, -6838.184, 17.31258, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3482) +(@OGUID+89, 195069, 530, 1, 1, 9411.832, -6838.309, 17.33341, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3482) +(@OGUID+90, 195069, 530, 1, 1, -1785.054, 4926.184, -21.13912, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0) +(@OGUID+91, 195069, 530, 1, 1, -1785.786, 4925.874, -21.13907, 0, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0) +(@OGUID+92, 195069, 530, 1, 1, -1788.583, 4923.905, -21.08776, 0, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0) +(@OGUID+93, 195069, 530, 1, 1, -1789.043, 4923.307, -21.08783, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0) +(@OGUID+94, 195069, 530, 1, 1, -4319.014, -12442.87, 18.41169, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3524) +(@OGUID+95, 195069, 530, 1, 1, -4318.516, -12442.4, 18.40369, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3524) +(@OGUID+96, 195069, 530, 1, 1, -4319.543, -12442.27, 18.39898, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 3524) +(@OGUID+97, 195069, 1, 1, 1, 10049.83, 2118.115, 1330.741, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0) +(@OGUID+98, 195069, 1, 1, 1, 10050.89, 2117.891, 1330.74, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0) +(@OGUID+99, 195069, 1, 1, 1, 10050.35, 2117.479, 1330.742, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 0) +(@OGUID+103, 195069, 0, 1, 1, -5149.047, -855.0035, 509.5043, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 809) +(@OGUID+104, 195069, 0, 1, 1, -5150.075, -854.8785, 509.4961, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 809) +(@OGUID+105, 195069, 0, 1, 1, -5149.545, -855.4722, 509.4695, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- Candy Skulls (Area: 809) +(@OGUID+106, 195307, 571, 1, 1, 5849.159, 767.4809, 641.5854, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 4613) +(@OGUID+107, 195307, 571, 1, 1, 5852.819, 768.2014, 642.1424, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 4613) +(@OGUID+108, 195307, 1, 1, 1, 1177.219, -4464.497, 22.45422, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 4982) +(@OGUID+109, 195307, 1, 1, 1, 1171.943, -4462.662, 21.31713, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 4982) +(@OGUID+110, 195307, 0, 1, 1, 1780.497, 269.0799, 59.82373, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 1497) +(@OGUID+111, 195307, 0, 1, 1, 1792.509, 241.7743, 60.58672, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 1497) +(@OGUID+112, 195307, 530, 1, 1, 9418.824, -6851.054, 15.01082, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3482) +(@OGUID+113, 195307, 530, 1, 1, 9416.861, -6847.479, 15.28504, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3482) +(@OGUID+114, 195307, 530, 1, 1, -1830.345, 4920.569, -21.52812, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0) +(@OGUID+115, 195307, 530, 1, 1, -1789.354, 4922.852, -21.08776, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0) +(@OGUID+116, 195307, 530, 1, 1, -1784.595, 4926.287, -21.1391, 0, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0) +(@OGUID+117, 195307, 530, 1, 1, -4310.455, -12444.99, 17.43356, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524) +(@OGUID+118, 195307, 530, 1, 1, -4320.196, -12452.81, 17.29529, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524) +(@OGUID+119, 195307, 530, 1, 1, -4319.519, -12455.02, 17.36685, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524) +(@OGUID+120, 195307, 530, 1, 1, -4319.094, -12442, 18.40238, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524) +(@OGUID+121, 195307, 530, 1, 1, -4324.972, -12449.45, 16.71002, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524) +(@OGUID+122, 195307, 530, 1, 1, -4322.378, -12439.06, 17.53725, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524) +(@OGUID+123, 195307, 530, 1, 1, -4324.618, -12440.14, 17.45538, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 3524) +(@OGUID+124, 195307, 1, 1, 1, 10054.24, 2129.033, 1329.658, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0) +(@OGUID+125, 195307, 1, 1, 1, 10054.64, 2131.958, 1329.658, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0) +(@OGUID+126, 195307, 1, 1, 1, 10053.82, 2127.783, 1329.666, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0) +(@OGUID+127, 195307, 1, 1, 1, 10062.81, 2129.417, 1329.658, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0) +(@OGUID+128, 195307, 1, 1, 1, 10049.72, 2113.115, 1329.65, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 0) +(@OGUID+129, 180761, 1, 1, 1, -981.087, -79.5799, 21.1868, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180761 (Area: 5345) +(@OGUID+130, 195087, 1, 1, 1, -979.1094, -77.90278, 19.64342, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 195087 (Area: 5345) +(@OGUID+131, 180338, 1, 1, 1, -980.6302, -80.09375, 22.98439, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+132, 195090, 1, 1, 1, -985.321, -76.3576, 21.0619, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 5345) +(@OGUID+133, 180338, 1, 1, 1, -979.757, -79.63021, 19.90928, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+134, 195063, 1, 1, 1, -980.2118, -80.25521, 20.06755, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345) +(@OGUID+135, 195066, 1, 1, 1, -984.632, -76.12153, 20.85417, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5345) +(@OGUID+136, 195067, 1, 1, 1, -980.892, -79.2656, 20.1022, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5345) +(@OGUID+137, 195068, 1, 1, 1, -984.6389, -76.13194, 20.85489, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5345) +(@OGUID+138, 180338, 1, 1, 1, -985.2778, -76.17535, 24.29876, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+139, 180338, 1, 1, 1, -979.6441, -81.02778, 22.9663, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+140, 180338, 1, 1, 1, -984.9375, -72.08681, 23.89491, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+141, 195307, 1, 1, 1, -979.9774, -71.34202, 20.71725, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5345) +(@OGUID+142, 180338, 1, 1, 1, -981.941, -69.09375, 20.54778, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+143, 180340, 1, 1, 1, -984.3177, -73.4566, 20.85332, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 5345) +(@OGUID+144, 195063, 1, 1, 1, -980.4097, -71.34375, 20.71852, 0, 0, 0, 0, 1, 120, 255, 1), -- 195063 (Area: 5345) +(@OGUID+145, 195066, 1, 1, 1, -983.0018, -70.08334, 20.78368, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5345) +(@OGUID+146, 195067, 1, 1, 1, -983.566, -73.32465, 20.6424, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5345) +(@OGUID+147, 195068, 1, 1, 1, -984.9202, -75.17188, 20.93883, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5345) +(@OGUID+148, 180338, 1, 1, 1, -985.4739, -75.02952, 21.10662, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5345) +(@OGUID+149, 180755, 0, 1, 1, -5162.04, -884.5504, 507.9172, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180755 (Area: 809) +(@OGUID+150, 180756, 0, 1, 1, -5166.146, -883.5208, 508.0248, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180756 (Area: 809) +(@OGUID+151, 180758, 1, 1, 1, 10055.21, 2131.847, 1330.38, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180758 (Area: 0) +(@OGUID+152, 180759, 1, 1, 1, 1184.212, -4470.561, 21.98507, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180759 (Area: 4982) +(@OGUID+153, 180760, 0, 1, 1, 1777.118, 219.349, 60.5295, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180760 (Area: 1497) +(@OGUID+154, 180762, 1, 1, 1, 1176.91, -4470.264, 22.60036, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180762 (Area: 4982) +(@OGUID+155, 182807, 0, 1, 1, 1780.764, 215.6111, 59.79877, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 1497) +(@OGUID+156, 182807, 530, 1, 1, 9672.116, -7346.438, 11.93114, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3487) +(@OGUID+157, 182807, 530, 1, 1, 9417.683, -6856.628, 14.86021, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3482) +(@OGUID+158, 182807, 530, 1, 1, 9418.266, -6855.799, 14.89146, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3482) +(@OGUID+159, 182807, 530, 1, 1, -1836.095, 4923.363, -21.24118, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0) +(@OGUID+160, 182807, 530, 1, 1, -1783.089, 4936.236, -22.63017, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0) +(@OGUID+161, 182807, 530, 1, 1, -1791.925, 4910.33, -21.34786, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0) +(@OGUID+162, 182807, 530, 1, 1, -4320.022, -12455.68, 17.30129, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524) +(@OGUID+163, 182807, 530, 1, 1, -4320.519, -12453.16, 17.25064, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524) +(@OGUID+164, 182807, 530, 1, 1, -4314.443, -12446.47, 17.27439, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524) +(@OGUID+165, 182807, 530, 1, 1, -4323.438, -12438.89, 17.51184, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524) +(@OGUID+166, 182807, 530, 1, 1, -4325.009, -12439.88, 17.46258, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524) +(@OGUID+167, 182807, 530, 1, 1, -4309.337, -12420.27, 17.54578, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 3524) +(@OGUID+168, 182807, 1, 1, 1, 10062.73, 2129.979, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0) +(@OGUID+169, 182807, 1, 1, 1, 10053.69, 2125.306, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0) +(@OGUID+170, 182807, 1, 1, 1, 10054.79, 2132.236, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0) +(@OGUID+171, 182807, 1, 1, 1, 10065.52, 2118.462, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0) +(@OGUID+172, 182807, 1, 1, 1, 10063.4, 2111.853, 1329.656, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 0) +(@OGUID+173, 182807, 0, 1, 1, -8448.64, 903.946, 99.5498, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5314) +(@OGUID+174, 182807, 0, 1, 1, -8453.51, 900.464, 99.7285, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5314) +(@OGUID+175, 182807, 0, 1, 1, -8456.34, 898.545, 99.7749, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5314) +(@OGUID+176, 182807, 0, 1, 1, -8462.6, 913.405, 98.7069, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 5314) +(@OGUID+177, 182807, 0, 1, 1, -5160.733, -871.283, 507.27, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 809) +(@OGUID+178, 182807, 0, 1, 1, -5161.266, -870.7344, 507.2331, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 809) +(@OGUID+179, 180338, 1, 1, 1, 1171.443, -4464.412, 24.96728, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+180, 182807, 571, 1, 1, 5855.949, 765.8055, 641.4308, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 4613) +(@OGUID+181, 182807, 1, 1, 1, 1184.024, -4469.832, 21.28517, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 4982) +(@OGUID+182, 182807, 1, 1, 1, 1174.358, -4455.34, 21.55141, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 4982) +(@OGUID+183, 195307, 0, 1, 1, -8440.75, 910.311, 99.4881, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314) +(@OGUID+184, 195307, 0, 1, 1, -8440.54, 900.953, 99.1201, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314) +(@OGUID+185, 195307, 0, 1, 1, -8442.21, 899.545, 100.222, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314) +(@OGUID+186, 195307, 0, 1, 1, -8460.03, 918.196, 99.1356, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314) +(@OGUID+187, 195307, 0, 1, 1, -8460.04, 918.201, 99.1337, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314) +(@OGUID+188, 195307, 0, 1, 1, -8460, 918.182, 99.133, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 5314) +(@OGUID+189, 195307, 0, 1, 1, -5160.804, -869.684, 507.2506, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 809) +(@OGUID+190, 195307, 0, 1, 1, -5159.658, -869.7083, 507.3152, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 195307 (Area: 809) +(@OGUID+191, 195090, 571, 1, 1, 5852.62, 768.3403, 642.1464, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 4613) +(@OGUID+192, 195090, 571, 1, 1, 5857.653, 765.75, 642.5522, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0) +(@OGUID+193, 195090, 1, 1, 1, 1184.344, -4469.792, 21.29567, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 4982) +(@OGUID+194, 195090, 1, 1, 1, 1171.813, -4463.702, 21.26314, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 4982) +(@OGUID+195, 195090, 0, 1, 1, 1777.444, 219.4965, 59.608, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 1497) +(@OGUID+196, 195090, 0, 1, 1, 1804.74, 215.4219, 65.87223, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 1497) +(@OGUID+197, 195090, 530, 1, 1, 9419.64, -6851.49, 14.99889, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3482) +(@OGUID+198, 195090, 530, 1, 1, 9406.932, -6839.236, 16.12153, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3482) +(@OGUID+199, 195090, 530, 1, 1, -1791.731, 4917.936, -21.02558, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0) +(@OGUID+200, 195090, 530, 1, 1, -1784.01, 4926.544, -21.13911, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0) +(@OGUID+201, 195090, 530, 1, 1, -1789.701, 4922.516, -21.0878, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0) +(@OGUID+202, 195090, 530, 1, 1, -4311.059, -12439.47, 17.12793, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3524) +(@OGUID+203, 195090, 530, 1, 1, -4325.021, -12437.49, 17.54514, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3524) +(@OGUID+204, 195090, 530, 1, 1, -4323.682, -12439.64, 17.47939, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 3524) +(@OGUID+205, 195090, 1, 1, 1, 10063.32, 2129.74, 1329.658, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0) +(@OGUID+206, 195090, 1, 1, 1, 10066.65, 2120.208, 1329.658, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0) +(@OGUID+207, 195090, 1, 1, 1, 10049.55, 2113.663, 1329.651, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0) +(@OGUID+208, 195090, 1, 1, 1, 10061, 2124.774, 1329.658, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 0) +(@OGUID+209, 182807, 0, 1, 1, 1780.181, 214.7813, 59.85345, 0, 0, 0, 0, 1, 120, 255, 1), -- 182807 (Area: 1497) +(@OGUID+210, 180339, 0, 1, 1, -5148.749, -848.9774, 510.0603, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 809) +(@OGUID+211, 180338, 0, 1, 1, -5160.168, -876.7604, 507.3247, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+212, 180338, 0, 1, 1, -5167.522, -868.3629, 506.5979, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+213, 180338, 0, 1, 1, -5164.054, -865.0399, 507.1024, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+214, 180338, 0, 1, 1, -5167.394, -872.684, 506.959, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+215, 180338, 0, 1, 1, -5156.068, -865.3837, 507.6269, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+216, 180338, 0, 1, 1, -5153.628, -869.4393, 508.0057, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+217, 180340, 0, 1, 1, -5146.814, -846.8055, 509.676, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+218, 180338, 0, 1, 1, -5159.741, -863.7969, 507.2404, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+219, 180338, 0, 1, 1, -5155.458, -873.7691, 507.8888, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+220, 180339, 0, 1, 1, -5166.297, -884.3802, 508.2979, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 809) +(@OGUID+221, 180340, 0, 1, 1, -5160.538, -885.4479, 508.2625, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 809) +(@OGUID+222, 180338, 0, 1, 1, -5170.338, -880.1614, 508.6569, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+223, 180338, 0, 1, 1, -5172.024, -874.8038, 508.3947, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+224, 180338, 0, 1, 1, -5165.082, -876.1962, 507.2279, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+225, 180340, 0, 1, 1, -5146.814, -846.8055, 509.676, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+226, 195090, 0, 1, 1, -8443.32, 905.976, 100.686, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 5314) +(@OGUID+227, 195090, 0, 1, 1, -5160.616, -870.092, 507.2644, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 809) +(@OGUID+228, 195090, 0, 1, 1, -5163.096, -880.0538, 507.2781, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 195090 (Area: 809) +(@OGUID+229, 195067, 571, 1, 1, 5854.465, 767.3403, 641.372, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 4613) +(@OGUID+230, 195067, 1, 1, 1, 1185.363, -4460.861, 21.102, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 4982) +(@OGUID+231, 195067, 1, 1, 1, 1175.465, -4455.316, 21.52186, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 4982) +(@OGUID+232, 195067, 1, 1, 1, 1179.267, -4468.452, 21.24715, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 4982) +(@OGUID+233, 195067, 0, 1, 1, 1778.847, 260.0729, 59.49801, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 1497) +(@OGUID+234, 195067, 530, 1, 1, 9419.522, -6850.597, 15.02395, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3482) +(@OGUID+235, 195067, 530, 1, 1, -1829.62, 4920.397, -21.57142, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0) +(@OGUID+236, 195067, 530, 1, 1, -1814.91, 4911.508, -21.3175, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0) +(@OGUID+237, 195067, 530, 1, 1, -1782.922, 4936.822, -22.65951, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0) +(@OGUID+238, 195067, 530, 1, 1, -4313.847, -12446.49, 17.29691, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524) +(@OGUID+239, 195067, 530, 1, 1, -4324.51, -12450.02, 16.69843, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524) +(@OGUID+240, 195067, 530, 1, 1, -4324.768, -12454.01, 16.80428, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524) +(@OGUID+241, 195067, 530, 1, 1, -4314.912, -12442.83, 17.23089, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524) +(@OGUID+242, 195067, 530, 1, 1, -4309.531, -12421.05, 17.52263, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 3524) +(@OGUID+243, 195067, 1, 1, 1, 10054.15, 2124.82, 1329.657, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0) +(@OGUID+244, 195067, 1, 1, 1, 10047.4, 2110.174, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0) +(@OGUID+245, 195067, 1, 1, 1, 10059.84, 2122.516, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 0) +(@OGUID+259, 195067, 0, 1, 1, -8457.63, 920.431, 98.7564, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5314) +(@OGUID+260, 195067, 0, 1, 1, -8454.19, 900.314, 99.721, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5314) +(@OGUID+261, 195067, 0, 1, 1, -8456.06, 899.118, 99.7615, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 5314) +(@OGUID+262, 195067, 0, 1, 1, -5161.686, -869.6702, 507.2025, 0, 0, 0, 0, 1, 120, 255, 1), -- 195067 (Area: 809) +(@OGUID+263, 195068, 571, 1, 1, 5856.616, 765.5434, 641.3311, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 4613) +(@OGUID+264, 195068, 571, 1, 1, 5851.963, 771.2986, 641.4988, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0) +(@OGUID+265, 195068, 1, 1, 1, 1180.125, -4457.483, 21.48894, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 4982) +(@OGUID+266, 195068, 1, 1, 1, 1186.068, -4471.153, 21.37074, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 4982) +(@OGUID+267, 195068, 1, 1, 1, 1172.283, -4463.252, 21.28665, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 4982) +(@OGUID+268, 195068, 0, 1, 1, 1777.313, 220.5382, 59.57676, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 1497) +(@OGUID+269, 195068, 0, 1, 1, 1780.137, 269.7587, 59.8725, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 1497) +(@OGUID+270, 195068, 530, 1, 1, 9418.647, -6849.45, 15.08854, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3482) +(@OGUID+271, 195068, 530, 1, 1, 9418.885, -6854.578, 14.94307, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3482) +(@OGUID+272, 195068, 530, 1, 1, -1835.915, 4922.82, -21.20826, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0) +(@OGUID+273, 195068, 530, 1, 1, -1782.254, 4935.55, -22.66033, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0) +(@OGUID+274, 195068, 530, 1, 1, -4319.374, -12455.69, 17.32846, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3524) +(@OGUID+275, 195068, 530, 1, 1, -4318.948, -12448.24, 17.12119, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3524) +(@OGUID+276, 195068, 530, 1, 1, -4310.337, -12439.54, 17.13309, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3524) +(@OGUID+277, 195068, 530, 1, 1, -4322.972, -12439.46, 17.49306, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 3524) +(@OGUID+278, 195068, 1, 1, 1, 10053.44, 2128.55, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0) +(@OGUID+279, 195068, 1, 1, 1, 10053.57, 2109.589, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0) +(@OGUID+280, 195068, 1, 1, 1, 10065.01, 2118.719, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 0) +(@OGUID+281, 180338, 0, 1, 1, -8445.18, 905.661, 99.3023, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+282, 180338, 0, 1, 1, -8444.22, 906.408, 99.2224, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+283, 180338, 0, 1, 1, -8443.28, 907.071, 99.0144, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+284, 180338, 0, 1, 1, -8446.03, 905.257, 99.4471, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+285, 180338, 0, 1, 1, -8455.08, 904.391, 100.157, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+286, 180338, 0, 1, 1, -8449.8, 908.224, 100.615, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+287, 180338, 0, 1, 1, -8453.44, 916.448, 100.143, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+288, 180338, 0, 1, 1, -8449.09, 919.457, 100.142, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+289, 180338, 0, 1, 1, -8464.38, 908.977, 100.278, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+290, 180338, 0, 1, 1, -8467.54, 913.882, 98.4647, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+291, 180338, 0, 1, 1, -8463.29, 915.149, 100.835, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+292, 180340, 0, 1, 1, -8458.65, 921.385, 99.9164, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 5314) +(@OGUID+293, 180338, 0, 1, 1, -8459.59, 901.333, 100.158, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+294, 180338, 0, 1, 1, -8458.68, 912.972, 100.059, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+295, 180338, 0, 1, 1, -8466.58, 914.538, 98.4997, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+296, 180340, 0, 1, 1, -5154.092, -851.6649, 509.5116, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 809) +(@OGUID+297, 180338, 0, 1, 1, -5149.162, -854.5643, 509.2533, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 809) +(@OGUID+298, 180340, 0, 1, 1, -5151.327, -850.9496, 510.0824, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 809) +(@OGUID+299, 180338, 1, 1, 1, 10064, 2112.663, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+300, 180338, 0, 1, 1, -8435.02, 903.467, 99.3079, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+301, 180340, 0, 1, 1, -8441.88, 900.998, 98.596, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 5314) +(@OGUID+302, 180338, 0, 1, 1, -8444.11, 911.977, 100.496, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 5314) +(@OGUID+303, 195068, 0, 1, 1, -8441.9, 901.031, 98.8491, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5314) +(@OGUID+304, 195068, 0, 1, 1, -8449.35, 903.849, 99.5788, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5314) +(@OGUID+305, 195068, 0, 1, 1, -8451.97, 894.715, 99.7093, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5314) +(@OGUID+306, 195068, 0, 1, 1, -8462.02, 913.623, 98.741, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 5314) +(@OGUID+307, 195068, 0, 1, 1, -5160.018, -869.0295, 507.2899, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 809) +(@OGUID+308, 195068, 0, 1, 1, -5159.92, -870.566, 507.3073, 0, 0, 0, 0, 1, 120, 255, 1), -- 195068 (Area: 809) +(@OGUID+309, 195066, 571, 1, 1, 5856.642, 765.5573, 641.3152, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 4613) +(@OGUID+310, 195066, 571, 1, 1, 5851.97, 771.3108, 641.496, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0) +(@OGUID+311, 195066, 1, 1, 1, 1186.075, -4471.141, 21.3708, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 4982) +(@OGUID+312, 195066, 1, 1, 1, 1180.132, -4457.471, 21.48913, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 4982) +(@OGUID+313, 195066, 1, 1, 1, 1172.309, -4463.226, 21.28819, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 4982) +(@OGUID+314, 195066, 0, 1, 1, 1777.319, 220.5504, 59.57675, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 1497) +(@OGUID+315, 195066, 0, 1, 1, 1780.161, 269.7726, 59.87251, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 1497) +(@OGUID+316, 195066, 530, 1, 1, 9418.892, -6854.566, 14.9436, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3482) +(@OGUID+317, 195066, 530, 1, 1, 9418.671, -6849.436, 15.08938, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3482) +(@OGUID+318, 195066, 530, 1, 1, -1835.911, 4922.804, -21.20723, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0) +(@OGUID+319, 195066, 530, 1, 1, -1782.203, 4935.565, -22.66405, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0) +(@OGUID+320, 195066, 530, 1, 1, -4318.948, -12448.24, 17.12119, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3524) +(@OGUID+321, 195066, 530, 1, 1, -4319.338, -12455.67, 17.32952, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3524) +(@OGUID+322, 195066, 530, 1, 1, -4310.302, -12439.51, 17.13647, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3524) +(@OGUID+323, 195066, 530, 1, 1, -4322.932, -12439.47, 17.49306, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 3524) +(@OGUID+324, 195066, 1, 1, 1, 10053.48, 2128.547, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0) +(@OGUID+325, 195066, 1, 1, 1, 10065.05, 2118.715, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 0) +(@OGUID+346, 195066, 0, 1, 1, -8451.97, 894.705, 99.7091, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5314) +(@OGUID+347, 195066, 0, 1, 1, -8449.34, 903.826, 99.5779, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5314) +(@OGUID+348, 195066, 0, 1, 1, -8462.03, 913.627, 98.7401, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 5314) +(@OGUID+349, 195066, 0, 1, 1, -5159.913, -870.5538, 507.3073, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 809) +(@OGUID+350, 195066, 0, 1, 1, -5159.993, -869.0156, 507.2909, 0, 0, 0, 0, 1, 120, 255, 1), -- 195066 (Area: 809) +(@OGUID+351, 180338, 1, 1, 1, 1190.076, -4465.677, 24.34778, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+352, 180339, 1, 1, 1, 1190.387, -4464.894, 21.43193, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 4982) +(@OGUID+353, 180338, 1, 1, 1, 1191.014, -4464.749, 21.46348, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+354, 180340, 1, 1, 1, 1189.604, -4465.708, 24.78123, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4982) +(@OGUID+355, 180338, 1, 1, 1, 1183.564, -4461.292, 21.89302, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+356, 180338, 1, 1, 1, 1180.523, -4458.66, 21.29023, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+357, 180338, 1, 1, 1, 1184.557, -4461.646, 23.8004, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+358, 180338, 1, 1, 1, 1179.453, -4458.417, 24.01959, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+359, 180338, 1, 1, 1, 1189.028, -4464.564, 21.34884, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+360, 180338, 1, 1, 1, 1185.379, -4462.064, 21.31019, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+361, 180338, 571, 1, 1, 5849.52, 771.9202, 640.5316, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+362, 180339, 571, 1, 1, 5855.462, 762.7917, 641.0209, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 4613) +(@OGUID+363, 180338, 571, 1, 1, 5852.08, 768.382, 641.0565, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+364, 180340, 571, 1, 1, 5856.033, 763, 642.1487, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4613) +(@OGUID+365, 180338, 571, 1, 1, 5855.965, 762.6042, 642.0032, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+366, 180338, 571, 1, 1, 5855.427, 763.2327, 640.9249, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+367, 180340, 571, 1, 1, 5851.866, 767.7535, 641.0768, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4613) +(@OGUID+368, 180338, 571, 1, 1, 5852.549, 767.7952, 640.9977, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+369, 180340, 571, 1, 1, 5856.377, 764.816, 641.3123, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4613) +(@OGUID+370, 180338, 571, 1, 1, 5852.02, 770.6042, 640.6677, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+371, 180339, 571, 1, 1, 5851.663, 770.5261, 640.8624, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 4613) +(@OGUID+372, 180338, 571, 1, 1, 5851.499, 770.9114, 640.8176, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+373, 180338, 571, 1, 1, 5854.482, 768.0121, 641.1102, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+374, 180338, 571, 1, 1, 5855.041, 767.118, 641.4463, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4613) +(@OGUID+375, 180338, 571, 1, 1, 5857.665, 766.7049, 642.3126, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+376, 180338, 571, 1, 1, 5856.665, 766.6354, 641.3419, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+377, 180338, 571, 1, 1, 5857.962, 764.8403, 642.324, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+378, 180338, 1, 1, 1, 1183.734, -4471.45, 24.01979, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+379, 180338, 1, 1, 1, 1174.95, -4456.12, 23.48371, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+380, 180338, 1, 1, 1, 1184.267, -4471.882, 24.54644, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+381, 180338, 1, 1, 1, 1185.028, -4472.323, 23.94708, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+382, 180338, 1, 1, 1, 1176.332, -4456.46, 21.52742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+383, 180340, 1, 1, 1, 1183.41, -4470.307, 21.25746, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4982) +(@OGUID+384, 180338, 1, 1, 1, 1178.354, -4468.153, 21.28568, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+385, 180338, 1, 1, 1, 1176.658, -4470.476, 24.50543, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+386, 180338, 1, 1, 1, 1171.104, -4464.168, 23.80319, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+387, 180338, 1, 1, 1, 1177.444, -4471.063, 25.08418, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+388, 180338, 1, 1, 1, 1171.076, -4462.833, 21.30515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+389, 180340, 1, 1, 1, 1177.351, -4467.596, 21.30621, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4982) +(@OGUID+390, 180338, 1, 1, 1, 1172.712, -4464.057, 21.24482, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 4982) +(@OGUID+391, 180340, 1, 1, 1, 1176.064, -4470.356, 24.25703, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 4982) +(@OGUID+392, 180338, 0, 1, 1, 1775.641, 229.2917, 60.04337, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+393, 180338, 0, 1, 1, 1772.943, 234.9115, 60.76359, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+394, 180339, 0, 1, 1, 1772.793, 242.4514, 60.76684, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497) +(@OGUID+395, 180338, 0, 1, 1, 1767.434, 242.9219, 60.86443, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+396, 180338, 0, 1, 1, 1776.615, 222.5781, 59.50615, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+397, 180339, 0, 1, 1, 1767.819, 235.5816, 60.85546, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497) +(@OGUID+398, 180338, 0, 1, 1, 1777.62, 253.684, 59.63699, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+399, 180339, 0, 1, 1, 1785.023, 241.592, 60.4074, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497) +(@OGUID+400, 180338, 0, 1, 1, 1776.589, 250.25, 59.941, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+401, 180338, 0, 1, 1, 1779.648, 236.3507, 60.41855, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+402, 180338, 0, 1, 1, 1780.391, 229.7986, 59.81966, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+403, 180338, 0, 1, 1, 1780.266, 242.6875, 60.41016, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+404, 180338, 0, 1, 1, 1778.505, 257.7934, 59.51064, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+405, 180338, 0, 1, 1, 1785.799, 234.8142, 60.40706, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+406, 180338, 0, 1, 1, 1778.811, 260.8629, 59.52987, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+407, 180338, 0, 1, 1, 1794.349, 233.2778, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+408, 180338, 0, 1, 1, 1794.559, 243.0747, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+409, 180338, 0, 1, 1, 1795.705, 228.9132, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+410, 180338, 0, 1, 1, 1790.866, 241.2483, 60.57669, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+411, 180338, 0, 1, 1, 1791.102, 235.2639, 60.57873, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+412, 180338, 0, 1, 1, 1802.957, 251.9531, 60.59119, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+413, 180338, 0, 1, 1, 1803.123, 221.4722, 60.27921, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+414, 180338, 0, 1, 1, 1800.771, 232.3576, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+415, 180338, 0, 1, 1, 1801.089, 244.6042, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+416, 180338, 0, 1, 1, 1802.851, 224.4931, 60.35531, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+417, 180340, 0, 1, 1, 1799.745, 236.6701, 62.75362, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 1497) +(@OGUID+418, 180338, 0, 1, 1, 1800.885, 227.724, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+419, 180338, 0, 1, 1, 1798.29, 236.1111, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+420, 180338, 0, 1, 1, 1798.233, 240.9566, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+421, 180338, 0, 1, 1, 1795.684, 248.316, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+422, 180339, 0, 1, 1, 1802, 243.1927, 62.75362, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497) +(@OGUID+423, 180338, 0, 1, 1, 1800.889, 249.349, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+424, 180338, 0, 1, 1, 1809.691, 244.4688, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+425, 180338, 0, 1, 1, 1808.592, 255.6615, 60.70827, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+426, 180338, 0, 1, 1, 1812.352, 235.9392, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+427, 180338, 0, 1, 1, 1803.595, 255.8056, 60.703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+428, 180338, 0, 1, 1, 1810.738, 249.3802, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+429, 180338, 0, 1, 1, 1809.031, 251.6267, 60.58867, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+430, 180338, 0, 1, 1, 1812.432, 240.7135, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+431, 180340, 0, 1, 1, 1808.877, 242.9375, 62.75362, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 1497) +(@OGUID+432, 180338, 0, 1, 1, 1805.212, 230.9288, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+433, 180340, 0, 1, 1, 1810.583, 236.5469, 62.75362, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 1497) +(@OGUID+434, 180338, 0, 1, 1, 1803.302, 258.3698, 60.86269, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+435, 180339, 0, 1, 1, 1808.549, 225.0729, 60.36491, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 1497) +(@OGUID+436, 180338, 0, 1, 1, 1808.307, 258.4965, 60.88347, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+437, 180338, 0, 1, 1, 1810.634, 227.6076, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+438, 180340, 0, 1, 1, 1805.387, 232.2726, 62.67342, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 1497) +(@OGUID+439, 180338, 0, 1, 1, 1809.67, 232.2656, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+440, 180338, 0, 1, 1, 1805.504, 245.9323, 61.54306, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+441, 180338, 0, 1, 1, 1808.227, 220.7396, 60.25816, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+442, 180338, 0, 1, 1, 1818.595, 241.8403, 60.5149, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+443, 180338, 0, 1, 1, 1815.023, 247.9809, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+444, 180338, 0, 1, 1, 1828.241, 240.6667, 60.74019, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+445, 180338, 0, 1, 1, 1816.179, 233.5122, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+446, 180338, 0, 1, 1, 1828.354, 235.0365, 60.73164, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+447, 180338, 0, 1, 1, 1819.064, 235.4375, 60.40575, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+448, 180338, 0, 1, 1, 1822.648, 242.0139, 60.74152, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+449, 180338, 0, 1, 1, 1814.47, 228.5608, 60.58672, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+450, 180338, 0, 1, 1, 1823.495, 236.0972, 60.7414, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+451, 180338, 0, 1, 1, 1816.132, 243.6632, 60.58345, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+452, 180338, 0, 1, 1, 1834.165, 235.7222, 60.28042, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+453, 180338, 0, 1, 1, 1839.09, 234.6892, 60.58925, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+454, 180338, 0, 1, 1, 1839.069, 241.9236, 60.58492, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+455, 180338, 0, 1, 1, 1834.045, 240.8646, 60.27056, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 1497) +(@OGUID+456, 180338, 530, 1, 1, 9418.825, -6850.219, 15.04114, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+457, 180338, 530, 1, 1, 9416.098, -6859.702, 17.72371, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+458, 180339, 530, 1, 1, 9410.924, -6860.234, 14.66373, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 3482) +(@OGUID+459, 180338, 530, 1, 1, 9409.407, -6847.16, 15.59513, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+460, 180338, 530, 1, 1, 9413.11, -6858.149, 14.68079, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+461, 180340, 530, 1, 1, 9406.975, -6850.432, 15.49679, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3482) +(@OGUID+462, 180338, 530, 1, 1, 9421.596, -6855.611, 20.67232, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+463, 180338, 530, 1, 1, 9406.053, -6854.354, 15.2733, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+464, 180338, 530, 1, 1, 9419.435, -6853.582, 14.97401, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+465, 180338, 530, 1, 1, 9416.808, -6857.134, 14.83239, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+466, 180338, 530, 1, 1, 9407.948, -6858.431, 14.819, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+467, 180338, 530, 1, 1, 9421.068, -6849.257, 18.02616, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+468, 180340, 530, 1, 1, 9417.853, -6844.644, 15.44193, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3482) +(@OGUID+469, 180340, 530, 1, 1, 9412.682, -6845.231, 15.64252, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3482) +(@OGUID+470, 180339, 530, 1, 1, 9415.574, -6844.394, 15.6033, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 3482) +(@OGUID+471, 180338, 530, 1, 1, 9410.944, -6842.853, 15.94074, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+472, 180338, 530, 1, 1, 9411.216, -6835.885, 16.40972, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3482) +(@OGUID+473, 180338, 530, 1, 1, -1837.974, 4921.648, -19.05106, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+474, 180339, 530, 1, 1, -1837.953, 4921.162, -18.875, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0) +(@OGUID+475, 180338, 530, 1, 1, -1836.629, 4922.929, -21.1233, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+476, 180339, 530, 1, 1, -1816.16, 4909.691, -16.47844, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0) +(@OGUID+477, 180338, 530, 1, 1, -1779.859, 4938.297, -20.57433, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+478, 180338, 530, 1, 1, -1783.58, 4937.418, -22.87706, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+479, 180339, 530, 1, 1, -1779.325, 4938.288, -20.35745, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0) +(@OGUID+480, 180338, 530, 1, 1, -1783.845, 4936.499, -22.62333, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+481, 180340, 530, 1, 1, -1815.401, 4912.053, -21.41395, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+482, 180339, 530, 1, 1, -1830.479, 4917.759, -18.83961, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0) +(@OGUID+483, 180340, 530, 1, 1, -1788.946, 4925.132, -21.71204, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+484, 180338, 530, 1, 1, -1829.241, 4919.934, -21.42811, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+485, 180340, 530, 1, 1, -1782.326, 4934.665, -22.62724, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+486, 180338, 530, 1, 1, -1779.852, 4937.522, -20.63801, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+487, 180340, 530, 1, 1, -1830.764, 4920.147, -21.45236, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+488, 180340, 530, 1, 1, -1791.436, 4921.899, -21.66345, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+489, 180338, 530, 1, 1, -1787.144, 4926.236, -21.7487, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+490, 180338, 530, 1, 1, -1802.321, 4907.97, -21.39958, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+491, 180338, 530, 1, 1, -1791.648, 4910.958, -21.36656, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+492, 180338, 530, 1, 1, -1801.554, 4910.698, -21.4005, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+493, 180338, 530, 1, 1, -1799.038, 4912.07, -21.3998, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+494, 180339, 530, 1, 1, -1792.384, 4920.327, -21.64606, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0) +(@OGUID+495, 180340, 530, 1, 1, -1792.658, 4910.359, -21.37147, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+496, 180339, 530, 1, 1, -1790.858, 4909.421, -16.41148, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0) +(@OGUID+497, 180338, 530, 1, 1, -1796.408, 4911.367, -21.40019, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+498, 180338, 530, 1, 1, -4314.503, -12446.04, 17.23437, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+499, 180338, 530, 1, 1, -4313.417, -12447.03, 17.36579, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+500, 180338, 530, 1, 1, -4310.95, -12444.82, 17.38944, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+501, 180338, 530, 1, 1, -4313.21, -12446.54, 17.32341, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+502, 180340, 530, 1, 1, -4320.821, -12452.94, 17.18122, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3524) +(@OGUID+503, 180338, 530, 1, 1, -4319.653, -12448.14, 17.09422, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+504, 180339, 530, 1, 1, -4319.12, -12456.25, 17.34892, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 3524) +(@OGUID+505, 180338, 530, 1, 1, -4314.819, -12443.43, 17.22013, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+506, 180338, 530, 1, 1, -4313.979, -12445.83, 17.23385, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+507, 180340, 530, 1, 1, -4318.693, -12448.96, 17.16888, 0, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 3524) +(@OGUID+508, 180338, 530, 1, 1, -4310.422, -12445.56, 17.44872, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+509, 180338, 530, 1, 1, -4324.342, -12454.45, 16.90608, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+510, 180338, 530, 1, 1, -4309.894, -12439.97, 17.22674, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+511, 180338, 530, 1, 1, -4325.287, -12453.73, 16.75985, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+512, 180338, 530, 1, 1, -4324.807, -12450.67, 16.6921, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+513, 180338, 530, 1, 1, -4324.394, -12453.49, 16.81945, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+514, 180338, 530, 1, 1, -4325.122, -12454.39, 16.82211, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+515, 180885, 530, 1, 1, -4318.978, -12442.33, 17.2804, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180885 (Area: 3524) +(@OGUID+516, 180338, 530, 1, 1, -4315.319, -12442.54, 17.24293, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+517, 180338, 530, 1, 1, -4325.247, -12450.3, 16.65173, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+518, 180338, 530, 1, 1, -4324.653, -12441.05, 17.42333, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+519, 180338, 530, 1, 1, -4326.519, -12438.95, 18.94419, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+520, 180338, 530, 1, 1, -4324.635, -12436.89, 19.43099, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+521, 180338, 530, 1, 1, -4325.179, -12440.22, 17.47205, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+522, 180338, 530, 1, 1, -4325.653, -12438.65, 19.28593, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+523, 180338, 530, 1, 1, -4322.175, -12438.73, 17.56375, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+524, 180338, 530, 1, 1, -4326.963, -12438.2, 19.36827, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+525, 180338, 530, 1, 1, -4323.887, -12437.04, 18.70215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+526, 180338, 530, 1, 1, -4325.113, -12436.97, 19.78218, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+527, 180338, 530, 1, 1, -4324.327, -12437.5, 19.13781, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+528, 180338, 530, 1, 1, -4311.293, -12421.77, 17.49123, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+529, 180338, 530, 1, 1, -4325.132, -12436.4, 19.8198, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+530, 180338, 530, 1, 1, -4326.474, -12437.68, 19.88736, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+531, 180338, 530, 1, 1, -4322.835, -12438.41, 17.56154, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+532, 180338, 530, 1, 1, -4326.099, -12438.25, 19.56963, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+533, 180338, 530, 1, 1, -4310.422, -12422.13, 17.46415, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+534, 180338, 530, 1, 1, -4309.858, -12416.43, 20.66073, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+535, 180338, 530, 1, 1, -4308.606, -12418.14, 19.15999, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+536, 180338, 530, 1, 1, -4310.059, -12417.64, 20.57458, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+537, 180338, 530, 1, 1, -4312.616, -12419.58, 19.46299, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+538, 180338, 530, 1, 1, -4308.205, -12421.55, 17.49692, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+539, 180338, 530, 1, 1, -4308.79, -12417.27, 20.00328, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+540, 180338, 530, 1, 1, -4309.601, -12418.8, 19.92153, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+541, 180338, 530, 1, 1, -4308.077, -12420.59, 17.54629, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+542, 180338, 530, 1, 1, -4312.104, -12418.41, 20.58256, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+543, 180338, 530, 1, 1, -4311.853, -12419.18, 20.15026, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+544, 180338, 530, 1, 1, -4312.518, -12416.92, 20.90093, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+545, 180338, 530, 1, 1, -4313.009, -12418.03, 20.47431, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 3524) +(@OGUID+546, 180338, 1, 1, 1, 10053.4, 2124.88, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+547, 180338, 1, 1, 1, 10063.77, 2128.635, 1331.266, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+548, 180338, 1, 1, 1, 10054.83, 2127.247, 1330.36, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+549, 180340, 1, 1, 1, 10058.35, 2134.978, 1330.78, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180340 (Area: 0) +(@OGUID+550, 180338, 1, 1, 1, 10054.68, 2126.606, 1330.203, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+551, 180338, 1, 1, 1, 10055.19, 2132.316, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+552, 180338, 1, 1, 1, 10054.86, 2131.425, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+553, 180338, 1, 1, 1, 10049.81, 2111.908, 1330.872, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+554, 180338, 1, 1, 1, 10065.84, 2118.132, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+555, 180338, 1, 1, 1, 10060.6, 2122.877, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+556, 180338, 1, 1, 1, 10066.9, 2122.259, 1329.658, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+557, 180338, 1, 1, 1, 10061.39, 2123.998, 1331.735, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+558, 180338, 1, 1, 1, 10047.33, 2107.856, 1331.513, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+559, 180338, 1, 1, 1, 10047.17, 2109.439, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+560, 180338, 1, 1, 1, 10050.19, 2112.628, 1331.073, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+561, 180338, 1, 1, 1, 10065.6, 2116.717, 1329.658, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+562, 180338, 1, 1, 1, 10064.18, 2114.285, 1329.658, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+563, 180338, 1, 1, 1, 10046.18, 2105.722, 1330.707, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+564, 180338, 1, 1, 1, 10053.27, 2105.349, 1330.886, 0, 0, 0, 0, 1, 120, 255, 1), -- 180338 (Area: 0) +(@OGUID+565, 180339, 1, 1, 1, 10054.41, 2109.627, 1329.648, 0, 0, 0, 0, 1, 120, 255, 1), -- 180339 (Area: 0) +(@OGUID+566, 182807, 571, 1, 1, 5849.689, 771.4618, 640.5817, 0, 0, 0, 0, 1, 120, 255, 1); -- 182807 (Area: 4613) + + + +DELETE FROM `game_event_gameobject` WHERE `eventEntry`=51 AND `guid` BETWEEN @OGUID+0 AND @OGUID+566; + +INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES +(51, @OGUID+0), +(51, @OGUID+1), +(51, @OGUID+2), +(51, @OGUID+3), +(51, @OGUID+4), +(51, @OGUID+5), +(51, @OGUID+6), +(51, @OGUID+7), +(51, @OGUID+8), +(51, @OGUID+9), +(51, @OGUID+10), +(51, @OGUID+11), +(51, @OGUID+12), +(51, @OGUID+13), +(51, @OGUID+14), +(51, @OGUID+15), +(51, @OGUID+16), +(51, @OGUID+17), +(51, @OGUID+18), +(51, @OGUID+19), +(51, @OGUID+20), +(51, @OGUID+21), +(51, @OGUID+22), +(51, @OGUID+23), +(51, @OGUID+24), +(51, @OGUID+25), +(51, @OGUID+26), +(51, @OGUID+27), +(51, @OGUID+28), +(51, @OGUID+29), +(51, @OGUID+30), +(51, @OGUID+31), +(51, @OGUID+32), +(51, @OGUID+33), +(51, @OGUID+34), +(51, @OGUID+35), +(51, @OGUID+36), +(51, @OGUID+37), +(51, @OGUID+38), +(51, @OGUID+39), +(51, @OGUID+40), +(51, @OGUID+41), +(51, @OGUID+42), +(51, @OGUID+43), +(51, @OGUID+44), +(51, @OGUID+45), +(51, @OGUID+46), +(51, @OGUID+47), +(51, @OGUID+48), +(51, @OGUID+49), +(51, @OGUID+50), +(51, @OGUID+51), +(51, @OGUID+52), +(51, @OGUID+53), +(51, @OGUID+54), +(51, @OGUID+55), +(51, @OGUID+56), +(51, @OGUID+57), +(51, @OGUID+58), +(51, @OGUID+59), +(51, @OGUID+60), +(51, @OGUID+61), +(51, @OGUID+62), +(51, @OGUID+63), +(51, @OGUID+64), +(51, @OGUID+65), +(51, @OGUID+66), +(51, @OGUID+67), +(51, @OGUID+68), +(51, @OGUID+69), +(51, @OGUID+70), +(51, @OGUID+71), +(51, @OGUID+72), +(51, @OGUID+73), +(51, @OGUID+74), +(51, @OGUID+75), +(51, @OGUID+76), +(51, @OGUID+77), +(51, @OGUID+78), +(51, @OGUID+79), +(51, @OGUID+80), +(51, @OGUID+81), +(51, @OGUID+82), +(51, @OGUID+83), +(51, @OGUID+84), +(51, @OGUID+85), +(51, @OGUID+86), +(51, @OGUID+87), +(51, @OGUID+88), +(51, @OGUID+89), +(51, @OGUID+90), +(51, @OGUID+91), +(51, @OGUID+92), +(51, @OGUID+93), +(51, @OGUID+94), +(51, @OGUID+95), +(51, @OGUID+96), +(51, @OGUID+97), +(51, @OGUID+98), +(51, @OGUID+99), +(51, @OGUID+100), +(51, @OGUID+101), +(51, @OGUID+102), +(51, @OGUID+103), +(51, @OGUID+104), +(51, @OGUID+105), +(51, @OGUID+106), +(51, @OGUID+107), +(51, @OGUID+108), +(51, @OGUID+109), +(51, @OGUID+110), +(51, @OGUID+111), +(51, @OGUID+112), +(51, @OGUID+113), +(51, @OGUID+114), +(51, @OGUID+115), +(51, @OGUID+116), +(51, @OGUID+117), +(51, @OGUID+118), +(51, @OGUID+119), +(51, @OGUID+120), +(51, @OGUID+121), +(51, @OGUID+122), +(51, @OGUID+123), +(51, @OGUID+124), +(51, @OGUID+125), +(51, @OGUID+126), +(51, @OGUID+127), +(51, @OGUID+128), +(51, @OGUID+129), +(51, @OGUID+130), +(51, @OGUID+131), +(51, @OGUID+132), +(51, @OGUID+133), +(51, @OGUID+134), +(51, @OGUID+135), +(51, @OGUID+136), +(51, @OGUID+137), +(51, @OGUID+138), +(51, @OGUID+139), +(51, @OGUID+140), +(51, @OGUID+141), +(51, @OGUID+142), +(51, @OGUID+143), +(51, @OGUID+144), +(51, @OGUID+145), +(51, @OGUID+146), +(51, @OGUID+147), +(51, @OGUID+148), +(51, @OGUID+149), +(51, @OGUID+150), +(51, @OGUID+151), +(51, @OGUID+152), +(51, @OGUID+153), +(51, @OGUID+154), +(51, @OGUID+155), +(51, @OGUID+156), +(51, @OGUID+157), +(51, @OGUID+158), +(51, @OGUID+159), +(51, @OGUID+160), +(51, @OGUID+161), +(51, @OGUID+162), +(51, @OGUID+163), +(51, @OGUID+164), +(51, @OGUID+165), +(51, @OGUID+166), +(51, @OGUID+167), +(51, @OGUID+168), +(51, @OGUID+169), +(51, @OGUID+170), +(51, @OGUID+171), +(51, @OGUID+172), +(51, @OGUID+173), +(51, @OGUID+174), +(51, @OGUID+175), +(51, @OGUID+176), +(51, @OGUID+177), +(51, @OGUID+178), +(51, @OGUID+179), +(51, @OGUID+180), +(51, @OGUID+181), +(51, @OGUID+182), +(51, @OGUID+183), +(51, @OGUID+184), +(51, @OGUID+185), +(51, @OGUID+186), +(51, @OGUID+187), +(51, @OGUID+188), +(51, @OGUID+189), +(51, @OGUID+190), +(51, @OGUID+191), +(51, @OGUID+192), +(51, @OGUID+193), +(51, @OGUID+194), +(51, @OGUID+195), +(51, @OGUID+196), +(51, @OGUID+197), +(51, @OGUID+198), +(51, @OGUID+199), +(51, @OGUID+200), +(51, @OGUID+201), +(51, @OGUID+202), +(51, @OGUID+203), +(51, @OGUID+204), +(51, @OGUID+205), +(51, @OGUID+206), +(51, @OGUID+207), +(51, @OGUID+208), +(51, @OGUID+209), +(51, @OGUID+210), +(51, @OGUID+211), +(51, @OGUID+212), +(51, @OGUID+213), +(51, @OGUID+214), +(51, @OGUID+215), +(51, @OGUID+216), +(51, @OGUID+217), +(51, @OGUID+218), +(51, @OGUID+219), +(51, @OGUID+220), +(51, @OGUID+221), +(51, @OGUID+222), +(51, @OGUID+223), +(51, @OGUID+224), +(51, @OGUID+225), +(51, @OGUID+226), +(51, @OGUID+227), +(51, @OGUID+228), +(51, @OGUID+229), +(51, @OGUID+230), +(51, @OGUID+231), +(51, @OGUID+232), +(51, @OGUID+233), +(51, @OGUID+234), +(51, @OGUID+235), +(51, @OGUID+236), +(51, @OGUID+237), +(51, @OGUID+238), +(51, @OGUID+239), +(51, @OGUID+240), +(51, @OGUID+241), +(51, @OGUID+242), +(51, @OGUID+243), +(51, @OGUID+244), +(51, @OGUID+245), +(51, @OGUID+246), +(51, @OGUID+247), +(51, @OGUID+248), +(51, @OGUID+249), +(51, @OGUID+250), +(51, @OGUID+251), +(51, @OGUID+252), +(51, @OGUID+253), +(51, @OGUID+254), +(51, @OGUID+255), +(51, @OGUID+256), +(51, @OGUID+257), +(51, @OGUID+258), +(51, @OGUID+259), +(51, @OGUID+260), +(51, @OGUID+261), +(51, @OGUID+262), +(51, @OGUID+263), +(51, @OGUID+264), +(51, @OGUID+265), +(51, @OGUID+266), +(51, @OGUID+267), +(51, @OGUID+268), +(51, @OGUID+269), +(51, @OGUID+270), +(51, @OGUID+271), +(51, @OGUID+272), +(51, @OGUID+273), +(51, @OGUID+274), +(51, @OGUID+275), +(51, @OGUID+276), +(51, @OGUID+277), +(51, @OGUID+278), +(51, @OGUID+279), +(51, @OGUID+280), +(51, @OGUID+281), +(51, @OGUID+282), +(51, @OGUID+283), +(51, @OGUID+284), +(51, @OGUID+285), +(51, @OGUID+286), +(51, @OGUID+287), +(51, @OGUID+288), +(51, @OGUID+289), +(51, @OGUID+290), +(51, @OGUID+291), +(51, @OGUID+292), +(51, @OGUID+293), +(51, @OGUID+294), +(51, @OGUID+295), +(51, @OGUID+296), +(51, @OGUID+297), +(51, @OGUID+298), +(51, @OGUID+299), +(51, @OGUID+300), +(51, @OGUID+301), +(51, @OGUID+302), +(51, @OGUID+303), +(51, @OGUID+304), +(51, @OGUID+305), +(51, @OGUID+306), +(51, @OGUID+307), +(51, @OGUID+308), +(51, @OGUID+309), +(51, @OGUID+310), +(51, @OGUID+311), +(51, @OGUID+312), +(51, @OGUID+313), +(51, @OGUID+314), +(51, @OGUID+315), +(51, @OGUID+316), +(51, @OGUID+317), +(51, @OGUID+318), +(51, @OGUID+319), +(51, @OGUID+320), +(51, @OGUID+321), +(51, @OGUID+322), +(51, @OGUID+323), +(51, @OGUID+324), +(51, @OGUID+325), +(51, @OGUID+326), +(51, @OGUID+327), +(51, @OGUID+328), +(51, @OGUID+329), +(51, @OGUID+330), +(51, @OGUID+331), +(51, @OGUID+332), +(51, @OGUID+333), +(51, @OGUID+334), +(51, @OGUID+335), +(51, @OGUID+336), +(51, @OGUID+337), +(51, @OGUID+338), +(51, @OGUID+339), +(51, @OGUID+340), +(51, @OGUID+341), +(51, @OGUID+342), +(51, @OGUID+343), +(51, @OGUID+344), +(51, @OGUID+345), +(51, @OGUID+346), +(51, @OGUID+347), +(51, @OGUID+348), +(51, @OGUID+349), +(51, @OGUID+350), +(51, @OGUID+351), +(51, @OGUID+352), +(51, @OGUID+353), +(51, @OGUID+354), +(51, @OGUID+355), +(51, @OGUID+356), +(51, @OGUID+357), +(51, @OGUID+358), +(51, @OGUID+359), +(51, @OGUID+360), +(51, @OGUID+361), +(51, @OGUID+362), +(51, @OGUID+363), +(51, @OGUID+364), +(51, @OGUID+365), +(51, @OGUID+366), +(51, @OGUID+367), +(51, @OGUID+368), +(51, @OGUID+369), +(51, @OGUID+370), +(51, @OGUID+371), +(51, @OGUID+372), +(51, @OGUID+373), +(51, @OGUID+374), +(51, @OGUID+375), +(51, @OGUID+376), +(51, @OGUID+377), +(51, @OGUID+378), +(51, @OGUID+379), +(51, @OGUID+380), +(51, @OGUID+381), +(51, @OGUID+382), +(51, @OGUID+383), +(51, @OGUID+384), +(51, @OGUID+385), +(51, @OGUID+386), +(51, @OGUID+387), +(51, @OGUID+388), +(51, @OGUID+389), +(51, @OGUID+390), +(51, @OGUID+391), +(51, @OGUID+392), +(51, @OGUID+393), +(51, @OGUID+394), +(51, @OGUID+395), +(51, @OGUID+396), +(51, @OGUID+397), +(51, @OGUID+398), +(51, @OGUID+399), +(51, @OGUID+400), +(51, @OGUID+401), +(51, @OGUID+402), +(51, @OGUID+403), +(51, @OGUID+404), +(51, @OGUID+405), +(51, @OGUID+406), +(51, @OGUID+407), +(51, @OGUID+408), +(51, @OGUID+409), +(51, @OGUID+410), +(51, @OGUID+411), +(51, @OGUID+412), +(51, @OGUID+413), +(51, @OGUID+414), +(51, @OGUID+415), +(51, @OGUID+416), +(51, @OGUID+417), +(51, @OGUID+418), +(51, @OGUID+419), +(51, @OGUID+420), +(51, @OGUID+421), +(51, @OGUID+422), +(51, @OGUID+423), +(51, @OGUID+424), +(51, @OGUID+425), +(51, @OGUID+426), +(51, @OGUID+427), +(51, @OGUID+428), +(51, @OGUID+429), +(51, @OGUID+430), +(51, @OGUID+431), +(51, @OGUID+432), +(51, @OGUID+433), +(51, @OGUID+434), +(51, @OGUID+435), +(51, @OGUID+436), +(51, @OGUID+437), +(51, @OGUID+438), +(51, @OGUID+439), +(51, @OGUID+440), +(51, @OGUID+441), +(51, @OGUID+442), +(51, @OGUID+443), +(51, @OGUID+444), +(51, @OGUID+445), +(51, @OGUID+446), +(51, @OGUID+447), +(51, @OGUID+448), +(51, @OGUID+449), +(51, @OGUID+450), +(51, @OGUID+451), +(51, @OGUID+452), +(51, @OGUID+453), +(51, @OGUID+454), +(51, @OGUID+455), +(51, @OGUID+456), +(51, @OGUID+457), +(51, @OGUID+458), +(51, @OGUID+459), +(51, @OGUID+460), +(51, @OGUID+461), +(51, @OGUID+462), +(51, @OGUID+463), +(51, @OGUID+464), +(51, @OGUID+465), +(51, @OGUID+466), +(51, @OGUID+467), +(51, @OGUID+468), +(51, @OGUID+469), +(51, @OGUID+470), +(51, @OGUID+471), +(51, @OGUID+472), +(51, @OGUID+473), +(51, @OGUID+474), +(51, @OGUID+475), +(51, @OGUID+476), +(51, @OGUID+477), +(51, @OGUID+478), +(51, @OGUID+479), +(51, @OGUID+480), +(51, @OGUID+481), +(51, @OGUID+482), +(51, @OGUID+483), +(51, @OGUID+484), +(51, @OGUID+485), +(51, @OGUID+486), +(51, @OGUID+487), +(51, @OGUID+488), +(51, @OGUID+489), +(51, @OGUID+490), +(51, @OGUID+491), +(51, @OGUID+492), +(51, @OGUID+493), +(51, @OGUID+494), +(51, @OGUID+495), +(51, @OGUID+496), +(51, @OGUID+497), +(51, @OGUID+498), +(51, @OGUID+499), +(51, @OGUID+500), +(51, @OGUID+501), +(51, @OGUID+502), +(51, @OGUID+503), +(51, @OGUID+504), +(51, @OGUID+505), +(51, @OGUID+506), +(51, @OGUID+507), +(51, @OGUID+508), +(51, @OGUID+509), +(51, @OGUID+510), +(51, @OGUID+511), +(51, @OGUID+512), +(51, @OGUID+513), +(51, @OGUID+514), +(51, @OGUID+515), +(51, @OGUID+516), +(51, @OGUID+517), +(51, @OGUID+518), +(51, @OGUID+519), +(51, @OGUID+520), +(51, @OGUID+521), +(51, @OGUID+522), +(51, @OGUID+523), +(51, @OGUID+524), +(51, @OGUID+525), +(51, @OGUID+526), +(51, @OGUID+527), +(51, @OGUID+528), +(51, @OGUID+529), +(51, @OGUID+530), +(51, @OGUID+531), +(51, @OGUID+532), +(51, @OGUID+533), +(51, @OGUID+534), +(51, @OGUID+535), +(51, @OGUID+536), +(51, @OGUID+537), +(51, @OGUID+538), +(51, @OGUID+539), +(51, @OGUID+540), +(51, @OGUID+541), +(51, @OGUID+542), +(51, @OGUID+543), +(51, @OGUID+544), +(51, @OGUID+545), +(51, @OGUID+546), +(51, @OGUID+547), +(51, @OGUID+548), +(51, @OGUID+549), +(51, @OGUID+550), +(51, @OGUID+551), +(51, @OGUID+552), +(51, @OGUID+553), +(51, @OGUID+554), +(51, @OGUID+555), +(51, @OGUID+556), +(51, @OGUID+557), +(51, @OGUID+558), +(51, @OGUID+559), +(51, @OGUID+560), +(51, @OGUID+561), +(51, @OGUID+562), +(51, @OGUID+563), +(51, @OGUID+564), +(51, @OGUID+565), +(51, @OGUID+566); + + +DELETE FROM `creature_template_addon` WHERE `entry` IN (34478,34481,35248,35247,35249,34435,35250,46894,46908,34479,35246,34484,35259,35258,35261,35260,35243,34483,35244,34476,34477,35251,35253,46891,46901,34482,35254,35256,34480,35252); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(34435, 0, 0, 65536, 1, 10, '33900 30628'), +(34476, 0, 0, 65536, 1, 10, '33900 30628'), +(34477, 0, 0, 65536, 1, 10, '33900 30628'), +(34478, 0, 0, 65536, 1, 10, '33900 30628'), +(34479, 0, 0, 65536, 1, 10, '33900 30628'), +(34480, 0, 0, 65536, 1, 10, '33900 30628'), +(34481, 0, 0, 65536, 1, 10, '33900 30628'), +(34482, 0, 0, 65536, 1, 10, '33900 30628'), +(34483, 0, 0, 65536, 1, 10, '33900 30628'), +(34484, 0, 0, 65536, 1, 10, '33900 30628'), +(35243, 0, 0, 65536, 1, 10, '33900 30628'), +(35244, 0, 0, 65536, 1, 10, '33900 30628'), +(35246, 0, 0, 65536, 1, 10, '33900 30628'), +(35247, 0, 0, 65536, 1, 10, '33900 30628'), +(35248, 0, 0, 65536, 1, 10, '33900 30628'), +(35249, 0, 0, 65536, 1, 10, '33900 30628'), +(35250, 0, 0, 65536, 1, 10, '33900 30628'), +(35251, 0, 0, 65536, 1, 10, '33900 30628'), +(35252, 0, 0, 65536, 1, 10, '33900 30628'), +(35253, 0, 0, 65536, 1, 10, '33900 30628'), +(35254, 0, 0, 65536, 1, 10, '33900 30628'), +(35256, 0, 0, 65536, 1, 10, '33900 30628'), +(35258, 0, 0, 65536, 1, 10, '33900 30628'), +(35259, 0, 0, 65536, 1, 10, '33900 30628'), +(35260, 0, 0, 65536, 1, 10, '33900 30628'), +(35261, 0, 0, 65536, 1, 10, '33900 30628'), +(46891, 0, 0, 65536, 1, 10, '33900 30628'), +(46894, 0, 0, 65536, 1, 10, '33900 30628'), +(46901, 0, 0, 65536, 1, 10, '33900 30628'), +(46908, 0, 0, 65536, 1, 10, '33900 30628'); + + + +DELETE FROM `creature` WHERE `id` IN (35252,34478,34481,35248,35247,35249,34435,35250,46894,46908,34479,35246,34484,35259,35258,35261,35260,35243,34483,35244,34476,34477,35251,35253,46891,46901,34482,35254,35256,34480,35252,34382,34383); + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+208; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 35260, 530, 1, 1, -1784.905, 4934.787, -22.47924, 3.543018, 120, 0, 0), -- 35260 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+1, 34483, 530, 1, 1, 9417.506, -6851.21, 15.09478, 3.420845, 120, 0, 0), -- 34483 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+2, 35254, 571, 1, 1, 5854.245, 762.4809, 641.1855, 3.316126, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+3, 35254, 571, 1, 1, 5847.708, 772.8854, 640.4623, 4.939282, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+4, 35254, 571, 1, 1, 5850.153, 769.9913, 640.8176, 3.106686, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+5, 35254, 571, 1, 1, 5854.563, 769.9375, 641.3104, 4.153883, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+6, 35256, 571, 1, 1, 5855.538, 766.5486, 641.5667, 3.787364, 120, 0, 0), -- 35256 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+7, 35254, 571, 1, 1, 5850.727, 774.9583, 640.5362, 4.590216, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+8, 35254, 571, 1, 1, 5860.416, 765.408, 640.8058, 4.066617, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+9, 35254, 571, 1, 1, 5858.051, 763.1406, 640.9708, 2.548181, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+10, 35254, 571, 1, 1, 5848.581, 770.5434, 640.6075, 5.445427, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+11, 35254, 571, 1, 1, 5856.316, 764, 641.2667, 6.038839, 120, 0, 0), -- 35254 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+12, 34477, 1, 1, 1, 1186.83, -4472.387, 21.4995, 1.692969, 120, 0, 0), -- 34477 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+13, 35251, 1, 1, 1, 1170.448, -4461.51, 21.47427, 6.178465, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+14, 35253, 1, 1, 1, 1170.01, -4458.33, 21.66283, 3.787364, 120, 0, 0), -- 35253 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+15, 35253, 1, 1, 1, 1181.797, -4458.684, 21.44614, 1.832596, 120, 0, 0), -- 35253 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+16, 46891, 1, 1, 1, 1190.11, -4463.77, 21.46103, 1.448623, 120, 0, 0), -- 46891 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+17, 35251, 1, 1, 1, 1185.262, -4465.974, 21.38922, 2.408554, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+18, 46891, 1, 1, 1, 1181.56, -4467.9, 21.37133, 1.308997, 120, 0, 0), -- 46891 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+19, 46901, 1, 1, 1, 1172.99, -4465.95, 21.30243, 1.064651, 120, 0, 0), -- 46901 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+20, 35253, 1, 1, 1, 1175.844, -4458.79, 21.59825, 1.064651, 120, 0, 0), -- 35253 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+21, 34482, 1, 1, 1, 1178.863, -4471.87, 21.1731, 1.37881, 120, 0, 0), -- 34482 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+22, 35251, 1, 1, 1, 1186.759, -4462.249, 21.24036, 1.27409, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+23, 35253, 1, 1, 1, 1189.15, -4468.89, 21.56683, 0.3665192, 120, 0, 0), -- 35253 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+24, 46891, 1, 1, 1, 1174, -4461.71, 21.47693, 0.5585054, 120, 0, 0), -- 46891 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+25, 35251, 1, 1, 1, 1172.793, -4455.809, 21.6835, 0.06981317, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+26, 35251, 1, 1, 1, 1192.92, -4467.41, 21.63203, 3.228859, 120, 0, 0), -- 35251 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+27, 35244, 0, 1, 1, 1789.22, 213.6858, 59.97234, 4.18879, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+28, 35244, 0, 1, 1, 1786.802, 208.7118, 59.82407, 1.169371, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+29, 35244, 0, 1, 1, 1808.764, 215.559, 65.95557, 1.623156, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+30, 35244, 0, 1, 1, 1781.377, 257.1615, 59.5828, 4.590216, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+31, 35244, 0, 1, 1, 1779.712, 249.8559, 59.92548, 1.37881, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+32, 35244, 0, 1, 1, 1830.108, 221.4705, 60.79235, 2.635447, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+33, 35244, 0, 1, 1, 1823.608, 218.8819, 60.47596, 1.291544, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+34, 35244, 0, 1, 1, 1781.576, 230.7535, 59.88961, 5.864306, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+35, 35244, 0, 1, 1, 1824.793, 210.566, 60.20413, 0.2268928, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+36, 35244, 0, 1, 1, 1776.688, 227.5694, 59.85706, 0.05235988, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+37, 34476, 0, 1, 1, 1778.536, 218.2413, 59.76785, 1.082104, 120, 0, 0), -- 34476 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+38, 35244, 0, 1, 1, 1802.547, 215.5625, 65.95557, 1.658063, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+39, 35244, 0, 1, 1, 1831.293, 213.1545, 60.45892, 3.647738, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+41, 35244, 0, 1, 1, 1825.67, 249.7917, 60.12626, 0.4886922, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+42, 35244, 0, 1, 1, 1825.273, 257.4097, 59.95353, 1.937315, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+43, 35244, 0, 1, 1, 1820.868, 261.9496, 60.0683, 0.1047198, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+44, 35244, 0, 1, 1, 1780.986, 264.3229, 59.71765, 5.358161, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+45, 35244, 0, 1, 1, 1826.116, 263.0382, 59.77779, 3.420845, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+46, 35244, 0, 1, 1, 1835.368, 257.9601, 59.87485, 4.049164, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+47, 35244, 0, 1, 1, 1833.79, 247.5174, 59.92534, 2.024582, 120, 0, 0), -- 35244 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+48, 51384, 0, 1, 1, 1753.352, 220.6099, -46.90949, 1.361957, 120, 0, 0), -- 51384 (Area: 0) (Auras: 18950 - 18950) +(@CGUID+49, 35243, 530, 1, 1, 9411.27, -6832.328, 16.75128, 3.228859, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+50, 35243, 530, 1, 1, 9409.371, -6860.707, 14.82494, 1.64061, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+51, 35243, 530, 1, 1, 9406.403, -6845.608, 16.06168, 3.996804, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+52, 35243, 530, 1, 1, 9410.404, -6856.34, 14.88649, 4.049164, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+53, 35243, 530, 1, 1, 9421.559, -6836.083, 15.5401, 3.246312, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+54, 35243, 530, 1, 1, 9407.637, -6826.667, 17.45139, 4.45059, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+55, 35243, 530, 1, 1, 9417.469, -6832.569, 16.11979, 4.08407, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+56, 35243, 530, 1, 1, 9406.13, -6857.922, 15.11687, 0.2268928, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+57, 35243, 530, 1, 1, 9403.035, -6833.925, 16.70704, 0.541052, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+58, 35243, 530, 1, 1, 9417.379, -6840.188, 15.81599, 2.129302, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+59, 35243, 530, 1, 1, 9403.671, -6849.658, 15.91331, 1.169371, 120, 0, 0), -- 35243 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+60, 35259, 530, 1, 1, -1792, 4913.055, -21.39983, 2.007129, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+61, 35258, 530, 1, 1, -1781.512, 4932.918, -22.36957, 3.857178, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+62, 35261, 530, 1, 1, -1801.12, 4913.882, -21.89487, 2.268928, 120, 0, 0), -- 35261 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+63, 35259, 530, 1, 1, -1794.462, 4911.293, -21.40075, 2.111848, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+64, 35258, 530, 1, 1, -1834.521, 4926.977, -21.45312, 0.9773844, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+65, 35259, 530, 1, 1, -1803.752, 4906.94, -21.3884, 2.356194, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+66, 35258, 530, 1, 1, -1837.724, 4927.685, -21.15295, 1.291544, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+67, 35259, 530, 1, 1, -1803.531, 4911.097, -21.7488, 2.740167, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+68, 35258, 530, 1, 1, -1785.264, 4938.565, -22.53468, 3.281219, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+69, 35259, 530, 1, 1, -1815.917, 4913.81, -21.4253, 1.53589, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+70, 35258, 530, 1, 1, -1828.839, 4923.352, -21.86371, 1.064651, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+71, 35259, 530, 1, 1, -1812.276, 4911.762, -21.34076, 0.9075712, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+72, 35258, 530, 1, 1, -1824.894, 4920.689, -21.83284, 1.012291, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+73, 35259, 530, 1, 1, -1797.486, 4914.01, -21.70779, 1.500983, 120, 0, 0), -- 35259 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+74, 35258, 530, 1, 1, -1832.877, 4923.171, -21.4525, 1.134464, 120, 0, 0), -- 35258 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+75, 35246, 530, 1, 1, -4322.424, -12449.62, 16.97788, 6.265732, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+76, 35246, 530, 1, 1, -4322.7, -12456.54, 17.44095, 6.073746, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+77, 35246, 530, 1, 1, -4329.212, -12448.74, 17.27163, 0.5061455, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+78, 35246, 530, 1, 1, -4324.264, -12444.34, 17.27715, 4.39823, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+79, 35246, 530, 1, 1, -4320.297, -12438.93, 17.69792, 5.410521, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+80, 35246, 530, 1, 1, -4313.64, -12442.5, 17.29663, 4.537856, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+81, 35246, 530, 1, 1, -4314.906, -12430.29, 17.5585, 3.438299, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+82, 35246, 530, 1, 1, -4312.236, -12434.6, 17.15653, 3.316126, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+83, 34484, 530, 1, 1, -4306.76, -12437.7, 17.64093, 4.921828, 120, 0, 0), -- 34484 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+84, 35246, 530, 1, 1, -4308.394, -12429.41, 17.04607, 4.206244, 120, 0, 0), -- 35246 (Area: 3524) (Auras: 33900 - 33900) +(@CGUID+85, 35250, 1, 1, 1, 10060, 2132.4, 1329.743, 3.839724, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+86, 46894, 1, 1, 1, 10055.5, 2107.62, 1329.733, 0.5759587, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+87, 35250, 1, 1, 1, 10061, 2110.63, 1329.733, 1.291544, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+88, 46908, 1, 1, 1, 10047.4, 2111.12, 1329.733, 2.548181, 120, 0, 0), -- 46908 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+89, 35250, 1, 1, 1, 10045.9, 2116.87, 1329.743, 3.909538, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+90, 35250, 1, 1, 1, 10067.1, 2129, 1329.743, 3.630285, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+91, 46894, 1, 1, 1, 10067.1, 2126.04, 1329.743, 2.548181, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+92, 35250, 1, 1, 1, 10055.5, 2124, 1329.743, 1.27409, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+93, 35250, 1, 1, 1, 10065.3, 2103.28, 1330.633, 4.066617, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+94, 34479, 1, 1, 1, 10055.25, 2133.33, 1329.741, 3.159046, 120, 0, 0), -- 34479 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+95, 35250, 1, 1, 1, 10051.8, 2133.11, 1329.743, 3.490659, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+96, 35250, 1, 1, 1, 10060, 2126.34, 1329.743, 3.769911, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+97, 35250, 1, 1, 1, 10068.2, 2117.39, 1329.743, 1.832596, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+98, 35250, 1, 1, 1, 10059.1, 2114.84, 1329.743, 0.9250245, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+99, 46894, 1, 1, 1, 10061.7, 2118.54, 1329.743, 4.014257, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+100, 35250, 1, 1, 1, 10051.5, 2114.09, 1329.733, 1.291544, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+101, 35250, 1, 1, 1, 10052.1, 2108.73, 1329.733, 1.37881, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+102, 35250, 1, 1, 1, 10055.7, 2118, 1329.743, 0.6632251, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+103, 46894, 1, 1, 1, 10057.3, 2127.85, 1329.743, 4.39823, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+104, 35250, 1, 1, 1, 10067, 2123.4, 1329.743, 2.96706, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+105, 46894, 1, 1, 1, 10058.7, 2109.92, 1329.733, 3.822271, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+106, 35250, 1, 1, 1, 10043.7, 2113.71, 1329.743, 1.27409, 120, 0, 0), -- 35250 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+107, 46894, 1, 1, 1, 10063.9, 2133.63, 1329.743, 2.268928, 120, 0, 0), -- 46894 (Area: 0) (Auras: 33900 - 33900) +(@CGUID+108, 35249, 0, 1, 1, -8396.5, 920.899, 98.41144, 0.4363323, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+109, 35249, 0, 1, 1, -8393.97, 922.12, 98.34634, 3.560472, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+110, 35249, 0, 1, 1, -8391.77, 936.267, 97.71254, 2.670354, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+111, 35249, 0, 1, 1, -8395.26, 916.083, 98.55763, 5.061455, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+112, 35249, 0, 1, 1, -8393.45, 932.299, 97.91984, 5.148721, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+113, 35249, 0, 1, 1, -8385.77, 957.957, 97.90134, 3.385939, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+114, 35249, 0, 1, 1, -8400.79, 936.984, 97.95234, 3.630285, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+115, 35249, 0, 1, 1, -8405.12, 915.2, 98.59753, 1.58825, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+116, 35249, 0, 1, 1, -8404.18, 935.061, 98.11253, 0.5061455, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+117, 35249, 0, 1, 1, -8408.69, 930.134, 99.98553, 2.687807, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+118, 35249, 0, 1, 1, -8413.39, 932.293, 99.63573, 5.846853, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+119, 35249, 0, 1, 1, -8381.4, 974.536, 97.69054, 3.752458, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+120, 35249, 0, 1, 1, -8383.96, 972.691, 96.25323, 0.5934119, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+121, 35249, 0, 1, 1, -8420.64, 925.221, 98.78454, 0.5235988, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+122, 35249, 0, 1, 1, -8410.33, 949.292, 98.27094, 2.199115, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+123, 35249, 0, 1, 1, -8417.88, 926.898, 99.42624, 3.647738, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+124, 35249, 0, 1, 1, -8414.98, 946.701, 98.17863, 5.72468, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+125, 35249, 0, 1, 1, -8381.91, 978.53, 96.13673, 1.500983, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+126, 35249, 0, 1, 1, -8422.26, 941.399, 98.49953, 4.590216, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+127, 35249, 0, 1, 1, -8422.86, 937.924, 99.70744, 1.37881, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+128, 35249, 0, 1, 1, -8379.62, 980.628, 96.13364, 3.385939, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+129, 35249, 0, 1, 1, -8384.54, 984.226, 97.20413, 3.996804, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+130, 35249, 0, 1, 1, -8383.9, 980.998, 96.39253, 5.811946, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+131, 35249, 0, 1, 1, -8426.92, 908.559, 98.36664, 4.049164, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+132, 35249, 0, 1, 1, -8408.73, 966.017, 98.29553, 3.996804, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+133, 35249, 0, 1, 1, -8391.48, 985.75, 96.29954, 3.961897, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+134, 35249, 0, 1, 1, -8433.02, 910.476, 102.1563, 4.834562, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+135, 35249, 0, 1, 1, -8412.02, 962.686, 97.83424, 0.7853982, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+136, 35249, 0, 1, 1, -8432.15, 905.196, 101.4733, 1.745329, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+137, 35249, 0, 1, 1, -8392.93, 984.479, 96.33114, 0.5759587, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+138, 35249, 0, 1, 1, -8428.48, 959.679, 98.62543, 3.246312, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+139, 35249, 0, 1, 1, -8409.61, 978.616, 97.45783, 5.410521, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+140, 35249, 0, 1, 1, -8397.85, 986.964, 97.22923, 2.251475, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+141, 35249, 0, 1, 1, -8419.83, 966.818, 98.29414, 2.199115, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+142, 1976, 0, 1, 1, -8436.111, 920.9022, 99.03729, 0.5961183, 120, 10, 1), -- 1976 (Area: 5314) (Auras: ) (possible waypoints or random movement) +(@CGUID+143, 35249, 0, 1, 1, -8429.07, 944.83, 101.9763, 5.445427, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+144, 35249, 0, 1, 1, -8437.53, 916.356, 100.2913, 2.775074, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+145, 35249, 0, 1, 1, -8444.32, 907.783, 99.47324, 4.328416, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+146, 35249, 0, 1, 1, -8445.07, 904.75, 100.9043, 1.343904, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+147, 35249, 0, 1, 1, -8431.62, 959.427, 98.66714, 0.1745329, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+148, 35249, 0, 1, 1, -8442.05, 941.366, 98.49464, 2.792527, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+149, 35249, 0, 1, 1, -8453.25, 901.116, 99.80254, 3.281219, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+150, 35249, 0, 1, 1, -8447.63, 943.274, 98.89664, 5.77704, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+151, 35249, 0, 1, 1, -8452.36, 895.509, 99.83193, 2.548181, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+152, 35249, 0, 1, 1, -8449.54, 904.948, 99.66324, 5.131268, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+153, 35249, 0, 1, 1, -8456.92, 921.464, 98.79214, 4.852015, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+154, 35249, 0, 1, 1, -8461.88, 912.771, 98.82104, 3.001966, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+155, 35249, 0, 1, 1, -8466.56, 913.479, 98.60764, 6.108652, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+156, 35249, 0, 1, 1, -8457.18, 899.674, 99.79324, 0.3839724, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+157, 35249, 0, 1, 1, -8459.56, 917.681, 99.24693, 2.129302, 120, 0, 0), -- 35249 (Area: 5314) (Auras: 33900 - 33900) +(@CGUID+158, 34478, 0, 1, 1, -5160.715, -882.7049, 507.359, 1.780236, 120, 0, 0), -- 34478 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+159, 34481, 0, 1, 1, -5166.082, -881.1268, 507.3906, 1.082104, 120, 0, 0), -- 34481 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+160, 35248, 0, 1, 1, -5162.436, -877.1771, 507.3536, 1.43117, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+161, 35247, 0, 1, 1, -5153.846, -872.1893, 508.302, 2.775074, 120, 0, 0), -- 35247 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+162, 35248, 0, 1, 1, -5166.628, -874.4445, 507.213, 0.8377581, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+163, 35248, 0, 1, 1, -5157.137, -875.7795, 507.7673, 2.076942, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+164, 35247, 0, 1, 1, -5154.469, -866.9305, 507.9001, 3.420845, 120, 0, 0), -- 35247 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+165, 35248, 0, 1, 1, -5157.59, -864.2309, 507.5027, 3.996804, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+166, 35248, 0, 1, 1, -5161.997, -863.6632, 507.2816, 4.834562, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+167, 53568, 0, 1, 1, -5216.217, -797.8953, 418.7556, 6.064728, 120, 0, 0), -- 53568 (Area: 809) (Auras: 94357 - 94357) +(@CGUID+168, 35247, 0, 1, 1, -5167.728, -870.4792, 506.7504, 0.2792527, 120, 0, 0), -- 35247 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+169, 35248, 0, 1, 1, -5165.799, -866.6875, 506.8996, 5.8294, 120, 0, 0), -- 35248 (Area: 809) (Auras: 33900 - 33900) +(@CGUID+170, 34480, 1, 1, 1, -971.0174, -79.18056, 18.88194, 1.064651, 120, 0, 0), -- 34480 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+171, 35252, 1, 1, 1, -974.639, -84.059, 20.59403, 1.27409, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+172, 35252, 1, 1, 1, -988.5018, -70.1875, 22.69486, 6.178465, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+173, 35252, 1, 1, 1, -983.618, -74.5417, 20.65583, 0.3665192, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+174, 35252, 1, 1, 1, -984.4879, -82.56944, 21.32398, 1.291544, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+175, 35252, 1, 1, 1, -979.9114, -67.20834, 20.61612, 3.996804, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+176, 35252, 1, 1, 1, -982.0035, -65.58334, 21.96181, 0.4537856, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+177, 35252, 1, 1, 1, -986.094, -79.2986, 21.44523, 1.134464, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+178, 35252, 1, 1, 1, -988.1962, -76.15452, 22.06944, 1.832596, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+179, 35252, 1, 1, 1, -981.708, -76.1372, 20.18573, 4.066617, 120, 0, 0), -- 35252 (Area: -1) (Auras: 33900 - 33900) +(@CGUID+180, 34383, 571, 1, 1, 5852.198, 763.5121, 641.4907, 3.909538, 120, 0, 0), -- 34383 (Area: 4613) +(@CGUID+181, 34383, 1, 1, 1, 1181.736, -4463.108, 21.3423, 1.22173, 120, 0, 0), -- 34383 (Area: 4982) +(@CGUID+182, 34383, 0, 1, 1, 1803.745, 219.5972, 60.44122, 1.361357, 120, 0, 0), -- 34383 (Area: 1497) +(@CGUID+183, 34383, 530, 1, 1, 9409.208, -6841.009, 16.17882, 2.513274, 120, 0, 0), -- 34383 (Area: 3482) +(@CGUID+184, 34383, 530, 1, 1, -1792.271, 4921.308, -21.54488, 2.583087, 120, 0, 0), -- 34383 (Area: 0) +(@CGUID+185, 34383, 530, 1, 1, -4314.365, -12451.16, 17.92535, 5.72468, 120, 0, 0), -- 34383 (Area: 3524) +(@CGUID+186, 34383, 1, 1, 1, 10048.33, 2122.398, 1329.741, 3.141593, 120, 0, 0), -- 34383 (Area: 0) +(@CGUID+187, 34383, 0, 1, 1, -5145.17, -856.0018, 508.7941, 0.9075712, 120, 0, 0), -- 34383 (Area: 809) +(@CGUID+188, 34382, 571, 1, 1, 5850.049, 766.3073, 640.999, 4.468043, 120, 0, 0), -- 34382 (Area: 4613) +(@CGUID+189, 34382, 1, 1, 1, 1179.814, -4461.457, 21.46875, 1.32645, 120, 0, 0), -- 34382 (Area: 4982) +(@CGUID+190, 34382, 0, 1, 1, 1806.538, 219.4236, 60.46583, 1.658063, 120, 0, 0), -- 34382 (Area: 1497) +(@CGUID+191, 34382, 530, 1, 1, 9409.198, -6837.913, 16.30556, 3.630285, 120, 0, 0), -- 34382 (Area: 3482) +(@CGUID+192, 34382, 530, 1, 1, -1788.236, 4925.752, -21.64911, 2.460914, 120, 0, 0), -- 34382 (Area: 0) +(@CGUID+193, 34382, 530, 1, 1, -4312.234, -12449.04, 17.73958, 5.654867, 120, 0, 0), -- 34382 (Area: 3524) +(@CGUID+194, 34382, 1, 1, 1, 10047.92, 2119.156, 1329.741, 3.176499, 120, 0, 0), -- 34382 (Area: 0) +(@CGUID+195, 34382, 0, 1, 1, -8295.12, 911.767, 97.92403, 3.211406, 120, 0, 0), -- 34382 (Area: 5346) +(@CGUID+196, 34382, 0, 1, 1, -5147.535, -853.8264, 508.6631, 0.6981317, 120, 0, 0), -- 34382 (Area: 809) +(@CGUID+197, 34383, 1, 1, 1, -977.6268, -74.53125, 19.17006, 0.2443461, 120, 0, 0), -- 34383 (Area: 5345) +(@CGUID+198, 34382, 1, 1, 1, -978.0226, -72.64584, 19.29325, 0.4014257, 120, 0, 0); -- 34382 (Area: 5345) + +DELETE FROM `game_event_creature` WHERE `eventEntry`=51; +INSERT INTO `game_event_creature` (`eventEntry`, `guid`) VALUES +(51, @CGUID+0), +(51, @CGUID+1), +(51, @CGUID+2), +(51, @CGUID+3), +(51, @CGUID+4), +(51, @CGUID+5), +(51, @CGUID+6), +(51, @CGUID+7), +(51, @CGUID+8), +(51, @CGUID+9), +(51, @CGUID+10), +(51, @CGUID+11), +(51, @CGUID+12), +(51, @CGUID+13), +(51, @CGUID+14), +(51, @CGUID+15), +(51, @CGUID+16), +(51, @CGUID+17), +(51, @CGUID+18), +(51, @CGUID+19), +(51, @CGUID+20), +(51, @CGUID+21), +(51, @CGUID+22), +(51, @CGUID+23), +(51, @CGUID+24), +(51, @CGUID+25), +(51, @CGUID+26), +(51, @CGUID+27), +(51, @CGUID+28), +(51, @CGUID+29), +(51, @CGUID+30), +(51, @CGUID+31), +(51, @CGUID+32), +(51, @CGUID+33), +(51, @CGUID+34), +(51, @CGUID+35), +(51, @CGUID+36), +(51, @CGUID+37), +(51, @CGUID+38), +(51, @CGUID+39), +(51, @CGUID+40), +(51, @CGUID+41), +(51, @CGUID+42), +(51, @CGUID+43), +(51, @CGUID+44), +(51, @CGUID+45), +(51, @CGUID+46), +(51, @CGUID+47), +(51, @CGUID+48), +(51, @CGUID+49), +(51, @CGUID+50), +(51, @CGUID+51), +(51, @CGUID+52), +(51, @CGUID+53), +(51, @CGUID+54), +(51, @CGUID+55), +(51, @CGUID+56), +(51, @CGUID+57), +(51, @CGUID+58), +(51, @CGUID+59), +(51, @CGUID+60), +(51, @CGUID+61), +(51, @CGUID+62), +(51, @CGUID+63), +(51, @CGUID+64), +(51, @CGUID+65), +(51, @CGUID+66), +(51, @CGUID+67), +(51, @CGUID+68), +(51, @CGUID+69), +(51, @CGUID+70), +(51, @CGUID+71), +(51, @CGUID+72), +(51, @CGUID+73), +(51, @CGUID+74), +(51, @CGUID+75), +(51, @CGUID+76), +(51, @CGUID+77), +(51, @CGUID+78), +(51, @CGUID+79), +(51, @CGUID+80), +(51, @CGUID+81), +(51, @CGUID+82), +(51, @CGUID+83), +(51, @CGUID+84), +(51, @CGUID+85), +(51, @CGUID+86), +(51, @CGUID+87), +(51, @CGUID+88), +(51, @CGUID+89), +(51, @CGUID+90), +(51, @CGUID+91), +(51, @CGUID+92), +(51, @CGUID+93), +(51, @CGUID+94), +(51, @CGUID+95), +(51, @CGUID+96), +(51, @CGUID+97), +(51, @CGUID+98), +(51, @CGUID+99), +(51, @CGUID+100), +(51, @CGUID+101), +(51, @CGUID+102), +(51, @CGUID+103), +(51, @CGUID+104), +(51, @CGUID+105), +(51, @CGUID+106), +(51, @CGUID+107), +(51, @CGUID+108), +(51, @CGUID+109), +(51, @CGUID+110), +(51, @CGUID+111), +(51, @CGUID+112), +(51, @CGUID+113), +(51, @CGUID+114), +(51, @CGUID+115), +(51, @CGUID+116), +(51, @CGUID+117), +(51, @CGUID+118), +(51, @CGUID+119), +(51, @CGUID+120), +(51, @CGUID+121), +(51, @CGUID+122), +(51, @CGUID+123), +(51, @CGUID+124), +(51, @CGUID+125), +(51, @CGUID+126), +(51, @CGUID+127), +(51, @CGUID+128), +(51, @CGUID+129), +(51, @CGUID+130), +(51, @CGUID+131), +(51, @CGUID+132), +(51, @CGUID+133), +(51, @CGUID+134), +(51, @CGUID+135), +(51, @CGUID+136), +(51, @CGUID+137), +(51, @CGUID+138), +(51, @CGUID+139), +(51, @CGUID+140), +(51, @CGUID+141), +(51, @CGUID+142), +(51, @CGUID+143), +(51, @CGUID+144), +(51, @CGUID+145), +(51, @CGUID+146), +(51, @CGUID+147), +(51, @CGUID+148), +(51, @CGUID+149), +(51, @CGUID+150), +(51, @CGUID+151), +(51, @CGUID+152), +(51, @CGUID+153), +(51, @CGUID+154), +(51, @CGUID+155), +(51, @CGUID+156), +(51, @CGUID+157), +(51, @CGUID+158), +(51, @CGUID+159), +(51, @CGUID+160), +(51, @CGUID+161), +(51, @CGUID+162), +(51, @CGUID+163), +(51, @CGUID+164), +(51, @CGUID+165), +(51, @CGUID+166), +(51, @CGUID+167), +(51, @CGUID+168), +(51, @CGUID+169), +(51, @CGUID+170), +(51, @CGUID+171), +(51, @CGUID+172), +(51, @CGUID+173), +(51, @CGUID+174), +(51, @CGUID+175), +(51, @CGUID+176), +(51, @CGUID+177), +(51, @CGUID+178), +(51, @CGUID+179), +(51, @CGUID+180), +(51, @CGUID+181), +(51, @CGUID+182), +(51, @CGUID+183), +(51, @CGUID+184), +(51, @CGUID+185), +(51, @CGUID+186), +(51, @CGUID+187), +(51, @CGUID+188), +(51, @CGUID+189), +(51, @CGUID+190), +(51, @CGUID+191), +(51, @CGUID+192), +(51, @CGUID+193), +(51, @CGUID+194), +(51, @CGUID+195), +(51, @CGUID+196), +(51, @CGUID+197), +(51, @CGUID+198); From e31253671098cc61c34b68b7a9aad9afde61baf3 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 8 Nov 2015 21:31:00 +0000 Subject: [PATCH 305/524] DB/Misc: Commoners (Day of the Dead) * Spawn commoners for this event * Add Gossip for event http://www.wowhead.com/spell=65529/gossip-npc-appearance-day-of-the-dead-dotd does not appear to work, this aura should give npcs the same model (if not very similar to) the one which players get when they /dance with Catrina. --- sql/2015_11_01_01_world.sql | 154 ++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 sql/2015_11_01_01_world.sql diff --git a/sql/2015_11_01_01_world.sql b/sql/2015_11_01_01_world.sql new file mode 100644 index 0000000000..b14c62fd9f --- /dev/null +++ b/sql/2015_11_01_01_world.sql @@ -0,0 +1,154 @@ +SET @CGUID := 86984; + +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `source_type`=0 AND `id` =12; +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 +(19148,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Dwarf Commoner - On Gossip Hello - Send Gossip'), +(19171,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Dreanei Commoner - On Gossip Hello - Send Gossip'), +(20102,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Goblin Commoner - On Gossip Hello - Send Gossip'), +(19172,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Gnome Commoner - On Gossip Hello - Send Gossip'), +(19173,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Night Elf Commoner - On Gossip Hello - Send Gossip'), +(18927,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Human Commoner - On Gossip Hello - Send Gossip'), +(19175,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Orc Commoner - On Gossip Hello - Send Gossip'), +(19176,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Tauren Commoner - On Gossip Hello - Send Gossip'), +(19177,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Troll Commoner - On Gossip Hello - Send Gossip'), +(19178,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Forsaken Commoner - On Gossip Hello - Send Gossip'), +(19169,0,12,0,64,0,100,0,0,0,0,0,98,10513,14544,0,0,0,0,7,0,0,0,0,0,0,0,'Blood Elf Commoner - On Gossip Hello - Send Gossip'); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` in(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `SourceGroup`=13; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 13, 19148, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 20102, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 18927, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 19171, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 19172, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 19173, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 19175, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 19176, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 19177, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 19178, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'), +(22, 13, 19169, 0, 0, 12, 1, 51, 0, 0, 0, 0, 0, '', 'Commoner - DOTD must be active'); + +UPDATE `smart_scripts` SET `target_type`=7 WHERE `entryorguid` IN(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `source_type`=0 AND `id`=11; + + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+3110; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 18927, 571, 1, 1, 5740.709, 686.1215, 643.8965, 3.822271, 120, 0, 0), -- 18927 (Area: 4395) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+1, 18927, 571, 1, 1, 5739.358, 684.6215, 644.1913, 0.8726646, 120, 0, 0), -- 18927 (Area: 4395) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+2, 20102, 571, 1, 1, 5777.649, 728.8993, 618.6356, 0.1396263, 120, 0, 0), -- 20102 (Area: 4739) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+3, 20102, 571, 1, 1, 5779.502, 729.0729, 618.6434, 3.228859, 120, 0, 0), -- 20102 (Area: 4739) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+4, 19169, 571, 1, 1, 5942.946, 629.2344, 650.668, 1.570796, 120, 0, 0), -- 19169 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+5, 19169, 571, 1, 1, 5943.168, 630.8941, 650.6661, 4.904375, 120, 0, 0), -- 19169 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+6, 19169, 571, 1, 1, 5899.039, 532.7656, 640.9794, 4.904375, 120, 0, 0), -- 19169 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+7, 19169, 571, 1, 1, 5899.096, 530.8976, 641.0562, 1.675516, 120, 0, 0), -- 19169 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+8, 18927, 571, 1, 1, 5664.31, 666.2726, 652.064, 1.396263, 120, 0, 0), -- 18927 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+9, 18927, 571, 1, 1, 5664.366, 668.0469, 652.0507, 4.904375, 120, 0, 0), -- 18927 (Area: 4613) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+10, 19177, 1, 1, 1, 1773.523, -4360.087, 102.4606, 1.291544, 120, 0, 0), -- 19177 (Area: 5166) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+11, 19177, 1, 1, 1, 1774.47, -4356.316, 102.4248, 4.485496, 120, 0, 0), -- 19177 (Area: 5166) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+12, 19175, 1, 1, 1, 1614.998, -4402.952, 15.43872, 0.1570796, 120, 0, 0), -- 19175 (Area: 5170) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+13, 19175, 1, 1, 1, 1616.771, -4402.656, 15.60533, 3.333579, 120, 0, 0), -- 19175 (Area: 5170) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+14, 19178, 0, 1, 1, 1627.801, 224.57, -43.01935, 4.153883, 120, 0, 0), -- 19178 (Area: 1497) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+15, 19178, 0, 1, 1, 1626.697, 222.6995, -43.01934, 1.012291, 120, 0, 0), -- 19178 (Area: 1497) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+16, 19178, 0, 1, 1, 1574.551, 267.5832, -43.01934, 3.769911, 120, 0, 0), -- 19178 (Area: 1497) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+17, 19178, 0, 1, 1, 1573.045, 265.9552, -43.01934, 0.5934119, 120, 0, 0), -- 19178 (Area: 1497) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+18, 19169, 530, 1, 1, 9687.96, -7346.092, 11.95602, 1.500983, 120, 0, 0), -- 19169 (Area: 3487) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+19, 19169, 530, 1, 1, 9689.333, -7345.386, 11.91436, 4.206244, 120, 0, 0), -- 19169 (Area: 3487) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+20, 19169, 530, 1, 1, 9374.669, -7155.088, 9.336748, 4.956735, 120, 0, 0), -- 19169 (Area: 0) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+21, 19169, 530, 1, 1, 9375.072, -7157.061, 9.255877, 1.605703, 120, 0, 0), -- 19169 (Area: 0) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+22, 20102, 530, 1, 1, -1917.814, 5441.85, -12.34484, 2.356194, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+23, 20102, 530, 1, 1, -1920.168, 5443.518, -12.34484, 5.864306, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+24, 20102, 530, 1, 1, -1875.934, 5376.202, -12.34478, 0.8203048, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+25, 20102, 530, 1, 1, -1875.055, 5378.035, -12.34478, 4.363323, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+26, 20102, 530, 1, 1, -1809.925, 5418.637, -12.34485, 5.550147, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+27, 20102, 530, 1, 1, -1808.356, 5417.01, -12.34484, 2.321288, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+28, 20102, 530, 1, 1, -1818.988, 5305.674, -12.34481, 4.031711, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+29, 20102, 530, 1, 1, -1821.118, 5303.345, -12.34481, 0.7679449, 120, 0, 0), -- 20102 (Area: 3703) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+30, 19171, 530, 1, 1, -4270.058, -11333.09, 5.575455, 4.677482, 120, 0, 0), -- 19171 (Area: 3479) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+31, 19171, 530, 1, 1, -4269.713, -11336.51, 5.809308, 1.692969, 120, 0, 0), -- 19171 (Area: 3479) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+32, 19173, 1, 1, 1, 9922.972, 2498.76, 1317.861, 2.443461, 120, 0, 0), -- 19173 (Area: 0) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+33, 19173, 1, 1, 1, 9921.564, 2499.585, 1317.771, 5.61996, 120, 0, 0), -- 19173 (Area: 0) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+34, 18927, 0, 1, 1, -8366.161, 615.2257, 95.35417, 2.635447, 120, 0, 0), -- 18927 (Area: 5314) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+35, 18927, 0, 1, 1, -8368.196, 616.2344, 95.25559, 5.846853, 120, 0, 0), -- 18927 (Area: 5314) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+36, 19148, 0, 1, 1, -4900.874, -957.3143, 501.5414, 4.171337, 120, 0, 0), -- 19148 (Area: 5719) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) +(@CGUID+37, 19148, 0, 1, 1, -4901.802, -958.9554, 501.5429, 1.012291, 120, 0, 0); -- 19148 (Area: 5719) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) + +DELETE FROM `game_event_creature` WHERE `eventEntry`=51 AND `guid` BETWEEN @CGUID+0 AND @CGUID+37 ; +INSERT INTO `game_event_creature` (`eventEntry`, `guid`) VALUES +(51, @CGUID+0), +(51, @CGUID+1), +(51, @CGUID+2), +(51, @CGUID+3), +(51, @CGUID+4), +(51, @CGUID+5), +(51, @CGUID+6), +(51, @CGUID+7), +(51, @CGUID+8), +(51, @CGUID+9), +(51, @CGUID+10), +(51, @CGUID+11), +(51, @CGUID+12), +(51, @CGUID+13), +(51, @CGUID+14), +(51, @CGUID+15), +(51, @CGUID+16), +(51, @CGUID+17), +(51, @CGUID+18), +(51, @CGUID+19), +(51, @CGUID+20), +(51, @CGUID+21), +(51, @CGUID+22), +(51, @CGUID+23), +(51, @CGUID+24), +(51, @CGUID+25), +(51, @CGUID+26), +(51, @CGUID+27), +(51, @CGUID+28), +(51, @CGUID+29), +(51, @CGUID+30), +(51, @CGUID+31), +(51, @CGUID+32), +(51, @CGUID+33), +(51, @CGUID+34), +(51, @CGUID+35), +(51, @CGUID+36), +(51, @CGUID+37); + +DELETE FROM `creature_addon` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+37; +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(@CGUID+0, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+1, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+2, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+3, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+4, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+5, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+6, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+7, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+8, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+9, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+10, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+11, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+12, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+13, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+14, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+15, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+16, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+17, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+18, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+19, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+20, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+21, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+22, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+23, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+24, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+25, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+26, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+27, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+28, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+29, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+30, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+31, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+32, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+33, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+34, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+35, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+36, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'), +(@CGUID+37, 0, 0, 0x0, 0x1, 0, '65529 33209 33207 33208'); From 1fc7aa9c720109e613bf193bf422fdfb42545bae Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 8 Nov 2015 21:36:38 +0000 Subject: [PATCH 306/524] correct typo --- sql/2015_11_01_01_world.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/2015_11_01_01_world.sql b/sql/2015_11_01_01_world.sql index b14c62fd9f..f5642f73af 100644 --- a/sql/2015_11_01_01_world.sql +++ b/sql/2015_11_01_01_world.sql @@ -30,7 +30,7 @@ INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry UPDATE `smart_scripts` SET `target_type`=7 WHERE `entryorguid` IN(20102,18927,19177,19169,19175,19171,19172,19176,19178,19173,19148) AND `source_type`=0 AND `id`=11; -DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+3110; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+37; INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES (@CGUID+0, 18927, 571, 1, 1, 5740.709, 686.1215, 643.8965, 3.822271, 120, 0, 0), -- 18927 (Area: 4395) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) (@CGUID+1, 18927, 571, 1, 1, 5739.358, 684.6215, 644.1913, 0.8726646, 120, 0, 0), -- 18927 (Area: 4395) (Auras: 65529 - 65529, 33209 - 33209, 33207 - 33207, 33208 - 33208) From 43b114ecdb7a4836d997e812bcf85668b5aaa573 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 8 Nov 2015 21:49:35 +0000 Subject: [PATCH 307/524] Move file to correct location --- .../world/2015_11_08_01_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/{2015_11_01_01_world.sql => updates/world/2015_11_08_01_world.sql} (100%) diff --git a/sql/2015_11_01_01_world.sql b/sql/updates/world/2015_11_08_01_world.sql similarity index 100% rename from sql/2015_11_01_01_world.sql rename to sql/updates/world/2015_11_08_01_world.sql From afd69f05b6e687814b7fa2e4407786804fb76b33 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 9 Nov 2015 01:11:19 +0100 Subject: [PATCH 308/524] DB/Quest: Aberrations Closes #8492 --- sql/updates/world/2015_11_09_00_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2015_11_09_00_world.sql diff --git a/sql/updates/world/2015_11_09_00_world.sql b/sql/updates/world/2015_11_09_00_world.sql new file mode 100644 index 0000000000..6fd5dec39b --- /dev/null +++ b/sql/updates/world/2015_11_09_00_world.sql @@ -0,0 +1,6 @@ +-- +SET @obj := 191840; +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@obj; +DELETE FROM `smart_scripts` WHERE `source_type`=1 AND `entryorguid`=@obj; +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 +(@obj,1,0,0,70,0,100,1,2,0,0,0,41,500,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Plagued Proto-Drake Egg - In GO_STATE_CHANGED - despawn'); From 7f5850d94fb5b9fbc0421d2402860d5a24cac0f0 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 9 Nov 2015 14:32:05 +0100 Subject: [PATCH 309/524] DB/Misc: Add missing gossip option text for Brassbolt Mechawrench and Reginald Arcfire Replace vendor of the brewfest condition by achievement instead of quest --- sql/updates/world/2015_11_09_01_world.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2015_11_09_01_world.sql diff --git a/sql/updates/world/2015_11_09_01_world.sql b/sql/updates/world/2015_11_09_01_world.sql new file mode 100644 index 0000000000..e9360cf896 --- /dev/null +++ b/sql/updates/world/2015_11_09_01_world.sql @@ -0,0 +1,5 @@ +-- +UPDATE `gossip_menu_option` SET `option_text`="What's on the auction house today?", `OptionBroadcastTextID`=35877 WHERE `menu_id`=10656 AND id=0; + +UPDATE `conditions` SET `ConditionTypeOrReference`=17, `ConditionValue1`=2796, `comment`="Only allow players who have the achievement Brew of the Month to access vendor" WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9549 AND `ElseGroup`=0; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=9549 AND `ElseGroup`=2; From f5494ed10a277e88d0d89f927523067378601f95 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Mon, 9 Nov 2015 16:48:21 +0000 Subject: [PATCH 310/524] DB/Misc: Fix errors Closes #15842 --- sql/updates/world/2015_11_09_02_world.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2015_11_09_02_world.sql diff --git a/sql/updates/world/2015_11_09_02_world.sql b/sql/updates/world/2015_11_09_02_world.sql new file mode 100644 index 0000000000..84c0fd423a --- /dev/null +++ b/sql/updates/world/2015_11_09_02_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `creature_template_addon` WHERE `entry` in(46891,46894,46901,46908); + +DELETE FROM `creature` WHERE `guid` in(144891,144867,144862,144861,144859,144929,144931,144934,144942,144946,144948,144950,145010); + +DELETE FROM `game_event_creature` WHERE `guid` in(144891,144867,144862,144861,144859,144929,144931,144934,144942,144946,144948,144950,145010); + +DELETE FROM `game_event_gameobject` WHERE `guid` in (78509,78510,78511,78655,78656,78657,78658,78659,78660,78661,78662,78663,78664,78665,78666,78667,78735,78736,78737,78738,78739,78740,78741,78742,78743,78744,78745,78746,78747,78748,78749,78750,78751,78752,78752,78753,78754); From 03740e4b027a7d434b41ce9f54ff56fc1d0785e5 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Mon, 9 Nov 2015 16:51:06 +0000 Subject: [PATCH 311/524] Rename 2015_11_09_02_world.sql to 2015_11_09_02_world335.sql --- .../world/{2015_11_09_02_world.sql => 2015_11_09_02_world335.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_11_09_02_world.sql => 2015_11_09_02_world335.sql} (100%) diff --git a/sql/updates/world/2015_11_09_02_world.sql b/sql/updates/world/2015_11_09_02_world335.sql similarity index 100% rename from sql/updates/world/2015_11_09_02_world.sql rename to sql/updates/world/2015_11_09_02_world335.sql From 52394eb93cab93e1edc930e8a0af7572b15b2b06 Mon Sep 17 00:00:00 2001 From: Carbenium Date: Mon, 9 Nov 2015 23:34:50 +0100 Subject: [PATCH 312/524] Core/ObjectMgr: Disable not linked graveyard error log for zoneId == 0 --- src/server/game/Globals/ObjectMgr.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 622ed02e2b..858cb79c6d 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -6001,7 +6001,8 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(float x, float y, float // not need to check validity of map object; MapId _MUST_ be valid here if (range.first == range.second && !map->IsBattlegroundOrArena()) { - TC_LOG_ERROR("sql.sql", "Table `game_graveyard_zone` incomplete: Zone %u Team %u does not have a linked graveyard.", zoneId, team); + if (zoneId != 0) // zone == 0 can't be fixed, used by bliz for bugged zones + TC_LOG_ERROR("sql.sql", "Table `game_graveyard_zone` incomplete: Zone %u Team %u does not have a linked graveyard.", zoneId, team); return GetDefaultGraveYard(team); } From 2a36b009070e1d151c7a2e0e3fa13a348d10333c Mon Sep 17 00:00:00 2001 From: Carbenium Date: Tue, 10 Nov 2015 00:05:35 +0100 Subject: [PATCH 313/524] Core/Player: Improve a log message (cherry picked from commit 7eb314fcd16c2265daf0948c6744a9f206da3150) --- src/server/game/Entities/Player/Player.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 97c4a78fc9..3d11e786d5 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -21428,7 +21428,7 @@ void Player::InitDisplayIds() PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); if (!info) { - TC_LOG_ERROR("entities.player", "Player %u has incorrect race/class pair. Can't init display ids.", GetGUID().GetCounter()); + TC_LOG_ERROR("entities.player", "Player %s (%s) has incorrect race/class pair. Can't init display ids.", GetName().c_str(), GetGUID().ToString().c_str()); return; } @@ -21444,8 +21444,7 @@ void Player::InitDisplayIds() SetNativeDisplayId(info->displayId_m); break; default: - TC_LOG_ERROR("entities.player", "Invalid gender %u for player", gender); - return; + TC_LOG_ERROR("entities.player", "Player %s (%s) has invalid gender %u", GetName().c_str(), GetGUID().ToString().c_str(), gender); } } From 5f24fd6c51350b391bb30b53bd813c1ec25f3248 Mon Sep 17 00:00:00 2001 From: robinsch Date: Mon, 1 Jun 2015 07:31:30 +0200 Subject: [PATCH 314/524] [3.3.5] Core/Spells: break Stealth and modify Stand State by @robinsch; closes #14819 Currently (562da2e), only harmful CC spells will break stealth and modify the unit stand state. This behaviour is wrong. Any harmful spell hit should break stealth and modify the stand state. There are a few exceptions for this mechanic, such as: - Mass Dispel (priest spell ID 32375, 32592, 39897) - Earthbind Totem (Pulse) (spell ID 3600) - Distract (rogue spell ID 1725) --- sql/updates/world/2015_mm_dd_nn_world.sql | 22 +++++++++++++++++++++ src/server/game/Spells/Spell.cpp | 9 ++++----- src/server/game/Spells/SpellInfo.h | 2 +- src/server/game/Spells/SpellMgr.cpp | 24 ----------------------- 4 files changed, 27 insertions(+), 30 deletions(-) create mode 100644 sql/updates/world/2015_mm_dd_nn_world.sql diff --git a/sql/updates/world/2015_mm_dd_nn_world.sql b/sql/updates/world/2015_mm_dd_nn_world.sql new file mode 100644 index 0000000000..9470f810fb --- /dev/null +++ b/sql/updates/world/2015_mm_dd_nn_world.sql @@ -0,0 +1,22 @@ +DELETE FROM `spell_custom_attr` WHERE `entry` IN (1130,1725,3600,14323,14324,14325,32375,32592,39897,42650,43263,43264,53338,58831,58832,58833,58834,58838); +INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES +(1130, 64), -- Hunter spell 1130, Hunter's Mark Rank 1 +(1725, 64), -- Rogue spell 1725, Distract +(3600, 64), -- Greater Earthbind Totem spell 3600, Earthbind +(14323, 64), -- Hunter spell 14323, Hunter's Mark Rank 2 +(14324, 64), -- Hunter spell 14324, Hunter's Mark Rank 3 +(14325, 64), -- Hunter spell 14325, Hunter's Mark Rank 4 +(32375, 64), -- Priest Discipline spell 32375, Mass Dispel +(32592, 64), -- Priest Discipline spell 32592, Mass Dispel +-- Spell ID 35009 - Server-side - Invisibility - Reducing threat +(35009, 64), -- Triggered by Mage Invisibility (Level 68), spells 66 & 67765 +(39897, 64), -- Priest Discipline spell 39897, Mass Dispel +(42650, 64), -- Death Knight Unholy spell 42650, Army of the Dead +(43263, 64), -- Ghoul level 66 spell 43263, Ghoul Taunt +(43264, 64), -- Periodic Taunt, Trigger for Ghoul Taunt +(53338, 64), -- Hunter spell 53338, Hunter's Mark Rank 5 +(58831, 64), -- Mirror Image, spawns left Mirror Image NPC +(58832, 64), -- Mirror Image, Triggers 58831,58833,58834 +(58833, 64), -- Mirror Image, spawns center Mirror Image NPC +(58834, 64), -- Mirror Image, spawns right Mirror Image NPC +(58838, 64); -- Inherit Master's Threat List diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 76eefa0bb0..9826734623 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2428,9 +2428,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) { m_caster->CombatStart(unit, !m_spellInfo->HasAttribute(SPELL_ATTR3_NO_INITIAL_AGGRO)); - if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC)) - if (!unit->IsStandState()) - unit->SetStandState(UNIT_STAND_STATE_STAND); + if (!unit->IsStandState()) + unit->SetStandState(UNIT_STAND_STATE_STAND); } if (spellHitTarget) @@ -2514,8 +2513,8 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA if (m_caster->_IsValidAttackTarget(unit, m_spellInfo)) { unit->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_HITBYSPELL); - /// @todo This is a hack. But we do not know what types of stealth should be interrupted by CC - if (m_spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC) && unit->IsControlledByPlayer()) + + if (!m_spellInfo->HasAttribute(SPELL_ATTR0_CU_DONT_BREAK_STEALTH)) unit->RemoveAurasByType(SPELL_AURA_MOD_STEALTH); } else if (m_caster->IsFriendlyTo(unit)) diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 241e7df954..d042f926d0 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -176,7 +176,7 @@ enum SpellCustomAttributes SPELL_ATTR0_CU_CONE_LINE = 0x00000004, SPELL_ATTR0_CU_SHARE_DAMAGE = 0x00000008, SPELL_ATTR0_CU_NO_INITIAL_THREAT = 0x00000010, - SPELL_ATTR0_CU_AURA_CC = 0x00000040, + SPELL_ATTR0_CU_DONT_BREAK_STEALTH = 0x00000040, SPELL_ATTR0_CU_DIRECT_DAMAGE = 0x00000100, SPELL_ATTR0_CU_CHARGE = 0x00000200, SPELL_ATTR0_CU_PICKPOCKET = 0x00000400, diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 6305d0a456..019b9e6f4d 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2801,14 +2801,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes() { switch (spellInfo->Effects[j].ApplyAuraName) { - case SPELL_AURA_MOD_POSSESS: - case SPELL_AURA_MOD_CONFUSE: - case SPELL_AURA_MOD_CHARM: - case SPELL_AURA_AOE_CHARM: - case SPELL_AURA_MOD_FEAR: - case SPELL_AURA_MOD_STUN: - spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CC; - break; case SPELL_AURA_PERIODIC_HEAL: case SPELL_AURA_PERIODIC_DAMAGE: case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: @@ -2901,22 +2893,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes() if (spellInfo->SpellVisual[0] == 3879) spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_BACK; - switch (spellInfo->SpellFamilyName) - { - case SPELLFAMILY_WARRIOR: - // Shout - if (spellInfo->SpellFamilyFlags[0] & 0x20000 || spellInfo->SpellFamilyFlags[1] & 0x20) - spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CC; - break; - case SPELLFAMILY_DRUID: - // Roar - if (spellInfo->SpellFamilyFlags[0] & 0x8) - spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CC; - break; - default: - break; - } - spellInfo->_InitializeExplicitTargetMask(); } From f067bd8d9094b5c572db7dd5fb8c23d74a161bce Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 10 Nov 2015 15:40:33 +0100 Subject: [PATCH 315/524] DB/SAI: Add missing text for Lore Keeper of Norgannon --- sql/updates/world/2015_11_10_00_world.sql | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 sql/updates/world/2015_11_10_00_world.sql diff --git a/sql/updates/world/2015_11_10_00_world.sql b/sql/updates/world/2015_11_10_00_world.sql new file mode 100644 index 0000000000..6e969f288f --- /dev/null +++ b/sql/updates/world/2015_11_10_00_world.sql @@ -0,0 +1,24 @@ +-- +DELETE FROM `creature_text` WHERE `entry` = 33686; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES +(33686, 0, 0, 'I was constructed to serve as a repository for essential information regarding this complex. My primary functions include communicating the status of the frontal defense systems and assessing the status of the entity that this complex was built to imprison.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_1', 33703), +(33686, 1, 0, 'Access to the interior of the complex is currently restricted. Primary defensive emplacements are active. Secondary systems are currently non-active.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_2', 33705), +(33686, 2, 0, 'Compromise of complex detected, security override enabled - query permitted.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_3', 33707), +(33686, 3, 0, 'Primary defensive emplacements consist of iron constructs and Storm Beacons, which will generate additional constructs as necessary. Secondary systems consist of orbital defense emplacements.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_4', 33712), +(33686, 4, 0, 'Entity designate: Yogg-Saron. Security has been compromised. Prison operational status unknown. Unable to contact Watchers for notification purposes.', 12, 0, 0, 0, 0, 0, 'Norgannon SAY_EVENT_5', 33711); + +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(3370100) 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 +(3370100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 0'), +(3370100, 9, 1, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 33686, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 0 (Lore Keeper of Norgannon)'), +(3370100, 9, 2, 0, 0, 0, 100, 0, 13000, 13000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 1'), +(3370100, 9, 3, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 33686, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 1 (Lore Keeper of Norgannon)'), +(3370100, 9, 4, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 2'), +(3370100, 9, 5, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 33686, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 2 (Lore Keeper of Norgannon)'), +(3370100, 9, 6, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 33686, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 3 (Lore Keeper of Norgannon)'), +(3370100, 9, 7, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 3'), +(3370100, 9, 8, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 4'), +(3370100, 9, 9, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 5'), +(3370100, 9, 10, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 33696, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Set Data to Archmage Rhydian'), +(3370100, 9, 11, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 4, 0, 0, 0, 0, 0, 19, 33686 , 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 4 (Lore Keeper of Norgannon)'), +(3370100, 9, 12, 0, 0, 0, 100, 0, 13000, 13000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'High Explorer Dellorah - Script - Say Line 6'); From df9b09495cda27359a18df157f3fd691731660e1 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 10 Nov 2015 16:04:13 +0100 Subject: [PATCH 316/524] Rename 2015_11_8_00_world.sql to 2015_11_08_00_world.sql --- .../world/{2015_11_8_00_world.sql => 2015_11_08_00_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_11_8_00_world.sql => 2015_11_08_00_world.sql} (100%) diff --git a/sql/updates/world/2015_11_8_00_world.sql b/sql/updates/world/2015_11_08_00_world.sql similarity index 100% rename from sql/updates/world/2015_11_8_00_world.sql rename to sql/updates/world/2015_11_08_00_world.sql From 311a8df4b70d89780388213ab97e8a8186d5146b Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 10 Nov 2015 16:13:21 +0100 Subject: [PATCH 317/524] DB: Fix a DB error --- sql/updates/world/2015_11_10_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_11_10_01_world.sql diff --git a/sql/updates/world/2015_11_10_01_world.sql b/sql/updates/world/2015_11_10_01_world.sql new file mode 100644 index 0000000000..fe9c0b1b8e --- /dev/null +++ b/sql/updates/world/2015_11_10_01_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `game_event_creature` WHERE `guid`= 144883; From abd4e2e0f1142b8a9edfe31e58bdbca1d4e87c42 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Tue, 10 Nov 2015 21:14:18 +0100 Subject: [PATCH 318/524] Core/Commands: Fix NULL dereference crash Closes #15833 --- src/server/game/Chat/Chat.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 161aefdfc6..c99fe62f11 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -1131,7 +1131,7 @@ void ChatHandler::extractOptFirstArg(char* args, char** arg1, char** arg2) char* ChatHandler::extractQuotedArg(char* args) { - if (!*args) + if (!args || !*args) return NULL; if (*args == '"') From ade33880ba323d9de991794d2477d25b2016c881 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 10 Nov 2015 22:46:25 +0100 Subject: [PATCH 319/524] DB/Object: Fix 2 objects in The Eye --- sql/updates/world/2015_11_10_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_11_10_02_world.sql diff --git a/sql/updates/world/2015_11_10_02_world.sql b/sql/updates/world/2015_11_10_02_world.sql new file mode 100644 index 0000000000..8ff255defa --- /dev/null +++ b/sql/updates/world/2015_11_10_02_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `gameobject_template` SET `faction`=1375, `flags`=32 WHERE `entry` IN (184597, 184596); From c5f635b6896abaa3b9a2242c63c61a37fc60bf80 Mon Sep 17 00:00:00 2001 From: Carbenium Date: Tue, 10 Nov 2015 19:58:13 +0100 Subject: [PATCH 320/524] Core/Creature: Remove duplicate call to LoadCreatureAddons in Creature::Create * Add error log for duplicated aura entries in creature_(template_)addon --- src/server/game/Entities/Creature/Creature.cpp | 13 +++---------- src/server/game/Entities/Creature/Creature.h | 2 +- src/server/game/Globals/ObjectMgr.cpp | 12 ++++++++++++ .../MovementGenerators/HomeMovementGenerator.cpp | 2 +- .../IcecrownCitadel/boss_valithria_dreamwalker.cpp | 4 ++-- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 6c48cfd650..9173d44ae8 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -440,7 +440,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/) ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); } - LoadCreaturesAddon(true); + LoadCreaturesAddon(); UpdateMovementFlags(); return true; } @@ -821,8 +821,6 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, u break; } - LoadCreaturesAddon(); - //! Need to be called after LoadCreaturesAddon - MOVEMENTFLAG_HOVER is set there if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) { @@ -1558,7 +1556,7 @@ void Creature::setDeathState(DeathState s) if (GetCreatureData() && GetPhaseMask() != GetCreatureData()->phaseMask) SetPhaseMask(GetCreatureData()->phaseMask, false); Unit::setDeathState(ALIVE); - LoadCreaturesAddon(true); + LoadCreaturesAddon(); } } @@ -2064,7 +2062,7 @@ CreatureAddon const* Creature::GetCreatureAddon() const } //creature_addon table -bool Creature::LoadCreaturesAddon(bool reload) +bool Creature::LoadCreaturesAddon() { CreatureAddon const* cainfo = GetCreatureAddon(); if (!cainfo) @@ -2130,12 +2128,7 @@ bool Creature::LoadCreaturesAddon(bool reload) // skip already applied aura if (HasAura(*itr)) - { - if (!reload) - TC_LOG_ERROR("sql.sql", "Creature (GUID: %u Entry: %u) has duplicate aura (spell %u) in `auras` field.", GetSpawnId(), GetEntry(), *itr); - continue; - } AddAura(*itr, this); TC_LOG_DEBUG("entities.unit", "Spell: %u added to creature (GUID: %u Entry: %u)", *itr, GetGUID().GetCounter(), GetEntry()); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index df83a2f9c0..9a41c8570e 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -432,7 +432,7 @@ class Creature : public Unit, public GridObject, public MapObject void DisappearAndDie(); bool Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32 entry, float x, float y, float z, float ang, CreatureData const* data = nullptr, uint32 vehId = 0); - bool LoadCreaturesAddon(bool reload = false); + bool LoadCreaturesAddon(); void SelectLevel(); void LoadEquipment(int8 id = 1, bool force = false); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 858cb79c6d..046ce422cd 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -555,6 +555,12 @@ void ObjectMgr::LoadCreatureTemplateAddons() if (AdditionalSpellInfo->HasAura(SPELL_AURA_CONTROL_VEHICLE)) TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has SPELL_AURA_CONTROL_VEHICLE aura %lu defined in `auras` field in `creature_template_addon`.", entry, atoul(*itr)); + if (std::find(creatureAddon.auras.begin(), creatureAddon.auras.end(), atoul(*itr)) != creatureAddon.auras.end()) + { + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has duplicate aura (spell %lu) in `auras` field in `creature_template_addon`.", entry, atoul(*itr)); + continue; + } + creatureAddon.auras[i++] = atoul(*itr); } @@ -1003,6 +1009,12 @@ void ObjectMgr::LoadCreatureAddons() if (AdditionalSpellInfo->HasAura(SPELL_AURA_CONTROL_VEHICLE)) TC_LOG_ERROR("sql.sql", "Creature (GUID: %u) has SPELL_AURA_CONTROL_VEHICLE aura %lu defined in `auras` field in `creature_addon`.", guid, atoul(*itr)); + if (std::find(creatureAddon.auras.begin(), creatureAddon.auras.end(), atoul(*itr)) != creatureAddon.auras.end()) + { + TC_LOG_ERROR("sql.sql", "Creature (GUID: %u) has duplicate aura (spell %lu) in `auras` field in `creature_addon`.", guid, atoul(*itr)); + continue; + } + creatureAddon.auras[i++] = atoul(*itr); } diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index 4245bffb86..7ab7534199 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -33,7 +33,7 @@ void HomeMovementGenerator::DoFinalize(Creature* owner) { owner->ClearUnitState(UNIT_STATE_EVADE); owner->SetWalk(true); - owner->LoadCreaturesAddon(true); + owner->LoadCreaturesAddon(); owner->AI()->JustReachedHome(); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index f9d5a31052..4a76dc667e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -309,7 +309,7 @@ class boss_valithria_dreamwalker : public CreatureScript { me->SetHealth(_spawnHealth); me->SetReactState(REACT_PASSIVE); - me->LoadCreaturesAddon(true); + me->LoadCreaturesAddon(); // immune to percent heals me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_OBS_MOD_HEALTH, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_HEAL_PCT, true); @@ -1072,7 +1072,7 @@ class npc_dream_cloud : public CreatureScript _events.Reset(); _events.ScheduleEvent(EVENT_CHECK_PLAYER, 1000); me->SetCorpseDelay(0); // remove corpse immediately - me->LoadCreaturesAddon(true); + me->LoadCreaturesAddon(); } void UpdateAI(uint32 diff) override From 9e2330f5756917720685fe29c9a65da843227917 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Wed, 11 Nov 2015 01:22:54 +0100 Subject: [PATCH 321/524] DB/Object: Add general spawns missing in Northrend --- sql/updates/world/2015_11_11_00_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2015_11_11_00_world.sql diff --git a/sql/updates/world/2015_11_11_00_world.sql b/sql/updates/world/2015_11_11_00_world.sql new file mode 100644 index 0000000000..07393641f3 --- /dev/null +++ b/sql/updates/world/2015_11_11_00_world.sql @@ -0,0 +1,6 @@ +SET @OGUID:=6354; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2; +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, 185454, 571, 1, 1, 5491.154, -2652.184, 303.9539, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 185454 (Area: 4275) +(@OGUID+1, 185456, 571, 1, 1, 3393.345, -2801.472, 211.3246, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 185456 (Area: 0) +(@OGUID+2, 185434, 571, 1, 1, 5527.56, -2646.927, 303.9539, 2.600535, 0, 0, 0, 1, 120, 255, 1); -- 185434 (Area: 4275) From a9cb25e55f2c6ff8e819fa0746e4f19d804f6341 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Wed, 11 Nov 2015 01:24:53 +0100 Subject: [PATCH 322/524] DB/Event: Add all Hallow's End spawns in Northrend! --- sql/updates/world/2015_11_11_01_world.sql | 2479 +++++++++++++++++++++ 1 file changed, 2479 insertions(+) create mode 100644 sql/updates/world/2015_11_11_01_world.sql diff --git a/sql/updates/world/2015_11_11_01_world.sql b/sql/updates/world/2015_11_11_01_world.sql new file mode 100644 index 0000000000..3c1ce85ec1 --- /dev/null +++ b/sql/updates/world/2015_11_11_01_world.sql @@ -0,0 +1,2479 @@ +SET @OGUID:=81188; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2471; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0001,180415, 571, 1, 1, 5231.531, -1307.568, 242.9937, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0002,180415, 571, 1, 1, 5231.807, -1317.45, 242.3508, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0003,180415, 571, 1, 1, 5232.045, -1311.97, 242.4411, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0004,180415, 571, 1, 1, 5228.543, -1303.112, 242.7879, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0005,180415, 571, 1, 1, 5223.873, -1297.311, 242.7593, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0006,180415, 571, 1, 1, 5219.208, -1294.684, 243.2743, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0007,180415, 571, 1, 1, 5219.888, -1333.076, 242.3786, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0008,180415, 571, 1, 1, 5214.489, -1333.5, 242.7952, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0009,180415, 571, 1, 1, 5200.362, -1331.64, 243.263, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0010,180415, 571, 1, 1, 5205.63, -1333.422, 243.3845, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0011,180415, 571, 1, 1, 5174.615, -2200.075, 237.0793, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0012,180415, 571, 1, 1, 5181.025, -2200.378, 238.9339, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0013,180415, 571, 1, 1, 5147.62, -2198.052, 237.614, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0014,180415, 571, 1, 1, 5179.311, -2200.378, 238.4566, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0015,180415, 571, 1, 1, 5147.989, -2198.857, 237.614, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0016,180415, 571, 1, 1, 5157.23, -2201.726, 237.5309, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0017,180415, 571, 1, 1, 5177.918, -2200.155, 237.9545, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0018,180415, 571, 1, 1, 5176.376, -2200.125, 237.5385, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0019,180415, 571, 1, 1, 5137.146, -2201.73, 237.8019, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0020,180415, 571, 1, 1, 5147.455, -2202.927, 237.0062, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0021,180415, 571, 1, 1, 5150.261, -2211.397, 238.8011, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0022,180415, 571, 1, 1, 5134.615, -2201.333, 238.8165, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0023,180415, 571, 1, 1, 5134.096, -2200.798, 238.8165, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0024,180415, 571, 1, 1, 5174.395, -2217.037, 237.1849, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0025,180415, 571, 1, 1, 5181.015, -2217.125, 238.9904, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0026,180415, 571, 1, 1, 5179.321, -2217.104, 238.5324, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0027,180415, 571, 1, 1, 5177.742, -2217.072, 237.9756, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0028,180415, 571, 1, 1, 5141.178, -2211.442, 238.1585, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0029,180415, 571, 1, 1, 5140.784, -2211.82, 238.1585, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0030,180415, 571, 1, 1, 5176.154, -2217.055, 237.5818, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0031,180415, 571, 1, 1, 5377.697, -2612.275, 305.4919, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0032,180415, 571, 1, 1, 5378.776, -2637.334, 304.966, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0033,180415, 571, 1, 1, 5446.666, -2635.141, 306.7401, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0034,180415, 571, 1, 1, 5443.241, -2628.945, 306.7371, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0035,180415, 571, 1, 1, 5444.132, -2632.507, 306.7371, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0036,180415, 571, 1, 1, 5446.891, -2622.866, 306.733, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0037,180415, 571, 1, 1, 5450.479, -2621.981, 306.7277, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0038,180415, 571, 1, 1, 5453.979, -2622.99, 306.5936, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0039,180415, 571, 1, 1, 5450.222, -2636.167, 306.739, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0040,180415, 571, 1, 1, 5444.251, -2625.413, 306.7368, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0041,180415, 571, 1, 1, 5453.774, -2635.269, 306.7326, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0042,180415, 571, 1, 1, 5456.549, -2625.604, 306.6074, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0043,180415, 571, 1, 1, 5456.413, -2632.691, 306.7231, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0044,180415, 571, 1, 1, 5457.469, -2629.154, 306.7375, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0045,180415, 571, 1, 1, 5528.001, -2665.6, 305.3742, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0046,180415, 571, 1, 1, 5500.662, -2662.148, 304.9659, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0047,180415, 571, 1, 1, 5763.567, -3552.541, 386.5541, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0048,180415, 571, 1, 1, 5768.135, -3553.175, 386.5514, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0049,180415, 571, 1, 1, 5750.391, -3570.385, 386.6082, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0050,180415, 571, 1, 1, 5776.281, -3557.164, 386.5179, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0051,180415, 571, 1, 1, 5762.846, -3557.929, 386.7904, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0052,180415, 571, 1, 1, 5775.812, -3560.629, 386.5844, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0053,180415, 571, 1, 1, 5757.775, -3561.603, 386.7299, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0054,180415, 571, 1, 1, 5776.619, -3565.798, 386.6816, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0055,180415, 571, 1, 1, 5776.687, -3569.371, 386.6979, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0056,180415, 571, 1, 1, 5773.405, -3555.642, 386.5388, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0057,180415, 571, 1, 1, 5769.636, -3555.544, 386.6231, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0058,180415, 571, 1, 1, 5752.563, -3565.215, 386.6399, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0059,180415, 571, 1, 1, 5775.966, -3574.389, 387.2715, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0060,180415, 571, 1, 1, 5760.6, -3586.51, 386.5219, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0061,180415, 571, 1, 1, 5748.784, -3573.642, 386.5444, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0062,180415, 571, 1, 1, 5765.48, -3584.281, 386.6219, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0063,180415, 571, 1, 1, 5755.499, -3578.478, 386.6624, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0064,180415, 571, 1, 1, 5768.435, -3581.585, 386.7327, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0065,180415, 571, 1, 1, 5772.202, -3578.392, 386.7462, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0066,180415, 571, 1, 1, 5759.083, -3583, 386.592, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0067,180415, 571, 1, 1, 3873.8, -4541.213, 210.1521, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0068,180415, 571, 1, 1, 3871.856, -4548.686, 211.1932, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0069,180415, 571, 1, 1, 3873.244, -4548.734, 211.219, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0070,180415, 571, 1, 1, 3862.183, -4548.674, 211.6033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0071,180415, 571, 1, 1, 3865.728, -4534.643, 211.7069, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0072,180415, 571, 1, 1, 3880.78, -4510.24, 218.4157, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0073,180415, 571, 1, 1, 3833.083, -4531.847, 213.2785, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0074,180415, 571, 1, 1, 3861.911, -4519.634, 211.6107, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0075,180415, 571, 1, 1, 3863.615, -4516.346, 214.1784, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0076,180415, 571, 1, 1, 3830.969, -4499.772, 206.4349, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4211) +(@OGUID+0077,180415, 571, 1, 1, 3443.286, -2823.03, 202.9982, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0078,180415, 571, 1, 1, 3407.794, -2841.943, 202.67, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0079,180415, 571, 1, 1, 3441.109, -2824.373, 202.9075, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0080,180415, 571, 1, 1, 3438.945, -2825.767, 203.0237, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0081,180415, 571, 1, 1, 3440.277, -2818.991, 203.0136, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0082,180415, 571, 1, 1, 3436.816, -2827.108, 202.9122, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0083,180415, 571, 1, 1, 3441.738, -2820.991, 202.9215, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0084,180415, 571, 1, 1, 3434.637, -2828.344, 202.9919, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0085,180415, 571, 1, 1, 3406.82, -2839.58, 202.8193, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0086,180415, 571, 1, 1, 3437.037, -2814.965, 202.884, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0087,180415, 571, 1, 1, 3438.661, -2816.929, 203.0817, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0088,180415, 571, 1, 1, 3405.275, -2832.076, 202.8215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0089,180415, 571, 1, 1, 3405.745, -2834.549, 202.8814, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0090,180415, 571, 1, 1, 3406.287, -2837.063, 202.8049, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0091,180415, 571, 1, 1, 3407.031, -2802.89, 212.337, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0092,180415, 571, 1, 1, 3444.464, -2796.757, 203.2364, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0093,180415, 571, 1, 1, 3400.99, -2811.019, 202.6149, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0094,180415, 571, 1, 1, 3413.189, -2802.605, 212.3711, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0095,180415, 571, 1, 1, 3415.103, -2800.74, 202.2157, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0096,180415, 571, 1, 1, 3400.969, -2809.62, 202.0353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0097,180415, 571, 1, 1, 3400.82, -2811.734, 202.7707, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0098,180415, 571, 1, 1, 3411.195, -2811.007, 202.0898, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0099,180415, 571, 1, 1, 3411.819, -2803.252, 212.5847, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0100,180415, 571, 1, 1, 3441.908, -2797.017, 203.1431, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0101,180415, 571, 1, 1, 3407.968, -2803.407, 213.5988, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0102,180415, 571, 1, 1, 3407.057, -2802.274, 212.4086, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0103,180415, 571, 1, 1, 3457.735, -2786.757, 202.8651, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0104,180415, 571, 1, 1, 3455.872, -2783.97, 202.7178, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0105,180415, 571, 1, 1, 3400.54, -2799.177, 201.4966, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0106,180415, 571, 1, 1, 3456.458, -2789.083, 203.3248, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0107,180415, 571, 1, 1, 3399.834, -2790.558, 212.2449, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0108,180415, 571, 1, 1, 3405.42, -2788.209, 203.0673, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0109,180415, 571, 1, 1, 3400.798, -2792.024, 212.3608, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0110,180415, 571, 1, 1, 3406.408, -2787.522, 203.0332, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0111,180415, 571, 1, 1, 3398.889, -2790.992, 213.4207, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0112,180415, 571, 1, 1, 3400.714, -2792.445, 212.2851, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0113,180415, 571, 1, 1, 3399.956, -2791.192, 212.2966, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0114,180415, 571, 1, 1, 3399.706, -2791.847, 212.3247, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0115,180415, 571, 1, 1, 3413.264, -2780.046, 202.9309, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0116,180415, 571, 1, 1, 3466.171, -2781.337, 202.358, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0117,180415, 571, 1, 1, 3458.188, -2776.3, 201.8077, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0118,180415, 571, 1, 1, 3472.556, -2782.05, 202.3065, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0119,180415, 571, 1, 1, 3404.212, -2786.731, 203.0216, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0120,180415, 571, 1, 1, 3408.607, -2785.961, 202.9851, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0121,180415, 571, 1, 1, 3475.129, -2782.253, 202.1459, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0122,180415, 571, 1, 1, 3412.443, -2783.161, 202.9973, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0123,180415, 571, 1, 1, 3403.424, -2785.687, 202.9964, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0124,180415, 571, 1, 1, 3407.591, -2786.707, 202.9976, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0125,180415, 571, 1, 1, 3470.033, -2781.84, 202.4652, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0126,180415, 571, 1, 1, 3411.324, -2783.891, 202.9264, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0127,180415, 571, 1, 1, 3397.692, -2789.662, 213.2649, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0128,180415, 571, 1, 1, 3402.704, -2784.6, 202.9906, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0129,180415, 571, 1, 1, 3462.118, -2779.648, 202.4681, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0130,180415, 571, 1, 1, 3414.508, -2781.62, 202.9946, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0131,180415, 571, 1, 1, 3413.529, -2782.306, 202.9957, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0132,180415, 571, 1, 1, 3413.155, -2777.403, 206.0491, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0133,180415, 571, 1, 1, 3419.603, -2772.811, 201.5641, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0134,180415, 571, 1, 1, 3425.753, -2769.791, 202.0575, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0135,180415, 571, 1, 1, 3456.768, -2774.179, 201.8534, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0136,180415, 571, 1, 1, 3411.746, -2778.068, 202.9529, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0137,180415, 571, 1, 1, 3406.269, -2781.944, 203.4021, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0138,180415, 571, 1, 1, 3425.471, -2770.199, 202.053, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0139,180415, 571, 1, 1, 3412.486, -2778.925, 202.9093, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0140,180415, 571, 1, 1, 3397.889, -2752.26, 201.1765, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0141,180415, 571, 1, 1, 3397.825, -2754.811, 201.1646, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0142,180415, 571, 1, 1, 3455.441, -2749.057, 200.8513, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0143,180415, 571, 1, 1, 3440.693, -2745.642, 200.7106, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0144,180415, 571, 1, 1, 3427.793, -2745.417, 200.9314, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0145,180415, 571, 1, 1, 3445.042, -2751.564, 199.4239, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0146,180415, 571, 1, 1, 3455.573, -2746.484, 200.8855, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0147,180415, 571, 1, 1, 3443.285, -2745.714, 200.7417, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0148,180415, 571, 1, 1, 3425.394, -2745.384, 200.891, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0149,180415, 571, 1, 1, 3445.895, -2745.695, 200.92, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0150,180415, 571, 1, 1, 3448.288, -2745.802, 200.9623, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0151,180415, 571, 1, 1, 3455.298, -2756.604, 201.076, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0152,180415, 571, 1, 1, 3455.351, -2754.038, 201.1146, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0153,180415, 571, 1, 1, 3422.8, -2745.42, 200.716, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0154,180415, 571, 1, 1, 3455.435, -2751.653, 201.1238, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0155,180415, 571, 1, 1, 3420.21, -2745.375, 200.6848, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0156,180415, 571, 1, 1, 3430.328, -2745.441, 200.9204, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0157,180415, 571, 1, 1, 3449.38, -2752.161, 199.3402, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0158,180415, 571, 1, 1, 3450.814, -2745.738, 201.1831, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0159,180415, 571, 1, 1, 3406.284, -2744.823, 200.6775, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0160,180415, 571, 1, 1, 3398.188, -2744.674, 200.9263, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0161,180415, 571, 1, 1, 3408.93, -2745.019, 200.7298, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0162,180415, 571, 1, 1, 3398.062, -2747.274, 200.9093, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0163,180415, 571, 1, 1, 3411.495, -2744.974, 200.9156, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0164,180415, 571, 1, 1, 3398.008, -2749.851, 201.1351, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0165,180415, 571, 1, 1, 3413.885, -2745.063, 200.9569, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0166,180415, 571, 1, 1, 3416.44, -2745.043, 200.9444, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0167,180415, 571, 1, 1, 3306.957, -2346.275, 114.2688, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0168,180415, 571, 1, 1, 3306.503, -2346.271, 114.2327, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0169,180415, 571, 1, 1, 3314.758, -2336.475, 113.8916, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0170,180415, 571, 1, 1, 3315.174, -2335.131, 112.3857, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0171,180415, 571, 1, 1, 3313.81, -2337.315, 112.3801, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0172,180415, 571, 1, 1, 3314.402, -2336.751, 113.8963, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0173,180415, 571, 1, 1, 3320.02, -2321.913, 114.3211, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0174,180415, 571, 1, 1, 3319.593, -2323.635, 112.2697, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0175,180415, 571, 1, 1, 3319.35, -2324.088, 112.2623, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0176,180415, 571, 1, 1, 3320.5, -2321.387, 114.3223, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0177,180415, 571, 1, 1, 3240.985, -2236.183, 117.2045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0178,180415, 571, 1, 1, 3240.313, -2236.637, 117.1827, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0179,180415, 571, 1, 1, 3255.964, -2216.654, 117.3241, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0180,180415, 571, 1, 1, 3250.294, -2214.309, 117.3726, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0181,180415, 571, 1, 1, 3266.923, -2221.398, 117.2959, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0182,180415, 571, 1, 1, 3273.234, -2223.792, 117.3726, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0183,180415, 571, 1, 1, 3253.368, -2199.88, 117.029, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0184,180415, 571, 1, 1, 3280.633, -2211.489, 117.029, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0185,180415, 571, 1, 1, 3254.062, -2187.705, 118.7545, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0186,180415, 571, 1, 1, 3256.237, -2188.316, 118.4933, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0187,180415, 571, 1, 1, 1904.515, -6141.503, 19.07745, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000) +(@OGUID+0188,180415, 571, 1, 1, 1904.164, -6141.786, 19.07746, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000) +(@OGUID+0189,180415, 571, 1, 1, 730.0452, -2931.608, 7.921721, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0190,180415, 571, 1, 1, 726.9896, -2932.885, 7.942686, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0191,180415, 571, 1, 1, 732.6979, -2930.411, 7.924031, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0192,180415, 571, 1, 1, 732.0417, -2926.337, 7.959949, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0193,180415, 571, 1, 1, 728.4393, -2932.286, 7.933091, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0194,180415, 571, 1, 1, 725.5104, -2932.967, 8.092805, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0195,180415, 571, 1, 1, 731.3733, -2930.993, 7.925742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0196,180415, 571, 1, 1, 697.434, -2944.288, -1.407539, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0197,180415, 571, 1, 1, 724.4271, -2926.127, 8.093702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0198,180415, 571, 1, 1, 725.8629, -2925.865, 7.972515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0199,180415, 571, 1, 1, 729.1215, -2926.113, 7.972516, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0200,180415, 571, 1, 1, 706.757, -2944.646, -1.334748, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0201,180415, 571, 1, 1, 727.4358, -2925.96, 7.973504, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0202,180415, 571, 1, 1, 730.5781, -2926.233, 7.968627, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0203,180415, 571, 1, 1, 694.3993, -2923.686, -1.305829, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0204,180415, 571, 1, 1, 704.0989, -2921.766, -1.33801, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+0205,180415, 571, 1, 1, 1421.866, -3274.431, 175.8965, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0206,180415, 571, 1, 1, 1437.179, -3255.236, 168.5082, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0207,180415, 571, 1, 1, 1423.415, -3272.469, 175.8965, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0208,180415, 571, 1, 1, 1440.88, -3258.736, 168.5083, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0209,180415, 571, 1, 1, 1421.422, -3276.337, 175.8964, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0210,180415, 571, 1, 1, 1421.38, -3278.174, 175.8965, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0211,180415, 571, 1, 1, 1421.837, -3279.875, 175.8964, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0212,180415, 571, 1, 1, 1443.076, -3260.196, 168.5083, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0213,180415, 571, 1, 1, 1443.797, -3259.285, 168.5083, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0214,180415, 571, 1, 1, 1437.932, -3254.321, 168.5089, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0215,180415, 571, 1, 1, 1438.714, -3257.005, 168.5084, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0216,180415, 571, 1, 1, 1424.549, -3281.903, 175.8964, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0217,180415, 571, 1, 1, 1446.208, -3272.655, 171.3525, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0218,180415, 571, 1, 1, 1425.948, -3281.997, 175.8964, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0219,180415, 571, 1, 1, 1449.852, -3275.616, 171.3525, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0220,180415, 571, 1, 1, 1427.842, -3281.715, 175.8965, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0221,180415, 571, 1, 1, 1429.609, -3280.913, 175.8965, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0222,180415, 571, 1, 1, 1431.264, -3278.972, 175.8965, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0223,180415, 571, 1, 1, 1448.076, -3274.135, 171.3525, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0224,180415, 571, 1, 1, 1451.38, -3276.939, 171.3525, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+0225,180415, 571, 1, 1, 607.8405, -4925.881, 24.95922, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0226,180415, 571, 1, 1, 608.6639, -4923.137, 31.06963, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0227,180415, 571, 1, 1, 606.8481, -4923.561, 31.05914, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0228,180415, 571, 1, 1, 592.6419, -4947.118, 27.2703, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0229,180415, 571, 1, 1, 601.7822, -4924.856, 31.09424, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0230,180415, 571, 1, 1, 592.2818, -4945.582, 27.2703, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0231,180415, 571, 1, 1, 602.6741, -4929.257, 22.72639, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0232,180415, 571, 1, 1, 607.1002, -4923.413, 24.95922, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0233,180415, 571, 1, 1, 601.2928, -4929.597, 22.72639, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0234,180415, 571, 1, 1, 599.9999, -4925.255, 31.10255, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0235,180415, 571, 1, 1, 604.4755, -4924.116, 24.96138, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0236,180415, 571, 1, 1, 592.1803, -4952.106, 27.2703, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0237,180415, 571, 1, 1, 591.1564, -4953.459, 27.2703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0238,180415, 571, 1, 1, 605.0962, -4924.019, 31.05478, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0239,180415, 571, 1, 1, 592.8271, -4950.619, 27.2703, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0240,180415, 571, 1, 1, 603.4061, -4924.424, 31.06834, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0241,180415, 571, 1, 1, 601.9756, -4924.741, 24.95593, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0242,180415, 571, 1, 1, 595.087, -4926.527, 31.06053, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0243,180415, 571, 1, 1, 599.5756, -4929.97, 22.72639, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0244,180415, 571, 1, 1, 587.9566, -4954.577, 27.2703, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0245,180415, 571, 1, 1, 593.6668, -4929.349, 31.07931, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0246,180415, 571, 1, 1, 596.3693, -4930.906, 22.72639, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0247,180415, 571, 1, 1, 597.8043, -4930.463, 22.72639, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0248,180415, 571, 1, 1, 598.4451, -4925.653, 31.07524, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0249,180415, 571, 1, 1, 601.3765, -4922.399, 24.95571, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0250,180415, 571, 1, 1, 586.3301, -4953.981, 27.2703, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0251,180415, 571, 1, 1, 596.6023, -4926.172, 31.03511, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0252,180415, 571, 1, 1, 600.8096, -4920.225, 24.95571, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0253,180415, 571, 1, 1, 590.7567, -4934.542, 31.1084, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0254,180415, 571, 1, 1, 584.8109, -4952.982, 27.2703, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0255,180415, 571, 1, 1, 593.1274, -4927, 31.07476, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0256,180415, 571, 1, 1, 582.5004, -4947.915, 27.2703, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0257,180415, 571, 1, 1, 584.9875, -4936.011, 31.05981, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0258,180415, 571, 1, 1, 586.9916, -4935.478, 31.03452, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0259,180415, 571, 1, 1, 591.3271, -4919.841, 24.76182, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0260,180415, 571, 1, 1, 582.8868, -4949.487, 27.2703, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0261,180415, 571, 1, 1, 589.015, -4934.996, 31.07944, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0262,180415, 571, 1, 1, 589.0734, -4924.763, 19.81484, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0263,180415, 571, 1, 1, 582.024, -4933.135, 31.07914, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0264,180415, 571, 1, 1, 586.677, -4921.894, 24.03878, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0265,180415, 571, 1, 1, 588.6942, -4923.249, 19.81484, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0266,180415, 571, 1, 1, 582.4625, -4934.822, 31.0773, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0267,180415, 571, 1, 1, 589.4875, -4926.273, 19.81484, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+0268,180415, 571, 1, 1, 2492.693, -1907.169, 9.526185, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0269,180415, 571, 1, 1, 2490.183, -1883.224, 9.115799, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0270,180415, 571, 1, 1, 2501.102, -1882.176, 8.549006, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0271,180415, 571, 1, 1, 2501.947, -1893.583, 8.302938, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0272,180415, 571, 1, 1, 2506.74, -1900.911, 8.029154, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0273,180415, 571, 1, 1, 2490.393, -1897.489, 9.970935, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0274,180415, 571, 1, 1, 2477.013, -1901.73, 11.23512, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0275,180415, 571, 1, 1, 2480.636, -1898.305, 11.20697, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0276,180415, 571, 1, 1, 2465.555, -1903.595, 11.20657, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0277,180415, 571, 1, 1, 2470.907, -1903.663, 11.225, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+0278,180415, 571, 1, 1, 3720.282, -703.4149, 216.9913, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0279,180415, 571, 1, 1, 3721.375, -700.6528, 217.3681, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0280,180415, 571, 1, 1, 3724.484, -697.309, 217.4367, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0281,180415, 571, 1, 1, 3723.878, -701.0903, 217.3764, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0282,180415, 571, 1, 1, 3722.675, -704.342, 217.2098, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0283,180415, 571, 1, 1, 3723.472, -693.4011, 217.4225, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0284,180415, 571, 1, 1, 3721.266, -694.7188, 217.1692, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0285,180415, 571, 1, 1, 3719.472, -692.0851, 217.2261, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0286,180415, 571, 1, 1, 3721.933, -697.5799, 217.3843, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0287,180415, 571, 1, 1, 3720.975, -690.0139, 217.1697, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0288,180415, 571, 1, 1, 3673.806, -704.4462, 215.2892, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0289,180415, 571, 1, 1, 3680.288, -702.743, 215.5022, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0290,180415, 571, 1, 1, 3663.695, -709.2948, 213.8031, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0291,180415, 571, 1, 1, 3662.965, -709.1875, 214.0366, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0292,180415, 571, 1, 1, 3663.579, -704.8941, 214.0316, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0293,180415, 571, 1, 1, 3664.109, -705.0291, 213.8467, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0294,180415, 571, 1, 1, 3657.745, -692.2751, 223.6275, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0295,180415, 571, 1, 1, 3660.364, -700.371, 223.6275, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0296,180415, 571, 1, 1, 3650.258, -699.3051, 223.6275, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0297,180415, 571, 1, 1, 3661.816, -704.7014, 214.8959, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0298,180415, 571, 1, 1, 3654.531, -691.826, 223.6275, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0299,180415, 571, 1, 1, 3652.8, -692.9138, 223.6275, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0300,180415, 571, 1, 1, 3655.83, -710.9506, 227.4323, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0301,180415, 571, 1, 1, 3651.423, -694.3221, 223.6275, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0302,180415, 571, 1, 1, 3660.504, -697.7479, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0303,180415, 571, 1, 1, 3662.702, -704.8438, 214.3862, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0304,180415, 571, 1, 1, 3660.119, -695.2737, 223.6275, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0305,180415, 571, 1, 1, 3658.975, -693.3618, 223.6275, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0306,180415, 571, 1, 1, 3650.527, -697.048, 223.6275, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0307,180415, 571, 1, 1, 3661.141, -709.1563, 214.8015, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0308,180415, 571, 1, 1, 3646.771, -712.575, 216.1448, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0309,180415, 571, 1, 1, 3639.381, -715.8611, 227.3913, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0310,180415, 571, 1, 1, 3655.505, -714.1703, 227.4361, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0311,180415, 571, 1, 1, 3643.311, -713.7602, 227.4366, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0312,180415, 571, 1, 1, 3649.78, -710.2109, 227.4335, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0313,180415, 571, 1, 1, 3650.835, -720.3264, 216.1421, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0314,180415, 571, 1, 1, 3641.055, -711.5729, 218.9725, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0315,180415, 571, 1, 1, 3642.938, -716.2329, 227.4314, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0316,180415, 571, 1, 1, 3656.18, -720.6285, 216.1422, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0317,180415, 571, 1, 1, 3662.277, -709.184, 214.3835, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0318,180415, 571, 1, 1, 3653.458, -720.2587, 216.1421, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0319,180415, 571, 1, 1, 3620.047, -714.6027, 227.4171, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0320,180415, 571, 1, 1, 3630.439, -711.8963, 215.451, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0321,180415, 571, 1, 1, 3628.625, -714.6279, 221.3164, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0322,180415, 571, 1, 1, 3647.266, -723.0741, 220.1831, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0323,180415, 571, 1, 1, 3628.823, -712.1104, 221.3164, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0324,180415, 571, 1, 1, 3636.598, -710.9913, 218.9725, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0325,180415, 571, 1, 1, 3642.31, -722.2473, 220.5441, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0326,180415, 571, 1, 1, 3646.166, -718.1907, 216.172, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0327,180415, 571, 1, 1, 3635.955, -715.3896, 227.4597, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0328,180415, 571, 1, 1, 3639.688, -711.3333, 218.9725, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0329,180415, 571, 1, 1, 3633.46, -719.8217, 221.3129, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0330,180415, 571, 1, 1, 3632.302, -715.0294, 227.4236, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0331,180415, 571, 1, 1, 3630.115, -714.7449, 215.4509, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0332,180415, 571, 1, 1, 3633.867, -715.2915, 221.3129, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0333,180415, 571, 1, 1, 3628.883, -714.4942, 227.4169, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0334,180415, 571, 1, 1, 3629.475, -717.1203, 215.4509, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0335,180415, 571, 1, 1, 3635.079, -710.8333, 218.9725, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0336,180415, 571, 1, 1, 3645.829, -721.221, 216.172, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0337,180415, 571, 1, 1, 3619.787, -716.7102, 227.4115, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+0338,180415, 571, 1, 1, 3539.074, 246.8349, 45.82254, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0339,180415, 571, 1, 1, 3560.01, 248.8549, 45.83335, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0340,180415, 571, 1, 1, 3549.851, 245.3113, 45.88549, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0341,180415, 571, 1, 1, 3520.715, 280.9288, 45.78613, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0342,180415, 571, 1, 1, 3564.364, 294.3126, 45.82972, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0343,180415, 571, 1, 1, 3526.05, 290.625, 45.8017, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0344,180415, 571, 1, 1, 3529.681, 251.9887, 45.82568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0345,180415, 571, 1, 1, 3570.418, 286.1223, 45.8264, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0346,180415, 571, 1, 1, 3534.023, 297.516, 45.87384, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0347,180415, 571, 1, 1, 3573.903, 275.7938, 45.8153, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0348,180415, 571, 1, 1, 3572.999, 265.1364, 45.80965, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0349,180415, 571, 1, 1, 3585.963, 283.0799, 48.30828, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0350,180415, 571, 1, 1, 3554.604, 299.7266, 45.90679, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0351,180415, 571, 1, 1, 3568.259, 255.9597, 45.78259, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0352,180415, 571, 1, 1, 3587.122, 271.1111, 48.3845, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0353,180415, 571, 1, 1, 3522.922, 260.132, 45.7541, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0354,180415, 571, 1, 1, 3596.911, 271.6074, 52.12251, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0355,180415, 571, 1, 1, 3519.316, 270.3384, 45.87571, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0356,180415, 571, 1, 1, 3595.522, 284.4653, 52.2077, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0357,180415, 571, 1, 1, 3544.37, 301.0424, 45.87925, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+0358,180415, 571, 1, 1, 3453.492, 2004.011, 66.48942, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0359,180415, 571, 1, 1, 3451.072, 2013.826, 67.11924, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0360,180415, 571, 1, 1, 3460.914, 1999.812, 64.96242, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0361,180415, 571, 1, 1, 3450.717, 2005.431, 66.47033, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0362,180415, 571, 1, 1, 3464.852, 2005.66, 65.63439, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0363,180415, 571, 1, 1, 3457.145, 2001.683, 65.88113, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0364,180415, 571, 1, 1, 3457.17, 2010.24, 67.18584, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0365,180415, 571, 1, 1, 3461.157, 2007.909, 66.50739, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0366,180415, 571, 1, 1, 3447.548, 2007.21, 66.4343, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0367,180415, 571, 1, 1, 3454.485, 2011.974, 67.24349, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0368,180415, 571, 1, 1, 3485.54, 1982.056, 66.64336, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0369,180415, 571, 1, 1, 3491.24, 1972.217, 66.67846, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0370,180415, 571, 1, 1, 3484.478, 1982.79, 66.10648, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0371,180415, 571, 1, 1, 3486.18, 1980.53, 66.75633, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0372,180415, 571, 1, 1, 3488.036, 1984.502, 66.5727, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0373,180415, 571, 1, 1, 3488.738, 1974.252, 66.48361, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0374,180415, 571, 1, 1, 3486.124, 1985.773, 66.13934, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0375,180415, 571, 1, 1, 3489.454, 1972.877, 66.5388, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0376,180415, 571, 1, 1, 3486.32, 1978.385, 66.64598, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0377,180415, 571, 1, 1, 3484.899, 1984.623, 66.13567, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0378,180415, 571, 1, 1, 3490.6, 1973.335, 66.56937, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0379,180415, 571, 1, 1, 3486.279, 1984.052, 66.72491, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0380,180415, 571, 1, 1, 3488.017, 1982.2, 69.24107, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0381,180415, 571, 1, 1, 3496.877, 1986.814, 66.14459, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0382,180415, 571, 1, 1, 3499.981, 1976.101, 66.6926, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0383,180415, 571, 1, 1, 3498.515, 1987.265, 66.15958, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0384,180415, 571, 1, 1, 3494.6, 1971.783, 69.21862, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0385,180415, 571, 1, 1, 3498.208, 1985.489, 66.55852, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0386,180415, 571, 1, 1, 3492.497, 1984.687, 66.91064, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0387,180415, 571, 1, 1, 3499.862, 1974.142, 66.74924, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0388,180415, 571, 1, 1, 3499.545, 1986.568, 66.14841, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0389,180415, 571, 1, 1, 3497.163, 1972.785, 67.83695, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0390,180415, 571, 1, 1, 3498.545, 1983.968, 66.78958, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0391,180415, 571, 1, 1, 3499.741, 1984.807, 66.1551, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0392,180415, 571, 1, 1, 3496.604, 1985.285, 66.52729, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0393,180415, 571, 1, 1, 3490.234, 1984.203, 66.76582, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0394,180415, 571, 1, 1, 3494.507, 1985.543, 66.86245, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0395,180415, 571, 1, 1, 3492.613, 1987.125, 66.18999, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0396,180415, 571, 1, 1, 3498.044, 1971.96, 67.97525, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0397,180415, 571, 1, 1, 3500.235, 1977.234, 66.79019, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+0398,180415, 571, 1, 1, 8446.374, -338.7054, 906.5311, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+0399,180415, 571, 1, 1, 8441.133, -333.9722, 906.3853, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+0400,180415, 571, 1, 1, 8449.194, -340.0696, 906.42, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+0401,180415, 571, 1, 1, 8438.914, -336.882, 906.3645, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+0402,180415, 571, 1, 1, 8450.9, -342.7731, 906.4547, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+0403,180415, 571, 1, 1, 8436.891, -329.9302, 906.4619, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+0404,180415, 571, 1, 1, 8440.131, -331.5573, 906.4849, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+0405,180415, 571, 1, 1, 8443.484, -341.0681, 906.538, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+0406,180415, 571, 1, 1, 8438.455, -346.809, 906.3992, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484) +(@OGUID+0407,180415, 571, 1, 1, 8434.126, -342.7607, 906.3992, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484) +(@OGUID+0408,180415, 571, 1, 1, 6135.286, -1087.107, 403.996, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0409,180415, 571, 1, 1, 6135.75, -1082.272, 403.9787, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0410,180415, 571, 1, 1, 6131.089, -1077.924, 404.0315, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0411,180415, 571, 1, 1, 6124.53, -1100.04, 404.1576, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0412,180415, 571, 1, 1, 6129.471, -1100.338, 404.0967, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0413,180415, 571, 1, 1, 6134.075, -1100.798, 404.0411, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0414,180415, 571, 1, 1, 6135.558, -1078.466, 403.9826, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0415,180415, 571, 1, 1, 6135.308, -1092.608, 404.0045, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0416,180415, 571, 1, 1, 6135.531, -1097.868, 403.998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0417,180415, 571, 1, 1, 6128.174, -1077.363, 404.1137, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0418,180415, 571, 1, 1, 6114.59, -1100.005, 404.2581, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0419,180415, 571, 1, 1, 6119.64, -1099.892, 404.2052, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0420,180415, 571, 1, 1, 6117.122, -1080.053, 403.8957, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0421,180415, 571, 1, 1, 6110.035, -1085.667, 404.2946, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0422,180415, 571, 1, 1, 6116.569, -1077.83, 403.8956, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0423,180415, 571, 1, 1, 6110.022, -1094.398, 404.3128, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0424,180415, 571, 1, 1, 6113.951, -1077.961, 403.9418, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0425,180415, 571, 1, 1, 6109.78, -1099.722, 404.3831, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0426,180415, 571, 1, 1, 6109.548, -1083.051, 404.3193, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0427,180415, 571, 1, 1, 6108.985, -1078.398, 404.2991, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+0428,180415, 571, 1, 1, 6665.15, -200.775, 950.982, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0429,180415, 571, 1, 1, 6667.429, -202.9508, 950.2484, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0430,180415, 571, 1, 1, 6670.192, -202.2401, 950.4054, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0431,180415, 571, 1, 1, 6676.213, -197.9583, 951.1501, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0432,180415, 571, 1, 1, 6676.812, -200.8755, 951.2551, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0433,180415, 571, 1, 1, 6671.391, -199.7399, 951.0316, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0434,180415, 571, 1, 1, 6671.051, -196.6817, 951.0138, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0435,180415, 571, 1, 1, 6666.553, -195.6487, 951.7457, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0436,180415, 571, 1, 1, 6680.188, -200.7511, 955.8945, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0437,180415, 571, 1, 1, 6664.639, -197.5128, 951.639, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+0438,180415, 571, 1, 1, 5534.743, 5748.256, -76.63572, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0439,180415, 571, 1, 1, 5543.521, 5771.278, -76.01951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0440,180415, 571, 1, 1, 5523.451, 5778.276, -78.78996, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0441,180415, 571, 1, 1, 5543.232, 5771.354, -76.01951, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0442,180415, 571, 1, 1, 5525.911, 5782.684, -78.17769, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0443,180415, 571, 1, 1, 5555.896, 5763.036, -76.68411, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0444,180415, 571, 1, 1, 5552.697, 5767.842, -75.99409, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0445,180415, 571, 1, 1, 5557.079, 5767.963, -77.05219, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0446,180415, 571, 1, 1, 5557.415, 5769.394, -76.74715, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0447,180415, 571, 1, 1, 5589.266, 5819.588, -69.22645, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0448,180415, 571, 1, 1, 5585.25, 5746.126, -71.12965, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0449,180415, 571, 1, 1, 5589.826, 5820.498, -69.06834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0450,180415, 571, 1, 1, 5598.222, 5811.789, -69.80727, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0451,180415, 571, 1, 1, 5608.288, 5809.12, -70.3611, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0452,180415, 571, 1, 1, 5629.481, 5831.32, -63.68258, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0453,180415, 571, 1, 1, 5624.22, 5848.555, -62.23083, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0454,180415, 571, 1, 1, 5624.355, 5836.35, -64.11382, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0455,180415, 571, 1, 1, 5615.792, 5854.673, -61.52033, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0456,180415, 571, 1, 1, 5617.778, 5835.836, -64.42644, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0457,180415, 571, 1, 1, 5621.542, 5839.372, -63.8798, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0458,180415, 571, 1, 1, 5620.175, 5851.535, -61.9314, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0459,180415, 571, 1, 1, 5617.97, 5842.27, -63.73035, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0460,180415, 571, 1, 1, 5631.269, 5841.848, -62.78385, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0461,180415, 571, 1, 1, 5614.699, 5845.393, -63.52262, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0462,180415, 571, 1, 1, 5628.023, 5845.315, -62.64318, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0463,180415, 571, 1, 1, 5599.996, 5811.131, -69.81374, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0464,180415, 571, 1, 1, 5610.43, 5848.424, -63.39353, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0465,180415, 571, 1, 1, 5609.851, 5840.359, -64.56908, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+0466,180415, 571, 1, 1, 5638.223, 5830.514, -63.40969, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284) +(@OGUID+0467,180415, 571, 1, 1, 5635.809, 5835.991, -63.02237, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284) +(@OGUID+0468,180415, 571, 1, 1, 5512.584, 4747.444, -194.4338, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0469,180415, 571, 1, 1, 5476.778, 4745.321, -195.5257, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0470,180415, 571, 1, 1, 5509.279, 4742.423, -194.4338, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0471,180415, 571, 1, 1, 5498.675, 4751.812, -194.4338, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0472,180415, 571, 1, 1, 5503.33, 4741.617, -194.4338, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0473,180415, 571, 1, 1, 5504.156, 4755.996, -194.4338, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0474,180415, 571, 1, 1, 5498.581, 4745.667, -194.4338, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0475,180415, 571, 1, 1, 5477.044, 4749.278, -195.3024, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0476,180415, 571, 1, 1, 5510.276, 4753.492, -194.4338, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0477,180415, 571, 1, 1, 5485.467, 4727.866, -194.3498, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+0478,180415, 571, 1, 1, 4472.118, 5710.065, 81.82111, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+0479,180415, 571, 1, 1, 4475.728, 5707.702, 81.28061, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+0480,180415, 571, 1, 1, 4474.857, 5707.663, 81.27406, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+0481,180415, 571, 1, 1, 4470.187, 5711.333, 81.82111, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+0482,180415, 571, 1, 1, 4502.521, 5716.321, 83.2894, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+0483,180415, 571, 1, 1, 4501.978, 5716.594, 83.29294, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+0484,180415, 571, 1, 1, 4512.208, 5702.231, 82.31032, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+0485,180415, 571, 1, 1, 4508.148, 5720.678, 81.53056, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+0486,180415, 571, 1, 1, 4508.037, 5721.736, 81.52561, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+0487,180415, 571, 1, 1, 4511.359, 5702.256, 82.3114, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+0488,180415, 571, 1, 1, 4175.995, 5285.556, 39.60876, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0489,180415, 571, 1, 1, 4174.72, 5282.509, 40.74071, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0490,180415, 571, 1, 1, 4182.015, 5285.288, 40.89171, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0491,180415, 571, 1, 1, 4176.526, 5277.981, 41.3796, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0492,180415, 571, 1, 1, 4182.998, 5284, 40.91432, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0493,180415, 571, 1, 1, 4175.992, 5278.304, 40.8171, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0494,180415, 571, 1, 1, 4174.827, 5281.086, 40.75976, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0495,180415, 571, 1, 1, 4181.757, 5280.178, 39.78754, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0496,180415, 571, 1, 1, 4177.348, 5277.492, 40.8917, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0497,180415, 571, 1, 1, 4176.902, 5277.699, 41.40043, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+0498,180415, 571, 1, 1, 2816.064, 6140.755, 84.60281, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0499,180415, 571, 1, 1, 2817.546, 6142.036, 84.77279, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0500,180415, 571, 1, 1, 2808.348, 6133.652, 84.35007, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0501,180415, 571, 1, 1, 2814.547, 6139.239, 84.48197, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0502,180415, 571, 1, 1, 2813.243, 6137.908, 84.43053, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0503,180415, 571, 1, 1, 2811.692, 6136.515, 84.40427, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0504,180415, 571, 1, 1, 2809.904, 6135.145, 84.37815, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0505,180415, 571, 1, 1, 2806.884, 6132.39, 84.32622, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0506,180415, 571, 1, 1, 2787.17, 6166.139, 84.44685, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0507,180415, 571, 1, 1, 2785.56, 6164.665, 84.41692, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0508,180415, 571, 1, 1, 2784.033, 6163.104, 84.38836, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0509,180415, 571, 1, 1, 2791.778, 6170.236, 84.69099, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0510,180415, 571, 1, 1, 2790.21, 6168.888, 84.58121, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0511,180415, 571, 1, 1, 2788.624, 6167.527, 84.47393, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0512,180415, 571, 1, 1, 2781.09, 6160.348, 84.3336, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0513,180415, 571, 1, 1, 2779.682, 6158.85, 84.30719, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0514,180415, 571, 1, 1, 2805.326, 6131.063, 84.3011, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0515,180415, 571, 1, 1, 2791.639, 6139.96, 84.81071, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0516,180415, 571, 1, 1, 2803.804, 6129.789, 84.27695, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0517,180415, 571, 1, 1, 2782.543, 6161.761, 84.36069, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0518,180415, 571, 1, 1, 2788.538, 6143.428, 84.79273, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0519,180415, 571, 1, 1, 2776.865, 6126.743, 91.12935, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0520,180415, 571, 1, 1, 2788.898, 6137.514, 86.33366, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0521,180415, 571, 1, 1, 2774.129, 6129.736, 91.13658, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0522,180415, 571, 1, 1, 2780.254, 6135.889, 89.43606, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0523,180415, 571, 1, 1, 2785.656, 6141.002, 86.35069, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0524,180415, 571, 1, 1, 2778.103, 6157.446, 84.27789, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0525,180415, 571, 1, 1, 2781.07, 6130.521, 90.43552, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0526,180415, 571, 1, 1, 2785.955, 6135.013, 87.93523, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0527,180415, 571, 1, 1, 2777.994, 6133.772, 90.43637, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0528,180415, 571, 1, 1, 2782.876, 6138.491, 87.9035, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0529,180415, 571, 1, 1, 2783.253, 6132.512, 89.46143, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0530,180415, 571, 1, 1, 2779.491, 6129.215, 90.78801, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0531,180415, 571, 1, 1, 2776.609, 6132.236, 90.81976, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0532,180415, 571, 1, 1, 2772.306, 6123.107, 91.52767, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0533,180415, 571, 1, 1, 2768.484, 6124.985, 97.70737, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0534,180415, 571, 1, 1, 2771.088, 6121.854, 97.64502, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0535,180415, 571, 1, 1, 2771.566, 6127.16, 91.71031, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0536,180415, 571, 1, 1, 2773.846, 6124.534, 91.67098, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0537,180415, 571, 1, 1, 2769.93, 6125.85, 91.52602, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+0538,180415, 571, 1, 1, 2297.869, 5280.106, 13.11051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0539,180415, 571, 1, 1, 2292.861, 5276.689, 13.39523, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0540,180415, 571, 1, 1, 2292.751, 5278.278, 13.39523, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0541,180415, 571, 1, 1, 2293.383, 5279.647, 13.39523, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0542,180415, 571, 1, 1, 2295.305, 5274.703, 13.39523, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0543,180415, 571, 1, 1, 2291.743, 5276.248, 13.28105, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0544,180415, 571, 1, 1, 2293.839, 5275.374, 13.39523, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0545,180415, 571, 1, 1, 2293.025, 5274.428, 13.18383, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0546,180415, 571, 1, 1, 2298.755, 5278.823, 13.17301, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0547,180415, 571, 1, 1, 2298.857, 5277.28, 13.15912, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0548,180415, 571, 1, 1, 2269.472, 5199.901, 11.49839, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0549,180415, 571, 1, 1, 2270.224, 5199.647, 11.84797, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0550,180415, 571, 1, 1, 2267.266, 5195.724, 11.25468, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0551,180415, 571, 1, 1, 2271.104, 5199.311, 12.33314, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0552,180415, 571, 1, 1, 2262.667, 5194.889, 14.41752, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0553,180415, 571, 1, 1, 2269.422, 5194.798, 12.2818, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0554,180415, 571, 1, 1, 2268.748, 5200.188, 11.23592, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0555,180415, 571, 1, 1, 2264.628, 5203.938, 12.71451, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0556,180415, 571, 1, 1, 2268.505, 5195.202, 11.93541, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0557,180415, 571, 1, 1, 2267.729, 5195.542, 11.41191, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0558,180415, 571, 1, 1, 2269.927, 5181.998, 20.93, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0559,180415, 571, 1, 1, 2288.382, 5209.055, 17.64837, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0560,180415, 571, 1, 1, 2268.734, 5184.522, 20.88139, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0561,180415, 571, 1, 1, 2271.566, 5188.706, 20.67995, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0562,180415, 571, 1, 1, 2271.873, 5189.512, 21.19639, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0563,180415, 571, 1, 1, 2272.297, 5190.432, 21.74726, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0564,180415, 571, 1, 1, 2292.874, 5206.81, 17.99297, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0565,180415, 571, 1, 1, 2288.034, 5203.917, 13.63426, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0566,180415, 571, 1, 1, 2289.651, 5198.8, 24.89842, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0567,180415, 571, 1, 1, 2285.987, 5198.663, 13.60694, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0568,180415, 571, 1, 1, 2289.193, 5206.791, 13.63426, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0569,180415, 571, 1, 1, 2277.729, 5188.15, 21.78212, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0570,180415, 571, 1, 1, 2300.695, 5202.11, 18.77489, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0571,180415, 571, 1, 1, 2277.347, 5187.327, 21.23565, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0572,180415, 571, 1, 1, 2299.122, 5197.798, 18.77534, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0573,180415, 571, 1, 1, 2276.96, 5186.483, 20.70242, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0574,180415, 571, 1, 1, 2303.15, 5193.464, 18.77864, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0575,180415, 571, 1, 1, 2273.479, 5180.935, 20.96472, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0576,180415, 571, 1, 1, 2304.057, 5195.878, 18.77864, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0577,180415, 571, 1, 1, 2275.646, 5181.717, 21.01333, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+0578,180415, 571, 1, 1, 3000.993, 4068.12, 30.11452, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0579,180415, 571, 1, 1, 3014.259, 4067.539, 31.04936, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0580,180415, 571, 1, 1, 3001.769, 4049.21, 26.07964, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0581,180415, 571, 1, 1, 3007.144, 4059.308, 26.76467, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0582,180415, 571, 1, 1, 3003.417, 4061.542, 26.18109, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0583,180415, 571, 1, 1, 3003.007, 4059.802, 26.62822, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0584,180415, 571, 1, 1, 3007.312, 4061.112, 26.29614, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0585,180415, 571, 1, 1, 3003.312, 4060.399, 26.59323, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0586,180415, 571, 1, 1, 3007.251, 4060.04, 26.53866, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0587,180415, 571, 1, 1, 3004.535, 4048.617, 26.07964, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0588,180415, 571, 1, 1, 2862.335, 4038.781, 5.057745, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0589,180415, 571, 1, 1, 2860.901, 4036.917, 10.936, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0590,180415, 571, 1, 1, 2863.556, 4030.712, 10.90262, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0591,180415, 571, 1, 1, 2870.361, 4032.718, 5.063904, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0592,180415, 571, 1, 1, 2874.672, 4034.085, 5.337824, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0593,180415, 571, 1, 1, 2871.422, 4041.642, 5.131527, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0594,180415, 571, 1, 1, 2866.514, 4040.803, 5.103539, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0595,180415, 571, 1, 1, 2865.706, 4030.687, 5.018806, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0596,180415, 571, 1, 1, 2852.11, 4024.6, 5.079292, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0597,180415, 571, 1, 1, 2834.966, 4027.097, 5.066519, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0598,180415, 571, 1, 1, 2857.513, 4036.657, 5.022579, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0599,180415, 571, 1, 1, 2847.389, 4022.759, 5.015669, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0600,180415, 571, 1, 1, 2848.344, 4032.73, 5.091734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0601,180415, 571, 1, 1, 2839.194, 4028.807, 5.034027, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0602,180415, 571, 1, 1, 2861.214, 4028.713, 4.992302, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0603,180415, 571, 1, 1, 2853.19, 4035.031, 5.072161, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0604,180415, 571, 1, 1, 2844.015, 4030.81, 5.057843, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0605,180415, 571, 1, 1, 2842.966, 4020.906, 4.97491, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0606,180415, 571, 1, 1, 2856.586, 4026.636, 5.041717, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0607,180415, 571, 1, 1, 2838.301, 4018.869, 5.02294, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+0608,180415, 571, 1, 1, 3434.656, 4170.812, 14.18469, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0609,180415, 571, 1, 1, 3436.351, 4170.699, 14.72765, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0610,180415, 571, 1, 1, 3434.991, 4175.841, 14.25499, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0611,180415, 571, 1, 1, 3437.776, 4170.405, 15.33066, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0612,180415, 571, 1, 1, 3436.812, 4175.733, 14.72314, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0613,180415, 571, 1, 1, 3438.13, 4175.703, 15.35011, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0614,180415, 571, 1, 1, 3439.169, 4170.2, 15.85179, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0615,180415, 571, 1, 1, 3439.449, 4175.608, 15.88088, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0616,180415, 571, 1, 1, 3441.065, 4175.682, 16.57793, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0617,180415, 571, 1, 1, 3441.056, 4170.128, 16.49479, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0618,180415, 571, 1, 1, 3460.127, 4139.347, 15.29107, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0619,180415, 571, 1, 1, 3460.05, 4142.877, 16.52606, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0620,180415, 571, 1, 1, 3465.668, 4142.377, 16.36272, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0621,180415, 571, 1, 1, 3460.073, 4138.049, 15.04643, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0622,180415, 571, 1, 1, 3459.941, 4140.769, 15.82715, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0623,180415, 571, 1, 1, 3465.849, 4140.417, 15.76362, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0624,180415, 571, 1, 1, 3458.424, 4132.354, 17.18105, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0625,180415, 571, 1, 1, 3465.589, 4138.927, 15.2921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0626,180415, 571, 1, 1, 3458.859, 4132.616, 17.19908, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0627,180415, 571, 1, 1, 3465.348, 4137.641, 15.11139, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0628,180415, 571, 1, 1, 3491.878, 4167.745, 15.70641, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0629,180415, 571, 1, 1, 3490.802, 4173.49, 16.09687, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0630,180415, 571, 1, 1, 3493.248, 4167.78, 15.00927, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0631,180415, 571, 1, 1, 3490.705, 4167.838, 16.1151, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0632,180415, 571, 1, 1, 3497.003, 4167.765, 13.85431, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0633,180415, 571, 1, 1, 3497.161, 4173.208, 13.8974, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0634,180415, 571, 1, 1, 3495.283, 4173.163, 14.59191, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0635,180415, 571, 1, 1, 3493.558, 4173.144, 15.14168, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0636,180415, 571, 1, 1, 3495.103, 4167.599, 14.42155, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0637,180415, 571, 1, 1, 3492.093, 4173.33, 15.54947, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+0638,180415, 571, 1, 1, 5231.531, -1307.568, 242.9937, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0639,180415, 571, 1, 1, 5231.531, -1307.568, 242.9937, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0640,180415, 571, 1, 1, 5231.807, -1317.45, 242.3508, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0641,180415, 571, 1, 1, 5231.807, -1317.45, 242.3508, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0642,180415, 571, 1, 1, 5232.045, -1311.97, 242.4411, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0643,180415, 571, 1, 1, 5232.045, -1311.97, 242.4411, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0644,180415, 571, 1, 1, 5228.543, -1303.112, 242.7879, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0645,180415, 571, 1, 1, 5228.543, -1303.112, 242.7879, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0646,180415, 571, 1, 1, 5223.873, -1297.311, 242.7593, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0647,180415, 571, 1, 1, 5223.873, -1297.311, 242.7593, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0648,180415, 571, 1, 1, 5219.208, -1294.684, 243.2743, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0649,180415, 571, 1, 1, 5219.208, -1294.684, 243.2743, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0650,180415, 571, 1, 1, 5219.888, -1333.076, 242.3786, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0651,180415, 571, 1, 1, 5219.888, -1333.076, 242.3786, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0652,180415, 571, 1, 1, 5214.489, -1333.5, 242.7952, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0653,180415, 571, 1, 1, 5214.489, -1333.5, 242.7952, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0654,180415, 571, 1, 1, 5200.362, -1331.64, 243.263, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0655,180415, 571, 1, 1, 5200.362, -1331.64, 243.263, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0656,180415, 571, 1, 1, 5205.63, -1333.422, 243.3845, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0657,180415, 571, 1, 1, 5205.63, -1333.422, 243.3845, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+0658,180415, 571, 1, 1, 5174.615, -2200.075, 237.0793, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0659,180415, 571, 1, 1, 5174.615, -2200.075, 237.0793, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0660,180415, 571, 1, 1, 5181.025, -2200.378, 238.9339, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0661,180415, 571, 1, 1, 5181.025, -2200.378, 238.9339, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0662,180415, 571, 1, 1, 5147.62, -2198.052, 237.614, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0663,180415, 571, 1, 1, 5147.62, -2198.052, 237.614, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0664,180415, 571, 1, 1, 5179.311, -2200.378, 238.4566, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0665,180415, 571, 1, 1, 5179.311, -2200.378, 238.4566, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0666,180415, 571, 1, 1, 5147.989, -2198.857, 237.614, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0667,180415, 571, 1, 1, 5147.989, -2198.857, 237.614, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0668,180415, 571, 1, 1, 5157.23, -2201.726, 237.5309, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0669,180415, 571, 1, 1, 5157.23, -2201.726, 237.5309, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0670,180415, 571, 1, 1, 5177.918, -2200.155, 237.9545, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0671,180415, 571, 1, 1, 5177.918, -2200.155, 237.9545, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0672,180415, 571, 1, 1, 5176.376, -2200.125, 237.5385, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0673,180415, 571, 1, 1, 5176.376, -2200.125, 237.5385, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0674,180415, 571, 1, 1, 5137.146, -2201.73, 237.8019, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0675,180415, 571, 1, 1, 5137.146, -2201.73, 237.8019, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0676,180415, 571, 1, 1, 5147.455, -2202.927, 237.0062, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0677,180415, 571, 1, 1, 5147.455, -2202.927, 237.0062, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0678,180415, 571, 1, 1, 5150.261, -2211.397, 238.8011, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0679,180415, 571, 1, 1, 5150.261, -2211.397, 238.8011, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0680,180415, 571, 1, 1, 5134.615, -2201.333, 238.8165, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0681,180415, 571, 1, 1, 5134.615, -2201.333, 238.8165, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0682,180415, 571, 1, 1, 5134.096, -2200.798, 238.8165, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0683,180415, 571, 1, 1, 5134.096, -2200.798, 238.8165, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0684,180415, 571, 1, 1, 5174.395, -2217.037, 237.1849, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0685,180415, 571, 1, 1, 5174.395, -2217.037, 237.1849, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0686,180415, 571, 1, 1, 5181.015, -2217.125, 238.9904, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0687,180415, 571, 1, 1, 5181.015, -2217.125, 238.9904, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0688,180415, 571, 1, 1, 5179.321, -2217.104, 238.5324, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0689,180415, 571, 1, 1, 5179.321, -2217.104, 238.5324, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0690,180415, 571, 1, 1, 5177.742, -2217.072, 237.9756, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0691,180415, 571, 1, 1, 5177.742, -2217.072, 237.9756, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0692,180415, 571, 1, 1, 5141.178, -2211.442, 238.1585, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0693,180415, 571, 1, 1, 5141.178, -2211.442, 238.1585, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0694,180415, 571, 1, 1, 5140.784, -2211.82, 238.1585, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0695,180415, 571, 1, 1, 5140.784, -2211.82, 238.1585, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0696,180415, 571, 1, 1, 5176.154, -2217.055, 237.5818, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0697,180415, 571, 1, 1, 5176.154, -2217.055, 237.5818, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+0698,180415, 571, 1, 1, 5377.697, -2612.275, 305.4919, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0699,180415, 571, 1, 1, 5377.697, -2612.275, 305.4919, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0700,180415, 571, 1, 1, 5378.776, -2637.334, 304.966, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0701,180415, 571, 1, 1, 5378.776, -2637.334, 304.966, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0702,180415, 571, 1, 1, 5446.666, -2635.141, 306.7401, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0703,180415, 571, 1, 1, 5446.666, -2635.141, 306.7401, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0704,180415, 571, 1, 1, 5443.241, -2628.945, 306.7371, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0705,180415, 571, 1, 1, 5443.241, -2628.945, 306.7371, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0706,180415, 571, 1, 1, 5444.132, -2632.507, 306.7371, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0707,180415, 571, 1, 1, 5444.132, -2632.507, 306.7371, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0708,180415, 571, 1, 1, 5446.891, -2622.866, 306.733, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0709,180415, 571, 1, 1, 5446.891, -2622.866, 306.733, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0710,180415, 571, 1, 1, 5450.479, -2621.981, 306.7277, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0711,180415, 571, 1, 1, 5450.479, -2621.981, 306.7277, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0712,180415, 571, 1, 1, 5453.979, -2622.99, 306.5936, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0713,180415, 571, 1, 1, 5453.979, -2622.99, 306.5936, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0714,180415, 571, 1, 1, 5450.222, -2636.167, 306.739, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0715,180415, 571, 1, 1, 5450.222, -2636.167, 306.739, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0716,180415, 571, 1, 1, 5444.251, -2625.413, 306.7368, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0717,180415, 571, 1, 1, 5444.251, -2625.413, 306.7368, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0718,180415, 571, 1, 1, 5453.774, -2635.269, 306.7326, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0719,180415, 571, 1, 1, 5453.774, -2635.269, 306.7326, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0720,180415, 571, 1, 1, 5456.549, -2625.604, 306.6074, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0721,180415, 571, 1, 1, 5456.549, -2625.604, 306.6074, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0722,180415, 571, 1, 1, 5456.413, -2632.691, 306.7231, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0723,180415, 571, 1, 1, 5456.413, -2632.691, 306.7231, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0724,180415, 571, 1, 1, 5457.469, -2629.154, 306.7375, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0725,180415, 571, 1, 1, 5457.469, -2629.154, 306.7375, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0726,180415, 571, 1, 1, 5528.001, -2665.6, 305.3742, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0727,180415, 571, 1, 1, 5528.001, -2665.6, 305.3742, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0728,180415, 571, 1, 1, 5500.662, -2662.148, 304.9659, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0729,180415, 571, 1, 1, 5500.662, -2662.148, 304.9659, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+0730,180415, 571, 1, 1, 5763.567, -3552.541, 386.5541, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0731,180415, 571, 1, 1, 5763.567, -3552.541, 386.5541, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0732,180415, 571, 1, 1, 5768.135, -3553.175, 386.5514, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0733,180415, 571, 1, 1, 5768.135, -3553.175, 386.5514, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0734,180415, 571, 1, 1, 5750.391, -3570.385, 386.6082, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0735,180415, 571, 1, 1, 5750.391, -3570.385, 386.6082, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0736,180415, 571, 1, 1, 5776.281, -3557.164, 386.5179, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0737,180415, 571, 1, 1, 5776.281, -3557.164, 386.5179, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0738,180415, 571, 1, 1, 5762.846, -3557.929, 386.7904, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0739,180415, 571, 1, 1, 5762.846, -3557.929, 386.7904, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0740,180415, 571, 1, 1, 5775.812, -3560.629, 386.5844, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0741,180415, 571, 1, 1, 5775.812, -3560.629, 386.5844, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0742,180415, 571, 1, 1, 5757.775, -3561.603, 386.7299, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0743,180415, 571, 1, 1, 5757.775, -3561.603, 386.7299, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0744,180415, 571, 1, 1, 5776.619, -3565.798, 386.6816, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0745,180415, 571, 1, 1, 5776.619, -3565.798, 386.6816, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0746,180415, 571, 1, 1, 5776.687, -3569.371, 386.6979, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0747,180415, 571, 1, 1, 5776.687, -3569.371, 386.6979, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0748,180415, 571, 1, 1, 5773.405, -3555.642, 386.5388, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0749,180415, 571, 1, 1, 5773.405, -3555.642, 386.5388, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0750,180415, 571, 1, 1, 5769.636, -3555.544, 386.6231, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0751,180415, 571, 1, 1, 5769.636, -3555.544, 386.6231, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0752,180415, 571, 1, 1, 5752.563, -3565.215, 386.6399, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0753,180415, 571, 1, 1, 5752.563, -3565.215, 386.6399, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0754,180415, 571, 1, 1, 5775.966, -3574.389, 387.2715, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0755,180415, 571, 1, 1, 5775.966, -3574.389, 387.2715, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0756,180415, 571, 1, 1, 5760.6, -3586.51, 386.5219, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0757,180415, 571, 1, 1, 5760.6, -3586.51, 386.5219, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0758,180415, 571, 1, 1, 5748.784, -3573.642, 386.5444, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0759,180415, 571, 1, 1, 5748.784, -3573.642, 386.5444, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0760,180415, 571, 1, 1, 5765.48, -3584.281, 386.6219, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0761,180415, 571, 1, 1, 5765.48, -3584.281, 386.6219, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0762,180415, 571, 1, 1, 5755.499, -3578.478, 386.6624, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0763,180415, 571, 1, 1, 5755.499, -3578.478, 386.6624, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0764,180415, 571, 1, 1, 5768.435, -3581.585, 386.7327, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0765,180415, 571, 1, 1, 5768.435, -3581.585, 386.7327, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0766,180415, 571, 1, 1, 5772.202, -3578.392, 386.7462, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0767,180415, 571, 1, 1, 5772.202, -3578.392, 386.7462, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0768,180415, 571, 1, 1, 5759.083, -3583, 386.592, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0769,180415, 571, 1, 1, 5759.083, -3583, 386.592, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+0770,180415, 571, 1, 1, 3873.8, -4541.213, 210.1521, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0771,180415, 571, 1, 1, 3873.8, -4541.213, 210.1521, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0772,180415, 571, 1, 1, 3871.856, -4548.686, 211.1932, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0773,180415, 571, 1, 1, 3871.856, -4548.686, 211.1932, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0774,180415, 571, 1, 1, 3873.244, -4548.734, 211.219, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0775,180415, 571, 1, 1, 3873.244, -4548.734, 211.219, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0776,180415, 571, 1, 1, 3862.183, -4548.674, 211.6033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0777,180415, 571, 1, 1, 3862.183, -4548.674, 211.6033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0778,180415, 571, 1, 1, 3865.728, -4534.643, 211.7069, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0779,180415, 571, 1, 1, 3865.728, -4534.643, 211.7069, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0780,180415, 571, 1, 1, 3880.78, -4510.24, 218.4157, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0781,180415, 571, 1, 1, 3880.78, -4510.24, 218.4157, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0782,180415, 571, 1, 1, 3833.083, -4531.847, 213.2785, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0783,180415, 571, 1, 1, 3833.083, -4531.847, 213.2785, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0784,180415, 571, 1, 1, 3861.911, -4519.634, 211.6107, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0785,180415, 571, 1, 1, 3861.911, -4519.634, 211.6107, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0786,180415, 571, 1, 1, 3863.615, -4516.346, 214.1784, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0787,180415, 571, 1, 1, 3863.615, -4516.346, 214.1784, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0788,180415, 571, 1, 1, 3830.969, -4499.772, 206.4349, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4211) +(@OGUID+0789,180415, 571, 1, 1, 3830.969, -4499.772, 206.4349, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4211) +(@OGUID+0790,180415, 571, 1, 1, 3443.286, -2823.03, 202.9982, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0791,180415, 571, 1, 1, 3443.286, -2823.03, 202.9982, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0792,180415, 571, 1, 1, 3407.794, -2841.943, 202.67, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0793,180415, 571, 1, 1, 3407.794, -2841.943, 202.67, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0794,180415, 571, 1, 1, 3441.109, -2824.373, 202.9075, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0795,180415, 571, 1, 1, 3441.109, -2824.373, 202.9075, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0796,180415, 571, 1, 1, 3438.945, -2825.767, 203.0237, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0797,180415, 571, 1, 1, 3438.945, -2825.767, 203.0237, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0798,180415, 571, 1, 1, 3440.277, -2818.991, 203.0136, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0799,180415, 571, 1, 1, 3440.277, -2818.991, 203.0136, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0800,180415, 571, 1, 1, 3436.816, -2827.108, 202.9122, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0801,180415, 571, 1, 1, 3436.816, -2827.108, 202.9122, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0802,180415, 571, 1, 1, 3441.738, -2820.991, 202.9215, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0803,180415, 571, 1, 1, 3441.738, -2820.991, 202.9215, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0804,180415, 571, 1, 1, 3434.637, -2828.344, 202.9919, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0805,180415, 571, 1, 1, 3434.637, -2828.344, 202.9919, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0806,180415, 571, 1, 1, 3406.82, -2839.58, 202.8193, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0807,180415, 571, 1, 1, 3406.82, -2839.58, 202.8193, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0808,180415, 571, 1, 1, 3437.037, -2814.965, 202.884, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0809,180415, 571, 1, 1, 3437.037, -2814.965, 202.884, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0810,180415, 571, 1, 1, 3438.661, -2816.929, 203.0817, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0811,180415, 571, 1, 1, 3438.661, -2816.929, 203.0817, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0812,180415, 571, 1, 1, 3405.275, -2832.076, 202.8215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0813,180415, 571, 1, 1, 3405.275, -2832.076, 202.8215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0814,180415, 571, 1, 1, 3405.745, -2834.549, 202.8814, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0815,180415, 571, 1, 1, 3405.745, -2834.549, 202.8814, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0816,180415, 571, 1, 1, 3406.287, -2837.063, 202.8049, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0817,180415, 571, 1, 1, 3406.287, -2837.063, 202.8049, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0818,180415, 571, 1, 1, 3407.031, -2802.89, 212.337, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0819,180415, 571, 1, 1, 3407.031, -2802.89, 212.337, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0820,180415, 571, 1, 1, 3444.464, -2796.757, 203.2364, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0821,180415, 571, 1, 1, 3444.464, -2796.757, 203.2364, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0822,180415, 571, 1, 1, 3400.99, -2811.019, 202.6149, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0823,180415, 571, 1, 1, 3400.99, -2811.019, 202.6149, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0824,180415, 571, 1, 1, 3413.189, -2802.605, 212.3711, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0825,180415, 571, 1, 1, 3413.189, -2802.605, 212.3711, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0826,180415, 571, 1, 1, 3415.103, -2800.74, 202.2157, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0827,180415, 571, 1, 1, 3415.103, -2800.74, 202.2157, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0828,180415, 571, 1, 1, 3400.969, -2809.62, 202.0353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0829,180415, 571, 1, 1, 3400.969, -2809.62, 202.0353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0830,180415, 571, 1, 1, 3400.82, -2811.734, 202.7707, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0831,180415, 571, 1, 1, 3400.82, -2811.734, 202.7707, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0832,180415, 571, 1, 1, 3411.195, -2811.007, 202.0898, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0833,180415, 571, 1, 1, 3411.195, -2811.007, 202.0898, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0834,180415, 571, 1, 1, 3411.819, -2803.252, 212.5847, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0835,180415, 571, 1, 1, 3411.819, -2803.252, 212.5847, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0836,180415, 571, 1, 1, 3441.908, -2797.017, 203.1431, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0837,180415, 571, 1, 1, 3441.908, -2797.017, 203.1431, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0838,180415, 571, 1, 1, 3407.968, -2803.407, 213.5988, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0839,180415, 571, 1, 1, 3407.968, -2803.407, 213.5988, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0840,180415, 571, 1, 1, 3407.057, -2802.274, 212.4086, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0841,180415, 571, 1, 1, 3407.057, -2802.274, 212.4086, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0842,180415, 571, 1, 1, 3457.735, -2786.757, 202.8651, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0843,180415, 571, 1, 1, 3457.735, -2786.757, 202.8651, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0844,180415, 571, 1, 1, 3455.872, -2783.97, 202.7178, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0845,180415, 571, 1, 1, 3455.872, -2783.97, 202.7178, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0846,180415, 571, 1, 1, 3400.54, -2799.177, 201.4966, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0847,180415, 571, 1, 1, 3400.54, -2799.177, 201.4966, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0848,180415, 571, 1, 1, 3456.458, -2789.083, 203.3248, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0849,180415, 571, 1, 1, 3456.458, -2789.083, 203.3248, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0850,180415, 571, 1, 1, 3399.834, -2790.558, 212.2449, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0851,180415, 571, 1, 1, 3399.834, -2790.558, 212.2449, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0852,180415, 571, 1, 1, 3405.42, -2788.209, 203.0673, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0853,180415, 571, 1, 1, 3405.42, -2788.209, 203.0673, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0854,180415, 571, 1, 1, 3400.798, -2792.024, 212.3608, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0855,180415, 571, 1, 1, 3400.798, -2792.024, 212.3608, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0856,180415, 571, 1, 1, 3406.408, -2787.522, 203.0332, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0857,180415, 571, 1, 1, 3406.408, -2787.522, 203.0332, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0858,180415, 571, 1, 1, 3398.889, -2790.992, 213.4207, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0859,180415, 571, 1, 1, 3398.889, -2790.992, 213.4207, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0860,180415, 571, 1, 1, 3400.714, -2792.445, 212.2851, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0861,180415, 571, 1, 1, 3400.714, -2792.445, 212.2851, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0862,180415, 571, 1, 1, 3399.956, -2791.192, 212.2966, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0863,180415, 571, 1, 1, 3399.956, -2791.192, 212.2966, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0864,180415, 571, 1, 1, 3399.706, -2791.847, 212.3247, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0865,180415, 571, 1, 1, 3399.706, -2791.847, 212.3247, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0866,180415, 571, 1, 1, 3413.264, -2780.046, 202.9309, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0867,180415, 571, 1, 1, 3413.264, -2780.046, 202.9309, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0868,180415, 571, 1, 1, 3466.171, -2781.337, 202.358, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0869,180415, 571, 1, 1, 3466.171, -2781.337, 202.358, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0870,180415, 571, 1, 1, 3458.188, -2776.3, 201.8077, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0871,180415, 571, 1, 1, 3458.188, -2776.3, 201.8077, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0872,180415, 571, 1, 1, 3472.556, -2782.05, 202.3065, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0873,180415, 571, 1, 1, 3472.556, -2782.05, 202.3065, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0874,180415, 571, 1, 1, 3404.212, -2786.731, 203.0216, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0875,180415, 571, 1, 1, 3404.212, -2786.731, 203.0216, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0876,180415, 571, 1, 1, 3408.607, -2785.961, 202.9851, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0877,180415, 571, 1, 1, 3408.607, -2785.961, 202.9851, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0878,180415, 571, 1, 1, 3475.129, -2782.253, 202.1459, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0879,180415, 571, 1, 1, 3475.129, -2782.253, 202.1459, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0880,180415, 571, 1, 1, 3412.443, -2783.161, 202.9973, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0881,180415, 571, 1, 1, 3412.443, -2783.161, 202.9973, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0882,180415, 571, 1, 1, 3403.424, -2785.687, 202.9964, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0883,180415, 571, 1, 1, 3403.424, -2785.687, 202.9964, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0884,180415, 571, 1, 1, 3407.591, -2786.707, 202.9976, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0885,180415, 571, 1, 1, 3407.591, -2786.707, 202.9976, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0886,180415, 571, 1, 1, 3470.033, -2781.84, 202.4652, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0887,180415, 571, 1, 1, 3470.033, -2781.84, 202.4652, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0888,180415, 571, 1, 1, 3411.324, -2783.891, 202.9264, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0889,180415, 571, 1, 1, 3411.324, -2783.891, 202.9264, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0890,180415, 571, 1, 1, 3397.692, -2789.662, 213.2649, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0891,180415, 571, 1, 1, 3397.692, -2789.662, 213.2649, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0892,180415, 571, 1, 1, 3402.704, -2784.6, 202.9906, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0893,180415, 571, 1, 1, 3402.704, -2784.6, 202.9906, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0894,180415, 571, 1, 1, 3462.118, -2779.648, 202.4681, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0895,180415, 571, 1, 1, 3462.118, -2779.648, 202.4681, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0896,180415, 571, 1, 1, 3414.508, -2781.62, 202.9946, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0897,180415, 571, 1, 1, 3414.508, -2781.62, 202.9946, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0898,180415, 571, 1, 1, 3413.529, -2782.306, 202.9957, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0899,180415, 571, 1, 1, 3413.529, -2782.306, 202.9957, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0900,180415, 571, 1, 1, 3413.155, -2777.403, 206.0491, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0901,180415, 571, 1, 1, 3413.155, -2777.403, 206.0491, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0902,180415, 571, 1, 1, 3419.603, -2772.811, 201.5641, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0903,180415, 571, 1, 1, 3419.603, -2772.811, 201.5641, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0904,180415, 571, 1, 1, 3425.753, -2769.791, 202.0575, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0905,180415, 571, 1, 1, 3425.753, -2769.791, 202.0575, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0906,180415, 571, 1, 1, 3456.768, -2774.179, 201.8534, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0907,180415, 571, 1, 1, 3456.768, -2774.179, 201.8534, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0908,180415, 571, 1, 1, 3411.746, -2778.068, 202.9529, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0909,180415, 571, 1, 1, 3411.746, -2778.068, 202.9529, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0910,180415, 571, 1, 1, 3406.269, -2781.944, 203.4021, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0911,180415, 571, 1, 1, 3406.269, -2781.944, 203.4021, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0912,180415, 571, 1, 1, 3425.471, -2770.199, 202.053, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0913,180415, 571, 1, 1, 3425.471, -2770.199, 202.053, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0914,180415, 571, 1, 1, 3412.486, -2778.925, 202.9093, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0915,180415, 571, 1, 1, 3412.486, -2778.925, 202.9093, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+0916,180415, 571, 1, 1, 3397.889, -2752.26, 201.1765, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0917,180415, 571, 1, 1, 3397.889, -2752.26, 201.1765, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0918,180415, 571, 1, 1, 3397.825, -2754.811, 201.1646, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0919,180415, 571, 1, 1, 3397.825, -2754.811, 201.1646, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0920,180415, 571, 1, 1, 3455.441, -2749.057, 200.8513, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0921,180415, 571, 1, 1, 3455.441, -2749.057, 200.8513, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0922,180415, 571, 1, 1, 3440.693, -2745.642, 200.7106, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0923,180415, 571, 1, 1, 3440.693, -2745.642, 200.7106, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0924,180415, 571, 1, 1, 3427.793, -2745.417, 200.9314, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0925,180415, 571, 1, 1, 3427.793, -2745.417, 200.9314, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0926,180415, 571, 1, 1, 3445.042, -2751.564, 199.4239, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0927,180415, 571, 1, 1, 3445.042, -2751.564, 199.4239, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0928,180415, 571, 1, 1, 3455.573, -2746.484, 200.8855, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0929,180415, 571, 1, 1, 3455.573, -2746.484, 200.8855, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0930,180415, 571, 1, 1, 3443.285, -2745.714, 200.7417, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0931,180415, 571, 1, 1, 3443.285, -2745.714, 200.7417, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0932,180415, 571, 1, 1, 3425.394, -2745.384, 200.891, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0933,180415, 571, 1, 1, 3425.394, -2745.384, 200.891, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0934,180415, 571, 1, 1, 3445.895, -2745.695, 200.92, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0935,180415, 571, 1, 1, 3445.895, -2745.695, 200.92, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0936,180415, 571, 1, 1, 3448.288, -2745.802, 200.9623, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0937,180415, 571, 1, 1, 3448.288, -2745.802, 200.9623, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0938,180415, 571, 1, 1, 3455.298, -2756.604, 201.076, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0939,180415, 571, 1, 1, 3455.298, -2756.604, 201.076, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0940,180415, 571, 1, 1, 3455.351, -2754.038, 201.1146, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0941,180415, 571, 1, 1, 3455.351, -2754.038, 201.1146, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0942,180415, 571, 1, 1, 3422.8, -2745.42, 200.716, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0943,180415, 571, 1, 1, 3422.8, -2745.42, 200.716, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0944,180415, 571, 1, 1, 3455.435, -2751.653, 201.1238, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0945,180415, 571, 1, 1, 3455.435, -2751.653, 201.1238, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0946,180415, 571, 1, 1, 3420.21, -2745.375, 200.6848, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0947,180415, 571, 1, 1, 3420.21, -2745.375, 200.6848, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0948,180415, 571, 1, 1, 3430.328, -2745.441, 200.9204, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0949,180415, 571, 1, 1, 3430.328, -2745.441, 200.9204, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0950,180415, 571, 1, 1, 3449.38, -2752.161, 199.3402, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0951,180415, 571, 1, 1, 3449.38, -2752.161, 199.3402, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0952,180415, 571, 1, 1, 3450.814, -2745.738, 201.1831, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0953,180415, 571, 1, 1, 3450.814, -2745.738, 201.1831, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0954,180415, 571, 1, 1, 3406.284, -2744.823, 200.6775, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0955,180415, 571, 1, 1, 3406.284, -2744.823, 200.6775, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0956,180415, 571, 1, 1, 3398.188, -2744.674, 200.9263, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0957,180415, 571, 1, 1, 3398.188, -2744.674, 200.9263, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0958,180415, 571, 1, 1, 3408.93, -2745.019, 200.7298, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0959,180415, 571, 1, 1, 3408.93, -2745.019, 200.7298, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0960,180415, 571, 1, 1, 3398.062, -2747.274, 200.9093, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0961,180415, 571, 1, 1, 3398.062, -2747.274, 200.9093, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0962,180415, 571, 1, 1, 3411.495, -2744.974, 200.9156, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0963,180415, 571, 1, 1, 3411.495, -2744.974, 200.9156, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0964,180415, 571, 1, 1, 3398.008, -2749.851, 201.1351, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0965,180415, 571, 1, 1, 3398.008, -2749.851, 201.1351, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0966,180415, 571, 1, 1, 3413.885, -2745.063, 200.9569, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0967,180415, 571, 1, 1, 3413.885, -2745.063, 200.9569, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0968,180415, 571, 1, 1, 3416.44, -2745.043, 200.9444, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0969,180415, 571, 1, 1, 3416.44, -2745.043, 200.9444, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+0970,180415, 571, 1, 1, 3306.957, -2346.275, 114.2688, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0971,180415, 571, 1, 1, 3306.957, -2346.275, 114.2688, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0972,180415, 571, 1, 1, 3306.503, -2346.271, 114.2327, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0973,180415, 571, 1, 1, 3306.503, -2346.271, 114.2327, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0974,180415, 571, 1, 1, 3314.758, -2336.475, 113.8916, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0975,180415, 571, 1, 1, 3314.758, -2336.475, 113.8916, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0976,180415, 571, 1, 1, 3315.174, -2335.131, 112.3857, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0977,180415, 571, 1, 1, 3315.174, -2335.131, 112.3857, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0978,180415, 571, 1, 1, 3313.81, -2337.315, 112.3801, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0979,180415, 571, 1, 1, 3313.81, -2337.315, 112.3801, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0980,180415, 571, 1, 1, 3314.402, -2336.751, 113.8963, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0981,180415, 571, 1, 1, 3314.402, -2336.751, 113.8963, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+0982,180415, 571, 1, 1, 3320.02, -2321.913, 114.3211, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0983,180415, 571, 1, 1, 3320.02, -2321.913, 114.3211, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0984,180415, 571, 1, 1, 3319.593, -2323.635, 112.2697, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0985,180415, 571, 1, 1, 3319.593, -2323.635, 112.2697, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0986,180415, 571, 1, 1, 3319.35, -2324.088, 112.2623, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0987,180415, 571, 1, 1, 3319.35, -2324.088, 112.2623, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0988,180415, 571, 1, 1, 3320.5, -2321.387, 114.3223, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0989,180415, 571, 1, 1, 3320.5, -2321.387, 114.3223, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0990,180415, 571, 1, 1, 3240.985, -2236.183, 117.2045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0991,180415, 571, 1, 1, 3240.985, -2236.183, 117.2045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0992,180415, 571, 1, 1, 3240.313, -2236.637, 117.1827, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0993,180415, 571, 1, 1, 3240.313, -2236.637, 117.1827, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0994,180415, 571, 1, 1, 3255.964, -2216.654, 117.3241, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0995,180415, 571, 1, 1, 3255.964, -2216.654, 117.3241, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0996,180415, 571, 1, 1, 3250.294, -2214.309, 117.3726, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0997,180415, 571, 1, 1, 3250.294, -2214.309, 117.3726, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0998,180415, 571, 1, 1, 3266.923, -2221.398, 117.2959, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+0999,180415, 571, 1, 1, 3266.923, -2221.398, 117.2959, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1000,180415, 571, 1, 1, 3273.234, -2223.792, 117.3726, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1001,180415, 571, 1, 1, 3273.234, -2223.792, 117.3726, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1002,180415, 571, 1, 1, 3253.368, -2199.88, 117.029, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1003,180415, 571, 1, 1, 3253.368, -2199.88, 117.029, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1004,180415, 571, 1, 1, 3280.633, -2211.489, 117.029, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1005,180415, 571, 1, 1, 3280.633, -2211.489, 117.029, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1006,180415, 571, 1, 1, 3254.062, -2187.705, 118.7545, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1007,180415, 571, 1, 1, 3254.062, -2187.705, 118.7545, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1008,180415, 571, 1, 1, 3256.237, -2188.316, 118.4933, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1009,180415, 571, 1, 1, 3256.237, -2188.316, 118.4933, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+1010,180415, 571, 1, 1, 1904.515, -6141.503, 19.07745, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000) +(@OGUID+1011,180415, 571, 1, 1, 1904.515, -6141.503, 19.07745, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000) +(@OGUID+1012,180415, 571, 1, 1, 1904.164, -6141.786, 19.07746, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000) +(@OGUID+1013,180415, 571, 1, 1, 1904.164, -6141.786, 19.07746, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000) +(@OGUID+1014,180415, 571, 1, 1, 730.0452, -2931.608, 7.921721, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1015,180415, 571, 1, 1, 730.0452, -2931.608, 7.921721, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1016,180415, 571, 1, 1, 726.9896, -2932.885, 7.942686, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1017,180415, 571, 1, 1, 726.9896, -2932.885, 7.942686, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1018,180415, 571, 1, 1, 732.6979, -2930.411, 7.924031, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1019,180415, 571, 1, 1, 732.6979, -2930.411, 7.924031, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1020,180415, 571, 1, 1, 732.0417, -2926.337, 7.959949, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1021,180415, 571, 1, 1, 732.0417, -2926.337, 7.959949, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1022,180415, 571, 1, 1, 728.4393, -2932.286, 7.933091, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1023,180415, 571, 1, 1, 728.4393, -2932.286, 7.933091, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1024,180415, 571, 1, 1, 725.5104, -2932.967, 8.092805, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1025,180415, 571, 1, 1, 725.5104, -2932.967, 8.092805, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1026,180415, 571, 1, 1, 731.3733, -2930.993, 7.925742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1027,180415, 571, 1, 1, 731.3733, -2930.993, 7.925742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1028,180415, 571, 1, 1, 697.434, -2944.288, -1.407539, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1029,180415, 571, 1, 1, 697.434, -2944.288, -1.407539, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1030,180415, 571, 1, 1, 724.4271, -2926.127, 8.093702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1031,180415, 571, 1, 1, 724.4271, -2926.127, 8.093702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1032,180415, 571, 1, 1, 725.8629, -2925.865, 7.972515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1033,180415, 571, 1, 1, 725.8629, -2925.865, 7.972515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1034,180415, 571, 1, 1, 729.1215, -2926.113, 7.972516, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1035,180415, 571, 1, 1, 729.1215, -2926.113, 7.972516, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1036,180415, 571, 1, 1, 706.757, -2944.646, -1.334748, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1037,180415, 571, 1, 1, 706.757, -2944.646, -1.334748, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1038,180415, 571, 1, 1, 727.4358, -2925.96, 7.973504, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1039,180415, 571, 1, 1, 727.4358, -2925.96, 7.973504, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1040,180415, 571, 1, 1, 730.5781, -2926.233, 7.968627, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1041,180415, 571, 1, 1, 730.5781, -2926.233, 7.968627, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1042,180415, 571, 1, 1, 694.3993, -2923.686, -1.305829, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1043,180415, 571, 1, 1, 694.3993, -2923.686, -1.305829, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1044,180415, 571, 1, 1, 704.0989, -2921.766, -1.33801, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1045,180415, 571, 1, 1, 704.0989, -2921.766, -1.33801, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+1046,180415, 571, 1, 1, 1421.866, -3274.431, 175.8965, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1047,180415, 571, 1, 1, 1421.866, -3274.431, 175.8965, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1048,180415, 571, 1, 1, 1437.179, -3255.236, 168.5082, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1049,180415, 571, 1, 1, 1437.179, -3255.236, 168.5082, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1050,180415, 571, 1, 1, 1423.415, -3272.469, 175.8965, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1051,180415, 571, 1, 1, 1423.415, -3272.469, 175.8965, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1052,180415, 571, 1, 1, 1440.88, -3258.736, 168.5083, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1053,180415, 571, 1, 1, 1440.88, -3258.736, 168.5083, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1054,180415, 571, 1, 1, 1421.422, -3276.337, 175.8964, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1055,180415, 571, 1, 1, 1421.422, -3276.337, 175.8964, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1056,180415, 571, 1, 1, 1421.38, -3278.174, 175.8965, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1057,180415, 571, 1, 1, 1421.38, -3278.174, 175.8965, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1058,180415, 571, 1, 1, 1421.837, -3279.875, 175.8964, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1059,180415, 571, 1, 1, 1421.837, -3279.875, 175.8964, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1060,180415, 571, 1, 1, 1443.076, -3260.196, 168.5083, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1061,180415, 571, 1, 1, 1443.076, -3260.196, 168.5083, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1062,180415, 571, 1, 1, 1443.797, -3259.285, 168.5083, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1063,180415, 571, 1, 1, 1443.797, -3259.285, 168.5083, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1064,180415, 571, 1, 1, 1437.932, -3254.321, 168.5089, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1065,180415, 571, 1, 1, 1437.932, -3254.321, 168.5089, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1066,180415, 571, 1, 1, 1438.714, -3257.005, 168.5084, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1067,180415, 571, 1, 1, 1438.714, -3257.005, 168.5084, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1068,180415, 571, 1, 1, 1424.549, -3281.903, 175.8964, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1069,180415, 571, 1, 1, 1424.549, -3281.903, 175.8964, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1070,180415, 571, 1, 1, 1446.208, -3272.655, 171.3525, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1071,180415, 571, 1, 1, 1446.208, -3272.655, 171.3525, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1072,180415, 571, 1, 1, 1425.948, -3281.997, 175.8964, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1073,180415, 571, 1, 1, 1425.948, -3281.997, 175.8964, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1074,180415, 571, 1, 1, 1449.852, -3275.616, 171.3525, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1075,180415, 571, 1, 1, 1449.852, -3275.616, 171.3525, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1076,180415, 571, 1, 1, 1427.842, -3281.715, 175.8965, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1077,180415, 571, 1, 1, 1427.842, -3281.715, 175.8965, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1078,180415, 571, 1, 1, 1429.609, -3280.913, 175.8965, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1079,180415, 571, 1, 1, 1429.609, -3280.913, 175.8965, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1080,180415, 571, 1, 1, 1431.264, -3278.972, 175.8965, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1081,180415, 571, 1, 1, 1431.264, -3278.972, 175.8965, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1082,180415, 571, 1, 1, 1448.076, -3274.135, 171.3525, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1083,180415, 571, 1, 1, 1448.076, -3274.135, 171.3525, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1084,180415, 571, 1, 1, 1451.38, -3276.939, 171.3525, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1085,180415, 571, 1, 1, 1451.38, -3276.939, 171.3525, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+1086,180415, 571, 1, 1, 607.8405, -4925.881, 24.95922, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1087,180415, 571, 1, 1, 607.8405, -4925.881, 24.95922, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1088,180415, 571, 1, 1, 608.6639, -4923.137, 31.06963, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1089,180415, 571, 1, 1, 608.6639, -4923.137, 31.06963, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1090,180415, 571, 1, 1, 606.8481, -4923.561, 31.05914, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1091,180415, 571, 1, 1, 606.8481, -4923.561, 31.05914, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1092,180415, 571, 1, 1, 592.6419, -4947.118, 27.2703, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1093,180415, 571, 1, 1, 592.6419, -4947.118, 27.2703, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1094,180415, 571, 1, 1, 601.7822, -4924.856, 31.09424, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1095,180415, 571, 1, 1, 601.7822, -4924.856, 31.09424, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1096,180415, 571, 1, 1, 592.2818, -4945.582, 27.2703, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1097,180415, 571, 1, 1, 592.2818, -4945.582, 27.2703, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1098,180415, 571, 1, 1, 602.6741, -4929.257, 22.72639, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1099,180415, 571, 1, 1, 602.6741, -4929.257, 22.72639, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1100,180415, 571, 1, 1, 607.1002, -4923.413, 24.95922, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1101,180415, 571, 1, 1, 607.1002, -4923.413, 24.95922, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1102,180415, 571, 1, 1, 601.2928, -4929.597, 22.72639, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1103,180415, 571, 1, 1, 601.2928, -4929.597, 22.72639, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1104,180415, 571, 1, 1, 599.9999, -4925.255, 31.10255, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1105,180415, 571, 1, 1, 599.9999, -4925.255, 31.10255, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1106,180415, 571, 1, 1, 604.4755, -4924.116, 24.96138, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1107,180415, 571, 1, 1, 604.4755, -4924.116, 24.96138, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1108,180415, 571, 1, 1, 592.1803, -4952.106, 27.2703, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1109,180415, 571, 1, 1, 592.1803, -4952.106, 27.2703, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1110,180415, 571, 1, 1, 591.1564, -4953.459, 27.2703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1111,180415, 571, 1, 1, 591.1564, -4953.459, 27.2703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1112,180415, 571, 1, 1, 605.0962, -4924.019, 31.05478, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1113,180415, 571, 1, 1, 605.0962, -4924.019, 31.05478, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1114,180415, 571, 1, 1, 592.8271, -4950.619, 27.2703, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1115,180415, 571, 1, 1, 592.8271, -4950.619, 27.2703, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1116,180415, 571, 1, 1, 603.4061, -4924.424, 31.06834, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1117,180415, 571, 1, 1, 603.4061, -4924.424, 31.06834, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1118,180415, 571, 1, 1, 601.9756, -4924.741, 24.95593, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1119,180415, 571, 1, 1, 601.9756, -4924.741, 24.95593, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1120,180415, 571, 1, 1, 595.087, -4926.527, 31.06053, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1121,180415, 571, 1, 1, 595.087, -4926.527, 31.06053, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1122,180415, 571, 1, 1, 599.5756, -4929.97, 22.72639, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1123,180415, 571, 1, 1, 599.5756, -4929.97, 22.72639, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1124,180415, 571, 1, 1, 587.9566, -4954.577, 27.2703, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1125,180415, 571, 1, 1, 587.9566, -4954.577, 27.2703, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1126,180415, 571, 1, 1, 593.6668, -4929.349, 31.07931, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1127,180415, 571, 1, 1, 593.6668, -4929.349, 31.07931, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1128,180415, 571, 1, 1, 596.3693, -4930.906, 22.72639, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1129,180415, 571, 1, 1, 596.3693, -4930.906, 22.72639, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1130,180415, 571, 1, 1, 597.8043, -4930.463, 22.72639, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1131,180415, 571, 1, 1, 597.8043, -4930.463, 22.72639, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1132,180415, 571, 1, 1, 598.4451, -4925.653, 31.07524, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1133,180415, 571, 1, 1, 598.4451, -4925.653, 31.07524, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1134,180415, 571, 1, 1, 601.3765, -4922.399, 24.95571, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1135,180415, 571, 1, 1, 601.3765, -4922.399, 24.95571, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1136,180415, 571, 1, 1, 586.3301, -4953.981, 27.2703, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1137,180415, 571, 1, 1, 586.3301, -4953.981, 27.2703, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1138,180415, 571, 1, 1, 596.6023, -4926.172, 31.03511, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1139,180415, 571, 1, 1, 596.6023, -4926.172, 31.03511, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1140,180415, 571, 1, 1, 600.8096, -4920.225, 24.95571, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1141,180415, 571, 1, 1, 600.8096, -4920.225, 24.95571, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1142,180415, 571, 1, 1, 590.7567, -4934.542, 31.1084, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1143,180415, 571, 1, 1, 590.7567, -4934.542, 31.1084, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1144,180415, 571, 1, 1, 584.8109, -4952.982, 27.2703, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1145,180415, 571, 1, 1, 584.8109, -4952.982, 27.2703, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1146,180415, 571, 1, 1, 593.1274, -4927, 31.07476, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1147,180415, 571, 1, 1, 593.1274, -4927, 31.07476, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1148,180415, 571, 1, 1, 582.5004, -4947.915, 27.2703, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1149,180415, 571, 1, 1, 582.5004, -4947.915, 27.2703, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1150,180415, 571, 1, 1, 584.9875, -4936.011, 31.05981, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1151,180415, 571, 1, 1, 584.9875, -4936.011, 31.05981, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1152,180415, 571, 1, 1, 586.9916, -4935.478, 31.03452, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1153,180415, 571, 1, 1, 586.9916, -4935.478, 31.03452, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1154,180415, 571, 1, 1, 591.3271, -4919.841, 24.76182, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1155,180415, 571, 1, 1, 591.3271, -4919.841, 24.76182, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1156,180415, 571, 1, 1, 582.8868, -4949.487, 27.2703, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1157,180415, 571, 1, 1, 582.8868, -4949.487, 27.2703, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1158,180415, 571, 1, 1, 589.015, -4934.996, 31.07944, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1159,180415, 571, 1, 1, 589.015, -4934.996, 31.07944, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1160,180415, 571, 1, 1, 589.0734, -4924.763, 19.81484, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1161,180415, 571, 1, 1, 589.0734, -4924.763, 19.81484, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1162,180415, 571, 1, 1, 582.024, -4933.135, 31.07914, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1163,180415, 571, 1, 1, 582.024, -4933.135, 31.07914, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1164,180415, 571, 1, 1, 586.677, -4921.894, 24.03878, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1165,180415, 571, 1, 1, 586.677, -4921.894, 24.03878, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1166,180415, 571, 1, 1, 588.6942, -4923.249, 19.81484, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1167,180415, 571, 1, 1, 588.6942, -4923.249, 19.81484, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1168,180415, 571, 1, 1, 582.4625, -4934.822, 31.0773, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1169,180415, 571, 1, 1, 582.4625, -4934.822, 31.0773, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1170,180415, 571, 1, 1, 589.4875, -4926.273, 19.81484, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1171,180415, 571, 1, 1, 589.4875, -4926.273, 19.81484, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+1172,180415, 571, 1, 1, 2492.693, -1907.169, 9.526185, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1173,180415, 571, 1, 1, 2492.693, -1907.169, 9.526185, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1174,180415, 571, 1, 1, 2490.183, -1883.224, 9.115799, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1175,180415, 571, 1, 1, 2490.183, -1883.224, 9.115799, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1176,180415, 571, 1, 1, 2501.102, -1882.176, 8.549006, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1177,180415, 571, 1, 1, 2501.102, -1882.176, 8.549006, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1178,180415, 571, 1, 1, 2501.947, -1893.583, 8.302938, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1179,180415, 571, 1, 1, 2501.947, -1893.583, 8.302938, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1180,180415, 571, 1, 1, 2506.74, -1900.911, 8.029154, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1181,180415, 571, 1, 1, 2506.74, -1900.911, 8.029154, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1182,180415, 571, 1, 1, 2490.393, -1897.489, 9.970935, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1183,180415, 571, 1, 1, 2490.393, -1897.489, 9.970935, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1184,180415, 571, 1, 1, 2477.013, -1901.73, 11.23512, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1185,180415, 571, 1, 1, 2477.013, -1901.73, 11.23512, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1186,180415, 571, 1, 1, 2480.636, -1898.305, 11.20697, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1187,180415, 571, 1, 1, 2480.636, -1898.305, 11.20697, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1188,180415, 571, 1, 1, 2465.555, -1903.595, 11.20657, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1189,180415, 571, 1, 1, 2465.555, -1903.595, 11.20657, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1190,180415, 571, 1, 1, 2470.907, -1903.663, 11.225, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1191,180415, 571, 1, 1, 2470.907, -1903.663, 11.225, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+1192,180415, 571, 1, 1, 3720.282, -703.4149, 216.9913, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1193,180415, 571, 1, 1, 3720.282, -703.4149, 216.9913, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1194,180415, 571, 1, 1, 3721.375, -700.6528, 217.3681, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1195,180415, 571, 1, 1, 3721.375, -700.6528, 217.3681, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1196,180415, 571, 1, 1, 3724.484, -697.309, 217.4367, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1197,180415, 571, 1, 1, 3724.484, -697.309, 217.4367, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1198,180415, 571, 1, 1, 3723.878, -701.0903, 217.3764, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1199,180415, 571, 1, 1, 3723.878, -701.0903, 217.3764, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1200,180415, 571, 1, 1, 3722.675, -704.342, 217.2098, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1201,180415, 571, 1, 1, 3722.675, -704.342, 217.2098, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1202,180415, 571, 1, 1, 3723.472, -693.4011, 217.4225, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1203,180415, 571, 1, 1, 3723.472, -693.4011, 217.4225, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1204,180415, 571, 1, 1, 3721.266, -694.7188, 217.1692, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1205,180415, 571, 1, 1, 3721.266, -694.7188, 217.1692, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1206,180415, 571, 1, 1, 3719.472, -692.0851, 217.2261, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1207,180415, 571, 1, 1, 3719.472, -692.0851, 217.2261, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1208,180415, 571, 1, 1, 3721.933, -697.5799, 217.3843, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1209,180415, 571, 1, 1, 3721.933, -697.5799, 217.3843, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1210,180415, 571, 1, 1, 3720.975, -690.0139, 217.1697, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1211,180415, 571, 1, 1, 3720.975, -690.0139, 217.1697, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1212,180415, 571, 1, 1, 3673.806, -704.4462, 215.2892, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1213,180415, 571, 1, 1, 3673.806, -704.4462, 215.2892, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1214,180415, 571, 1, 1, 3680.288, -702.743, 215.5022, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1215,180415, 571, 1, 1, 3680.288, -702.743, 215.5022, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1216,180415, 571, 1, 1, 3663.695, -709.2948, 213.8031, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1217,180415, 571, 1, 1, 3663.695, -709.2948, 213.8031, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1218,180415, 571, 1, 1, 3662.965, -709.1875, 214.0366, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1219,180415, 571, 1, 1, 3662.965, -709.1875, 214.0366, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1220,180415, 571, 1, 1, 3663.579, -704.8941, 214.0316, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1221,180415, 571, 1, 1, 3663.579, -704.8941, 214.0316, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1222,180415, 571, 1, 1, 3664.109, -705.0291, 213.8467, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1223,180415, 571, 1, 1, 3664.109, -705.0291, 213.8467, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1224,180415, 571, 1, 1, 3657.745, -692.2751, 223.6275, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1225,180415, 571, 1, 1, 3657.745, -692.2751, 223.6275, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1226,180415, 571, 1, 1, 3660.364, -700.371, 223.6275, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1227,180415, 571, 1, 1, 3660.364, -700.371, 223.6275, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1228,180415, 571, 1, 1, 3650.258, -699.3051, 223.6275, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1229,180415, 571, 1, 1, 3650.258, -699.3051, 223.6275, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1230,180415, 571, 1, 1, 3661.816, -704.7014, 214.8959, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1231,180415, 571, 1, 1, 3661.816, -704.7014, 214.8959, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1232,180415, 571, 1, 1, 3654.531, -691.826, 223.6275, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1233,180415, 571, 1, 1, 3654.531, -691.826, 223.6275, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1234,180415, 571, 1, 1, 3652.8, -692.9138, 223.6275, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1235,180415, 571, 1, 1, 3652.8, -692.9138, 223.6275, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1236,180415, 571, 1, 1, 3655.83, -710.9506, 227.4323, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1237,180415, 571, 1, 1, 3655.83, -710.9506, 227.4323, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1238,180415, 571, 1, 1, 3651.423, -694.3221, 223.6275, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1239,180415, 571, 1, 1, 3651.423, -694.3221, 223.6275, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1240,180415, 571, 1, 1, 3660.504, -697.7479, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1241,180415, 571, 1, 1, 3660.504, -697.7479, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1242,180415, 571, 1, 1, 3662.702, -704.8438, 214.3862, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1243,180415, 571, 1, 1, 3662.702, -704.8438, 214.3862, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1244,180415, 571, 1, 1, 3660.119, -695.2737, 223.6275, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1245,180415, 571, 1, 1, 3660.119, -695.2737, 223.6275, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1246,180415, 571, 1, 1, 3658.975, -693.3618, 223.6275, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1247,180415, 571, 1, 1, 3658.975, -693.3618, 223.6275, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1248,180415, 571, 1, 1, 3650.527, -697.048, 223.6275, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1249,180415, 571, 1, 1, 3650.527, -697.048, 223.6275, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1250,180415, 571, 1, 1, 3661.141, -709.1563, 214.8015, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1251,180415, 571, 1, 1, 3661.141, -709.1563, 214.8015, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1252,180415, 571, 1, 1, 3646.771, -712.575, 216.1448, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1253,180415, 571, 1, 1, 3646.771, -712.575, 216.1448, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1254,180415, 571, 1, 1, 3639.381, -715.8611, 227.3913, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1255,180415, 571, 1, 1, 3639.381, -715.8611, 227.3913, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1256,180415, 571, 1, 1, 3655.505, -714.1703, 227.4361, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1257,180415, 571, 1, 1, 3655.505, -714.1703, 227.4361, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1258,180415, 571, 1, 1, 3643.311, -713.7602, 227.4366, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1259,180415, 571, 1, 1, 3643.311, -713.7602, 227.4366, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1260,180415, 571, 1, 1, 3649.78, -710.2109, 227.4335, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1261,180415, 571, 1, 1, 3649.78, -710.2109, 227.4335, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1262,180415, 571, 1, 1, 3650.835, -720.3264, 216.1421, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1263,180415, 571, 1, 1, 3650.835, -720.3264, 216.1421, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1264,180415, 571, 1, 1, 3641.055, -711.5729, 218.9725, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1265,180415, 571, 1, 1, 3641.055, -711.5729, 218.9725, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1266,180415, 571, 1, 1, 3642.938, -716.2329, 227.4314, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1267,180415, 571, 1, 1, 3642.938, -716.2329, 227.4314, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1268,180415, 571, 1, 1, 3656.18, -720.6285, 216.1422, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1269,180415, 571, 1, 1, 3656.18, -720.6285, 216.1422, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1270,180415, 571, 1, 1, 3662.277, -709.184, 214.3835, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1271,180415, 571, 1, 1, 3662.277, -709.184, 214.3835, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1272,180415, 571, 1, 1, 3653.458, -720.2587, 216.1421, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1273,180415, 571, 1, 1, 3653.458, -720.2587, 216.1421, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1274,180415, 571, 1, 1, 3620.047, -714.6027, 227.4171, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1275,180415, 571, 1, 1, 3620.047, -714.6027, 227.4171, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1276,180415, 571, 1, 1, 3630.439, -711.8963, 215.451, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1277,180415, 571, 1, 1, 3630.439, -711.8963, 215.451, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1278,180415, 571, 1, 1, 3628.625, -714.6279, 221.3164, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1279,180415, 571, 1, 1, 3628.625, -714.6279, 221.3164, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1280,180415, 571, 1, 1, 3647.266, -723.0741, 220.1831, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1281,180415, 571, 1, 1, 3647.266, -723.0741, 220.1831, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1282,180415, 571, 1, 1, 3628.823, -712.1104, 221.3164, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1283,180415, 571, 1, 1, 3628.823, -712.1104, 221.3164, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1284,180415, 571, 1, 1, 3636.598, -710.9913, 218.9725, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1285,180415, 571, 1, 1, 3636.598, -710.9913, 218.9725, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1286,180415, 571, 1, 1, 3642.31, -722.2473, 220.5441, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1287,180415, 571, 1, 1, 3642.31, -722.2473, 220.5441, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1288,180415, 571, 1, 1, 3646.166, -718.1907, 216.172, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1289,180415, 571, 1, 1, 3646.166, -718.1907, 216.172, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1290,180415, 571, 1, 1, 3635.955, -715.3896, 227.4597, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1291,180415, 571, 1, 1, 3635.955, -715.3896, 227.4597, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1292,180415, 571, 1, 1, 3639.688, -711.3333, 218.9725, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1293,180415, 571, 1, 1, 3639.688, -711.3333, 218.9725, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1294,180415, 571, 1, 1, 3633.46, -719.8217, 221.3129, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1295,180415, 571, 1, 1, 3633.46, -719.8217, 221.3129, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1296,180415, 571, 1, 1, 3632.302, -715.0294, 227.4236, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1297,180415, 571, 1, 1, 3632.302, -715.0294, 227.4236, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1298,180415, 571, 1, 1, 3630.115, -714.7449, 215.4509, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1299,180415, 571, 1, 1, 3630.115, -714.7449, 215.4509, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1300,180415, 571, 1, 1, 3633.867, -715.2915, 221.3129, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1301,180415, 571, 1, 1, 3633.867, -715.2915, 221.3129, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1302,180415, 571, 1, 1, 3628.883, -714.4942, 227.4169, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1303,180415, 571, 1, 1, 3628.883, -714.4942, 227.4169, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1304,180415, 571, 1, 1, 3629.475, -717.1203, 215.4509, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1305,180415, 571, 1, 1, 3629.475, -717.1203, 215.4509, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1306,180415, 571, 1, 1, 3635.079, -710.8333, 218.9725, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1307,180415, 571, 1, 1, 3635.079, -710.8333, 218.9725, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1308,180415, 571, 1, 1, 3645.829, -721.221, 216.172, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1309,180415, 571, 1, 1, 3645.829, -721.221, 216.172, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1310,180415, 571, 1, 1, 3619.787, -716.7102, 227.4115, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1311,180415, 571, 1, 1, 3619.787, -716.7102, 227.4115, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+1312,180415, 571, 1, 1, 3539.074, 246.8349, 45.82254, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1313,180415, 571, 1, 1, 3539.074, 246.8349, 45.82254, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1314,180415, 571, 1, 1, 3560.01, 248.8549, 45.83335, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1315,180415, 571, 1, 1, 3560.01, 248.8549, 45.83335, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1316,180415, 571, 1, 1, 3549.851, 245.3113, 45.88549, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1317,180415, 571, 1, 1, 3549.851, 245.3113, 45.88549, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1318,180415, 571, 1, 1, 3520.715, 280.9288, 45.78613, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1319,180415, 571, 1, 1, 3520.715, 280.9288, 45.78613, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1320,180415, 571, 1, 1, 3564.364, 294.3126, 45.82972, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1321,180415, 571, 1, 1, 3564.364, 294.3126, 45.82972, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1322,180415, 571, 1, 1, 3526.05, 290.625, 45.8017, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1323,180415, 571, 1, 1, 3526.05, 290.625, 45.8017, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1324,180415, 571, 1, 1, 3529.681, 251.9887, 45.82568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1325,180415, 571, 1, 1, 3529.681, 251.9887, 45.82568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1326,180415, 571, 1, 1, 3570.418, 286.1223, 45.8264, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1327,180415, 571, 1, 1, 3570.418, 286.1223, 45.8264, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1328,180415, 571, 1, 1, 3534.023, 297.516, 45.87384, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1329,180415, 571, 1, 1, 3534.023, 297.516, 45.87384, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1330,180415, 571, 1, 1, 3573.903, 275.7938, 45.8153, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1331,180415, 571, 1, 1, 3573.903, 275.7938, 45.8153, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1332,180415, 571, 1, 1, 3572.999, 265.1364, 45.80965, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1333,180415, 571, 1, 1, 3572.999, 265.1364, 45.80965, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1334,180415, 571, 1, 1, 3585.963, 283.0799, 48.30828, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1335,180415, 571, 1, 1, 3585.963, 283.0799, 48.30828, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1336,180415, 571, 1, 1, 3554.604, 299.7266, 45.90679, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1337,180415, 571, 1, 1, 3554.604, 299.7266, 45.90679, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1338,180415, 571, 1, 1, 3568.259, 255.9597, 45.78259, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1339,180415, 571, 1, 1, 3568.259, 255.9597, 45.78259, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1340,180415, 571, 1, 1, 3587.122, 271.1111, 48.3845, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1341,180415, 571, 1, 1, 3587.122, 271.1111, 48.3845, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1342,180415, 571, 1, 1, 3522.922, 260.132, 45.7541, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1343,180415, 571, 1, 1, 3522.922, 260.132, 45.7541, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1344,180415, 571, 1, 1, 3596.911, 271.6074, 52.12251, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1345,180415, 571, 1, 1, 3596.911, 271.6074, 52.12251, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1346,180415, 571, 1, 1, 3519.316, 270.3384, 45.87571, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1347,180415, 571, 1, 1, 3519.316, 270.3384, 45.87571, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1348,180415, 571, 1, 1, 3595.522, 284.4653, 52.2077, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1349,180415, 571, 1, 1, 3595.522, 284.4653, 52.2077, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1350,180415, 571, 1, 1, 3544.37, 301.0424, 45.87925, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1351,180415, 571, 1, 1, 3544.37, 301.0424, 45.87925, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+1352,180415, 571, 1, 1, 3453.492, 2004.011, 66.48942, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1353,180415, 571, 1, 1, 3453.492, 2004.011, 66.48942, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1354,180415, 571, 1, 1, 3451.072, 2013.826, 67.11924, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1355,180415, 571, 1, 1, 3451.072, 2013.826, 67.11924, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1356,180415, 571, 1, 1, 3460.914, 1999.812, 64.96242, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1357,180415, 571, 1, 1, 3460.914, 1999.812, 64.96242, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1358,180415, 571, 1, 1, 3450.717, 2005.431, 66.47033, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1359,180415, 571, 1, 1, 3450.717, 2005.431, 66.47033, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1360,180415, 571, 1, 1, 3464.852, 2005.66, 65.63439, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1361,180415, 571, 1, 1, 3464.852, 2005.66, 65.63439, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1362,180415, 571, 1, 1, 3457.145, 2001.683, 65.88113, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1363,180415, 571, 1, 1, 3457.145, 2001.683, 65.88113, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1364,180415, 571, 1, 1, 3457.17, 2010.24, 67.18584, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1365,180415, 571, 1, 1, 3457.17, 2010.24, 67.18584, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1366,180415, 571, 1, 1, 3461.157, 2007.909, 66.50739, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1367,180415, 571, 1, 1, 3461.157, 2007.909, 66.50739, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1368,180415, 571, 1, 1, 3447.548, 2007.21, 66.4343, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1369,180415, 571, 1, 1, 3447.548, 2007.21, 66.4343, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1370,180415, 571, 1, 1, 3454.485, 2011.974, 67.24349, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1371,180415, 571, 1, 1, 3454.485, 2011.974, 67.24349, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1372,180415, 571, 1, 1, 3485.54, 1982.056, 66.64336, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1373,180415, 571, 1, 1, 3485.54, 1982.056, 66.64336, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1374,180415, 571, 1, 1, 3491.24, 1972.217, 66.67846, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1375,180415, 571, 1, 1, 3491.24, 1972.217, 66.67846, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1376,180415, 571, 1, 1, 3484.478, 1982.79, 66.10648, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1377,180415, 571, 1, 1, 3484.478, 1982.79, 66.10648, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1378,180415, 571, 1, 1, 3486.18, 1980.53, 66.75633, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1379,180415, 571, 1, 1, 3486.18, 1980.53, 66.75633, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1380,180415, 571, 1, 1, 3488.036, 1984.502, 66.5727, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1381,180415, 571, 1, 1, 3488.036, 1984.502, 66.5727, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1382,180415, 571, 1, 1, 3488.738, 1974.252, 66.48361, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1383,180415, 571, 1, 1, 3488.738, 1974.252, 66.48361, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1384,180415, 571, 1, 1, 3486.124, 1985.773, 66.13934, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1385,180415, 571, 1, 1, 3486.124, 1985.773, 66.13934, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1386,180415, 571, 1, 1, 3489.454, 1972.877, 66.5388, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1387,180415, 571, 1, 1, 3489.454, 1972.877, 66.5388, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1388,180415, 571, 1, 1, 3486.32, 1978.385, 66.64598, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1389,180415, 571, 1, 1, 3486.32, 1978.385, 66.64598, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1390,180415, 571, 1, 1, 3484.899, 1984.623, 66.13567, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1391,180415, 571, 1, 1, 3484.899, 1984.623, 66.13567, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1392,180415, 571, 1, 1, 3490.6, 1973.335, 66.56937, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1393,180415, 571, 1, 1, 3490.6, 1973.335, 66.56937, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1394,180415, 571, 1, 1, 3486.279, 1984.052, 66.72491, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1395,180415, 571, 1, 1, 3486.279, 1984.052, 66.72491, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1396,180415, 571, 1, 1, 3488.017, 1982.2, 69.24107, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1397,180415, 571, 1, 1, 3488.017, 1982.2, 69.24107, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1398,180415, 571, 1, 1, 3496.877, 1986.814, 66.14459, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1399,180415, 571, 1, 1, 3496.877, 1986.814, 66.14459, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1400,180415, 571, 1, 1, 3499.981, 1976.101, 66.6926, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1401,180415, 571, 1, 1, 3499.981, 1976.101, 66.6926, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1402,180415, 571, 1, 1, 3498.515, 1987.265, 66.15958, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1403,180415, 571, 1, 1, 3498.515, 1987.265, 66.15958, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1404,180415, 571, 1, 1, 3494.6, 1971.783, 69.21862, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1405,180415, 571, 1, 1, 3494.6, 1971.783, 69.21862, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1406,180415, 571, 1, 1, 3498.208, 1985.489, 66.55852, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1407,180415, 571, 1, 1, 3498.208, 1985.489, 66.55852, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1408,180415, 571, 1, 1, 3492.497, 1984.687, 66.91064, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1409,180415, 571, 1, 1, 3492.497, 1984.687, 66.91064, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1410,180415, 571, 1, 1, 3499.862, 1974.142, 66.74924, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1411,180415, 571, 1, 1, 3499.862, 1974.142, 66.74924, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1412,180415, 571, 1, 1, 3499.545, 1986.568, 66.14841, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1413,180415, 571, 1, 1, 3499.545, 1986.568, 66.14841, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1414,180415, 571, 1, 1, 3497.163, 1972.785, 67.83695, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1415,180415, 571, 1, 1, 3497.163, 1972.785, 67.83695, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1416,180415, 571, 1, 1, 3498.545, 1983.968, 66.78958, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1417,180415, 571, 1, 1, 3498.545, 1983.968, 66.78958, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1418,180415, 571, 1, 1, 3499.741, 1984.807, 66.1551, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1419,180415, 571, 1, 1, 3499.741, 1984.807, 66.1551, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1420,180415, 571, 1, 1, 3496.604, 1985.285, 66.52729, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1421,180415, 571, 1, 1, 3496.604, 1985.285, 66.52729, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1422,180415, 571, 1, 1, 3490.234, 1984.203, 66.76582, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1423,180415, 571, 1, 1, 3490.234, 1984.203, 66.76582, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1424,180415, 571, 1, 1, 3494.507, 1985.543, 66.86245, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1425,180415, 571, 1, 1, 3494.507, 1985.543, 66.86245, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1426,180415, 571, 1, 1, 3492.613, 1987.125, 66.18999, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1427,180415, 571, 1, 1, 3492.613, 1987.125, 66.18999, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1428,180415, 571, 1, 1, 3498.044, 1971.96, 67.97525, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1429,180415, 571, 1, 1, 3498.044, 1971.96, 67.97525, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1430,180415, 571, 1, 1, 3500.235, 1977.234, 66.79019, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1431,180415, 571, 1, 1, 3500.235, 1977.234, 66.79019, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1432,180415, 571, 1, 1, 8446.374, -338.7054, 906.5311, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1433,180415, 571, 1, 1, 8446.374, -338.7054, 906.5311, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1434,180415, 571, 1, 1, 8441.133, -333.9722, 906.3853, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1435,180415, 571, 1, 1, 8441.133, -333.9722, 906.3853, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1436,180415, 571, 1, 1, 8449.194, -340.0696, 906.42, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1437,180415, 571, 1, 1, 8449.194, -340.0696, 906.42, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1438,180415, 571, 1, 1, 8438.914, -336.882, 906.3645, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1439,180415, 571, 1, 1, 8438.914, -336.882, 906.3645, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1440,180415, 571, 1, 1, 8450.9, -342.7731, 906.4547, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1441,180415, 571, 1, 1, 8450.9, -342.7731, 906.4547, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1442,180415, 571, 1, 1, 8436.891, -329.9302, 906.4619, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1443,180415, 571, 1, 1, 8436.891, -329.9302, 906.4619, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1444,180415, 571, 1, 1, 8440.131, -331.5573, 906.4849, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1445,180415, 571, 1, 1, 8440.131, -331.5573, 906.4849, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1446,180415, 571, 1, 1, 8443.484, -341.0681, 906.538, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1447,180415, 571, 1, 1, 8443.484, -341.0681, 906.538, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1448,180415, 571, 1, 1, 8438.455, -346.809, 906.3992, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484) +(@OGUID+1449,180415, 571, 1, 1, 8438.455, -346.809, 906.3992, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484) +(@OGUID+1450,180415, 571, 1, 1, 8434.126, -342.7607, 906.3992, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484) +(@OGUID+1451,180415, 571, 1, 1, 8434.126, -342.7607, 906.3992, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484) +(@OGUID+1452,180415, 571, 1, 1, 6135.286, -1087.107, 403.996, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1453,180415, 571, 1, 1, 6135.286, -1087.107, 403.996, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1454,180415, 571, 1, 1, 6135.75, -1082.272, 403.9787, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1455,180415, 571, 1, 1, 6135.75, -1082.272, 403.9787, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1456,180415, 571, 1, 1, 6131.089, -1077.924, 404.0315, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1457,180415, 571, 1, 1, 6131.089, -1077.924, 404.0315, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1458,180415, 571, 1, 1, 6124.53, -1100.04, 404.1576, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1459,180415, 571, 1, 1, 6124.53, -1100.04, 404.1576, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1460,180415, 571, 1, 1, 6129.471, -1100.338, 404.0967, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1461,180415, 571, 1, 1, 6129.471, -1100.338, 404.0967, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1462,180415, 571, 1, 1, 6134.075, -1100.798, 404.0411, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1463,180415, 571, 1, 1, 6134.075, -1100.798, 404.0411, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1464,180415, 571, 1, 1, 6135.558, -1078.466, 403.9826, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1465,180415, 571, 1, 1, 6135.558, -1078.466, 403.9826, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1466,180415, 571, 1, 1, 6135.308, -1092.608, 404.0045, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1467,180415, 571, 1, 1, 6135.308, -1092.608, 404.0045, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1468,180415, 571, 1, 1, 6135.531, -1097.868, 403.998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1469,180415, 571, 1, 1, 6135.531, -1097.868, 403.998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1470,180415, 571, 1, 1, 6128.174, -1077.363, 404.1137, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1471,180415, 571, 1, 1, 6128.174, -1077.363, 404.1137, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1472,180415, 571, 1, 1, 6114.59, -1100.005, 404.2581, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1473,180415, 571, 1, 1, 6114.59, -1100.005, 404.2581, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1474,180415, 571, 1, 1, 6119.64, -1099.892, 404.2052, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1475,180415, 571, 1, 1, 6119.64, -1099.892, 404.2052, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1476,180415, 571, 1, 1, 6117.122, -1080.053, 403.8957, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1477,180415, 571, 1, 1, 6117.122, -1080.053, 403.8957, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1478,180415, 571, 1, 1, 6110.035, -1085.667, 404.2946, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1479,180415, 571, 1, 1, 6110.035, -1085.667, 404.2946, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1480,180415, 571, 1, 1, 6116.569, -1077.83, 403.8956, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1481,180415, 571, 1, 1, 6116.569, -1077.83, 403.8956, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1482,180415, 571, 1, 1, 6110.022, -1094.398, 404.3128, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1483,180415, 571, 1, 1, 6110.022, -1094.398, 404.3128, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1484,180415, 571, 1, 1, 6113.951, -1077.961, 403.9418, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1485,180415, 571, 1, 1, 6113.951, -1077.961, 403.9418, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1486,180415, 571, 1, 1, 6109.78, -1099.722, 404.3831, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1487,180415, 571, 1, 1, 6109.78, -1099.722, 404.3831, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1488,180415, 571, 1, 1, 6109.548, -1083.051, 404.3193, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1489,180415, 571, 1, 1, 6109.548, -1083.051, 404.3193, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1490,180415, 571, 1, 1, 6108.985, -1078.398, 404.2991, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1491,180415, 571, 1, 1, 6108.985, -1078.398, 404.2991, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1492,180415, 571, 1, 1, 6665.15, -200.775, 950.982, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1493,180415, 571, 1, 1, 6665.15, -200.775, 950.982, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1494,180415, 571, 1, 1, 6667.429, -202.9508, 950.2484, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1495,180415, 571, 1, 1, 6667.429, -202.9508, 950.2484, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1496,180415, 571, 1, 1, 6670.192, -202.2401, 950.4054, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1497,180415, 571, 1, 1, 6670.192, -202.2401, 950.4054, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1498,180415, 571, 1, 1, 6676.213, -197.9583, 951.1501, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1499,180415, 571, 1, 1, 6676.213, -197.9583, 951.1501, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1500,180415, 571, 1, 1, 6676.812, -200.8755, 951.2551, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1501,180415, 571, 1, 1, 6676.812, -200.8755, 951.2551, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1502,180415, 571, 1, 1, 6671.391, -199.7399, 951.0316, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1503,180415, 571, 1, 1, 6671.391, -199.7399, 951.0316, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1504,180415, 571, 1, 1, 6671.051, -196.6817, 951.0138, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1505,180415, 571, 1, 1, 6671.051, -196.6817, 951.0138, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1506,180415, 571, 1, 1, 6666.553, -195.6487, 951.7457, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1507,180415, 571, 1, 1, 6666.553, -195.6487, 951.7457, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1508,180415, 571, 1, 1, 6680.188, -200.7511, 955.8945, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1509,180415, 571, 1, 1, 6680.188, -200.7511, 955.8945, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1510,180415, 571, 1, 1, 6664.639, -197.5128, 951.639, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1511,180415, 571, 1, 1, 6664.639, -197.5128, 951.639, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1512,180415, 571, 1, 1, 5534.743, 5748.256, -76.63572, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1513,180415, 571, 1, 1, 5534.743, 5748.256, -76.63572, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1514,180415, 571, 1, 1, 5543.521, 5771.278, -76.01951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1515,180415, 571, 1, 1, 5543.521, 5771.278, -76.01951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1516,180415, 571, 1, 1, 5523.451, 5778.276, -78.78996, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1517,180415, 571, 1, 1, 5523.451, 5778.276, -78.78996, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1518,180415, 571, 1, 1, 5543.232, 5771.354, -76.01951, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1519,180415, 571, 1, 1, 5543.232, 5771.354, -76.01951, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1520,180415, 571, 1, 1, 5525.911, 5782.684, -78.17769, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1521,180415, 571, 1, 1, 5525.911, 5782.684, -78.17769, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1522,180415, 571, 1, 1, 5555.896, 5763.036, -76.68411, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1523,180415, 571, 1, 1, 5555.896, 5763.036, -76.68411, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1524,180415, 571, 1, 1, 5552.697, 5767.842, -75.99409, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1525,180415, 571, 1, 1, 5552.697, 5767.842, -75.99409, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1526,180415, 571, 1, 1, 5557.079, 5767.963, -77.05219, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1527,180415, 571, 1, 1, 5557.079, 5767.963, -77.05219, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1528,180415, 571, 1, 1, 5557.415, 5769.394, -76.74715, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1529,180415, 571, 1, 1, 5557.415, 5769.394, -76.74715, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1530,180415, 571, 1, 1, 5589.266, 5819.588, -69.22645, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1531,180415, 571, 1, 1, 5589.266, 5819.588, -69.22645, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1532,180415, 571, 1, 1, 5585.25, 5746.126, -71.12965, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1533,180415, 571, 1, 1, 5585.25, 5746.126, -71.12965, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1534,180415, 571, 1, 1, 5589.826, 5820.498, -69.06834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1535,180415, 571, 1, 1, 5589.826, 5820.498, -69.06834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1536,180415, 571, 1, 1, 5598.222, 5811.789, -69.80727, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1537,180415, 571, 1, 1, 5598.222, 5811.789, -69.80727, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1538,180415, 571, 1, 1, 5608.288, 5809.12, -70.3611, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1539,180415, 571, 1, 1, 5608.288, 5809.12, -70.3611, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1540,180415, 571, 1, 1, 5629.481, 5831.32, -63.68258, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1541,180415, 571, 1, 1, 5629.481, 5831.32, -63.68258, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1542,180415, 571, 1, 1, 5624.22, 5848.555, -62.23083, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1543,180415, 571, 1, 1, 5624.22, 5848.555, -62.23083, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1544,180415, 571, 1, 1, 5624.355, 5836.35, -64.11382, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1545,180415, 571, 1, 1, 5624.355, 5836.35, -64.11382, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1546,180415, 571, 1, 1, 5615.792, 5854.673, -61.52033, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1547,180415, 571, 1, 1, 5615.792, 5854.673, -61.52033, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1548,180415, 571, 1, 1, 5617.778, 5835.836, -64.42644, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1549,180415, 571, 1, 1, 5617.778, 5835.836, -64.42644, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1550,180415, 571, 1, 1, 5621.542, 5839.372, -63.8798, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1551,180415, 571, 1, 1, 5621.542, 5839.372, -63.8798, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1552,180415, 571, 1, 1, 5620.175, 5851.535, -61.9314, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1553,180415, 571, 1, 1, 5620.175, 5851.535, -61.9314, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1554,180415, 571, 1, 1, 5617.97, 5842.27, -63.73035, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1555,180415, 571, 1, 1, 5617.97, 5842.27, -63.73035, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1556,180415, 571, 1, 1, 5631.269, 5841.848, -62.78385, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1557,180415, 571, 1, 1, 5631.269, 5841.848, -62.78385, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1558,180415, 571, 1, 1, 5614.699, 5845.393, -63.52262, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1559,180415, 571, 1, 1, 5614.699, 5845.393, -63.52262, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1560,180415, 571, 1, 1, 5628.023, 5845.315, -62.64318, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1561,180415, 571, 1, 1, 5628.023, 5845.315, -62.64318, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1562,180415, 571, 1, 1, 5599.996, 5811.131, -69.81374, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1563,180415, 571, 1, 1, 5599.996, 5811.131, -69.81374, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1564,180415, 571, 1, 1, 5610.43, 5848.424, -63.39353, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1565,180415, 571, 1, 1, 5610.43, 5848.424, -63.39353, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1566,180415, 571, 1, 1, 5609.851, 5840.359, -64.56908, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1567,180415, 571, 1, 1, 5609.851, 5840.359, -64.56908, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1568,180415, 571, 1, 1, 5638.223, 5830.514, -63.40969, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284) +(@OGUID+1569,180415, 571, 1, 1, 5638.223, 5830.514, -63.40969, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284) +(@OGUID+1570,180415, 571, 1, 1, 5635.809, 5835.991, -63.02237, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284) +(@OGUID+1571,180415, 571, 1, 1, 5635.809, 5835.991, -63.02237, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284) +(@OGUID+1572,180415, 571, 1, 1, 5512.584, 4747.444, -194.4338, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1573,180415, 571, 1, 1, 5512.584, 4747.444, -194.4338, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1574,180415, 571, 1, 1, 5476.778, 4745.321, -195.5257, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1575,180415, 571, 1, 1, 5476.778, 4745.321, -195.5257, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1576,180415, 571, 1, 1, 5509.279, 4742.423, -194.4338, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1577,180415, 571, 1, 1, 5509.279, 4742.423, -194.4338, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1578,180415, 571, 1, 1, 5498.675, 4751.812, -194.4338, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1579,180415, 571, 1, 1, 5498.675, 4751.812, -194.4338, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1580,180415, 571, 1, 1, 5503.33, 4741.617, -194.4338, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1581,180415, 571, 1, 1, 5503.33, 4741.617, -194.4338, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1582,180415, 571, 1, 1, 5504.156, 4755.996, -194.4338, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1583,180415, 571, 1, 1, 5504.156, 4755.996, -194.4338, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1584,180415, 571, 1, 1, 5498.581, 4745.667, -194.4338, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1585,180415, 571, 1, 1, 5498.581, 4745.667, -194.4338, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1586,180415, 571, 1, 1, 5477.044, 4749.278, -195.3024, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1587,180415, 571, 1, 1, 5477.044, 4749.278, -195.3024, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1588,180415, 571, 1, 1, 5510.276, 4753.492, -194.4338, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1589,180415, 571, 1, 1, 5510.276, 4753.492, -194.4338, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1590,180415, 571, 1, 1, 5485.467, 4727.866, -194.3498, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1591,180415, 571, 1, 1, 5485.467, 4727.866, -194.3498, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1592,180415, 571, 1, 1, 4472.118, 5710.065, 81.82111, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1593,180415, 571, 1, 1, 4472.118, 5710.065, 81.82111, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1594,180415, 571, 1, 1, 4475.728, 5707.702, 81.28061, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1595,180415, 571, 1, 1, 4475.728, 5707.702, 81.28061, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1596,180415, 571, 1, 1, 4474.857, 5707.663, 81.27406, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1597,180415, 571, 1, 1, 4474.857, 5707.663, 81.27406, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1598,180415, 571, 1, 1, 4470.187, 5711.333, 81.82111, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1599,180415, 571, 1, 1, 4470.187, 5711.333, 81.82111, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1600,180415, 571, 1, 1, 4502.521, 5716.321, 83.2894, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1601,180415, 571, 1, 1, 4502.521, 5716.321, 83.2894, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1602,180415, 571, 1, 1, 4501.978, 5716.594, 83.29294, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1603,180415, 571, 1, 1, 4501.978, 5716.594, 83.29294, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1604,180415, 571, 1, 1, 4512.208, 5702.231, 82.31032, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1605,180415, 571, 1, 1, 4512.208, 5702.231, 82.31032, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1606,180415, 571, 1, 1, 4508.148, 5720.678, 81.53056, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1607,180415, 571, 1, 1, 4508.148, 5720.678, 81.53056, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1608,180415, 571, 1, 1, 4508.037, 5721.736, 81.52561, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1609,180415, 571, 1, 1, 4508.037, 5721.736, 81.52561, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1610,180415, 571, 1, 1, 4511.359, 5702.256, 82.3114, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1611,180415, 571, 1, 1, 4511.359, 5702.256, 82.3114, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1612,180415, 571, 1, 1, 4175.995, 5285.556, 39.60876, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1613,180415, 571, 1, 1, 4175.995, 5285.556, 39.60876, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1614,180415, 571, 1, 1, 4174.72, 5282.509, 40.74071, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1615,180415, 571, 1, 1, 4174.72, 5282.509, 40.74071, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1616,180415, 571, 1, 1, 4182.015, 5285.288, 40.89171, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1617,180415, 571, 1, 1, 4182.015, 5285.288, 40.89171, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1618,180415, 571, 1, 1, 4176.526, 5277.981, 41.3796, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1619,180415, 571, 1, 1, 4176.526, 5277.981, 41.3796, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1620,180415, 571, 1, 1, 4182.998, 5284, 40.91432, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1621,180415, 571, 1, 1, 4182.998, 5284, 40.91432, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1622,180415, 571, 1, 1, 4175.992, 5278.304, 40.8171, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1623,180415, 571, 1, 1, 4175.992, 5278.304, 40.8171, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1624,180415, 571, 1, 1, 4174.827, 5281.086, 40.75976, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1625,180415, 571, 1, 1, 4174.827, 5281.086, 40.75976, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1626,180415, 571, 1, 1, 4181.757, 5280.178, 39.78754, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1627,180415, 571, 1, 1, 4181.757, 5280.178, 39.78754, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1628,180415, 571, 1, 1, 4177.348, 5277.492, 40.8917, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1629,180415, 571, 1, 1, 4177.348, 5277.492, 40.8917, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1630,180415, 571, 1, 1, 4176.902, 5277.699, 41.40043, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1631,180415, 571, 1, 1, 4176.902, 5277.699, 41.40043, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1632,180415, 571, 1, 1, 2816.064, 6140.755, 84.60281, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1633,180415, 571, 1, 1, 2816.064, 6140.755, 84.60281, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1634,180415, 571, 1, 1, 2817.546, 6142.036, 84.77279, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1635,180415, 571, 1, 1, 2817.546, 6142.036, 84.77279, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1636,180415, 571, 1, 1, 2808.348, 6133.652, 84.35007, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1637,180415, 571, 1, 1, 2808.348, 6133.652, 84.35007, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1638,180415, 571, 1, 1, 2814.547, 6139.239, 84.48197, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1639,180415, 571, 1, 1, 2814.547, 6139.239, 84.48197, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1640,180415, 571, 1, 1, 2813.243, 6137.908, 84.43053, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1641,180415, 571, 1, 1, 2813.243, 6137.908, 84.43053, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1642,180415, 571, 1, 1, 2811.692, 6136.515, 84.40427, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1643,180415, 571, 1, 1, 2811.692, 6136.515, 84.40427, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1644,180415, 571, 1, 1, 2809.904, 6135.145, 84.37815, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1645,180415, 571, 1, 1, 2809.904, 6135.145, 84.37815, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1646,180415, 571, 1, 1, 2806.884, 6132.39, 84.32622, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1647,180415, 571, 1, 1, 2806.884, 6132.39, 84.32622, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1648,180415, 571, 1, 1, 2787.17, 6166.139, 84.44685, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1649,180415, 571, 1, 1, 2787.17, 6166.139, 84.44685, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1650,180415, 571, 1, 1, 2785.56, 6164.665, 84.41692, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1651,180415, 571, 1, 1, 2785.56, 6164.665, 84.41692, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1652,180415, 571, 1, 1, 2784.033, 6163.104, 84.38836, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1653,180415, 571, 1, 1, 2784.033, 6163.104, 84.38836, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1654,180415, 571, 1, 1, 2791.778, 6170.236, 84.69099, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1655,180415, 571, 1, 1, 2791.778, 6170.236, 84.69099, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1656,180415, 571, 1, 1, 2790.21, 6168.888, 84.58121, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1657,180415, 571, 1, 1, 2790.21, 6168.888, 84.58121, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1658,180415, 571, 1, 1, 2788.624, 6167.527, 84.47393, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1659,180415, 571, 1, 1, 2788.624, 6167.527, 84.47393, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1660,180415, 571, 1, 1, 2781.09, 6160.348, 84.3336, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1661,180415, 571, 1, 1, 2781.09, 6160.348, 84.3336, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1662,180415, 571, 1, 1, 2779.682, 6158.85, 84.30719, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1663,180415, 571, 1, 1, 2779.682, 6158.85, 84.30719, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1664,180415, 571, 1, 1, 2805.326, 6131.063, 84.3011, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1665,180415, 571, 1, 1, 2805.326, 6131.063, 84.3011, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1666,180415, 571, 1, 1, 2791.639, 6139.96, 84.81071, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1667,180415, 571, 1, 1, 2791.639, 6139.96, 84.81071, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1668,180415, 571, 1, 1, 2803.804, 6129.789, 84.27695, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1669,180415, 571, 1, 1, 2803.804, 6129.789, 84.27695, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1670,180415, 571, 1, 1, 2782.543, 6161.761, 84.36069, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1671,180415, 571, 1, 1, 2782.543, 6161.761, 84.36069, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1672,180415, 571, 1, 1, 2788.538, 6143.428, 84.79273, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1673,180415, 571, 1, 1, 2788.538, 6143.428, 84.79273, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1674,180415, 571, 1, 1, 2776.865, 6126.743, 91.12935, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1675,180415, 571, 1, 1, 2776.865, 6126.743, 91.12935, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1676,180415, 571, 1, 1, 2788.898, 6137.514, 86.33366, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1677,180415, 571, 1, 1, 2788.898, 6137.514, 86.33366, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1678,180415, 571, 1, 1, 2774.129, 6129.736, 91.13658, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1679,180415, 571, 1, 1, 2774.129, 6129.736, 91.13658, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1680,180415, 571, 1, 1, 2780.254, 6135.889, 89.43606, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1681,180415, 571, 1, 1, 2780.254, 6135.889, 89.43606, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1682,180415, 571, 1, 1, 2785.656, 6141.002, 86.35069, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1683,180415, 571, 1, 1, 2785.656, 6141.002, 86.35069, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1684,180415, 571, 1, 1, 2778.103, 6157.446, 84.27789, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1685,180415, 571, 1, 1, 2778.103, 6157.446, 84.27789, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1686,180415, 571, 1, 1, 2781.07, 6130.521, 90.43552, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1687,180415, 571, 1, 1, 2781.07, 6130.521, 90.43552, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1688,180415, 571, 1, 1, 2785.955, 6135.013, 87.93523, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1689,180415, 571, 1, 1, 2785.955, 6135.013, 87.93523, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1690,180415, 571, 1, 1, 2777.994, 6133.772, 90.43637, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1691,180415, 571, 1, 1, 2777.994, 6133.772, 90.43637, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1692,180415, 571, 1, 1, 2782.876, 6138.491, 87.9035, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1693,180415, 571, 1, 1, 2782.876, 6138.491, 87.9035, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1694,180415, 571, 1, 1, 2783.253, 6132.512, 89.46143, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1695,180415, 571, 1, 1, 2783.253, 6132.512, 89.46143, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1696,180415, 571, 1, 1, 2779.491, 6129.215, 90.78801, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1697,180415, 571, 1, 1, 2779.491, 6129.215, 90.78801, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1698,180415, 571, 1, 1, 2776.609, 6132.236, 90.81976, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1699,180415, 571, 1, 1, 2776.609, 6132.236, 90.81976, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1700,180415, 571, 1, 1, 2772.306, 6123.107, 91.52767, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1701,180415, 571, 1, 1, 2772.306, 6123.107, 91.52767, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1702,180415, 571, 1, 1, 2768.484, 6124.985, 97.70737, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1703,180415, 571, 1, 1, 2768.484, 6124.985, 97.70737, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1704,180415, 571, 1, 1, 2771.088, 6121.854, 97.64502, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1705,180415, 571, 1, 1, 2771.088, 6121.854, 97.64502, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1706,180415, 571, 1, 1, 2771.566, 6127.16, 91.71031, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1707,180415, 571, 1, 1, 2771.566, 6127.16, 91.71031, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1708,180415, 571, 1, 1, 2773.846, 6124.534, 91.67098, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1709,180415, 571, 1, 1, 2773.846, 6124.534, 91.67098, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1710,180415, 571, 1, 1, 2769.93, 6125.85, 91.52602, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1711,180415, 571, 1, 1, 2769.93, 6125.85, 91.52602, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1712,180415, 571, 1, 1, 2297.869, 5280.106, 13.11051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1713,180415, 571, 1, 1, 2297.869, 5280.106, 13.11051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1714,180415, 571, 1, 1, 2292.861, 5276.689, 13.39523, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1715,180415, 571, 1, 1, 2292.861, 5276.689, 13.39523, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1716,180415, 571, 1, 1, 2292.751, 5278.278, 13.39523, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1717,180415, 571, 1, 1, 2292.751, 5278.278, 13.39523, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1718,180415, 571, 1, 1, 2293.383, 5279.647, 13.39523, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1719,180415, 571, 1, 1, 2293.383, 5279.647, 13.39523, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1720,180415, 571, 1, 1, 2295.305, 5274.703, 13.39523, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1721,180415, 571, 1, 1, 2295.305, 5274.703, 13.39523, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1722,180415, 571, 1, 1, 2291.743, 5276.248, 13.28105, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1723,180415, 571, 1, 1, 2291.743, 5276.248, 13.28105, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1724,180415, 571, 1, 1, 2293.839, 5275.374, 13.39523, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1725,180415, 571, 1, 1, 2293.839, 5275.374, 13.39523, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1726,180415, 571, 1, 1, 2293.025, 5274.428, 13.18383, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1727,180415, 571, 1, 1, 2293.025, 5274.428, 13.18383, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1728,180415, 571, 1, 1, 2298.755, 5278.823, 13.17301, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1729,180415, 571, 1, 1, 2298.755, 5278.823, 13.17301, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1730,180415, 571, 1, 1, 2298.857, 5277.28, 13.15912, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1731,180415, 571, 1, 1, 2298.857, 5277.28, 13.15912, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1732,180415, 571, 1, 1, 2269.472, 5199.901, 11.49839, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1733,180415, 571, 1, 1, 2269.472, 5199.901, 11.49839, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1734,180415, 571, 1, 1, 2270.224, 5199.647, 11.84797, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1735,180415, 571, 1, 1, 2270.224, 5199.647, 11.84797, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1736,180415, 571, 1, 1, 2267.266, 5195.724, 11.25468, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1737,180415, 571, 1, 1, 2267.266, 5195.724, 11.25468, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1738,180415, 571, 1, 1, 2271.104, 5199.311, 12.33314, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1739,180415, 571, 1, 1, 2271.104, 5199.311, 12.33314, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1740,180415, 571, 1, 1, 2262.667, 5194.889, 14.41752, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1741,180415, 571, 1, 1, 2262.667, 5194.889, 14.41752, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1742,180415, 571, 1, 1, 2269.422, 5194.798, 12.2818, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1743,180415, 571, 1, 1, 2269.422, 5194.798, 12.2818, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1744,180415, 571, 1, 1, 2268.748, 5200.188, 11.23592, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1745,180415, 571, 1, 1, 2268.748, 5200.188, 11.23592, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1746,180415, 571, 1, 1, 2264.628, 5203.938, 12.71451, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1747,180415, 571, 1, 1, 2264.628, 5203.938, 12.71451, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1748,180415, 571, 1, 1, 2268.505, 5195.202, 11.93541, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1749,180415, 571, 1, 1, 2268.505, 5195.202, 11.93541, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1750,180415, 571, 1, 1, 2267.729, 5195.542, 11.41191, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1751,180415, 571, 1, 1, 2267.729, 5195.542, 11.41191, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1752,180415, 571, 1, 1, 2269.927, 5181.998, 20.93, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1753,180415, 571, 1, 1, 2269.927, 5181.998, 20.93, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1754,180415, 571, 1, 1, 2288.382, 5209.055, 17.64837, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1755,180415, 571, 1, 1, 2288.382, 5209.055, 17.64837, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1756,180415, 571, 1, 1, 2268.734, 5184.522, 20.88139, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1757,180415, 571, 1, 1, 2268.734, 5184.522, 20.88139, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1758,180415, 571, 1, 1, 2271.566, 5188.706, 20.67995, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1759,180415, 571, 1, 1, 2271.566, 5188.706, 20.67995, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1760,180415, 571, 1, 1, 2271.873, 5189.512, 21.19639, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1761,180415, 571, 1, 1, 2271.873, 5189.512, 21.19639, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1762,180415, 571, 1, 1, 2272.297, 5190.432, 21.74726, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1763,180415, 571, 1, 1, 2272.297, 5190.432, 21.74726, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1764,180415, 571, 1, 1, 2292.874, 5206.81, 17.99297, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1765,180415, 571, 1, 1, 2292.874, 5206.81, 17.99297, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1766,180415, 571, 1, 1, 2288.034, 5203.917, 13.63426, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1767,180415, 571, 1, 1, 2288.034, 5203.917, 13.63426, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1768,180415, 571, 1, 1, 2289.651, 5198.8, 24.89842, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1769,180415, 571, 1, 1, 2289.651, 5198.8, 24.89842, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1770,180415, 571, 1, 1, 2285.987, 5198.663, 13.60694, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1771,180415, 571, 1, 1, 2285.987, 5198.663, 13.60694, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1772,180415, 571, 1, 1, 2289.193, 5206.791, 13.63426, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1773,180415, 571, 1, 1, 2289.193, 5206.791, 13.63426, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1774,180415, 571, 1, 1, 2277.729, 5188.15, 21.78212, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1775,180415, 571, 1, 1, 2277.729, 5188.15, 21.78212, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1776,180415, 571, 1, 1, 2300.695, 5202.11, 18.77489, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1777,180415, 571, 1, 1, 2300.695, 5202.11, 18.77489, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1778,180415, 571, 1, 1, 2277.347, 5187.327, 21.23565, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1779,180415, 571, 1, 1, 2277.347, 5187.327, 21.23565, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1780,180415, 571, 1, 1, 2299.122, 5197.798, 18.77534, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1781,180415, 571, 1, 1, 2299.122, 5197.798, 18.77534, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1782,180415, 571, 1, 1, 2276.96, 5186.483, 20.70242, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1783,180415, 571, 1, 1, 2276.96, 5186.483, 20.70242, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1784,180415, 571, 1, 1, 2303.15, 5193.464, 18.77864, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1785,180415, 571, 1, 1, 2303.15, 5193.464, 18.77864, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1786,180415, 571, 1, 1, 2273.479, 5180.935, 20.96472, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1787,180415, 571, 1, 1, 2273.479, 5180.935, 20.96472, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1788,180415, 571, 1, 1, 2304.057, 5195.878, 18.77864, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1789,180415, 571, 1, 1, 2304.057, 5195.878, 18.77864, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1790,180415, 571, 1, 1, 2275.646, 5181.717, 21.01333, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1791,180415, 571, 1, 1, 2275.646, 5181.717, 21.01333, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1792,180415, 571, 1, 1, 3000.993, 4068.12, 30.11452, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1793,180415, 571, 1, 1, 3000.993, 4068.12, 30.11452, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1794,180415, 571, 1, 1, 3014.259, 4067.539, 31.04936, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1795,180415, 571, 1, 1, 3014.259, 4067.539, 31.04936, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1796,180415, 571, 1, 1, 3001.769, 4049.21, 26.07964, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1797,180415, 571, 1, 1, 3001.769, 4049.21, 26.07964, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1798,180415, 571, 1, 1, 3007.144, 4059.308, 26.76467, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1799,180415, 571, 1, 1, 3007.144, 4059.308, 26.76467, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1800,180415, 571, 1, 1, 3003.417, 4061.542, 26.18109, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1801,180415, 571, 1, 1, 3003.417, 4061.542, 26.18109, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1802,180415, 571, 1, 1, 3003.007, 4059.802, 26.62822, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1803,180415, 571, 1, 1, 3003.007, 4059.802, 26.62822, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1804,180415, 571, 1, 1, 3007.312, 4061.112, 26.29614, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1805,180415, 571, 1, 1, 3007.312, 4061.112, 26.29614, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1806,180415, 571, 1, 1, 3003.312, 4060.399, 26.59323, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1807,180415, 571, 1, 1, 3003.312, 4060.399, 26.59323, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1808,180415, 571, 1, 1, 3007.251, 4060.04, 26.53866, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1809,180415, 571, 1, 1, 3007.251, 4060.04, 26.53866, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1810,180415, 571, 1, 1, 3004.535, 4048.617, 26.07964, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1811,180415, 571, 1, 1, 3004.535, 4048.617, 26.07964, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1812,180415, 571, 1, 1, 2862.335, 4038.781, 5.057745, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1813,180415, 571, 1, 1, 2862.335, 4038.781, 5.057745, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1814,180415, 571, 1, 1, 2860.901, 4036.917, 10.936, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1815,180415, 571, 1, 1, 2860.901, 4036.917, 10.936, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1816,180415, 571, 1, 1, 2863.556, 4030.712, 10.90262, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1817,180415, 571, 1, 1, 2863.556, 4030.712, 10.90262, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1818,180415, 571, 1, 1, 2870.361, 4032.718, 5.063904, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1819,180415, 571, 1, 1, 2870.361, 4032.718, 5.063904, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1820,180415, 571, 1, 1, 2874.672, 4034.085, 5.337824, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1821,180415, 571, 1, 1, 2874.672, 4034.085, 5.337824, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1822,180415, 571, 1, 1, 2871.422, 4041.642, 5.131527, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1823,180415, 571, 1, 1, 2871.422, 4041.642, 5.131527, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1824,180415, 571, 1, 1, 2866.514, 4040.803, 5.103539, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1825,180415, 571, 1, 1, 2866.514, 4040.803, 5.103539, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1826,180415, 571, 1, 1, 2865.706, 4030.687, 5.018806, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1827,180415, 571, 1, 1, 2865.706, 4030.687, 5.018806, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1828,180415, 571, 1, 1, 2852.11, 4024.6, 5.079292, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1829,180415, 571, 1, 1, 2852.11, 4024.6, 5.079292, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1830,180415, 571, 1, 1, 2834.966, 4027.097, 5.066519, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1831,180415, 571, 1, 1, 2834.966, 4027.097, 5.066519, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1832,180415, 571, 1, 1, 2857.513, 4036.657, 5.022579, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1833,180415, 571, 1, 1, 2857.513, 4036.657, 5.022579, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1834,180415, 571, 1, 1, 2847.389, 4022.759, 5.015669, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1835,180415, 571, 1, 1, 2847.389, 4022.759, 5.015669, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1836,180415, 571, 1, 1, 2848.344, 4032.73, 5.091734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1837,180415, 571, 1, 1, 2848.344, 4032.73, 5.091734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1838,180415, 571, 1, 1, 2839.194, 4028.807, 5.034027, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1839,180415, 571, 1, 1, 2839.194, 4028.807, 5.034027, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1840,180415, 571, 1, 1, 2861.214, 4028.713, 4.992302, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1841,180415, 571, 1, 1, 2861.214, 4028.713, 4.992302, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1842,180415, 571, 1, 1, 2853.19, 4035.031, 5.072161, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1843,180415, 571, 1, 1, 2853.19, 4035.031, 5.072161, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1844,180415, 571, 1, 1, 2844.015, 4030.81, 5.057843, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1845,180415, 571, 1, 1, 2844.015, 4030.81, 5.057843, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1846,180415, 571, 1, 1, 2842.966, 4020.906, 4.97491, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1847,180415, 571, 1, 1, 2842.966, 4020.906, 4.97491, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1848,180415, 571, 1, 1, 2856.586, 4026.636, 5.041717, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1849,180415, 571, 1, 1, 2856.586, 4026.636, 5.041717, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1850,180415, 571, 1, 1, 2838.301, 4018.869, 5.02294, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1851,180415, 571, 1, 1, 2838.301, 4018.869, 5.02294, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1852,180415, 571, 1, 1, 3434.656, 4170.812, 14.18469, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1853,180415, 571, 1, 1, 3434.656, 4170.812, 14.18469, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1854,180415, 571, 1, 1, 3436.351, 4170.699, 14.72765, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1855,180415, 571, 1, 1, 3436.351, 4170.699, 14.72765, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1856,180415, 571, 1, 1, 3434.991, 4175.841, 14.25499, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1857,180415, 571, 1, 1, 3434.991, 4175.841, 14.25499, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1858,180415, 571, 1, 1, 3437.776, 4170.405, 15.33066, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1859,180415, 571, 1, 1, 3437.776, 4170.405, 15.33066, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1860,180415, 571, 1, 1, 3436.812, 4175.733, 14.72314, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1861,180415, 571, 1, 1, 3436.812, 4175.733, 14.72314, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1862,180415, 571, 1, 1, 3438.13, 4175.703, 15.35011, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1863,180415, 571, 1, 1, 3438.13, 4175.703, 15.35011, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1864,180415, 571, 1, 1, 3439.169, 4170.2, 15.85179, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1865,180415, 571, 1, 1, 3439.169, 4170.2, 15.85179, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1866,180415, 571, 1, 1, 3439.449, 4175.608, 15.88088, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1867,180415, 571, 1, 1, 3439.449, 4175.608, 15.88088, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1868,180415, 571, 1, 1, 3441.065, 4175.682, 16.57793, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1869,180415, 571, 1, 1, 3441.065, 4175.682, 16.57793, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1870,180415, 571, 1, 1, 3441.056, 4170.128, 16.49479, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1871,180415, 571, 1, 1, 3441.056, 4170.128, 16.49479, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1872,180415, 571, 1, 1, 3460.127, 4139.347, 15.29107, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1873,180415, 571, 1, 1, 3460.127, 4139.347, 15.29107, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1874,180415, 571, 1, 1, 3460.05, 4142.877, 16.52606, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1875,180415, 571, 1, 1, 3460.05, 4142.877, 16.52606, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1876,180415, 571, 1, 1, 3465.668, 4142.377, 16.36272, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1877,180415, 571, 1, 1, 3465.668, 4142.377, 16.36272, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1878,180415, 571, 1, 1, 3460.073, 4138.049, 15.04643, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1879,180415, 571, 1, 1, 3460.073, 4138.049, 15.04643, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1880,180415, 571, 1, 1, 3459.941, 4140.769, 15.82715, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1881,180415, 571, 1, 1, 3459.941, 4140.769, 15.82715, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1882,180415, 571, 1, 1, 3465.849, 4140.417, 15.76362, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1883,180415, 571, 1, 1, 3465.849, 4140.417, 15.76362, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1884,180415, 571, 1, 1, 3458.424, 4132.354, 17.18105, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1885,180415, 571, 1, 1, 3458.424, 4132.354, 17.18105, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1886,180415, 571, 1, 1, 3465.589, 4138.927, 15.2921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1887,180415, 571, 1, 1, 3465.589, 4138.927, 15.2921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1888,180415, 571, 1, 1, 3458.859, 4132.616, 17.19908, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1889,180415, 571, 1, 1, 3458.859, 4132.616, 17.19908, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1890,180415, 571, 1, 1, 3465.348, 4137.641, 15.11139, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1891,180415, 571, 1, 1, 3465.348, 4137.641, 15.11139, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1892,180415, 571, 1, 1, 3491.878, 4167.745, 15.70641, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1893,180415, 571, 1, 1, 3491.878, 4167.745, 15.70641, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1894,180415, 571, 1, 1, 3490.802, 4173.49, 16.09687, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1895,180415, 571, 1, 1, 3490.802, 4173.49, 16.09687, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1896,180415, 571, 1, 1, 3493.248, 4167.78, 15.00927, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1897,180415, 571, 1, 1, 3493.248, 4167.78, 15.00927, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1898,180415, 571, 1, 1, 3490.705, 4167.838, 16.1151, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1899,180415, 571, 1, 1, 3490.705, 4167.838, 16.1151, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1900,180415, 571, 1, 1, 3497.003, 4167.765, 13.85431, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1901,180415, 571, 1, 1, 3497.003, 4167.765, 13.85431, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1902,180415, 571, 1, 1, 3497.161, 4173.208, 13.8974, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1903,180415, 571, 1, 1, 3497.161, 4173.208, 13.8974, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1904,180415, 571, 1, 1, 3495.283, 4173.163, 14.59191, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1905,180415, 571, 1, 1, 3495.283, 4173.163, 14.59191, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1906,180415, 571, 1, 1, 3493.558, 4173.144, 15.14168, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1907,180415, 571, 1, 1, 3493.558, 4173.144, 15.14168, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1908,180415, 571, 1, 1, 3495.103, 4167.599, 14.42155, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1909,180415, 571, 1, 1, 3495.103, 4167.599, 14.42155, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1910,180415, 571, 1, 1, 3492.093, 4173.33, 15.54947, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1911,180415, 571, 1, 1, 3492.093, 4173.33, 15.54947, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1912,180406, 571, 1, 1, 5233.11, -1303.505, 242.6981, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+1913,180406, 571, 1, 1, 5223.288, -1292.884, 242.986, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+1914,180406, 571, 1, 1, 5235.496, -1320.318, 242.1528, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+1915,180406, 571, 1, 1, 5217.619, -1336.551, 242.0803, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+1916,180406, 571, 1, 1, 5204.664, -1302.282, 243.929, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+1917,180406, 571, 1, 1, 5186.655, -1315.126, 244.0308, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+1918,180406, 571, 1, 1, 5197.557, -1293.151, 245.1381, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+1919,180406, 571, 1, 1, 5167.86, -2163.789, 244.9229, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1920,180406, 571, 1, 1, 5118.464, -2229.395, 241.3221, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317) +(@OGUID+1921,180406, 571, 1, 1, 5200.777, -2213.902, 241.7638, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317) +(@OGUID+1922,180406, 571, 1, 1, 5209.903, -2206.08, 240.9178, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317) +(@OGUID+1923,180406, 571, 1, 1, 5381.495, -2622.062, 303.9539, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1924,180406, 571, 1, 1, 5432.385, -2649.816, 312.4956, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275) +(@OGUID+1925,180406, 571, 1, 1, 5380.949, -2686.028, 301.1252, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275) +(@OGUID+1926,180406, 571, 1, 1, 5492.693, -2604.736, 304.7423, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275) +(@OGUID+1927,180406, 571, 1, 1, 5528.45, -2651.096, 303.9539, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275) +(@OGUID+1928,180406, 571, 1, 1, 5750.874, -3530.618, 388.8118, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1929,180406, 571, 1, 1, 5780.643, -3626.452, 387.7118, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4323) +(@OGUID+1930,180406, 571, 1, 1, 5784.183, -3601.332, 387.882, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4323) +(@OGUID+1931,180406, 571, 1, 1, 4586.705, -4265.697, 182.0961, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1932,180406, 571, 1, 1, 3867.676, -4566.178, 215.357, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1933,180406, 571, 1, 1, 3832.829, -4549.958, 215.4487, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1934,180406, 571, 1, 1, 3840.872, -4517.668, 216.5039, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1935,180406, 571, 1, 1, 3854.774, -4497.302, 214.1549, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4211) +(@OGUID+1936,180406, 571, 1, 1, 4507.235, -4229.571, 167.2504, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1937,180406, 571, 1, 1, 4543.993, -4219.068, 170.553, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1938,180406, 571, 1, 1, 4576.085, -4253.777, 182.2079, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4159) +(@OGUID+1939,180406, 571, 1, 1, 3443.539, -2828.223, 202.6841, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1940,180406, 571, 1, 1, 3440.909, -2781.021, 200.6416, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1941,180406, 571, 1, 1, 3399.112, -2788.302, 211.2246, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1942,180406, 571, 1, 1, 3484.97, -2776.988, 199.2997, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1943,180406, 571, 1, 1, 3429.496, -2767.099, 200.3861, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4204) +(@OGUID+1944,180406, 571, 1, 1, 3452.409, -2756.081, 199.3898, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4204) +(@OGUID+1945,180406, 571, 1, 1, 3229.066, -2337.311, 95.43889, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4217) +(@OGUID+1946,180406, 571, 1, 1, 3219.195, -2355.696, 129.1687, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4217) +(@OGUID+1947,180406, 571, 1, 1, 3275.07, -2303.272, 120.9754, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206) +(@OGUID+1948,180406, 571, 1, 1, 3195.742, -2285.431, 110.5097, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4248) +(@OGUID+1949,180406, 571, 1, 1, 3305.993, -2292.779, 115.1555, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4248) +(@OGUID+1950,180406, 571, 1, 1, 3162.851, -2230.15, 121.904, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206) +(@OGUID+1951,180406, 571, 1, 1, 3320.307, -2237.068, 124.4572, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206) +(@OGUID+1952,180406, 571, 1, 1, 2666.803, -4317.568, 293.4839, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+1953,180406, 571, 1, 1, 2693.682, -4363.086, 279.9544, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+1954,180406, 571, 1, 1, 2618.073, -4361.412, 283.4159, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+1955,180406, 571, 1, 1, 2726.429, -4358.761, 281.7853, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+1956,180406, 571, 1, 1, 2700.32, -4374.62, 280.271, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+1957,180406, 571, 1, 1, 2649.371, -4408.653, 290.186, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4018) +(@OGUID+1958,180406, 571, 1, 1, 2376.891, -4990.313, 257.6985, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1959,180406, 571, 1, 1, 2377.773, -5054.615, 254.4842, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1960,180406, 571, 1, 1, 1854.089, -6015.621, 10.07462, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060) +(@OGUID+1961,180406, 571, 1, 1, 1934.119, -6111.237, 27.48708, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060) +(@OGUID+1962,180406, 571, 1, 1, 1835.864, -6089.984, 11.71504, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060) +(@OGUID+1963,180406, 571, 1, 1, 1917.503, -6158.714, 26.71446, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000) +(@OGUID+1964,180406, 571, 1, 1, 1914.023, -6154.183, 26.71475, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000) +(@OGUID+1965,180406, 571, 1, 1, 1890.54, -6173.179, 23.86584, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000) +(@OGUID+1966,180406, 571, 1, 1, 496.4844, -4643.306, 253.2072, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+1967,180472, 571, 1, 1, 5202.763, -1310.045, 247.7712, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66) +(@OGUID+1968,180472, 571, 1, 1, 5205.405, -1316.248, 247.7859, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66) +(@OGUID+1969,180472, 571, 1, 1, 5196.807, -1312.714, 247.8102, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66) +(@OGUID+1970,180472, 571, 1, 1, 5198.6, -1318.504, 247.8461, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66) +(@OGUID+1971,180472, 571, 1, 1, 3842.744, -4550, 214.0861, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1972,180472, 571, 1, 1, 3877.871, -4502.53, 218.5026, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1973,180472, 571, 1, 1, 3843.904, -4545.311, 213.8107, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1974,180472, 571, 1, 1, 3839.872, -4542.153, 213.6485, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1975,180472, 571, 1, 1, 3872.773, -4503.769, 218.4031, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1976,180472, 571, 1, 1, 3869.185, -4499.854, 218.2175, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211) +(@OGUID+1977,180472, 571, 1, 1, 3870.929, -4494.531, 218.1595, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211) +(@OGUID+1978,180472, 571, 1, 1, 3879.285, -4497.91, 218.7872, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211) +(@OGUID+1979,180472, 571, 1, 1, 3876.223, -4493.979, 218.6851, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211) +(@OGUID+1980,180472, 571, 1, 1, 2671.557, -4386.672, 291.2738, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4065) +(@OGUID+1981,180472, 571, 1, 1, 2676.202, -4381.061, 290.9279, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4065) +(@OGUID+1982,180472, 571, 1, 1, 422.7614, -4514.731, 254.5068, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991) +(@OGUID+1983,180472, 571, 1, 1, 422.1116, -4519.995, 254.5345, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991) +(@OGUID+1984,180472, 571, 1, 1, 416.6321, -4519.402, 254.5415, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991) +(@OGUID+1985,180472, 571, 1, 1, 417.3981, -4513.884, 254.597, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991) +(@OGUID+1986,180472, 571, 1, 1, 723.5851, -2929.853, 11.01728, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987) +(@OGUID+1987,180472, 571, 1, 1, 695.5886, -2934.49, 3.196574, 0, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987) +(@OGUID+1988,180472, 571, 1, 1, 811.0573, -2915.457, 17.58987, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987) +(@OGUID+1989,180472, 571, 1, 1, 1421.413, -3278.163, 182.3756, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1990,180472, 571, 1, 1, 1423.51, -3272.448, 182.0631, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1991,180472, 571, 1, 1, 1422.446, -3281.979, 181.9594, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1992,180472, 571, 1, 1, 1426.693, -3282.785, 182.3478, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1993,180472, 571, 1, 1, 1431.63, -3279.372, 182.0839, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1994,180472, 571, 1, 1, 639.705, -5012.253, 8.629839, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1995,180472, 571, 1, 1, 592.1059, -4952.096, 34.07586, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1996,180472, 571, 1, 1, 610.4792, -4920.491, 22.26099, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1997,180472, 571, 1, 1, 586.1684, -4953.842, 33.8328, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1998,180472, 571, 1, 1, 596.9149, -5010.774, 7.315163, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1999,180472, 571, 1, 1, 580.2164, -4941.878, 23.65312, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+2000,180472, 571, 1, 1, 548.9089, -5022.439, 15.06125, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+2001,180472, 571, 1, 1, 2472.567, -5063.961, 290.0428, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4003) +(@OGUID+2002,180472, 571, 1, 1, 2472.634, -5068.495, 290.1004, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4003) +(@OGUID+2003,180472, 571, 1, 1, 2546.96, -1842.127, 15.45883, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2004,180472, 571, 1, 1, 2492.571, -1926.668, 18.88001, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2005,180472, 571, 1, 1, 2492.924, -1957.088, 19.6185, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2006,180472, 571, 1, 1, 2497.964, -1933.934, 18.74674, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2007,180472, 571, 1, 1, 2548.99, -1836.533, 16.33319, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2008,180472, 571, 1, 1, 2470.893, -1923.861, 19.63781, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2009,180472, 571, 1, 1, 2492.745, -1840.021, 15.76282, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2010,180472, 571, 1, 1, 2558.018, -1829.936, 16.32347, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2011,180472, 571, 1, 1, 2563.788, -1830.118, 15.46013, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+2012,180472, 571, 1, 1, 3654.827, -701.1371, 229.9562, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177) +(@OGUID+2013,180472, 571, 1, 1, 3660.257, -706.6854, 219.9831, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177) +(@OGUID+2014,180472, 571, 1, 1, 3650.975, -716.6632, 220.7892, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177) +(@OGUID+2015,180472, 571, 1, 1, 3624.304, -716.2471, 218.5354, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177) +(@OGUID+2016,180472, 571, 1, 1, 3472.093, 1983.797, 70.11913, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4158) +(@OGUID+2017,180472, 571, 1, 1, 3475.918, 2008.681, 70.16867, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4158) +(@OGUID+2018,180472, 571, 1, 1, 3842.197, 1512.92, 103.3451, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4165) +(@OGUID+2019,180472, 571, 1, 1, 7777.079, -2831.855, 1230.241, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+2020,180472, 571, 1, 1, 7776.125, -2826.765, 1230.253, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+2021,180472, 571, 1, 1, 7799.851, -2952.78, 1268.356, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4441) +(@OGUID+2022,180407, 571, 1, 1, 5186.266, -2193.768, 239.013, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2023,180407, 571, 1, 1, 5170.956, -2174.502, 236.5384, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2024,180407, 571, 1, 1, 5131.898, -2198.527, 238.9261, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2025,180407, 571, 1, 1, 5118.4, -2225.201, 241.3221, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4317) +(@OGUID+2026,180407, 571, 1, 1, 5410.509, -2652.607, 306.231, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+2027,180407, 571, 1, 1, 5467.847, -2615.898, 312.4956, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+2028,180407, 571, 1, 1, 5500.174, -2659.385, 303.9539, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+2029,180407, 571, 1, 1, 5536.58, -2608.138, 304.0076, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+2030,180407, 571, 1, 1, 5524.991, -2578.385, 303.9539, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+2031,180407, 571, 1, 1, 5744.013, -3556, 386.8233, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2032,180407, 571, 1, 1, 5773.413, -3601.402, 386.8242, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4323) +(@OGUID+2033,180407, 571, 1, 1, 5769.374, -3630.634, 386.852, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4323) +(@OGUID+2034,180407, 571, 1, 1, 4578.956, -4263.669, 182.3578, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2035,180407, 571, 1, 1, 3866.024, -4556.092, 217.1811, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2036,180407, 571, 1, 1, 3839.12, -4556.077, 215.6738, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2037,180407, 571, 1, 1, 3876.9, -4547.333, 210.9542, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2038,180407, 571, 1, 1, 3834.391, -4523.571, 216.3354, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2039,180407, 571, 1, 1, 3845.775, -4506.957, 213.2268, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4211) +(@OGUID+2040,180407, 571, 1, 1, 4503.457, -4238.322, 166.302, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2041,180407, 571, 1, 1, 4553.079, -4233.049, 170.7654, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2042,180407, 571, 1, 1, 4591.484, -4252.421, 181.7474, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4159) +(@OGUID+2043,180407, 571, 1, 1, 3419.264, -2808.972, 201.4093, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2044,180407, 571, 1, 1, 3428.19, -2778.842, 263.1267, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2045,180407, 571, 1, 1, 3361.911, -2812.032, 198.3222, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2046,180407, 571, 1, 1, 3414.363, -2778.031, 201.5204, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2047,180407, 571, 1, 1, 3429.28, -2746.916, 199.4592, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4204) +(@OGUID+2048,180407, 571, 1, 1, 3249.329, -2372.51, 129.9958, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4217) +(@OGUID+2049,180407, 571, 1, 1, 3309.994, -2284.978, 114.9895, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4248) +(@OGUID+2050,180407, 571, 1, 1, 3195.763, -2280.448, 110.7325, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4248) +(@OGUID+2051,180407, 571, 1, 1, 3239.406, -2232.858, 121.1309, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206) +(@OGUID+2052,180407, 571, 1, 1, 3297.919, -2236.022, 120.9063, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206) +(@OGUID+2053,180407, 571, 1, 1, 3312.651, -2213.69, 115.9192, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206) +(@OGUID+2054,180407, 571, 1, 1, 3358.979, -2188.361, 123.8899, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206) +(@OGUID+2055,180407, 571, 1, 1, 2697.765, -4328.043, 291.2906, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065) +(@OGUID+2056,180407, 571, 1, 1, 2662.834, -4358.088, 279.7958, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065) +(@OGUID+2057,180407, 571, 1, 1, 2618.055, -4371.507, 283.3527, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065) +(@OGUID+2058,180407, 571, 1, 1, 2710.088, -4371.438, 278.8264, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065) +(@OGUID+2059,180407, 571, 1, 1, 2670.709, -4408.632, 290.6959, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4018) +(@OGUID+2060,180407, 571, 1, 1, 2382.453, -5014.535, 254.0956, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2061,180407, 571, 1, 1, 2385.039, -5056.534, 253.5052, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2062,180407, 571, 1, 1, 1924.839, -6128.684, 27.42144, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4060) +(@OGUID+2063,180407, 571, 1, 1, 1846.395, -6081.321, 11.3513, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4060) +(@OGUID+2064,180407, 571, 1, 1, 1929.122, -6143.407, 26.77677, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000) +(@OGUID+2065,180407, 571, 1, 1, 1893.114, -6154.604, 27.42172, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000) +(@OGUID+2066,180407, 571, 1, 1, 1890.457, -6159.884, 27.42142, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000) +(@OGUID+2067,180407, 571, 1, 1, 485.1177, -4663.222, 253.1473, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2068,180407, 571, 1, 1, 496.8085, -4602.353, 249.5994, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+2069,180407, 571, 1, 1, 401, -4688.146, 248.2407, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+2070,180407, 571, 1, 1, 399.7902, -4712.554, 231.7376, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+2071,180407, 571, 1, 1, 389.0826, -4503.428, 242.6498, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+2072,180407, 571, 1, 1, 388.3697, -4480.479, 233.2288, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+2073,180407, 571, 1, 1, 490.7223, -4521.801, 248.6068, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+2074,180407, 571, 1, 1, 756.3785, -2948.583, 15.57896, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987) +(@OGUID+2075,180407, 571, 1, 1, 769.6545, -2921.345, 12.84954, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987) +(@OGUID+2076,180407, 571, 1, 1, 731.8281, -2922.661, 7.247694, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987) +(@OGUID+2077,180411, 571, 1, 1, 5438.724, -2610.023, 317.467, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4275) +(@OGUID+2078,180411, 571, 1, 1, 5464.751, -2610.872, 317.4325, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4275) +(@OGUID+2079,180411, 571, 1, 1, 3410.139, -2792.103, 205.9287, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+2080,180411, 571, 1, 1, 3416.794, -2787.165, 206.333, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+2081,180411, 571, 1, 1, 3452.579, -2745.875, 191.9798, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4204) +(@OGUID+2082,180411, 571, 1, 1, 1879.72, -6205.338, 27.26761, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4000) +(@OGUID+2083,180411, 571, 1, 1, 466.7355, -4532.663, 248.7537, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3991) +(@OGUID+2084,180411, 571, 1, 1, 700.5764, -2933.623, 0.497556, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3987) +(@OGUID+2085,180411, 571, 1, 1, 820.6528, -2907.458, 12.73376, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3987) +(@OGUID+2086,180411, 571, 1, 1, 1372.837, -3207.151, 168.448, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3998) +(@OGUID+2087,180411, 571, 1, 1, 1421.961, -3261.482, 172.5474, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3998) +(@OGUID+2088,180411, 571, 1, 1, 627.3833, -4917.144, 35.51801, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981) +(@OGUID+2089,180411, 571, 1, 1, 594.2167, -4931.238, 21.88531, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981) +(@OGUID+2090,180411, 571, 1, 1, 574.7415, -4943.303, 21.83569, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981) +(@OGUID+2091,180411, 571, 1, 1, 2465.79, -5055.773, 303.4811, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4003) +(@OGUID+2092,180411, 571, 1, 1, 2494.079, -5058.457, 288.5814, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4003) +(@OGUID+2093,180411, 571, 1, 1, 3667.043, -707.4705, 220.4299, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4177) +(@OGUID+2094,180411, 571, 1, 1, 2776.893, 930.918, 28.78174, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4152) +(@OGUID+2095,180411, 571, 1, 1, 3842.228, 1495.968, 101.1961, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4165) +(@OGUID+2096,180411, 571, 1, 1, 3841.892, 1477.297, 129.234, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4165) +(@OGUID+2097,180411, 571, 1, 1, 8444.078, -340.1267, 915.4036, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4436) +(@OGUID+2098,180411, 571, 1, 1, 6124.838, -1085.729, 407.7206, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419) +(@OGUID+2099,180411, 571, 1, 1, 6125.659, -1090.55, 406.7731, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419) +(@OGUID+2100,180411, 571, 1, 1, 6120.892, -1091.373, 407.3358, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419) +(@OGUID+2101,180411, 571, 1, 1, 6120.023, -1086.642, 407.4646, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419) +(@OGUID+2102,180411, 571, 1, 1, 4513.346, 5709.525, 87.73186, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4122) +(@OGUID+2103,180411, 571, 1, 1, 4180.499, 5282.511, 41.72525, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4108) +(@OGUID+2104,180411, 571, 1, 1, 4178.446, 5281.503, 32.45599, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4108) +(@OGUID+2105,180411, 571, 1, 1, 2805.919, 6152.53, 95.5703, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4129) +(@OGUID+2106,180411, 571, 1, 1, 3003.288, 4049.86, 32.18251, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4113) +(@OGUID+2107,180411, 571, 1, 1, 3436.922, 4173.982, 26.38379, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+2108,180411, 571, 1, 1, 3463.541, 4143.397, 25.56423, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+2109,180411, 571, 1, 1, 3449.526, 4133.711, 25.4326, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+2110,180411, 571, 1, 1, 3463.864, 4158.074, 25.55934, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+2111,180411, 571, 1, 1, 3473.609, 4133.358, 25.26127, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+2112,180411, 571, 1, 1, 3465.659, 4191.9, 27.78839, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+2113,180411, 571, 1, 1, 3492.3, 4170.514, 26.55492, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+2114,180429, 571, 1, 1, 5592.13, 5742.286, -70.11095, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180429 (Area: 4285) +(@OGUID+2115,180410, 571, 1, 1, 5194.279, -2203.303, 239.6697, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+2116,180410, 571, 1, 1, 5797.013, -3553.729, 387.8808, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4323) +(@OGUID+2117,180410, 571, 1, 1, 5778.559, -3600.916, 387.5585, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4323) +(@OGUID+2118,180410, 571, 1, 1, 3876.448, -4523.802, 218.1476, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+2119,180410, 571, 1, 1, 4524.988, -4220.689, 171.5719, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+2120,180410, 571, 1, 1, 4546.035, -4198.64, 174.7062, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159) +(@OGUID+2121,180410, 571, 1, 1, 4609.126, -4233.917, 181.1064, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159) +(@OGUID+2122,180410, 571, 1, 1, 4524.569, -4165.339, 174.2671, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159) +(@OGUID+2123,180410, 571, 1, 1, 3416.599, -2799.829, 203.2782, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+2124,180410, 571, 1, 1, 3402.456, -2806.774, 203.5183, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+2125,180410, 571, 1, 1, 3422.075, -2795.796, 203.1454, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+2126,180410, 571, 1, 1, 3259.209, -2267.978, 114.4671, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248) +(@OGUID+2127,180410, 571, 1, 1, 3220.739, -2298.016, 108.4389, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248) +(@OGUID+2128,180410, 571, 1, 1, 3263.73, -2264.506, 114.3535, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248) +(@OGUID+2129,180410, 571, 1, 1, 3252.173, -2171.068, 118.6485, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4206) +(@OGUID+2130,180410, 571, 1, 1, 3306.331, -2180.179, 118.5948, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4206) +(@OGUID+2131,180410, 571, 1, 1, 1427.057, -3270.854, 169.2964, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3998) +(@OGUID+2132,180410, 571, 1, 1, 590.5975, -4936.698, 30.04726, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+2133,180410, 571, 1, 1, 602.3406, -4924.361, 18.96176, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+2134,180410, 571, 1, 1, 601.4332, -4918.563, 31.67034, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+2135,180410, 571, 1, 1, 595.7699, -4919.979, 31.67729, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+2136,180410, 571, 1, 1, 580.9988, -4922.641, 19.96896, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+2137,180410, 571, 1, 1, 2487.015, -5066.922, 286.3527, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4003) +(@OGUID+2138,180410, 571, 1, 1, 3658.518, -702.5648, 216.069, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177) +(@OGUID+2139,180410, 571, 1, 1, 3649.671, -718.9785, 226.6098, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177) +(@OGUID+2140,180410, 571, 1, 1, 3655.556, -719.8813, 226.5605, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177) +(@OGUID+2141,180410, 571, 1, 1, 3633.41, -715.426, 216.1156, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177) +(@OGUID+2142,180410, 571, 1, 1, 6677.345, -199.9435, 951.5283, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4428) +(@OGUID+2143,180410, 571, 1, 1, 5534.461, 5748.173, -78.80743, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4285) +(@OGUID+2144,180410, 571, 1, 1, 2817.708, 6157.477, 87.63675, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+2145,180410, 571, 1, 1, 2805.012, 6172.209, 87.67882, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+2146,180410, 571, 1, 1, 2807.23, 6169.249, 87.58257, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+2147,180410, 571, 1, 1, 2820.371, 6154.916, 87.65291, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+2148,180410, 571, 1, 1, 2808.551, 6134.94, 87.93844, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+2149,180410, 571, 1, 1, 2274.451, 5201.288, 13.85912, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+2150,180410, 571, 1, 1, 2279.471, 5208.015, 23.90492, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+2151,180410, 571, 1, 1, 2272.099, 5192.15, 12.74661, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+2152,180410, 571, 1, 1, 2284.942, 5205.83, 24.19367, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+2153,180410, 571, 1, 1, 2291.187, 5207.434, 24.68394, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+2154,180410, 571, 1, 1, 2297.049, 5205.213, 23.75366, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+2155,180410, 571, 1, 1, 2271.727, 5181.195, 21.453, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+2156,180410, 571, 1, 1, 2302.244, 5203.075, 24.58699, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+2157,180410, 571, 1, 1, 3460.282, 4177.789, 22.23072, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4043) +(@OGUID+2158,180410, 571, 1, 1, 3468.992, 4177.352, 22.22953, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4043) +(@OGUID+2159,180428, 571, 1, 1, 2284.567, 5211.048, 12.48842, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180428 (Area: 4032) +(@OGUID+2160,180428, 571, 1, 1, 2280.373, 5188.88, 12.49333, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180428 (Area: 4032) +(@OGUID+2161,180405, 571, 1, 1, 5235.096, -1315.231, 242.0927, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+2162,180405, 571, 1, 1, 5216.018, -1290.845, 243.406, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+2163,180405, 571, 1, 1, 5221.816, -1337.178, 241.8734, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+2164,180405, 571, 1, 1, 5190.064, -1301.23, 245.2663, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+2165,180405, 571, 1, 1, 5201.61, -1335.664, 242.9156, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+2166,180405, 571, 1, 1, 5136.854, -2186.576, 236.5713, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2167,180405, 571, 1, 1, 5180.994, -2197.26, 238.9063, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2168,180405, 571, 1, 1, 5154.888, -2212.581, 237.812, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2169,180405, 571, 1, 1, 5122.884, -2229.666, 241.3221, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4317) +(@OGUID+2170,180405, 571, 1, 1, 5359.893, -2664.229, 301.0435, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2171,180405, 571, 1, 1, 5433.402, -2615.731, 312.4956, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+2172,180405, 571, 1, 1, 5467.35, -2650.341, 312.4956, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+2173,180405, 571, 1, 1, 5526.185, -2673.551, 303.9539, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+2174,180405, 571, 1, 1, 5536.588, -2625.326, 303.6935, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+2175,180405, 571, 1, 1, 5449.43, -2564.951, 308.4314, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+2176,180405, 571, 1, 1, 5763.002, -3528.326, 388.487, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2177,180405, 571, 1, 1, 5786.963, -3540.992, 387.882, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2178,180405, 571, 1, 1, 5754.921, -3608.51, 386.4638, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4323) +(@OGUID+2179,180405, 571, 1, 1, 3858.005, -4565.136, 215.9988, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2180,180405, 571, 1, 1, 3888.583, -4554.612, 217.6464, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2181,180405, 571, 1, 1, 3830.209, -4542.06, 214.4055, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2182,180405, 571, 1, 1, 3846.518, -4514.354, 213.1539, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2183,180405, 571, 1, 1, 3861.908, -4495.958, 214.0141, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4211) +(@OGUID+2184,180405, 571, 1, 1, 4571.689, -4261.007, 182.1285, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+2185,180405, 571, 1, 1, 4532.587, -4188.319, 173.4792, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+2186,180405, 571, 1, 1, 4526.884, -4148.059, 172.4744, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+2187,180405, 571, 1, 1, 4589.202, -4206.561, 178.8516, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+2188,180405, 571, 1, 1, 4567.845, -4178.61, 175.7076, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+2189,180405, 571, 1, 1, 3404.216, -2841.716, 201.0336, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2190,180405, 571, 1, 1, 3455.106, -2785.783, 201.4688, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2191,180405, 571, 1, 1, 3393.907, -2804.209, 227.3434, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2192,180405, 571, 1, 1, 3390.204, -2797.654, 200.4411, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2193,180405, 571, 1, 1, 3415.27, -2746.156, 199.3946, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4204) +(@OGUID+2194,180405, 571, 1, 1, 3268.182, -2366.07, 122.9121, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4217) +(@OGUID+2195,180405, 571, 1, 1, 3231.953, -2368.505, 132.1824, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4217) +(@OGUID+2196,180405, 571, 1, 1, 3213.3, -2336.478, 122.9258, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+2197,180405, 571, 1, 1, 3264.644, -2297.473, 121.0501, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+2198,180405, 571, 1, 1, 3267.19, -2260.863, 114.0805, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4248) +(@OGUID+2199,180405, 571, 1, 1, 3231.138, -2257.735, 114.4141, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4248) +(@OGUID+2200,180405, 571, 1, 1, 3252.991, -2215.066, 117.3726, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+2201,180405, 571, 1, 1, 3270.524, -2221.896, 117.3726, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+2202,180405, 571, 1, 1, 3165.017, -2261.948, 121.5571, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+2203,180405, 571, 1, 1, 3267.909, -2244.548, 121.1477, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+2204,180405, 571, 1, 1, 3373.89, -2216.506, 124.3674, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+2205,180405, 571, 1, 1, 2671.809, -4329.921, 293.616, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+2206,180405, 571, 1, 1, 2622.076, -4352.586, 283.4205, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+2207,180405, 571, 1, 1, 2645.095, -4365.969, 279.2655, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+2208,180405, 571, 1, 1, 2621.35, -4382.056, 282.7698, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+2209,180405, 571, 1, 1, 2720.132, -4365.484, 281.1786, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+2210,180405, 571, 1, 1, 2660.348, -4411.663, 290.1755, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4018) +(@OGUID+2211,180405, 571, 1, 1, 2389.726, -4986.201, 258.8515, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2212,180405, 571, 1, 1, 2365.341, -5054.367, 254.0189, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2213,180405, 571, 1, 1, 2397.013, -5053.728, 254.2539, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+2214,180405, 571, 1, 1, 1860.306, -6006.499, 9.963303, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060) +(@OGUID+2215,180405, 571, 1, 1, 1949.557, -6101.297, 30.84152, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060) +(@OGUID+2216, 180425, 571, 1, 1, 5220.801, -1312.929, 242.096, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2217, 180425, 571, 1, 1, 5219.449, -1310.885, 242.0745, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2218, 180425, 571, 1, 1, 5231.815, -1317.981, 242.3635, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2219, 180425, 571, 1, 1, 5231.988, -1321.641, 242.3571, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2220, 180425, 571, 1, 1, 5233.578, -1319.166, 242.3319, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2221, 180425, 571, 1, 1, 5220.486, -1314.131, 242.052, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2222, 180425, 571, 1, 1, 5218.222, -1315.866, 241.8938, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2223, 180425, 571, 1, 1, 5220.872, -1331.886, 242.2099, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2224, 180425, 571, 1, 1, 5222.452, -1332.75, 242.4185, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2225, 180425, 571, 1, 1, 5213.813, -1299.402, 242.4057, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2226, 180425, 571, 1, 1, 5221.667, -1334.106, 242.3032, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2227, 180425, 571, 1, 1, 5219.712, -1332.302, 242.2887, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2228, 180425, 571, 1, 1, 5214.818, -1299.522, 242.3706, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+2229, 180425, 571, 1, 1, 5763.354, -3564.075, 387.949, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323) +(@OGUID+2230, 180425, 571, 1, 1, 5765.062, -3566.035, 388.1909, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323) +(@OGUID+2231, 180425, 571, 1, 1, 5766.175, -3563.893, 387.8907, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323) +(@OGUID+2232, 180425, 571, 1, 1, 3407.464, -2802.637, 212.434, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+2233, 180425, 571, 1, 1, 3412.858, -2802.222, 212.7033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+2234, 180425, 571, 1, 1, 3408.691, -2804.216, 212.4176, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+2235, 180425, 571, 1, 1, 3400.027, -2790.777, 212.3845, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+2236, 180425, 571, 1, 1, 3397.131, -2788.776, 212.3823, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+2237, 180425, 571, 1, 1, 3398.373, -2790.181, 212.3858, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+2238, 180425, 571, 1, 1, 1904.425, -6141.741, 19.07745, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4000) +(@OGUID+2239, 180425, 571, 1, 1, 605.681, -4923.877, 19.09374, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+2240, 180425, 571, 1, 1, 606.3546, -4926.564, 19.09381, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+2241, 180425, 571, 1, 1, 587.7562, -4951.589, 27.65986, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+2242, 180425, 571, 1, 1, 582.8324, -4936.509, 31.0752, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+2243, 180425, 571, 1, 1, 581.9504, -4926.806, 19.88217, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+2244, 180425, 571, 1, 1, 5564.997, 5765.261, -74.12132, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285) +(@OGUID+2245, 180425, 571, 1, 1, 5587.477, 5747.581, -71.46241, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285) +(@OGUID+2246, 180425, 571, 1, 1, 5587.182, 5750.653, -71.4938, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285) +(@OGUID+2247, 180425, 571, 1, 1, 5589.738, 5741.145, -69.95851, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285) +(@OGUID+2248, 180426, 571, 1, 1, 5759.534, -3544.033, 396.188, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2249, 180426, 571, 1, 1, 5761.476, -3543.627, 394.9244, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2250, 180426, 571, 1, 1, 5760.164, -3544.849, 397.1731, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2251, 180426, 571, 1, 1, 5759.306, -3545.708, 394.7601, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2252, 180426, 571, 1, 1, 5761.338, -3545.427, 398.2059, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2253, 180426, 571, 1, 1, 3856.363, -4541.962, 219.7176, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2254, 180426, 571, 1, 1, 3854.806, -4539.307, 220.7594, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2255, 180426, 571, 1, 1, 3856.938, -4540.484, 224.4462, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2256, 180426, 571, 1, 1, 3854.925, -4535.948, 222.5168, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2257, 180426, 571, 1, 1, 3857.097, -4538.585, 223.1828, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2258, 180426, 571, 1, 1, 4590.376, -4234.787, 193.9518, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159) +(@OGUID+2259, 180426, 571, 1, 1, 4590.996, -4232.708, 196.9146, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159) +(@OGUID+2260, 180426, 571, 1, 1, 4588.499, -4235.377, 199.5923, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159) +(@OGUID+2261, 180426, 571, 1, 1, 3413.123, -2821.453, 213.0589, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2262, 180426, 571, 1, 1, 3408.973, -2821.946, 212.8639, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2263, 180426, 571, 1, 1, 3406.235, -2823.066, 211.4089, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2264, 180426, 571, 1, 1, 3407.286, -2820.172, 209.3393, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2265, 180426, 571, 1, 1, 3407.906, -2825.792, 214.426, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2266, 180426, 571, 1, 1, 3444.409, -2768.932, 208.7122, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2267, 180426, 571, 1, 1, 3442.279, -2768.483, 208.9515, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2268, 180426, 571, 1, 1, 3446.616, -2769.13, 209.847, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+2269, 180426, 571, 1, 1, 3442.672, -2767.101, 211.0916, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4204) +(@OGUID+2270, 180426, 571, 1, 1, 3441.674, -2765.563, 210.9066, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4204) +(@OGUID+2271, 180426, 571, 1, 1, 3255.571, -2257.918, 124.4686, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4248) +(@OGUID+2272, 180426, 571, 1, 1, 3261.756, -2252.54, 130.7128, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2273, 180426, 571, 1, 1, 3255.756, -2251.26, 124.3831, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2274, 180426, 571, 1, 1, 3245.001, -2244.356, 130.5014, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2275, 180426, 571, 1, 1, 3245.857, -2254.095, 131.8804, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2276, 180426, 571, 1, 1, 3249.491, -2250.945, 125.1241, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2277, 180426, 571, 1, 1, 3242.157, -2246.462, 133.1835, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2278, 180426, 571, 1, 1, 3251.072, -2245.957, 127.2621, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2279, 180426, 571, 1, 1, 3253.139, -2253.7, 124.5425, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2280, 180426, 571, 1, 1, 3258.291, -2247.109, 125.9945, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+2281, 180426, 571, 1, 1, 2665.021, -4365.307, 293.8361, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065) +(@OGUID+2282, 180426, 571, 1, 1, 2659.459, -4361.625, 304.2402, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065) +(@OGUID+2283, 180426, 571, 1, 1, 2660.582, -4368.252, 294.3411, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065) +(@OGUID+2284, 180426, 571, 1, 1, 2671.556, -4363.807, 296.0383, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065) +(@OGUID+2285, 180426, 571, 1, 1, 762.1302, -2923.717, 34.17405, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+2286, 180426, 571, 1, 1, 761.934, -2924.54, 36.54957, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+2287, 180426, 571, 1, 1, 767.8195, -2920.502, 33.86417, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+2288, 180426, 571, 1, 1, 759.9549, -2911.951, 42.32548, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+2289, 180426, 571, 1, 1, 766.9323, -2913.224, 34.78922, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+2290, 180426, 571, 1, 1, 753.5833, -2915.382, 46.25695, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+2291, 180426, 571, 1, 1, 769.243, -2910.061, 45.63573, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+2292, 180426, 571, 1, 1, 755.2222, -2907.67, 46.01165, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+2293, 180426, 571, 1, 1, 1445.891, -3264.745, 200.1135, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+2294, 180426, 571, 1, 1, 1426.741, -3276.997, 203.4877, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+2295, 180426, 571, 1, 1, 1437.927, -3264.418, 201.1698, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+2296, 180426, 571, 1, 1, 1453.434, -3267.578, 204.6001, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+2297, 180426, 571, 1, 1, 1453.021, -3271.075, 202.1549, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+2298, 180426, 571, 1, 1, 585.0469, -4935.894, 57.77173, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+2299, 180426, 571, 1, 1, 584.2552, -4927.658, 53.76381, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+2300, 180426, 571, 1, 1, 586.4132, -4924.658, 54.59381, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+2301, 180426, 571, 1, 1, 579.7292, -4928.83, 52.11523, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+2302, 180427, 571, 1, 1, 5761.307, -3544.524, 395.4309, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2303, 180427, 571, 1, 1, 5760.497, -3546.056, 402.0221, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2304, 180427, 571, 1, 1, 5759.438, -3544.823, 396.8367, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2305, 180427, 571, 1, 1, 5760.398, -3543.224, 397.3958, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2306, 180427, 571, 1, 1, 5760.684, -3547.167, 398.6145, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2307, 180427, 571, 1, 1, 3853.183, -4534.543, 222.1418, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2308, 180427, 571, 1, 1, 3852.957, -4539.858, 219.1484, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2309, 180427, 571, 1, 1, 3856.241, -4539.436, 221.1546, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2310, 180427, 571, 1, 1, 3854.542, -4540.624, 227.1623, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2311, 180427, 571, 1, 1, 3856.855, -4536.955, 221.3848, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2312, 180427, 571, 1, 1, 4589.936, -4232.887, 187.0824, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159) +(@OGUID+2313, 180427, 571, 1, 1, 4590.229, -4234.215, 186.7581, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159) +(@OGUID+2314, 180427, 571, 1, 1, 4590.728, -4233.71, 184.4032, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159) +(@OGUID+2315, 180427, 571, 1, 1, 3408.324, -2823.502, 209.3464, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2316, 180427, 571, 1, 1, 3406.425, -2821.385, 209.7437, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2317, 180427, 571, 1, 1, 3410.176, -2822.778, 209.1109, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2318, 180427, 571, 1, 1, 3409.967, -2820.047, 210.1583, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2319, 180427, 571, 1, 1, 3407.021, -2824.786, 209.5089, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2320, 180427, 571, 1, 1, 3447.131, -2770.391, 210.325, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2321, 180427, 571, 1, 1, 3444.766, -2768.226, 210.0436, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+2322, 180427, 571, 1, 1, 3444.436, -2767.122, 211.3138, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204) +(@OGUID+2323, 180427, 571, 1, 1, 3441.46, -2766.443, 210.7611, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204) +(@OGUID+2324, 180427, 571, 1, 1, 3446.277, -2767.188, 208.8508, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204) +(@OGUID+2325, 180427, 571, 1, 1, 3251.26, -2253.675, 124.9079, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2326, 180427, 571, 1, 1, 3251.778, -2250.464, 129.6705, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2327, 180427, 571, 1, 1, 3247.308, -2252, 130.7534, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2328, 180427, 571, 1, 1, 3254.531, -2247.668, 129.1577, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2329, 180427, 571, 1, 1, 3252.336, -2248.873, 122.8677, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2330, 180427, 571, 1, 1, 3255.591, -2250.547, 129.6846, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2331, 180427, 571, 1, 1, 3241.862, -2241.349, 122.2494, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2332, 180427, 571, 1, 1, 3248.178, -2245.37, 125.104, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2333, 180427, 571, 1, 1, 3247.814, -2247.866, 124.5073, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2334, 180427, 571, 1, 1, 3245.019, -2248.802, 122.5996, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+2335, 180427, 571, 1, 1, 2663.781, -4367.163, 302.1978, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065) +(@OGUID+2336, 180427, 571, 1, 1, 2667.21, -4368.415, 300.2386, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065) +(@OGUID+2337, 180427, 571, 1, 1, 2660.796, -4362.103, 307.4751, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065) +(@OGUID+2338, 180427, 571, 1, 1, 768.6163, -2922.156, 38.30094, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+2339, 180427, 571, 1, 1, 762.2813, -2920.307, 44.85577, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+2340, 180427, 571, 1, 1, 767.7639, -2914.931, 50.20907, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+2341, 180427, 571, 1, 1, 771.118, -2914.354, 33.8317, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+2342, 180427, 571, 1, 1, 764.632, -2912.734, 28.99734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+2343, 180427, 571, 1, 1, 764.7379, -2907.014, 42.12639, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+2344, 180427, 571, 1, 1, 1448.717, -3267.089, 201.6755, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+2345, 180427, 571, 1, 1, 1450.106, -3254.806, 202.5467, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+2346, 180427, 571, 1, 1, 1432.74, -3253.945, 209.4203, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+2347, 180427, 571, 1, 1, 1460.863, -3277.345, 207.5119, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+2348, 180427, 571, 1, 1, 1461.863, -3264.878, 201.965, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+2349, 180427, 571, 1, 1, 586.9097, -4944.667, 47.7813, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+2350, 180427, 571, 1, 1, 587.7552, -4923.743, 55.51563, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+2351, 180427, 571, 1, 1, 584.0382, -4927.713, 53.33385, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+2352, 180427, 571, 1, 1, 586.8472, -4927.104, 56.76656, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+2353, 180427, 571, 1, 1, 576.6077, -4929.509, 55.73938, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+2354, 180427, 571, 1, 1, 2473.661, -5056.833, 313.4054, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003) +(@OGUID+2355, 180427, 571, 1, 1, 2484.688, -5057.96, 311.5289, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003) +(@OGUID+2356, 180471, 571, 1, 1, 5204.491, -1317.474, 246.2982, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66) +(@OGUID+2357, 180471, 571, 1, 1, 5204.556, -1311.417, 246.2742, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66) +(@OGUID+2358, 180471, 571, 1, 1, 5197.808, -1310.934, 246.395, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66) +(@OGUID+2359, 180471, 571, 1, 1, 5197.694, -1316.509, 246.3158, 0, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66) +(@OGUID+2360, 180471, 571, 1, 1, 3199.965, -2298.588, 111.0376, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4248) +(@OGUID+2361, 180471, 571, 1, 1, 1900.167, -6132.452, 23.4388, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+2362, 180471, 571, 1, 1, 1902.965, -6131.993, 23.66091, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+2363, 180471, 571, 1, 1, 1898.609, -6134.413, 23.38325, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+2364, 180471, 571, 1, 1, 1900.699, -6138.649, 23.68888, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+2365, 180471, 571, 1, 1, 1905.079, -6133.762, 23.68171, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+2366, 180471, 571, 1, 1, 1903.922, -6138.372, 23.43309, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+2367, 180471, 571, 1, 1, 1905.227, -6136.752, 23.46658, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+2368, 180471, 571, 1, 1, 1899.095, -6137.361, 23.69575, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+2369, 180471, 571, 1, 1, 588.3511, -4940.63, 23.00664, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981) +(@OGUID+2370, 180471, 571, 1, 1, 587.6937, -4938.055, 22.97886, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981) +(@OGUID+2371, 180471, 571, 1, 1, 584.658, -4926.464, 22.94742, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981) +(@OGUID+2372, 180471, 571, 1, 1, 585.3281, -4928.837, 22.95987, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981) +(@OGUID+2373, 180471, 571, 1, 1, 3661.782, -704.7066, 218.3424, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177) +(@OGUID+2374, 180471, 571, 1, 1, 3661.339, -709.0174, 218.379, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177) +(@OGUID+2375, 180471, 571, 1, 1, 3651.781, -708.625, 219.3715, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177) +(@OGUID+2376, 180471, 571, 1, 1, 3652.332, -704.342, 219.3648, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177) +(@OGUID+2377, 180471, 571, 1, 1, 3579.464, 251.9427, 52.88466, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+2378, 180471, 571, 1, 1, 3575.279, 246.6563, 52.87777, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+2379, 180471, 571, 1, 1, 3523.501, 237.7691, 52.94661, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+2380, 180471, 571, 1, 1, 3517.737, 242.4236, 52.90497, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+2381, 180471, 571, 1, 1, 3512.637, 297, 52.89811, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+2382, 180471, 571, 1, 1, 3517.312, 302.6024, 52.912, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+2383, 180471, 571, 1, 1, 3568.188, 304.9097, 52.96114, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+2384, 180471, 571, 1, 1, 3573.999, 300.1875, 52.88476, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+2385, 180471, 571, 1, 1, 3480.169, 1977.233, 70.1636, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158) +(@OGUID+2386, 180471, 571, 1, 1, 3484.095, 2013.983, 69.28771, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158) +(@OGUID+2387, 180471, 571, 1, 1, 3506.038, 1986.319, 68.24009, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158) +(@OGUID+2388, 180471, 571, 1, 1, 4508.732, 5716.75, 84.35536, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122) +(@OGUID+2389, 180471, 571, 1, 1, 4506.331, 5715.979, 85.08492, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122) +(@OGUID+2390, 180471, 571, 1, 1, 4506.083, 5715.355, 84.23188, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122) +(@OGUID+2391, 180471, 571, 1, 1, 4508.761, 5717.552, 85.0927, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122) +(@OGUID+2392, 180471, 571, 1, 1, 2869.387, 6211.827, 213.7105, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4020) +(@OGUID+2393, 180471, 571, 1, 1, 2867.295, 6213.874, 213.6728, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4020) +(@OGUID+2394, 180471, 571, 1, 1, 2816.863, 6165.138, 90.56039, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+2395, 180471, 571, 1, 1, 2814.848, 6167.205, 90.52396, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+2396, 180471, 571, 1, 1, 2791.958, 6145.722, 91.96442, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+2397, 180471, 571, 1, 1, 2793.936, 6143.066, 92.17467, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+2398, 180471, 571, 1, 1, 2769.591, 6124.062, 95.95924, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+2399, 180471, 571, 1, 1, 2770.471, 6122.91, 95.92594, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+2400, 180471, 571, 1, 1, 2278.516, 5192.333, 16.84088, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4032) +(@OGUID+2401, 180471, 571, 1, 1, 2280.049, 5196.121, 16.84082, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4032) +(@OGUID+2402, 180471, 571, 1, 1, 3003.927, 4062.122, 33.84514, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+2403, 180471, 571, 1, 1, 3006.915, 4061.78, 33.92781, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+2404, 180471, 571, 1, 1, 3006.462, 4067.487, 34.17837, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+2405, 180471, 571, 1, 1, 3026.681, 4045.708, 28.72306, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+2406, 180471, 571, 1, 1, 3005.008, 4059.406, 34.61089, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+2407, 180471, 571, 1, 1, 2979.829, 4053.98, 28.70936, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+2408, 180523, 571, 1, 1, 5471.11, -2643.376, 307.0311, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4275) +(@OGUID+2409, 180523, 571, 1, 1, 5757.718, -3563.73, 386.8262, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4323) +(@OGUID+2410, 180523, 571, 1, 1, 3864.262, -4536.794, 209.4336, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0) +(@OGUID+2411, 180523, 571, 1, 1, 4604.042, -4237.24, 178.9002, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4159) +(@OGUID+2412, 180523, 571, 1, 1, 3402.777, -2788.145, 201.5207, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0) +(@OGUID+2413, 180523, 571, 1, 1, 3256.107, -2192.384, 117.3726, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4206) +(@OGUID+2414, 180523, 571, 1, 1, 2678.036, -4392.695, 284.8349, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4018) +(@OGUID+2415, 180523, 571, 1, 1, 1889.731, -6193.472, 23.6236, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4000) +(@OGUID+2416, 180523, 571, 1, 1, 452.467, -4536.335, 244.877, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3991) +(@OGUID+2417, 180523, 571, 1, 1, 698.1771, -2928.019, -2.640473, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3987) +(@OGUID+2418, 180523, 571, 1, 1, 1436.052, -3258.58, 167.779, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3998) +(@OGUID+2419, 180523, 571, 1, 1, 578.6011, -4929.339, 19.16861, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3981) +(@OGUID+2420, 180523, 571, 1, 1, 2481.56, -5054.175, 284.8836, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4003) +(@OGUID+2421, 180523, 571, 1, 1, 3211.594, -677.0414, 167.9602, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0) +(@OGUID+2422, 180523, 571, 1, 1, 3657.321, -716.2959, 215.2677, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4177) +(@OGUID+2423, 180523, 571, 1, 1, 3575.916, 257.0831, 47.28813, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4161) +(@OGUID+2424, 180523, 571, 1, 1, 2775.545, 925.4372, 22.99003, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4152) +(@OGUID+2425, 180523, 571, 1, 1, 3468.981, 2004.253, 64.86234, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4158) +(@OGUID+2426, 180523, 571, 1, 1, 3847.863, 1505.001, 92.51198, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4165) +(@OGUID+2427, 180523, 571, 1, 1, 8437.674, -355.5473, 906.4015, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4484) +(@OGUID+2428, 180523, 571, 1, 1, 7839.014, -805.3143, 1183.294, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0) +(@OGUID+2429, 180523, 571, 1, 1, 7798.68, -2973.132, 1259.494, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4441) +(@OGUID+2430, 180523, 571, 1, 1, 6128.351, -1083.17, 402.6452, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4419) +(@OGUID+2431, 180523, 571, 1, 1, 6675.385, -195.2562, 951.1111, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4428) +(@OGUID+2432, 180523, 571, 1, 1, 5565.757, 5759.502, -75.22591, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4285) +(@OGUID+2433, 180523, 571, 1, 1, 4506.858, 5710.637, 81.51824, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4122) +(@OGUID+2434, 180523, 571, 1, 1, 4175.616, 5283.527, 26.69308, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4108) +(@OGUID+2435, 180523, 571, 1, 1, 2804.783, 6168.423, 85.37867, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4129) +(@OGUID+2436, 180523, 571, 1, 1, 2299.602, 5193.956, 11.70278, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4032) +(@OGUID+2437, 180523, 571, 1, 1, 3007.872, 4052.658, 26.60726, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4113) +(@OGUID+2438, 180523, 571, 1, 1, 3468.352, 4151.25, 17.5926, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4043) +(@OGUID+2439, 180431, 571, 1, 1, 5448.499, -2687.353, 317.0294, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+2440, 180431, 571, 1, 1, 3885.052, -4516.659, 244.4485, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+2441, 180431, 571, 1, 1, 3326.384, -2324.99, 148.8137, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+2442, 180431, 571, 1, 1, 3249.887, -2332.044, 113.358, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+2443, 180431, 571, 1, 1, 3228.007, -2376.978, 142.2661, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+2444, 180431, 571, 1, 1, 3194.981, -2324.08, 142.3525, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+2445, 180431, 571, 1, 1, 3355.472, -2264.87, 151.9365, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+2446, 180431, 571, 1, 1, 2534.615, -1939.123, 6.753963, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394) +(@OGUID+2447, 180431, 571, 1, 1, 2505.454, -1955.444, 11.24014, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394) +(@OGUID+2448, 180431, 571, 1, 1, 2576.156, -1817.301, 10.01707, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394) +(@OGUID+2449, 180431, 571, 1, 1, 2545.243, -1802.575, 11.32091, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4242) +(@OGUID+2450, 180431, 571, 1, 1, 3690.41, 272.8268, 52.22741, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4254) +(@OGUID+2451, 180431, 571, 1, 1, 3687.912, 302.2261, 52.22742, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4254) +(@OGUID+2452, 180431, 571, 1, 1, 4512.567, 5708.924, 97.69891, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4123) +(@OGUID+2453, 180408, 571, 1, 1, 5764.419, -3572.029, 400.4677, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4323) +(@OGUID+2454, 180408, 571, 1, 1, 5796.51, -3596.129, 396.4, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4323) +(@OGUID+2455, 180408, 571, 1, 1, 3874.124, -4526.177, 220.1032, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 0) +(@OGUID+2456, 180408, 571, 1, 1, 3839.224, -4546.804, 217.41, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 0) +(@OGUID+2457, 180408, 571, 1, 1, 3874.079, -4498.493, 223.8581, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4211) +(@OGUID+2458, 180408, 571, 1, 1, 3256.49, -2269.653, 114.1506, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4248) +(@OGUID+2459, 180408, 571, 1, 1, 3517.16, 2000.169, 64.86235, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4158) +(@OGUID+2460, 180408, 571, 1, 1, 8478.776, -335.0133, 907.4905, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4436) +(@OGUID+2461, 180408, 571, 1, 1, 5547.182, 5734.344, -70.37753, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285) +(@OGUID+2462, 180408, 571, 1, 1, 5570.323, 5767.202, -65.55209, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285) +(@OGUID+2463, 180408, 571, 1, 1, 5590.967, 5749.478, -66.40426, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285) +(@OGUID+2464, 180408, 571, 1, 1, 4146.889, 5330.113, 33.63815, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+2465, 180408, 571, 1, 1, 4154.61, 5340.539, 33.98043, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+2466, 180408, 571, 1, 1, 4136.229, 5321.447, 33.53545, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+2467, 180408, 571, 1, 1, 4119.863, 5304.662, 33.65726, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+2468, 180408, 571, 1, 1, 4248.604, 5256.001, 76.13831, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+2469, 180408, 571, 1, 1, 2923.913, 6238.717, 208.8952, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020) +(@OGUID+2470, 180408, 571, 1, 1, 2925.917, 6235.095, 216.3796, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020) +(@OGUID+2471, 180408, 571, 1, 1, 2927.372, 6251.385, 216.4442, 5.515242, 0, 0, 0, 1, 120, 255, 1); -- 180408 (Area: 4020) + +SET @OGUID:=81188; +SET @Event:=12; +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2471 AND `eventEntry`=@Event; +INSERT INTO game_event_gameobject SELECT @Event, gameobject.guid FROM `gameobject` WHERE gameobject.guid BETWEEN @OGUID+0 AND @OGUID+2471; From 302623a1516e487ad64f2028aec287b99372e33a Mon Sep 17 00:00:00 2001 From: Kittnz Date: Wed, 11 Nov 2015 15:45:04 +0100 Subject: [PATCH 323/524] DB/Event: Add all Hallow's End spawns in Northrend! - removed all old spawns and reinserted new valid spawns. --- sql/updates/world/2015_11_12_00_world.sql | 1739 +++++++++++++++++++++ 1 file changed, 1739 insertions(+) create mode 100644 sql/updates/world/2015_11_12_00_world.sql diff --git a/sql/updates/world/2015_11_12_00_world.sql b/sql/updates/world/2015_11_12_00_world.sql new file mode 100644 index 0000000000..79c2461e5f --- /dev/null +++ b/sql/updates/world/2015_11_12_00_world.sql @@ -0,0 +1,1739 @@ +SET @OGUID:=81188; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2471; + +SET @OGUID:=81188; +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 , 180405, 571, 1, 1, 5235.096, -1315.231, 242.0927, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+1 , 180405, 571, 1, 1, 5216.018, -1290.845, 243.406, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+2 , 180405, 571, 1, 1, 5221.816, -1337.178, 241.8734, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+3 , 180405, 571, 1, 1, 5190.064, -1301.23, 245.2663, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+4 , 180405, 571, 1, 1, 5201.61, -1335.664, 242.9156, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 66) +(@OGUID+5 , 180405, 571, 1, 1, 5136.854, -2186.576, 236.5713, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+6 , 180405, 571, 1, 1, 5180.994, -2197.26, 238.9063, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+7 , 180405, 571, 1, 1, 5154.888, -2212.581, 237.812, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+8 , 180405, 571, 1, 1, 5122.884, -2229.666, 241.3221, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4317) +(@OGUID+9 , 180405, 571, 1, 1, 5359.893, -2664.229, 301.0435, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+10 , 180405, 571, 1, 1, 5433.402, -2615.731, 312.4956, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+11 , 180405, 571, 1, 1, 5467.35, -2650.341, 312.4956, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+12 , 180405, 571, 1, 1, 5526.185, -2673.551, 303.9539, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+13 , 180405, 571, 1, 1, 5536.588, -2625.326, 303.6935, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+14 , 180405, 571, 1, 1, 5449.43, -2564.951, 308.4314, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4275) +(@OGUID+15 , 180405, 571, 1, 1, 5763.002, -3528.326, 388.487, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+16 , 180405, 571, 1, 1, 5786.963, -3540.992, 387.882, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+17 , 180405, 571, 1, 1, 5754.921, -3608.51, 386.4638, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4323) +(@OGUID+18 , 180405, 571, 1, 1, 3858.005, -4565.136, 215.9988, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+19 , 180405, 571, 1, 1, 3888.583, -4554.612, 217.6464, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+20 , 180405, 571, 1, 1, 3830.209, -4542.06, 214.4055, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+21 , 180405, 571, 1, 1, 3846.518, -4514.354, 213.1539, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+22 , 180405, 571, 1, 1, 3861.908, -4495.958, 214.0141, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4211) +(@OGUID+23 , 180405, 571, 1, 1, 4571.689, -4261.007, 182.1285, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+24 , 180405, 571, 1, 1, 4532.587, -4188.319, 173.4792, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+25 , 180405, 571, 1, 1, 4526.884, -4148.059, 172.4744, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+26 , 180405, 571, 1, 1, 4589.202, -4206.561, 178.8516, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+27 , 180405, 571, 1, 1, 4567.845, -4178.61, 175.7076, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4159) +(@OGUID+28 , 180405, 571, 1, 1, 3404.216, -2841.716, 201.0336, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+29 , 180405, 571, 1, 1, 3455.106, -2785.783, 201.4688, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+30 , 180405, 571, 1, 1, 3393.907, -2804.209, 227.3434, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+31 , 180405, 571, 1, 1, 3390.204, -2797.654, 200.4411, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+32 , 180405, 571, 1, 1, 3415.27, -2746.156, 199.3946, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4204) +(@OGUID+33 , 180405, 571, 1, 1, 3268.182, -2366.07, 122.9121, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4217) +(@OGUID+34 , 180405, 571, 1, 1, 3231.953, -2368.505, 132.1824, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4217) +(@OGUID+35 , 180405, 571, 1, 1, 3213.3, -2336.478, 122.9258, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+36 , 180405, 571, 1, 1, 3264.644, -2297.473, 121.0501, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+37 , 180405, 571, 1, 1, 3267.19, -2260.863, 114.0805, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4248) +(@OGUID+38 , 180405, 571, 1, 1, 3231.138, -2257.735, 114.4141, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4248) +(@OGUID+39 , 180405, 571, 1, 1, 3252.991, -2215.066, 117.3726, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+40 , 180405, 571, 1, 1, 3270.524, -2221.896, 117.3726, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+41 , 180405, 571, 1, 1, 3165.017, -2261.948, 121.5571, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+42 , 180405, 571, 1, 1, 3267.909, -2244.548, 121.1477, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+43 , 180405, 571, 1, 1, 3373.89, -2216.506, 124.3674, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4206) +(@OGUID+44 , 180405, 571, 1, 1, 2671.809, -4329.921, 293.616, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+45 , 180405, 571, 1, 1, 2622.076, -4352.586, 283.4205, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+46 , 180405, 571, 1, 1, 2645.095, -4365.969, 279.2655, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+47 , 180405, 571, 1, 1, 2621.35, -4382.056, 282.7698, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+48 , 180405, 571, 1, 1, 2720.132, -4365.484, 281.1786, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4065) +(@OGUID+49 , 180405, 571, 1, 1, 2660.348, -4411.663, 290.1755, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4018) +(@OGUID+50 , 180405, 571, 1, 1, 2389.726, -4986.201, 258.8515, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+51 , 180405, 571, 1, 1, 2365.341, -5054.367, 254.0189, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+52 , 180405, 571, 1, 1, 2397.013, -5053.728, 254.2539, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+53 , 180405, 571, 1, 1, 1860.306, -6006.499, 9.963303, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060) +(@OGUID+54 , 180405, 571, 1, 1, 1949.557, -6101.297, 30.84152, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060) +(@OGUID+55 , 180405, 571, 1, 1, 1874.136, -6124.242, 27.42142, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060) +(@OGUID+56 , 180405, 571, 1, 1, 1919.801, -6125.821, 27.42174, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4060) +(@OGUID+57 , 180405, 571, 1, 1, 1932.311, -6147.982, 26.77648, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4000) +(@OGUID+58 , 180405, 571, 1, 1, 1896.94, -6176.019, 23.88414, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4000) +(@OGUID+59 , 180405, 571, 1, 1, 500.0282, -4625.844, 249.6229, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+60 , 180405, 571, 1, 1, 448.2436, -4689.455, 248.3156, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+61 , 180405, 571, 1, 1, 400.814, -4664.87, 248.9721, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+62 , 180405, 571, 1, 1, 437.1691, -4547.266, 245.5937, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+63 , 180405, 571, 1, 1, 498.3495, -4543.512, 249.0318, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+64 , 180405, 571, 1, 1, 383.7737, -4704.653, 246.4204, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+65 , 180405, 571, 1, 1, 341.7077, -4663.656, 252.0559, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+66 , 180405, 571, 1, 1, 324.1059, -4619.823, 236.087, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+67 , 180405, 571, 1, 1, 400.9474, -4492.049, 233.8787, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+68 , 180405, 571, 1, 1, 401.9044, -4511.179, 250.6629, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+69 , 180405, 571, 1, 1, 360.6213, -4478.643, 242.9844, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+70 , 180405, 571, 1, 1, 454.7388, -4499.015, 248.8951, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3991) +(@OGUID+71 , 180405, 571, 1, 1, 734.592, -2933.09, 7.260227, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3987) +(@OGUID+72 , 180405, 571, 1, 1, 797.5989, -2948.066, 6.855769, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3987) +(@OGUID+73 , 180405, 571, 1, 1, 803.2014, -2915.014, 7.161566, 0, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3987) +(@OGUID+74 , 180405, 571, 1, 1, 786.0313, -2859.193, 4.484391, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3988) +(@OGUID+75 , 180405, 571, 1, 1, 1360.858, -3212.248, 186.6853, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+76 , 180405, 571, 1, 1, 1369.589, -3177.692, 164.0921, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+77 , 180405, 571, 1, 1, 1371.091, -3219.997, 164.9762, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998) +(@OGUID+78 , 180405, 571, 1, 1, 1458.077, -3181.131, 170.4188, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998) +(@OGUID+79 , 180405, 571, 1, 1, 1427.257, -3256.968, 165.5387, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998) +(@OGUID+80 , 180405, 571, 1, 1, 1344.667, -3284.161, 174.4178, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998) +(@OGUID+81 , 180405, 571, 1, 1, 1426.128, -3314.11, 168.664, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3998) +(@OGUID+82 , 180405, 571, 1, 1, 651.1013, -5033.48, 8.628246, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981) +(@OGUID+83 , 180405, 571, 1, 1, 601.5671, -5000.274, 8.872829, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981) +(@OGUID+84 , 180405, 571, 1, 1, 597.5203, -5013.503, 3.252731, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981) +(@OGUID+85 , 180405, 571, 1, 1, 571.9734, -4937.067, 17.71497, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981) +(@OGUID+86 , 180405, 571, 1, 1, 522.7151, -4947.288, 32.97911, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981) +(@OGUID+87 , 180405, 571, 1, 1, 570.3427, -5099.132, 8.790771, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 3981) +(@OGUID+88 , 180405, 571, 1, 1, 2475.441, -5066.366, 305.6736, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003) +(@OGUID+89 , 180405, 571, 1, 1, 2432.477, -5157.805, 281.0374, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003) +(@OGUID+90 , 180405, 571, 1, 1, 2424.413, -5138.231, 281.4278, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003) +(@OGUID+91 , 180405, 571, 1, 1, 2494.666, -5065.818, 284.7478, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003) +(@OGUID+92 , 180405, 571, 1, 1, 2513.709, -5000.823, 286.0405, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4003) +(@OGUID+93 , 180405, 571, 1, 1, 3241.704, -654.431, 166.4061, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+94 , 180405, 571, 1, 1, 3227.741, -670.722, 167.4637, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+95 , 180405, 571, 1, 1, 3254.793, -668.5916, 174.1517, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+96 , 180405, 571, 1, 1, 3217.112, -730.1161, 173.5844, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4186) +(@OGUID+97 , 180405, 571, 1, 1, 3281.125, -720.5612, 175.8869, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4186) +(@OGUID+98 , 180405, 571, 1, 1, 3247.021, -717.0428, 167.3728, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4186) +(@OGUID+99 , 180405, 571, 1, 1, 3261.009, -755.8375, 174.2986, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4186) +(@OGUID+100 , 180405, 571, 1, 1, 2566.921, -1911.748, 3.159494, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242) +(@OGUID+101 , 180405, 571, 1, 1, 2513.8, -1885.403, 12.88906, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242) +(@OGUID+102 , 180405, 571, 1, 1, 2424.383, -1848.096, 3.90364, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242) +(@OGUID+103 , 180405, 571, 1, 1, 2495.073, -1815.667, 11.99702, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242) +(@OGUID+104 , 180405, 571, 1, 1, 2601.156, -1804.928, 12.57094, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4242) +(@OGUID+105 , 180405, 571, 1, 1, 3694.363, -742.5368, 213.9544, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177) +(@OGUID+106 , 180405, 571, 1, 1, 3843.085, -705.7463, 225.1528, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177) +(@OGUID+107 , 180405, 571, 1, 1, 3880.034, -784.3032, 221.0895, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177) +(@OGUID+108 , 180405, 571, 1, 1, 3666.556, -707.39, 228.8305, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177) +(@OGUID+109 , 180405, 571, 1, 1, 3649.726, -701.9913, 215.0304, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4177) +(@OGUID+110 , 180405, 571, 1, 1, 3542.812, 202.7465, 52.22747, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4254) +(@OGUID+111 , 180405, 571, 1, 1, 3538.371, 244.3045, 47.28843, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161) +(@OGUID+112 , 180405, 571, 1, 1, 3575.413, 264.5829, 47.28846, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161) +(@OGUID+113 , 180405, 571, 1, 1, 3564.399, 258.56, 122.2979, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161) +(@OGUID+114 , 180405, 571, 1, 1, 3544.587, 296.3797, 122.2979, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161) +(@OGUID+115 , 180405, 571, 1, 1, 3480.402, 254.7602, 52.25331, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161) +(@OGUID+116 , 180405, 571, 1, 1, 3524.332, 270.6145, 122.2979, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161) +(@OGUID+117 , 180405, 571, 1, 1, 3532.921, 299.8601, 47.28838, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161) +(@OGUID+118 , 180405, 571, 1, 1, 3529.778, 341.6897, 52.22746, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4161) +(@OGUID+119 , 180405, 571, 1, 1, 2802.93, 889.9564, 12.99052, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152) +(@OGUID+120 , 180405, 571, 1, 1, 2766.088, 896.6517, 10.43985, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152) +(@OGUID+121 , 180405, 571, 1, 1, 2780.375, 916.6542, 22.35928, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152) +(@OGUID+122 , 180405, 571, 1, 1, 2782.104, 959.6036, 22.56974, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152) +(@OGUID+123 , 180405, 571, 1, 1, 2713.333, 904.954, 4.644395, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4152) +(@OGUID+124 , 180405, 571, 1, 1, 3459.519, 1994.401, 64.16402, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158) +(@OGUID+125 , 180405, 571, 1, 1, 3487.954, 1962.221, 64.86233, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158) +(@OGUID+126 , 180405, 571, 1, 1, 3488.449, 2022.323, 64.86241, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158) +(@OGUID+127 , 180405, 571, 1, 1, 3526.152, 1989.084, 65.00359, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158) +(@OGUID+128 , 180405, 571, 1, 1, 3543.308, 2012.801, 67.83711, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4158) +(@OGUID+129 , 180405, 571, 1, 1, 8478.809, -335.0501, 905.8823, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4436) +(@OGUID+130 , 180405, 571, 1, 1, 8442.125, -343.2864, 906.6075, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4484) +(@OGUID+131 , 180405, 571, 1, 1, 8439.769, -360.4051, 910.7804, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4484) +(@OGUID+132 , 180405, 571, 1, 1, 8431.716, -369.2213, 910.7804, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4484) +(@OGUID+133 , 180405, 571, 1, 1, 7857.659, -740.2723, 1178.374, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+134 , 180405, 571, 1, 1, 7783.667, -2801.49, 1220.847, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+135 , 180405, 571, 1, 1, 7807.762, -2817.106, 1222.603, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+136 , 180405, 571, 1, 1, 7816.426, -2858.509, 1228.606, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441) +(@OGUID+137 , 180405, 571, 1, 1, 7868.84, -2788.675, 1143.72, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441) +(@OGUID+138 , 180405, 571, 1, 1, 7817.629, -2897.441, 1246.089, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441) +(@OGUID+139 , 180405, 571, 1, 1, 7809.628, -2931.258, 1257.037, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441) +(@OGUID+140 , 180405, 571, 1, 1, 7809.809, -2961.031, 1257.285, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441) +(@OGUID+141 , 180405, 571, 1, 1, 7841.398, -2981.669, 1266.466, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4441) +(@OGUID+142 , 180405, 571, 1, 1, 6200.735, -1057.431, 417.0221, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419) +(@OGUID+143 , 180405, 571, 1, 1, 6124.892, -1075.259, 411.6781, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419) +(@OGUID+144 , 180405, 571, 1, 1, 6138.141, -1046.391, 412.701, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419) +(@OGUID+145 , 180405, 571, 1, 1, 6107.655, -1084.122, 413.654, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419) +(@OGUID+146 , 180405, 571, 1, 1, 6112.512, -1025.256, 414.1365, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4419) +(@OGUID+147 , 180405, 571, 1, 1, 6664.644, -251.6691, 962.2526, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4428) +(@OGUID+148 , 180405, 571, 1, 1, 6679.855, -261.4221, 961.9869, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4428) +(@OGUID+149 , 180405, 571, 1, 1, 6683.386, -201.5864, 951.2874, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4428) +(@OGUID+150 , 180405, 571, 1, 1, 5560.767, 5743.191, -75.39922, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4285) +(@OGUID+151 , 180405, 571, 1, 1, 5521.055, 5775.581, -77.84254, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4285) +(@OGUID+152 , 180405, 571, 1, 1, 5587.409, 5831.001, -67.94295, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4285) +(@OGUID+153 , 180405, 571, 1, 1, 5495.171, 4739.647, -195.2901, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4290) +(@OGUID+154 , 180405, 571, 1, 1, 5522.425, 4744.925, -188.8901, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4290) +(@OGUID+155 , 180405, 571, 1, 1, 4472.997, 5697.727, 84.70158, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4123) +(@OGUID+156 , 180405, 571, 1, 1, 4519.887, 5708.41, 84.29858, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4122) +(@OGUID+157 , 180405, 571, 1, 1, 4128.227, 5302.944, 30.827, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4108) +(@OGUID+158 , 180405, 571, 1, 1, 4064.082, 5254.847, 27.40729, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4108) +(@OGUID+159 , 180405, 571, 1, 1, 4052.241, 5303.074, 27.85353, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4108) +(@OGUID+160 , 180405, 571, 1, 1, 2899.752, 6243.547, 208.8471, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4020) +(@OGUID+161 , 180405, 571, 1, 1, 2825.619, 6186.017, 124.1293, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4129) +(@OGUID+162 , 180405, 571, 1, 1, 2806.39, 6171.232, 91.58034, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4129) +(@OGUID+163 , 180405, 571, 1, 1, 2777.328, 6130.342, 97.58146, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4129) +(@OGUID+164 , 180405, 571, 1, 1, 2248.339, 5206.908, 14.71353, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032) +(@OGUID+165 , 180405, 571, 1, 1, 2262.972, 5191.829, 13.71622, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032) +(@OGUID+166 , 180405, 571, 1, 1, 2238.288, 5169.116, 14.44349, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032) +(@OGUID+167 , 180405, 571, 1, 1, 2266.964, 5169.439, 11.26108, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032) +(@OGUID+168 , 180405, 571, 1, 1, 2242.774, 5143.132, 6.842498, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4032) +(@OGUID+169 , 180405, 571, 1, 1, 3014.273, 4067.549, 26.34313, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4113) +(@OGUID+170 , 180405, 571, 1, 1, 2998.225, 4050.244, 26.61139, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4113) +(@OGUID+171 , 180405, 571, 1, 1, 2922.996, 4039.652, 1.847561, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4113) +(@OGUID+172 , 180405, 571, 1, 1, 2873.578, 4044.563, 5.168859, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4113) +(@OGUID+173 , 180405, 571, 1, 1, 3382.788, 4113.637, 29.84352, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+174 , 180405, 571, 1, 1, 3392.099, 4155.976, 30.3478, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 0) +(@OGUID+175 , 180405, 571, 1, 1, 3459.185, 4145.886, 17.19302, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043) +(@OGUID+176 , 180405, 571, 1, 1, 3444.382, 4152.429, 31.86185, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043) +(@OGUID+177 , 180405, 571, 1, 1, 3435.074, 4077.38, 27.98145, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043) +(@OGUID+178 , 180405, 571, 1, 1, 3476.852, 4086.253, 28.05615, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043) +(@OGUID+179 , 180405, 571, 1, 1, 3494.191, 4124.338, 29.75336, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180405 (Area: 4043) +(@OGUID+180 , 180406, 571, 1, 1, 5233.11, -1303.505, 242.6981, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+181 , 180406, 571, 1, 1, 5223.288, -1292.884, 242.986, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+182 , 180406, 571, 1, 1, 5235.496, -1320.318, 242.1528, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+183 , 180406, 571, 1, 1, 5217.619, -1336.551, 242.0803, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+184 , 180406, 571, 1, 1, 5204.664, -1302.282, 243.929, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+185 , 180406, 571, 1, 1, 5186.655, -1315.126, 244.0308, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+186 , 180406, 571, 1, 1, 5197.557, -1293.151, 245.1381, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 66) +(@OGUID+187 , 180406, 571, 1, 1, 5167.86, -2163.789, 244.9229, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+188 , 180406, 571, 1, 1, 5118.464, -2229.395, 241.3221, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317) +(@OGUID+189 , 180406, 571, 1, 1, 5200.777, -2213.902, 241.7638, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317) +(@OGUID+190 , 180406, 571, 1, 1, 5209.903, -2206.08, 240.9178, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4317) +(@OGUID+191 , 180406, 571, 1, 1, 5381.495, -2622.062, 303.9539, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+192 , 180406, 571, 1, 1, 5432.385, -2649.816, 312.4956, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275) +(@OGUID+193 , 180406, 571, 1, 1, 5380.949, -2686.028, 301.1252, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275) +(@OGUID+194 , 180406, 571, 1, 1, 5492.693, -2604.736, 304.7423, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275) +(@OGUID+195 , 180406, 571, 1, 1, 5528.45, -2651.096, 303.9539, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4275) +(@OGUID+196 , 180406, 571, 1, 1, 5750.874, -3530.618, 388.8118, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+197 , 180406, 571, 1, 1, 5780.643, -3626.452, 387.7118, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4323) +(@OGUID+198 , 180406, 571, 1, 1, 5784.183, -3601.332, 387.882, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4323) +(@OGUID+199 , 180406, 571, 1, 1, 4586.705, -4265.697, 182.0961, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+200 , 180406, 571, 1, 1, 3867.676, -4566.178, 215.357, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+201 , 180406, 571, 1, 1, 3832.829, -4549.958, 215.4487, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+202 , 180406, 571, 1, 1, 3840.872, -4517.668, 216.5039, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+203 , 180406, 571, 1, 1, 3854.774, -4497.302, 214.1549, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4211) +(@OGUID+204 , 180406, 571, 1, 1, 4507.235, -4229.571, 167.2504, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+205 , 180406, 571, 1, 1, 4543.993, -4219.068, 170.553, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+206 , 180406, 571, 1, 1, 4576.085, -4253.777, 182.2079, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4159) +(@OGUID+207 , 180406, 571, 1, 1, 3443.539, -2828.223, 202.6841, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+208 , 180406, 571, 1, 1, 3440.909, -2781.021, 200.6416, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+209 , 180406, 571, 1, 1, 3399.112, -2788.302, 211.2246, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+210 , 180406, 571, 1, 1, 3484.97, -2776.988, 199.2997, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+211 , 180406, 571, 1, 1, 3429.496, -2767.099, 200.3861, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4204) +(@OGUID+212 , 180406, 571, 1, 1, 3452.409, -2756.081, 199.3898, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4204) +(@OGUID+213 , 180406, 571, 1, 1, 3229.066, -2337.311, 95.43889, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4217) +(@OGUID+214 , 180406, 571, 1, 1, 3219.195, -2355.696, 129.1687, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4217) +(@OGUID+215 , 180406, 571, 1, 1, 3275.07, -2303.272, 120.9754, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206) +(@OGUID+216 , 180406, 571, 1, 1, 3195.742, -2285.431, 110.5097, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4248) +(@OGUID+217 , 180406, 571, 1, 1, 3305.993, -2292.779, 115.1555, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4248) +(@OGUID+218 , 180406, 571, 1, 1, 3162.851, -2230.15, 121.904, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206) +(@OGUID+219 , 180406, 571, 1, 1, 3320.307, -2237.068, 124.4572, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4206) +(@OGUID+220 , 180406, 571, 1, 1, 2666.803, -4317.568, 293.4839, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+221 , 180406, 571, 1, 1, 2693.682, -4363.086, 279.9544, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+222 , 180406, 571, 1, 1, 2618.073, -4361.412, 283.4159, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+223 , 180406, 571, 1, 1, 2726.429, -4358.761, 281.7853, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+224 , 180406, 571, 1, 1, 2700.32, -4374.62, 280.271, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4065) +(@OGUID+225 , 180406, 571, 1, 1, 2649.371, -4408.653, 290.186, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4018) +(@OGUID+226 , 180406, 571, 1, 1, 2376.891, -4990.313, 257.6985, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+227 , 180406, 571, 1, 1, 2377.773, -5054.615, 254.4842, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+228 , 180406, 571, 1, 1, 1854.089, -6015.621, 10.07462, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060) +(@OGUID+229 , 180406, 571, 1, 1, 1934.119, -6111.237, 27.48708, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060) +(@OGUID+230 , 180406, 571, 1, 1, 1835.864, -6089.984, 11.71504, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4060) +(@OGUID+231 , 180406, 571, 1, 1, 1917.503, -6158.714, 26.71446, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000) +(@OGUID+232 , 180406, 571, 1, 1, 1914.023, -6154.183, 26.71475, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000) +(@OGUID+233 , 180406, 571, 1, 1, 1890.54, -6173.179, 23.86584, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4000) +(@OGUID+234 , 180406, 571, 1, 1, 496.4844, -4643.306, 253.2072, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+235 , 180406, 571, 1, 1, 424.201, -4690.684, 248.2388, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+236 , 180406, 571, 1, 1, 499.7206, -4566.931, 248.0764, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+237 , 180406, 571, 1, 1, 411.8591, -4705.089, 229.9662, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+238 , 180406, 571, 1, 1, 440.6808, -4553.362, 245.5923, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+239 , 180406, 571, 1, 1, 367.8212, -4687.587, 250.9387, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+240 , 180406, 571, 1, 1, 337.9065, -4640.5, 252.0777, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+241 , 180406, 571, 1, 1, 322.0139, -4605.215, 237.0853, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+242 , 180406, 571, 1, 1, 393.0851, -4532.665, 250.5189, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+243 , 180406, 571, 1, 1, 376.1369, -4496.113, 243.0968, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+244 , 180406, 571, 1, 1, 476.5408, -4503.842, 248.7666, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3991) +(@OGUID+245 , 180406, 571, 1, 1, 749.118, -2942.905, 14.74626, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3987) +(@OGUID+246 , 180406, 571, 1, 1, 809.5295, -2922.639, 7.219683, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3987) +(@OGUID+247 , 180406, 571, 1, 1, 737.8038, -2880.736, 12.96916, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3987) +(@OGUID+248 , 180406, 571, 1, 1, 773.0608, -2857.431, 4.171994, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3988) +(@OGUID+249 , 180406, 571, 1, 1, 1350.321, -3187.949, 164.0921, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+250 , 180406, 571, 1, 1, 1384.49, -3212.88, 164.9762, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998) +(@OGUID+251 , 180406, 571, 1, 1, 1383.839, -3200.095, 186.5387, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998) +(@OGUID+252 , 180406, 571, 1, 1, 1445.219, -3170.617, 170.5733, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998) +(@OGUID+253 , 180406, 571, 1, 1, 1418.566, -3267.669, 165.7693, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998) +(@OGUID+254 , 180406, 571, 1, 1, 1346.671, -3289.737, 174.4856, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998) +(@OGUID+255 , 180406, 571, 1, 1, 1450.951, -3303.339, 174.5696, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3998) +(@OGUID+256 , 180406, 571, 1, 1, 652.8952, -5019.987, 9.652404, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981) +(@OGUID+257 , 180406, 571, 1, 1, 592.6992, -4995.24, 8.920918, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981) +(@OGUID+258 , 180406, 571, 1, 1, 575.4783, -4949.882, 18.02069, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981) +(@OGUID+259 , 180406, 571, 1, 1, 540.7355, -4991.499, 13.16528, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981) +(@OGUID+260 , 180406, 571, 1, 1, 568.0436, -5086.117, 8.824213, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 3981) +(@OGUID+261 , 180406, 571, 1, 1, 2464.109, -5036.51, 283.7771, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003) +(@OGUID+262 , 180406, 571, 1, 1, 2468.727, -5061.739, 283.3975, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003) +(@OGUID+263 , 180406, 571, 1, 1, 2477.372, -5022.343, 286.6729, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003) +(@OGUID+264 , 180406, 571, 1, 1, 2402.191, -5126.706, 280.6651, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003) +(@OGUID+265 , 180406, 571, 1, 1, 2439.455, -5132.638, 280.9637, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003) +(@OGUID+266 , 180406, 571, 1, 1, 2501.871, -4993.182, 286.451, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4003) +(@OGUID+267 , 180406, 571, 1, 1, 3224.599, -659.952, 166.9673, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+268 , 180406, 571, 1, 1, 3201.955, -673.2883, 172.2883, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+269 , 180406, 571, 1, 1, 3209.774, -708.1309, 173.0541, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+270 , 180406, 571, 1, 1, 3267.898, -688.9091, 173.7409, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+271 , 180406, 571, 1, 1, 3240.571, -713.4294, 167.4516, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4186) +(@OGUID+272 , 180406, 571, 1, 1, 3296.688, -736.2324, 176.0992, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4186) +(@OGUID+273 , 180406, 571, 1, 1, 3280.63, -760.1717, 168.7784, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4186) +(@OGUID+274 , 180406, 571, 1, 1, 2552.256, -1990.83, 10.36751, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242) +(@OGUID+275 , 180406, 571, 1, 1, 2507.034, -1887.285, 12.20286, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242) +(@OGUID+276 , 180406, 571, 1, 1, 2430.692, -1832.366, 3.701085, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242) +(@OGUID+277 , 180406, 571, 1, 1, 2478.468, -1812.107, 14.6144, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242) +(@OGUID+278 , 180406, 571, 1, 1, 2595.189, -1786.51, 12.77725, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4242) +(@OGUID+279 , 180406, 571, 1, 1, 3799.054, -793.6374, 197.2281, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177) +(@OGUID+280 , 180406, 571, 1, 1, 3848.534, -691.816, 225.1527, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177) +(@OGUID+281 , 180406, 571, 1, 1, 3915.329, -690.8716, 242.072, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177) +(@OGUID+282 , 180406, 571, 1, 1, 3669.287, -725.0473, 213.785, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177) +(@OGUID+283 , 180406, 571, 1, 1, 3646.642, -722.6217, 226.0129, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4177) +(@OGUID+284 , 180406, 571, 1, 1, 3561.289, 246.9043, 47.2885, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161) +(@OGUID+285 , 180406, 571, 1, 1, 3518.306, 281.8258, 47.28857, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161) +(@OGUID+286 , 180406, 571, 1, 1, 3529.198, 287.327, 122.2979, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161) +(@OGUID+287 , 180406, 571, 1, 1, 3569.296, 275.4532, 122.2979, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161) +(@OGUID+288 , 180406, 571, 1, 1, 3555.43, 302.0915, 47.28843, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161) +(@OGUID+289 , 180406, 571, 1, 1, 3616.88, 268.3244, 52.26091, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161) +(@OGUID+290 , 180406, 571, 1, 1, 3532.421, 255.4469, 122.2979, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161) +(@OGUID+291 , 180406, 571, 1, 1, 3477.259, 278.0847, 52.25702, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4161) +(@OGUID+292 , 180406, 571, 1, 1, 2809.934, 900.2016, 21.38731, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4152) +(@OGUID+293 , 180406, 571, 1, 1, 2776.956, 897.387, 14.16927, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4152) +(@OGUID+294 , 180406, 571, 1, 1, 2735.234, 880.1124, 6.758276, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4152) +(@OGUID+295 , 180406, 571, 1, 1, 2714.933, 887.4085, 4.232737, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4152) +(@OGUID+296 , 180406, 571, 1, 1, 3501.767, 1985.325, 65.36996, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158) +(@OGUID+297 , 180406, 571, 1, 1, 3488.581, 1995.478, 64.86234, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158) +(@OGUID+298 , 180406, 571, 1, 1, 3506.409, 2022.095, 64.86234, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158) +(@OGUID+299 , 180406, 571, 1, 1, 3534.448, 1993.511, 65.57285, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158) +(@OGUID+300 , 180406, 571, 1, 1, 3533.5, 2028.148, 67.83711, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4158) +(@OGUID+301 , 180406, 571, 1, 1, 3797.447, 1625.543, 91.86301, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+302 , 180406, 571, 1, 1, 3811.2, 1676.326, 116.9827, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+303 , 180406, 571, 1, 1, 3826.005, 1580.641, 86.69843, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165) +(@OGUID+304 , 180406, 571, 1, 1, 3792.57, 1555.635, 90.08284, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165) +(@OGUID+305 , 180406, 571, 1, 1, 3892.407, 1621.969, 93.93169, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165) +(@OGUID+306 , 180406, 571, 1, 1, 3763.325, 1539.438, 87.04325, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165) +(@OGUID+307 , 180406, 571, 1, 1, 3857.26, 1532.173, 95.70817, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165) +(@OGUID+308 , 180406, 571, 1, 1, 3825.578, 1499.48, 91.71698, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165) +(@OGUID+309 , 180406, 571, 1, 1, 3839.292, 1480.273, 92.05128, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165) +(@OGUID+310 , 180406, 571, 1, 1, 3854.936, 1480.276, 92.05779, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4165) +(@OGUID+311 , 180406, 571, 1, 1, 8436.645, -338.5753, 906.6075, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4436) +(@OGUID+312 , 180406, 571, 1, 1, 8420.556, -342.8851, 910.7804, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4484) +(@OGUID+313 , 180406, 571, 1, 1, 8412.648, -351.5258, 910.7804, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4484) +(@OGUID+314 , 180406, 571, 1, 1, 7834.21, -795.5672, 1183.377, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+315 , 180406, 571, 1, 1, 7764.518, -2819.573, 1220.469, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+316 , 180406, 571, 1, 1, 7791.312, -2800.402, 1221.756, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+317 , 180406, 571, 1, 1, 7808.44, -2839.265, 1226.409, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+318 , 180406, 571, 1, 1, 7856.201, -2797.805, 1145.121, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441) +(@OGUID+319 , 180406, 571, 1, 1, 7797.143, -2902.636, 1248.202, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441) +(@OGUID+320 , 180406, 571, 1, 1, 7817.669, -2875.495, 1238.228, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441) +(@OGUID+321 , 180406, 571, 1, 1, 7827.663, -2901.533, 1246.536, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441) +(@OGUID+322 , 180406, 571, 1, 1, 7797.608, -2953.877, 1257.636, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441) +(@OGUID+323 , 180406, 571, 1, 1, 7834.471, -2989.303, 1265.23, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4441) +(@OGUID+324 , 180406, 571, 1, 1, 6185.55, -1068.802, 417.2573, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419) +(@OGUID+325 , 180406, 571, 1, 1, 6137.813, -1086.493, 412.2495, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419) +(@OGUID+326 , 180406, 571, 1, 1, 6120.12, -1075.182, 411.8575, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419) +(@OGUID+327 , 180406, 571, 1, 1, 6128.455, -1024.129, 414.0439, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419) +(@OGUID+328 , 180406, 571, 1, 1, 6102.482, -1047.252, 413.5006, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4419) +(@OGUID+329 , 180406, 571, 1, 1, 6659.226, -249.2723, 962.2037, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4428) +(@OGUID+330 , 180406, 571, 1, 1, 6654.979, -197.8785, 952.4429, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4428) +(@OGUID+331 , 180406, 571, 1, 1, 6681.767, -266.9733, 961.7059, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4428) +(@OGUID+332 , 180406, 571, 1, 1, 5540.28, 5732.585, -75.04021, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4285) +(@OGUID+333 , 180406, 571, 1, 1, 5595.533, 5770.859, -71.57546, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4285) +(@OGUID+334 , 180406, 571, 1, 1, 5611.217, 5824.185, -67.32271, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4285) +(@OGUID+335 , 180406, 571, 1, 1, 5515.897, 4742.963, -194.0693, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4290) +(@OGUID+336 , 180406, 571, 1, 1, 5490.307, 4729.871, -194.7691, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4290) +(@OGUID+337 , 180406, 571, 1, 1, 4483.99, 5693.269, 84.82285, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4123) +(@OGUID+338 , 180406, 571, 1, 1, 4499.713, 5716.173, 84.6351, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4122) +(@OGUID+339 , 180406, 571, 1, 1, 4518.85, 5706.549, 82.58364, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4122) +(@OGUID+340 , 180406, 571, 1, 1, 4121.668, 5281.876, 25.64887, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4108) +(@OGUID+341 , 180406, 571, 1, 1, 4040.769, 5277.135, 27.53135, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4108) +(@OGUID+342 , 180406, 571, 1, 1, 4131.17, 5250.665, 28.56509, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4108) +(@OGUID+343 , 180406, 571, 1, 1, 2903.725, 6231.557, 208.8394, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4020) +(@OGUID+344 , 180406, 571, 1, 1, 2931.82, 6242.545, 214.88, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4020) +(@OGUID+345 , 180406, 571, 1, 1, 2836.468, 6174.838, 124.0885, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4129) +(@OGUID+346 , 180406, 571, 1, 1, 2789.779, 6148.222, 86.61843, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4129) +(@OGUID+347 , 180406, 571, 1, 1, 2255.002, 5225.886, 14.71353, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4032) +(@OGUID+348 , 180406, 571, 1, 1, 2238.76, 5180.222, 14.71353, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4032) +(@OGUID+349 , 180406, 571, 1, 1, 2230.155, 5147.772, 6.842682, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4032) +(@OGUID+350 , 180406, 571, 1, 1, 3007.184, 4071.53, 37.50875, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4113) +(@OGUID+351 , 180406, 571, 1, 1, 2982.732, 4080.248, 26.95294, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4113) +(@OGUID+352 , 180406, 571, 1, 1, 2911.799, 4046.192, 1.700204, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4113) +(@OGUID+353 , 180406, 571, 1, 1, 2845.697, 4021.456, 5.048532, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4113) +(@OGUID+354 , 180406, 571, 1, 1, 3395.545, 4103.316, 30.25075, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+355 , 180406, 571, 1, 1, 3426.093, 4154.369, 31.73266, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+356 , 180406, 571, 1, 1, 3380.001, 4144.935, 31.45782, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 0) +(@OGUID+357 , 180406, 571, 1, 1, 3466.665, 4145.107, 17.19302, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043) +(@OGUID+358 , 180406, 571, 1, 1, 3482.742, 4135.432, 30.13783, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043) +(@OGUID+359 , 180406, 571, 1, 1, 3459.587, 4199.699, 18.93058, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043) +(@OGUID+360 , 180406, 571, 1, 1, 3446.437, 4083.459, 26.36699, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043) +(@OGUID+361 , 180406, 571, 1, 1, 3490.993, 4093.242, 27.72779, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180406 (Area: 4043) +(@OGUID+362 , 180407, 571, 1, 1, 5186.266, -2193.768, 239.013, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+363 , 180407, 571, 1, 1, 5170.956, -2174.502, 236.5384, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+364 , 180407, 571, 1, 1, 5131.898, -2198.527, 238.9261, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+365 , 180407, 571, 1, 1, 5118.4, -2225.201, 241.3221, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4317) +(@OGUID+366 , 180407, 571, 1, 1, 5410.509, -2652.607, 306.231, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+367 , 180407, 571, 1, 1, 5467.847, -2615.898, 312.4956, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+368 , 180407, 571, 1, 1, 5500.174, -2659.385, 303.9539, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+369 , 180407, 571, 1, 1, 5536.58, -2608.138, 304.0076, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+370 , 180407, 571, 1, 1, 5524.991, -2578.385, 303.9539, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4275) +(@OGUID+371 , 180407, 571, 1, 1, 5744.013, -3556, 386.8233, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+372 , 180407, 571, 1, 1, 5773.413, -3601.402, 386.8242, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4323) +(@OGUID+373 , 180407, 571, 1, 1, 5769.374, -3630.634, 386.852, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4323) +(@OGUID+374 , 180407, 571, 1, 1, 4578.956, -4263.669, 182.3578, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+375 , 180407, 571, 1, 1, 3866.024, -4556.092, 217.1811, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+376 , 180407, 571, 1, 1, 3839.12, -4556.077, 215.6738, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+377 , 180407, 571, 1, 1, 3876.9, -4547.333, 210.9542, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+378 , 180407, 571, 1, 1, 3834.391, -4523.571, 216.3354, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+379 , 180407, 571, 1, 1, 3845.775, -4506.957, 213.2268, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4211) +(@OGUID+380 , 180407, 571, 1, 1, 4503.457, -4238.322, 166.302, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+381 , 180407, 571, 1, 1, 4553.079, -4233.049, 170.7654, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+382 , 180407, 571, 1, 1, 4591.484, -4252.421, 181.7474, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4159) +(@OGUID+383 , 180407, 571, 1, 1, 3419.264, -2808.972, 201.4093, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+384 , 180407, 571, 1, 1, 3428.19, -2778.842, 263.1267, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+385 , 180407, 571, 1, 1, 3361.911, -2812.032, 198.3222, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+386 , 180407, 571, 1, 1, 3414.363, -2778.031, 201.5204, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+387 , 180407, 571, 1, 1, 3429.28, -2746.916, 199.4592, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4204) +(@OGUID+388 , 180407, 571, 1, 1, 3249.329, -2372.51, 129.9958, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4217) +(@OGUID+389 , 180407, 571, 1, 1, 3309.994, -2284.978, 114.9895, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4248) +(@OGUID+390 , 180407, 571, 1, 1, 3195.763, -2280.448, 110.7325, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4248) +(@OGUID+391 , 180407, 571, 1, 1, 3239.406, -2232.858, 121.1309, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206) +(@OGUID+392 , 180407, 571, 1, 1, 3297.919, -2236.022, 120.9063, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206) +(@OGUID+393 , 180407, 571, 1, 1, 3312.651, -2213.69, 115.9192, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206) +(@OGUID+394 , 180407, 571, 1, 1, 3358.979, -2188.361, 123.8899, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4206) +(@OGUID+395 , 180407, 571, 1, 1, 2697.765, -4328.043, 291.2906, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065) +(@OGUID+396 , 180407, 571, 1, 1, 2662.834, -4358.088, 279.7958, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065) +(@OGUID+397 , 180407, 571, 1, 1, 2618.055, -4371.507, 283.3527, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065) +(@OGUID+398 , 180407, 571, 1, 1, 2710.088, -4371.438, 278.8264, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4065) +(@OGUID+399 , 180407, 571, 1, 1, 2670.709, -4408.632, 290.6959, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4018) +(@OGUID+400 , 180407, 571, 1, 1, 2382.453, -5014.535, 254.0956, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+401 , 180407, 571, 1, 1, 2385.039, -5056.534, 253.5052, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+402 , 180407, 571, 1, 1, 1924.839, -6128.684, 27.42144, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4060) +(@OGUID+403 , 180407, 571, 1, 1, 1846.395, -6081.321, 11.3513, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4060) +(@OGUID+404 , 180407, 571, 1, 1, 1929.122, -6143.407, 26.77677, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000) +(@OGUID+405 , 180407, 571, 1, 1, 1893.114, -6154.604, 27.42172, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000) +(@OGUID+406 , 180407, 571, 1, 1, 1890.457, -6159.884, 27.42142, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4000) +(@OGUID+407 , 180407, 571, 1, 1, 485.1177, -4663.222, 253.1473, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+408 , 180407, 571, 1, 1, 496.8085, -4602.353, 249.5994, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+409 , 180407, 571, 1, 1, 401, -4688.146, 248.2407, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+410 , 180407, 571, 1, 1, 399.7902, -4712.554, 231.7376, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+411 , 180407, 571, 1, 1, 389.0826, -4503.428, 242.6498, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+412 , 180407, 571, 1, 1, 388.3697, -4480.479, 233.2288, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+413 , 180407, 571, 1, 1, 490.7223, -4521.801, 248.6068, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3991) +(@OGUID+414 , 180407, 571, 1, 1, 756.3785, -2948.583, 15.57896, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987) +(@OGUID+415 , 180407, 571, 1, 1, 769.6545, -2921.345, 12.84954, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987) +(@OGUID+416 , 180407, 571, 1, 1, 731.8281, -2922.661, 7.247694, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987) +(@OGUID+417 , 180407, 571, 1, 1, 801.8958, -2922.491, 17.85299, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3987) +(@OGUID+418 , 180407, 571, 1, 1, 1346.989, -3181.646, 164.0921, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+419 , 180407, 571, 1, 1, 1366.228, -3171.427, 164.0921, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+420 , 180407, 571, 1, 1, 1434.518, -3152.928, 167.3012, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3998) +(@OGUID+421 , 180407, 571, 1, 1, 1384.498, -3242.309, 168.7519, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3998) +(@OGUID+422 , 180407, 571, 1, 1, 1423.141, -3262.486, 181.0846, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3998) +(@OGUID+423 , 180407, 571, 1, 1, 1461.795, -3320.668, 174.4624, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3998) +(@OGUID+424 , 180407, 571, 1, 1, 637.7101, -5010.153, 4.615479, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981) +(@OGUID+425 , 180407, 571, 1, 1, 574.2803, -4943.381, 32.46601, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981) +(@OGUID+426 , 180407, 571, 1, 1, 592.1497, -5042.62, 6.364627, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981) +(@OGUID+427 , 180407, 571, 1, 1, 519.3365, -4952.292, 32.97431, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981) +(@OGUID+428 , 180407, 571, 1, 1, 611.5425, -5094.039, 8.544552, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 3981) +(@OGUID+429 , 180407, 571, 1, 1, 2413.909, -5123.429, 280.2519, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003) +(@OGUID+430 , 180407, 571, 1, 1, 2429.419, -5167.8, 277.2554, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003) +(@OGUID+431 , 180407, 571, 1, 1, 2446.935, -5152.328, 280.9121, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003) +(@OGUID+432 , 180407, 571, 1, 1, 2475.557, -5077.68, 282.9327, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003) +(@OGUID+433 , 180407, 571, 1, 1, 2556.758, -5010.462, 293.3214, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003) +(@OGUID+434 , 180407, 571, 1, 1, 2488.596, -5032.713, 286.0028, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4003) +(@OGUID+435 , 180407, 571, 1, 1, 3216.365, -654.7118, 173.1727, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+436 , 180407, 571, 1, 1, 3202.009, -689.5071, 172.0019, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+437 , 180407, 571, 1, 1, 3228.639, -707.2554, 167.6969, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+438 , 180407, 571, 1, 1, 3266.271, -712.002, 172.5156, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4186) +(@OGUID+439 , 180407, 571, 1, 1, 3269.517, -726.0446, 169.1231, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4186) +(@OGUID+440 , 180407, 571, 1, 1, 2567.745, -1931.37, 3.347648, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4242) +(@OGUID+441 , 180407, 571, 1, 1, 2535.844, -2001.418, 10.57551, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4242) +(@OGUID+442 , 180407, 571, 1, 1, 2513.919, -1892.11, 12.3828, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4242) +(@OGUID+443 , 180407, 571, 1, 1, 2499.634, -1811.967, 22.76959, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4242) +(@OGUID+444 , 180407, 571, 1, 1, 3794.182, -798.6522, 196.8896, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177) +(@OGUID+445 , 180407, 571, 1, 1, 3934.507, -711.8297, 242.3191, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177) +(@OGUID+446 , 180407, 571, 1, 1, 3718.244, -692.4291, 215.5753, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177) +(@OGUID+447 , 180407, 571, 1, 1, 3670.186, -714.9221, 213.7414, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177) +(@OGUID+448 , 180407, 571, 1, 1, 3655.985, -670.6024, 233.3351, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4177) +(@OGUID+449 , 180407, 571, 1, 1, 3564.145, 205.2086, 52.22747, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4254) +(@OGUID+450 , 180407, 571, 1, 1, 3549.064, 250.287, 122.2979, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161) +(@OGUID+451 , 180407, 571, 1, 1, 3572.962, 287.3582, 47.28861, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161) +(@OGUID+452 , 180407, 571, 1, 1, 3520.549, 258.9889, 47.28859, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161) +(@OGUID+453 , 180407, 571, 1, 1, 3614.126, 292.0934, 52.2594, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161) +(@OGUID+454 , 180407, 571, 1, 1, 3561.172, 290.9487, 122.2979, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161) +(@OGUID+455 , 180407, 571, 1, 1, 3551.001, 343.66, 52.22747, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4161) +(@OGUID+456 , 180407, 571, 1, 1, 2786.32, 920.1965, 22.35873, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4152) +(@OGUID+457 , 180407, 571, 1, 1, 2790.073, 894.4512, 14.68251, 0, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4152) +(@OGUID+458 , 180407, 571, 1, 1, 2742.038, 884.5179, 6.728371, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4152) +(@OGUID+459 , 180407, 571, 1, 1, 3493.868, 2016.275, 64.86234, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158) +(@OGUID+460 , 180407, 571, 1, 1, 3512.788, 1992.762, 64.86221, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158) +(@OGUID+461 , 180407, 571, 1, 1, 3519.225, 1980.357, 64.9095, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158) +(@OGUID+462 , 180407, 571, 1, 1, 3509.91, 2013.012, 64.87511, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158) +(@OGUID+463 , 180407, 571, 1, 1, 3513.616, 2026.584, 65.0184, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4158) +(@OGUID+464 , 180407, 571, 1, 1, 3792.06, 1680.653, 117.8903, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+465 , 180407, 571, 1, 1, 3771.654, 1604.742, 90.19121, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165) +(@OGUID+466 , 180407, 571, 1, 1, 3876.597, 1645.691, 96.41532, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165) +(@OGUID+467 , 180407, 571, 1, 1, 3835.953, 1580.846, 86.69843, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165) +(@OGUID+468 , 180407, 571, 1, 1, 3798.435, 1543.227, 90.20327, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165) +(@OGUID+469 , 180407, 571, 1, 1, 3826.736, 1532.038, 95.74288, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165) +(@OGUID+470 , 180407, 571, 1, 1, 3772.262, 1518.21, 87.58628, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165) +(@OGUID+471 , 180407, 571, 1, 1, 3845.135, 1480.392, 92.04202, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165) +(@OGUID+472 , 180407, 571, 1, 1, 3829.847, 1480.661, 92.05907, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4165) +(@OGUID+473 , 180407, 571, 1, 1, 7849.781, -777.4718, 1180.518, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+474 , 180407, 571, 1, 1, 7769.292, -2813.385, 1219.706, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+475 , 180407, 571, 1, 1, 7798.998, -2801.392, 1221.274, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+476 , 180407, 571, 1, 1, 7816.222, -2886.335, 1241.734, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441) +(@OGUID+477 , 180407, 571, 1, 1, 7800.365, -2891.346, 1244.112, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441) +(@OGUID+478 , 180407, 571, 1, 1, 7815.249, -2847.6, 1226.733, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441) +(@OGUID+479 , 180407, 571, 1, 1, 7815.913, -2922.443, 1253.22, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441) +(@OGUID+480 , 180407, 571, 1, 1, 7823.335, -2991.151, 1264.953, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4441) +(@OGUID+481 , 180407, 571, 1, 1, 6188.896, -1062.919, 409.9726, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419) +(@OGUID+482 , 180407, 571, 1, 1, 6160.541, -1068.3, 414.0189, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419) +(@OGUID+483 , 180407, 571, 1, 1, 6122.874, -1074.873, 409.5521, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419) +(@OGUID+484 , 180407, 571, 1, 1, 6130.21, -1071.851, 402.8137, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419) +(@OGUID+485 , 180407, 571, 1, 1, 6129.499, -1046.194, 413.8744, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419) +(@OGUID+486 , 180407, 571, 1, 1, 6111.876, -1089.197, 404.6797, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419) +(@OGUID+487 , 180407, 571, 1, 1, 6111.486, -1046.028, 413.9368, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419) +(@OGUID+488 , 180407, 571, 1, 1, 6089.37, -1063.561, 413.63, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4419) +(@OGUID+489 , 180407, 571, 1, 1, 6651.599, -247.5624, 962.2744, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+490 , 180407, 571, 1, 1, 6660.406, -183.2028, 954.8659, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4428) +(@OGUID+491 , 180407, 571, 1, 1, 5578.406, 5763.015, -75.20139, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4285) +(@OGUID+492 , 180407, 571, 1, 1, 5608.686, 5805.967, -70.46122, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4285) +(@OGUID+493 , 180407, 571, 1, 1, 5591.252, 5728.178, -71.99928, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4284) +(@OGUID+494 , 180407, 571, 1, 1, 5480.453, 4743.266, -196.4773, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4290) +(@OGUID+495 , 180407, 571, 1, 1, 5521.717, 4750.083, -188.2182, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4290) +(@OGUID+496 , 180407, 571, 1, 1, 5500.287, 4733.095, -194.4314, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4290) +(@OGUID+497 , 180407, 571, 1, 1, 4169.929, 5290.662, 28.58986, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4108) +(@OGUID+498 , 180407, 571, 1, 1, 4089.737, 5249.827, 25.98461, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4108) +(@OGUID+499 , 180407, 571, 1, 1, 4030.189, 5336.436, 27.57404, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4108) +(@OGUID+500 , 180407, 571, 1, 1, 4190.916, 5221.139, 27.44952, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4108) +(@OGUID+501 , 180407, 571, 1, 1, 2888.924, 6248.153, 208.8295, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4020) +(@OGUID+502 , 180407, 571, 1, 1, 2265.474, 5199.011, 26.29611, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4032) +(@OGUID+503 , 180407, 571, 1, 1, 2272.925, 5219.881, 13.58492, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4032) +(@OGUID+504 , 180407, 571, 1, 1, 2250.998, 5164.212, 14.44375, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4032) +(@OGUID+505 , 180407, 571, 1, 1, 3023.779, 4059.767, 26.16735, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4113) +(@OGUID+506 , 180407, 571, 1, 1, 2915.491, 4041.218, 1.718314, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4113) +(@OGUID+507 , 180407, 571, 1, 1, 2878.346, 4033.684, 5.24339, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4113) +(@OGUID+508 , 180407, 571, 1, 1, 2841.972, 4030.163, 5.0511, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4113) +(@OGUID+509 , 180407, 571, 1, 1, 3378.039, 4127.827, 30.85807, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+510 , 180407, 571, 1, 1, 3410.067, 4095.503, 30.58323, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+511 , 180407, 571, 1, 1, 3409.243, 4154.036, 31.87858, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 0) +(@OGUID+512 , 180407, 571, 1, 1, 3477.146, 4149.458, 28.31626, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4043) +(@OGUID+513 , 180407, 571, 1, 1, 3458.126, 4079.161, 26.78951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4043) +(@OGUID+514 , 180407, 571, 1, 1, 3496.528, 4108.67, 28.63537, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4043) +(@OGUID+515 , 180407, 571, 1, 1, 3474.94, 4199.34, 18.7451, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180407 (Area: 4043) +(@OGUID+516 , 180408, 571, 1, 1, 5764.419, -3572.029, 400.4677, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4323) +(@OGUID+517 , 180408, 571, 1, 1, 5796.51, -3596.129, 396.4, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4323) +(@OGUID+518 , 180408, 571, 1, 1, 3874.124, -4526.177, 220.1032, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 0) +(@OGUID+519 , 180408, 571, 1, 1, 3839.224, -4546.804, 217.41, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 0) +(@OGUID+520 , 180408, 571, 1, 1, 3874.079, -4498.493, 223.8581, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4211) +(@OGUID+521 , 180408, 571, 1, 1, 3256.49, -2269.653, 114.1506, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4248) +(@OGUID+522 , 180408, 571, 1, 1, 3517.16, 2000.169, 64.86235, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4158) +(@OGUID+523 , 180408, 571, 1, 1, 8478.776, -335.0133, 907.4905, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4436) +(@OGUID+524 , 180408, 571, 1, 1, 5547.182, 5734.344, -70.37753, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285) +(@OGUID+525 , 180408, 571, 1, 1, 5570.323, 5767.202, -65.55209, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285) +(@OGUID+526 , 180408, 571, 1, 1, 5590.967, 5749.478, -66.40426, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4285) +(@OGUID+527 , 180408, 571, 1, 1, 4146.889, 5330.113, 33.63815, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+528 , 180408, 571, 1, 1, 4154.61, 5340.539, 33.98043, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+529 , 180408, 571, 1, 1, 4136.229, 5321.447, 33.53545, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+530 , 180408, 571, 1, 1, 4119.863, 5304.662, 33.65726, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+531 , 180408, 571, 1, 1, 4248.604, 5256.001, 76.13831, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4108) +(@OGUID+532 , 180408, 571, 1, 1, 2923.913, 6238.717, 208.8952, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020) +(@OGUID+533 , 180408, 571, 1, 1, 2925.917, 6235.095, 216.3796, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020) +(@OGUID+534 , 180408, 571, 1, 1, 2927.372, 6251.385, 216.4442, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180408 (Area: 4020) +(@OGUID+535 , 180410, 571, 1, 1, 5194.279, -2203.303, 239.6697, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+536 , 180410, 571, 1, 1, 5797.013, -3553.729, 387.8808, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4323) +(@OGUID+537 , 180410, 571, 1, 1, 5778.559, -3600.916, 387.5585, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4323) +(@OGUID+538 , 180410, 571, 1, 1, 3876.448, -4523.802, 218.1476, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+539 , 180410, 571, 1, 1, 4524.988, -4220.689, 171.5719, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+540 , 180410, 571, 1, 1, 4546.035, -4198.64, 174.7062, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159) +(@OGUID+541 , 180410, 571, 1, 1, 4609.126, -4233.917, 181.1064, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159) +(@OGUID+542 , 180410, 571, 1, 1, 4524.569, -4165.339, 174.2671, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4159) +(@OGUID+543 , 180410, 571, 1, 1, 3416.599, -2799.829, 203.2782, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+544 , 180410, 571, 1, 1, 3402.456, -2806.774, 203.5183, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+545 , 180410, 571, 1, 1, 3422.075, -2795.796, 203.1454, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 0) +(@OGUID+546 , 180410, 571, 1, 1, 3259.209, -2267.978, 114.4671, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248) +(@OGUID+547 , 180410, 571, 1, 1, 3220.739, -2298.016, 108.4389, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248) +(@OGUID+548 , 180410, 571, 1, 1, 3263.73, -2264.506, 114.3535, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4248) +(@OGUID+549 , 180410, 571, 1, 1, 3252.173, -2171.068, 118.6485, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4206) +(@OGUID+550 , 180410, 571, 1, 1, 3306.331, -2180.179, 118.5948, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4206) +(@OGUID+551 , 180410, 571, 1, 1, 1427.057, -3270.854, 169.2964, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3998) +(@OGUID+552 , 180410, 571, 1, 1, 590.5975, -4936.698, 30.04726, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+553 , 180410, 571, 1, 1, 602.3406, -4924.361, 18.96176, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+554 , 180410, 571, 1, 1, 601.4332, -4918.563, 31.67034, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+555 , 180410, 571, 1, 1, 595.7699, -4919.979, 31.67729, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+556 , 180410, 571, 1, 1, 580.9988, -4922.641, 19.96896, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 3981) +(@OGUID+557 , 180410, 571, 1, 1, 2487.015, -5066.922, 286.3527, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4003) +(@OGUID+558 , 180410, 571, 1, 1, 3658.518, -702.5648, 216.069, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177) +(@OGUID+559 , 180410, 571, 1, 1, 3649.671, -718.9785, 226.6098, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177) +(@OGUID+560 , 180410, 571, 1, 1, 3655.556, -719.8813, 226.5605, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177) +(@OGUID+561 , 180410, 571, 1, 1, 3633.41, -715.426, 216.1156, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4177) +(@OGUID+562 , 180410, 571, 1, 1, 6677.345, -199.9435, 951.5283, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4428) +(@OGUID+563 , 180410, 571, 1, 1, 5534.461, 5748.173, -78.80743, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4285) +(@OGUID+564 , 180410, 571, 1, 1, 2817.708, 6157.477, 87.63675, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+565 , 180410, 571, 1, 1, 2805.012, 6172.209, 87.67882, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+566 , 180410, 571, 1, 1, 2807.23, 6169.249, 87.58257, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+567 , 180410, 571, 1, 1, 2820.371, 6154.916, 87.65291, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+568 , 180410, 571, 1, 1, 2808.551, 6134.94, 87.93844, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4129) +(@OGUID+569 , 180410, 571, 1, 1, 2274.451, 5201.288, 13.85912, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+570 , 180410, 571, 1, 1, 2279.471, 5208.015, 23.90492, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+571 , 180410, 571, 1, 1, 2272.099, 5192.15, 12.74661, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+572 , 180410, 571, 1, 1, 2284.942, 5205.83, 24.19367, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+573 , 180410, 571, 1, 1, 2291.187, 5207.434, 24.68394, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+574 , 180410, 571, 1, 1, 2297.049, 5205.213, 23.75366, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+575 , 180410, 571, 1, 1, 2271.727, 5181.195, 21.453, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+576 , 180410, 571, 1, 1, 2302.244, 5203.075, 24.58699, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4032) +(@OGUID+577 , 180410, 571, 1, 1, 3460.282, 4177.789, 22.23072, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4043) +(@OGUID+578 , 180410, 571, 1, 1, 3468.992, 4177.352, 22.22953, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180410 (Area: 4043) +(@OGUID+579 , 180411, 571, 1, 1, 5438.724, -2610.023, 317.467, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4275) +(@OGUID+580 , 180411, 571, 1, 1, 5464.751, -2610.872, 317.4325, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4275) +(@OGUID+581 , 180411, 571, 1, 1, 3410.139, -2792.103, 205.9287, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+582 , 180411, 571, 1, 1, 3416.794, -2787.165, 206.333, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+583 , 180411, 571, 1, 1, 3452.579, -2745.875, 191.9798, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4204) +(@OGUID+584 , 180411, 571, 1, 1, 1879.72, -6205.338, 27.26761, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4000) +(@OGUID+585 , 180411, 571, 1, 1, 466.7355, -4532.663, 248.7537, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3991) +(@OGUID+586 , 180411, 571, 1, 1, 700.5764, -2933.623, 0.497556, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3987) +(@OGUID+587 , 180411, 571, 1, 1, 820.6528, -2907.458, 12.73376, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3987) +(@OGUID+588 , 180411, 571, 1, 1, 1372.837, -3207.151, 168.448, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3998) +(@OGUID+589 , 180411, 571, 1, 1, 1421.961, -3261.482, 172.5474, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3998) +(@OGUID+590 , 180411, 571, 1, 1, 627.3833, -4917.144, 35.51801, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981) +(@OGUID+591 , 180411, 571, 1, 1, 594.2167, -4931.238, 21.88531, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981) +(@OGUID+592 , 180411, 571, 1, 1, 574.7415, -4943.303, 21.83569, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 3981) +(@OGUID+593 , 180411, 571, 1, 1, 2465.79, -5055.773, 303.4811, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4003) +(@OGUID+594 , 180411, 571, 1, 1, 2494.079, -5058.457, 288.5814, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4003) +(@OGUID+595 , 180411, 571, 1, 1, 3667.043, -707.4705, 220.4299, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4177) +(@OGUID+596 , 180411, 571, 1, 1, 2776.893, 930.918, 28.78174, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4152) +(@OGUID+597 , 180411, 571, 1, 1, 3842.228, 1495.968, 101.1961, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4165) +(@OGUID+598 , 180411, 571, 1, 1, 3841.892, 1477.297, 129.234, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4165) +(@OGUID+599 , 180411, 571, 1, 1, 8444.078, -340.1267, 915.4036, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4436) +(@OGUID+600 , 180411, 571, 1, 1, 6124.838, -1085.729, 407.7206, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419) +(@OGUID+601 , 180411, 571, 1, 1, 6125.659, -1090.55, 406.7731, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419) +(@OGUID+602 , 180411, 571, 1, 1, 6120.892, -1091.373, 407.3358, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419) +(@OGUID+603 , 180411, 571, 1, 1, 6120.023, -1086.642, 407.4646, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4419) +(@OGUID+604 , 180411, 571, 1, 1, 4513.346, 5709.525, 87.73186, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4122) +(@OGUID+605 , 180411, 571, 1, 1, 4180.499, 5282.511, 41.72525, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4108) +(@OGUID+606 , 180411, 571, 1, 1, 4178.446, 5281.503, 32.45599, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4108) +(@OGUID+607 , 180411, 571, 1, 1, 2805.919, 6152.53, 95.5703, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4129) +(@OGUID+608 , 180411, 571, 1, 1, 3003.288, 4049.86, 32.18251, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4113) +(@OGUID+609 , 180411, 571, 1, 1, 3436.922, 4173.982, 26.38379, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 0) +(@OGUID+610 , 180411, 571, 1, 1, 3463.541, 4143.397, 25.56423, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+611 , 180411, 571, 1, 1, 3449.526, 4133.711, 25.4326, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+612 , 180411, 571, 1, 1, 3463.864, 4158.074, 25.55934, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+613 , 180411, 571, 1, 1, 3473.609, 4133.358, 25.26127, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+614 , 180411, 571, 1, 1, 3465.659, 4191.9, 27.78839, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+615 , 180411, 571, 1, 1, 3492.3, 4170.514, 26.55492, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180411 (Area: 4043) +(@OGUID+616 , 180415, 571, 1, 1, 5231.531, -1307.568, 242.9937, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+617 , 180415, 571, 1, 1, 5231.807, -1317.45, 242.3508, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+618 , 180415, 571, 1, 1, 5232.045, -1311.97, 242.4411, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+619 , 180415, 571, 1, 1, 5228.543, -1303.112, 242.7879, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+620 , 180415, 571, 1, 1, 5223.873, -1297.311, 242.7593, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+621 , 180415, 571, 1, 1, 5219.208, -1294.684, 243.2743, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+622 , 180415, 571, 1, 1, 5219.888, -1333.076, 242.3786, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+623 , 180415, 571, 1, 1, 5214.489, -1333.5, 242.7952, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+624 , 180415, 571, 1, 1, 5200.362, -1331.64, 243.263, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+625 , 180415, 571, 1, 1, 5205.63, -1333.422, 243.3845, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 66) +(@OGUID+626 , 180415, 571, 1, 1, 5174.615, -2200.075, 237.0793, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+627 , 180415, 571, 1, 1, 5181.025, -2200.378, 238.9339, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+628 , 180415, 571, 1, 1, 5147.62, -2198.052, 237.614, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+629 , 180415, 571, 1, 1, 5179.311, -2200.378, 238.4566, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+630 , 180415, 571, 1, 1, 5147.989, -2198.857, 237.614, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+631 , 180415, 571, 1, 1, 5157.23, -2201.726, 237.5309, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+632 , 180415, 571, 1, 1, 5177.918, -2200.155, 237.9545, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+633 , 180415, 571, 1, 1, 5176.376, -2200.125, 237.5385, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+634 , 180415, 571, 1, 1, 5137.146, -2201.73, 237.8019, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+635 , 180415, 571, 1, 1, 5147.455, -2202.927, 237.0062, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+636 , 180415, 571, 1, 1, 5150.261, -2211.397, 238.8011, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+637 , 180415, 571, 1, 1, 5134.615, -2201.333, 238.8165, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+638 , 180415, 571, 1, 1, 5134.096, -2200.798, 238.8165, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+639 , 180415, 571, 1, 1, 5174.395, -2217.037, 237.1849, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+640 , 180415, 571, 1, 1, 5181.015, -2217.125, 238.9904, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+641 , 180415, 571, 1, 1, 5179.321, -2217.104, 238.5324, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+642 , 180415, 571, 1, 1, 5177.742, -2217.072, 237.9756, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+643 , 180415, 571, 1, 1, 5141.178, -2211.442, 238.1585, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+644 , 180415, 571, 1, 1, 5140.784, -2211.82, 238.1585, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+645 , 180415, 571, 1, 1, 5176.154, -2217.055, 237.5818, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4317) +(@OGUID+646 , 180415, 571, 1, 1, 5377.697, -2612.275, 305.4919, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+647 , 180415, 571, 1, 1, 5378.776, -2637.334, 304.966, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+648 , 180415, 571, 1, 1, 5446.666, -2635.141, 306.7401, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+649 , 180415, 571, 1, 1, 5443.241, -2628.945, 306.7371, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+650 , 180415, 571, 1, 1, 5444.132, -2632.507, 306.7371, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+651 , 180415, 571, 1, 1, 5446.891, -2622.866, 306.733, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+652 , 180415, 571, 1, 1, 5450.479, -2621.981, 306.7277, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+653 , 180415, 571, 1, 1, 5453.979, -2622.99, 306.5936, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+654 , 180415, 571, 1, 1, 5450.222, -2636.167, 306.739, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+655 , 180415, 571, 1, 1, 5444.251, -2625.413, 306.7368, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+656 , 180415, 571, 1, 1, 5453.774, -2635.269, 306.7326, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+657 , 180415, 571, 1, 1, 5456.549, -2625.604, 306.6074, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+658 , 180415, 571, 1, 1, 5456.413, -2632.691, 306.7231, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+659 , 180415, 571, 1, 1, 5457.469, -2629.154, 306.7375, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+660 , 180415, 571, 1, 1, 5528.001, -2665.6, 305.3742, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+661 , 180415, 571, 1, 1, 5500.662, -2662.148, 304.9659, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4275) +(@OGUID+662 , 180415, 571, 1, 1, 5763.567, -3552.541, 386.5541, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+663 , 180415, 571, 1, 1, 5768.135, -3553.175, 386.5514, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+664 , 180415, 571, 1, 1, 5750.391, -3570.385, 386.6082, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+665 , 180415, 571, 1, 1, 5776.281, -3557.164, 386.5179, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+666 , 180415, 571, 1, 1, 5762.846, -3557.929, 386.7904, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+667 , 180415, 571, 1, 1, 5775.812, -3560.629, 386.5844, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+668 , 180415, 571, 1, 1, 5757.775, -3561.603, 386.7299, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+669 , 180415, 571, 1, 1, 5776.619, -3565.798, 386.6816, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+670 , 180415, 571, 1, 1, 5776.687, -3569.371, 386.6979, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+671 , 180415, 571, 1, 1, 5773.405, -3555.642, 386.5388, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+672 , 180415, 571, 1, 1, 5769.636, -3555.544, 386.6231, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+673 , 180415, 571, 1, 1, 5752.563, -3565.215, 386.6399, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+674 , 180415, 571, 1, 1, 5775.966, -3574.389, 387.2715, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+675 , 180415, 571, 1, 1, 5760.6, -3586.51, 386.5219, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+676 , 180415, 571, 1, 1, 5748.784, -3573.642, 386.5444, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+677 , 180415, 571, 1, 1, 5765.48, -3584.281, 386.6219, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+678 , 180415, 571, 1, 1, 5755.499, -3578.478, 386.6624, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+679 , 180415, 571, 1, 1, 5768.435, -3581.585, 386.7327, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+680 , 180415, 571, 1, 1, 5772.202, -3578.392, 386.7462, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+681 , 180415, 571, 1, 1, 5759.083, -3583, 386.592, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4323) +(@OGUID+682 , 180415, 571, 1, 1, 3873.8, -4541.213, 210.1521, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+683 , 180415, 571, 1, 1, 3871.856, -4548.686, 211.1932, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+684 , 180415, 571, 1, 1, 3873.244, -4548.734, 211.219, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+685 , 180415, 571, 1, 1, 3862.183, -4548.674, 211.6033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+686 , 180415, 571, 1, 1, 3865.728, -4534.643, 211.7069, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+687 , 180415, 571, 1, 1, 3880.78, -4510.24, 218.4157, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+688 , 180415, 571, 1, 1, 3833.083, -4531.847, 213.2785, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+689 , 180415, 571, 1, 1, 3861.911, -4519.634, 211.6107, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+690 , 180415, 571, 1, 1, 3863.615, -4516.346, 214.1784, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+691 , 180415, 571, 1, 1, 3830.969, -4499.772, 206.4349, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4211) +(@OGUID+692 , 180415, 571, 1, 1, 3443.286, -2823.03, 202.9982, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+693 , 180415, 571, 1, 1, 3407.794, -2841.943, 202.67, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+694 , 180415, 571, 1, 1, 3441.109, -2824.373, 202.9075, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+695 , 180415, 571, 1, 1, 3438.945, -2825.767, 203.0237, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+696 , 180415, 571, 1, 1, 3440.277, -2818.991, 203.0136, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+697 , 180415, 571, 1, 1, 3436.816, -2827.108, 202.9122, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+698 , 180415, 571, 1, 1, 3441.738, -2820.991, 202.9215, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+699 , 180415, 571, 1, 1, 3434.637, -2828.344, 202.9919, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+700 , 180415, 571, 1, 1, 3406.82, -2839.58, 202.8193, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+701 , 180415, 571, 1, 1, 3437.037, -2814.965, 202.884, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+702 , 180415, 571, 1, 1, 3438.661, -2816.929, 203.0817, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+703 , 180415, 571, 1, 1, 3405.275, -2832.076, 202.8215, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+704 , 180415, 571, 1, 1, 3405.745, -2834.549, 202.8814, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+705 , 180415, 571, 1, 1, 3406.287, -2837.063, 202.8049, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+706 , 180415, 571, 1, 1, 3407.031, -2802.89, 212.337, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+707 , 180415, 571, 1, 1, 3444.464, -2796.757, 203.2364, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+708 , 180415, 571, 1, 1, 3400.99, -2811.019, 202.6149, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+709 , 180415, 571, 1, 1, 3413.189, -2802.605, 212.3711, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+710 , 180415, 571, 1, 1, 3415.103, -2800.74, 202.2157, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+711 , 180415, 571, 1, 1, 3400.969, -2809.62, 202.0353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+712 , 180415, 571, 1, 1, 3400.82, -2811.734, 202.7707, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+713 , 180415, 571, 1, 1, 3411.195, -2811.007, 202.0898, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+714 , 180415, 571, 1, 1, 3411.819, -2803.252, 212.5847, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+715 , 180415, 571, 1, 1, 3441.908, -2797.017, 203.1431, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+716 , 180415, 571, 1, 1, 3407.968, -2803.407, 213.5988, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+717 , 180415, 571, 1, 1, 3407.057, -2802.274, 212.4086, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+718 , 180415, 571, 1, 1, 3457.735, -2786.757, 202.8651, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+719 , 180415, 571, 1, 1, 3455.872, -2783.97, 202.7178, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+720 , 180415, 571, 1, 1, 3400.54, -2799.177, 201.4966, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+721 , 180415, 571, 1, 1, 3456.458, -2789.083, 203.3248, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+722 , 180415, 571, 1, 1, 3399.834, -2790.558, 212.2449, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+723 , 180415, 571, 1, 1, 3405.42, -2788.209, 203.0673, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+724 , 180415, 571, 1, 1, 3400.798, -2792.024, 212.3608, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+725 , 180415, 571, 1, 1, 3406.408, -2787.522, 203.0332, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+726 , 180415, 571, 1, 1, 3398.889, -2790.992, 213.4207, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+727 , 180415, 571, 1, 1, 3400.714, -2792.445, 212.2851, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+728 , 180415, 571, 1, 1, 3399.956, -2791.192, 212.2966, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+729 , 180415, 571, 1, 1, 3399.706, -2791.847, 212.3247, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+730 , 180415, 571, 1, 1, 3413.264, -2780.046, 202.9309, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+731 , 180415, 571, 1, 1, 3466.171, -2781.337, 202.358, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+732 , 180415, 571, 1, 1, 3458.188, -2776.3, 201.8077, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+733 , 180415, 571, 1, 1, 3472.556, -2782.05, 202.3065, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+734 , 180415, 571, 1, 1, 3404.212, -2786.731, 203.0216, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+735 , 180415, 571, 1, 1, 3408.607, -2785.961, 202.9851, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+736 , 180415, 571, 1, 1, 3475.129, -2782.253, 202.1459, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+737 , 180415, 571, 1, 1, 3412.443, -2783.161, 202.9973, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+738 , 180415, 571, 1, 1, 3403.424, -2785.687, 202.9964, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+739 , 180415, 571, 1, 1, 3407.591, -2786.707, 202.9976, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+740 , 180415, 571, 1, 1, 3470.033, -2781.84, 202.4652, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+741 , 180415, 571, 1, 1, 3411.324, -2783.891, 202.9264, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+742 , 180415, 571, 1, 1, 3397.692, -2789.662, 213.2649, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+743 , 180415, 571, 1, 1, 3402.704, -2784.6, 202.9906, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+744 , 180415, 571, 1, 1, 3462.118, -2779.648, 202.4681, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+745 , 180415, 571, 1, 1, 3414.508, -2781.62, 202.9946, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+746 , 180415, 571, 1, 1, 3413.529, -2782.306, 202.9957, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+747 , 180415, 571, 1, 1, 3413.155, -2777.403, 206.0491, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+748 , 180415, 571, 1, 1, 3419.603, -2772.811, 201.5641, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+749 , 180415, 571, 1, 1, 3425.753, -2769.791, 202.0575, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+750 , 180415, 571, 1, 1, 3456.768, -2774.179, 201.8534, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+751 , 180415, 571, 1, 1, 3411.746, -2778.068, 202.9529, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+752 , 180415, 571, 1, 1, 3406.269, -2781.944, 203.4021, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+753 , 180415, 571, 1, 1, 3425.471, -2770.199, 202.053, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+754 , 180415, 571, 1, 1, 3412.486, -2778.925, 202.9093, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+755 , 180415, 571, 1, 1, 3397.889, -2752.26, 201.1765, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+756 , 180415, 571, 1, 1, 3397.825, -2754.811, 201.1646, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+757 , 180415, 571, 1, 1, 3455.441, -2749.057, 200.8513, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+758 , 180415, 571, 1, 1, 3440.693, -2745.642, 200.7106, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+759 , 180415, 571, 1, 1, 3427.793, -2745.417, 200.9314, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+760 , 180415, 571, 1, 1, 3445.042, -2751.564, 199.4239, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+761 , 180415, 571, 1, 1, 3455.573, -2746.484, 200.8855, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+762 , 180415, 571, 1, 1, 3443.285, -2745.714, 200.7417, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+763 , 180415, 571, 1, 1, 3425.394, -2745.384, 200.891, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+764 , 180415, 571, 1, 1, 3445.895, -2745.695, 200.92, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+765 , 180415, 571, 1, 1, 3448.288, -2745.802, 200.9623, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+766 , 180415, 571, 1, 1, 3455.298, -2756.604, 201.076, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+767 , 180415, 571, 1, 1, 3455.351, -2754.038, 201.1146, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+768 , 180415, 571, 1, 1, 3422.8, -2745.42, 200.716, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+769 , 180415, 571, 1, 1, 3455.435, -2751.653, 201.1238, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+770 , 180415, 571, 1, 1, 3420.21, -2745.375, 200.6848, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+771 , 180415, 571, 1, 1, 3430.328, -2745.441, 200.9204, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+772 , 180415, 571, 1, 1, 3449.38, -2752.161, 199.3402, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+773 , 180415, 571, 1, 1, 3450.814, -2745.738, 201.1831, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+774 , 180415, 571, 1, 1, 3406.284, -2744.823, 200.6775, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+775 , 180415, 571, 1, 1, 3398.188, -2744.674, 200.9263, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+776 , 180415, 571, 1, 1, 3408.93, -2745.019, 200.7298, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+777 , 180415, 571, 1, 1, 3398.062, -2747.274, 200.9093, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+778 , 180415, 571, 1, 1, 3411.495, -2744.974, 200.9156, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+779 , 180415, 571, 1, 1, 3398.008, -2749.851, 201.1351, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+780 , 180415, 571, 1, 1, 3413.885, -2745.063, 200.9569, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+781 , 180415, 571, 1, 1, 3416.44, -2745.043, 200.9444, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4204) +(@OGUID+782 , 180415, 571, 1, 1, 3306.957, -2346.275, 114.2688, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+783 , 180415, 571, 1, 1, 3306.503, -2346.271, 114.2327, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+784 , 180415, 571, 1, 1, 3314.758, -2336.475, 113.8916, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+785 , 180415, 571, 1, 1, 3315.174, -2335.131, 112.3857, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+786 , 180415, 571, 1, 1, 3313.81, -2337.315, 112.3801, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+787 , 180415, 571, 1, 1, 3314.402, -2336.751, 113.8963, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4217) +(@OGUID+788 , 180415, 571, 1, 1, 3320.02, -2321.913, 114.3211, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+789 , 180415, 571, 1, 1, 3319.593, -2323.635, 112.2697, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+790 , 180415, 571, 1, 1, 3319.35, -2324.088, 112.2623, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+791 , 180415, 571, 1, 1, 3320.5, -2321.387, 114.3223, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+792 , 180415, 571, 1, 1, 3240.985, -2236.183, 117.2045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+793 , 180415, 571, 1, 1, 3240.313, -2236.637, 117.1827, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+794 , 180415, 571, 1, 1, 3255.964, -2216.654, 117.3241, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+795 , 180415, 571, 1, 1, 3250.294, -2214.309, 117.3726, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+796 , 180415, 571, 1, 1, 3266.923, -2221.398, 117.2959, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+797 , 180415, 571, 1, 1, 3273.234, -2223.792, 117.3726, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+798 , 180415, 571, 1, 1, 3253.368, -2199.88, 117.029, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+799 , 180415, 571, 1, 1, 3280.633, -2211.489, 117.029, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+800 , 180415, 571, 1, 1, 3254.062, -2187.705, 118.7545, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+801 , 180415, 571, 1, 1, 3256.237, -2188.316, 118.4933, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4206) +(@OGUID+802 , 180415, 571, 1, 1, 1904.515, -6141.503, 19.07745, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000) +(@OGUID+803 , 180415, 571, 1, 1, 1904.164, -6141.786, 19.07746, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4000) +(@OGUID+804 , 180415, 571, 1, 1, 730.0452, -2931.608, 7.921721, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+805 , 180415, 571, 1, 1, 726.9896, -2932.885, 7.942686, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+806 , 180415, 571, 1, 1, 732.6979, -2930.411, 7.924031, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+807 , 180415, 571, 1, 1, 732.0417, -2926.337, 7.959949, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+808 , 180415, 571, 1, 1, 728.4393, -2932.286, 7.933091, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+809 , 180415, 571, 1, 1, 725.5104, -2932.967, 8.092805, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+810 , 180415, 571, 1, 1, 731.3733, -2930.993, 7.925742, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+811 , 180415, 571, 1, 1, 697.434, -2944.288, -1.407539, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+812 , 180415, 571, 1, 1, 724.4271, -2926.127, 8.093702, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+813 , 180415, 571, 1, 1, 725.8629, -2925.865, 7.972515, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+814 , 180415, 571, 1, 1, 729.1215, -2926.113, 7.972516, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+815 , 180415, 571, 1, 1, 706.757, -2944.646, -1.334748, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+816 , 180415, 571, 1, 1, 727.4358, -2925.96, 7.973504, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+817 , 180415, 571, 1, 1, 730.5781, -2926.233, 7.968627, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+818 , 180415, 571, 1, 1, 694.3993, -2923.686, -1.305829, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+819 , 180415, 571, 1, 1, 704.0989, -2921.766, -1.33801, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3987) +(@OGUID+820 , 180415, 571, 1, 1, 1421.866, -3274.431, 175.8965, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+821 , 180415, 571, 1, 1, 1437.179, -3255.236, 168.5082, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+822 , 180415, 571, 1, 1, 1423.415, -3272.469, 175.8965, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+823 , 180415, 571, 1, 1, 1440.88, -3258.736, 168.5083, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+824 , 180415, 571, 1, 1, 1421.422, -3276.337, 175.8964, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+825 , 180415, 571, 1, 1, 1421.38, -3278.174, 175.8965, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+826 , 180415, 571, 1, 1, 1421.837, -3279.875, 175.8964, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+827 , 180415, 571, 1, 1, 1443.076, -3260.196, 168.5083, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+828 , 180415, 571, 1, 1, 1443.797, -3259.285, 168.5083, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+829 , 180415, 571, 1, 1, 1437.932, -3254.321, 168.5089, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+830 , 180415, 571, 1, 1, 1438.714, -3257.005, 168.5084, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+831 , 180415, 571, 1, 1, 1424.549, -3281.903, 175.8964, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+832 , 180415, 571, 1, 1, 1446.208, -3272.655, 171.3525, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+833 , 180415, 571, 1, 1, 1425.948, -3281.997, 175.8964, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+834 , 180415, 571, 1, 1, 1449.852, -3275.616, 171.3525, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+835 , 180415, 571, 1, 1, 1427.842, -3281.715, 175.8965, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+836 , 180415, 571, 1, 1, 1429.609, -3280.913, 175.8965, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+837 , 180415, 571, 1, 1, 1431.264, -3278.972, 175.8965, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+838 , 180415, 571, 1, 1, 1448.076, -3274.135, 171.3525, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+839 , 180415, 571, 1, 1, 1451.38, -3276.939, 171.3525, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3998) +(@OGUID+840 , 180415, 571, 1, 1, 607.8405, -4925.881, 24.95922, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+841 , 180415, 571, 1, 1, 608.6639, -4923.137, 31.06963, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+842 , 180415, 571, 1, 1, 606.8481, -4923.561, 31.05914, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+843 , 180415, 571, 1, 1, 592.6419, -4947.118, 27.2703, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+844 , 180415, 571, 1, 1, 601.7822, -4924.856, 31.09424, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+845 , 180415, 571, 1, 1, 592.2818, -4945.582, 27.2703, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+846 , 180415, 571, 1, 1, 602.6741, -4929.257, 22.72639, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+847 , 180415, 571, 1, 1, 607.1002, -4923.413, 24.95922, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+848 , 180415, 571, 1, 1, 601.2928, -4929.597, 22.72639, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+849 , 180415, 571, 1, 1, 599.9999, -4925.255, 31.10255, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+850 , 180415, 571, 1, 1, 604.4755, -4924.116, 24.96138, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+851 , 180415, 571, 1, 1, 592.1803, -4952.106, 27.2703, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+852 , 180415, 571, 1, 1, 591.1564, -4953.459, 27.2703, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+853 , 180415, 571, 1, 1, 605.0962, -4924.019, 31.05478, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+854 , 180415, 571, 1, 1, 592.8271, -4950.619, 27.2703, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+855 , 180415, 571, 1, 1, 603.4061, -4924.424, 31.06834, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+856 , 180415, 571, 1, 1, 601.9756, -4924.741, 24.95593, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+857 , 180415, 571, 1, 1, 595.087, -4926.527, 31.06053, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+858 , 180415, 571, 1, 1, 599.5756, -4929.97, 22.72639, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+859 , 180415, 571, 1, 1, 587.9566, -4954.577, 27.2703, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+860 , 180415, 571, 1, 1, 593.6668, -4929.349, 31.07931, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+861 , 180415, 571, 1, 1, 596.3693, -4930.906, 22.72639, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+862 , 180415, 571, 1, 1, 597.8043, -4930.463, 22.72639, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+863 , 180415, 571, 1, 1, 598.4451, -4925.653, 31.07524, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+864 , 180415, 571, 1, 1, 601.3765, -4922.399, 24.95571, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+865 , 180415, 571, 1, 1, 586.3301, -4953.981, 27.2703, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+866 , 180415, 571, 1, 1, 596.6023, -4926.172, 31.03511, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+867 , 180415, 571, 1, 1, 600.8096, -4920.225, 24.95571, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+868 , 180415, 571, 1, 1, 590.7567, -4934.542, 31.1084, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+869 , 180415, 571, 1, 1, 584.8109, -4952.982, 27.2703, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+870 , 180415, 571, 1, 1, 593.1274, -4927, 31.07476, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+871 , 180415, 571, 1, 1, 582.5004, -4947.915, 27.2703, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+872 , 180415, 571, 1, 1, 584.9875, -4936.011, 31.05981, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+873 , 180415, 571, 1, 1, 586.9916, -4935.478, 31.03452, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+874 , 180415, 571, 1, 1, 591.3271, -4919.841, 24.76182, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+875 , 180415, 571, 1, 1, 582.8868, -4949.487, 27.2703, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+876 , 180415, 571, 1, 1, 589.015, -4934.996, 31.07944, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+877 , 180415, 571, 1, 1, 589.0734, -4924.763, 19.81484, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+878 , 180415, 571, 1, 1, 582.024, -4933.135, 31.07914, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+879 , 180415, 571, 1, 1, 586.677, -4921.894, 24.03878, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+880 , 180415, 571, 1, 1, 588.6942, -4923.249, 19.81484, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+881 , 180415, 571, 1, 1, 582.4625, -4934.822, 31.0773, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+882 , 180415, 571, 1, 1, 589.4875, -4926.273, 19.81484, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 3981) +(@OGUID+883 , 180415, 571, 1, 1, 2492.693, -1907.169, 9.526185, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+884 , 180415, 571, 1, 1, 2490.183, -1883.224, 9.115799, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+885 , 180415, 571, 1, 1, 2501.102, -1882.176, 8.549006, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+886 , 180415, 571, 1, 1, 2501.947, -1893.583, 8.302938, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+887 , 180415, 571, 1, 1, 2506.74, -1900.911, 8.029154, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+888 , 180415, 571, 1, 1, 2490.393, -1897.489, 9.970935, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+889 , 180415, 571, 1, 1, 2477.013, -1901.73, 11.23512, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+890 , 180415, 571, 1, 1, 2480.636, -1898.305, 11.20697, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+891 , 180415, 571, 1, 1, 2465.555, -1903.595, 11.20657, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+892 , 180415, 571, 1, 1, 2470.907, -1903.663, 11.225, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4242) +(@OGUID+893 , 180415, 571, 1, 1, 3720.282, -703.4149, 216.9913, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+894 , 180415, 571, 1, 1, 3721.375, -700.6528, 217.3681, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+895 , 180415, 571, 1, 1, 3724.484, -697.309, 217.4367, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+896 , 180415, 571, 1, 1, 3723.878, -701.0903, 217.3764, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+897 , 180415, 571, 1, 1, 3722.675, -704.342, 217.2098, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+898 , 180415, 571, 1, 1, 3723.472, -693.4011, 217.4225, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+899 , 180415, 571, 1, 1, 3721.266, -694.7188, 217.1692, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+900 , 180415, 571, 1, 1, 3719.472, -692.0851, 217.2261, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+901 , 180415, 571, 1, 1, 3721.933, -697.5799, 217.3843, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+902 , 180415, 571, 1, 1, 3720.975, -690.0139, 217.1697, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+903 , 180415, 571, 1, 1, 3673.806, -704.4462, 215.2892, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+904 , 180415, 571, 1, 1, 3680.288, -702.743, 215.5022, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+905 , 180415, 571, 1, 1, 3663.695, -709.2948, 213.8031, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+906 , 180415, 571, 1, 1, 3662.965, -709.1875, 214.0366, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+907 , 180415, 571, 1, 1, 3663.579, -704.8941, 214.0316, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+908 , 180415, 571, 1, 1, 3664.109, -705.0291, 213.8467, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+909 , 180415, 571, 1, 1, 3657.745, -692.2751, 223.6275, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+910 , 180415, 571, 1, 1, 3660.364, -700.371, 223.6275, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+911 , 180415, 571, 1, 1, 3650.258, -699.3051, 223.6275, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+912 , 180415, 571, 1, 1, 3661.816, -704.7014, 214.8959, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+913 , 180415, 571, 1, 1, 3654.531, -691.826, 223.6275, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+914 , 180415, 571, 1, 1, 3652.8, -692.9138, 223.6275, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+915 , 180415, 571, 1, 1, 3655.83, -710.9506, 227.4323, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+916 , 180415, 571, 1, 1, 3651.423, -694.3221, 223.6275, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+917 , 180415, 571, 1, 1, 3660.504, -697.7479, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+918 , 180415, 571, 1, 1, 3662.702, -704.8438, 214.3862, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+919 , 180415, 571, 1, 1, 3660.119, -695.2737, 223.6275, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+920 , 180415, 571, 1, 1, 3658.975, -693.3618, 223.6275, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+921 , 180415, 571, 1, 1, 3650.527, -697.048, 223.6275, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+922 , 180415, 571, 1, 1, 3661.141, -709.1563, 214.8015, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+923 , 180415, 571, 1, 1, 3646.771, -712.575, 216.1448, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+924 , 180415, 571, 1, 1, 3639.381, -715.8611, 227.3913, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+925 , 180415, 571, 1, 1, 3655.505, -714.1703, 227.4361, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+926 , 180415, 571, 1, 1, 3643.311, -713.7602, 227.4366, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+927 , 180415, 571, 1, 1, 3649.78, -710.2109, 227.4335, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+928 , 180415, 571, 1, 1, 3650.835, -720.3264, 216.1421, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+929 , 180415, 571, 1, 1, 3641.055, -711.5729, 218.9725, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+930 , 180415, 571, 1, 1, 3642.938, -716.2329, 227.4314, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+931 , 180415, 571, 1, 1, 3656.18, -720.6285, 216.1422, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+932 , 180415, 571, 1, 1, 3662.277, -709.184, 214.3835, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+933 , 180415, 571, 1, 1, 3653.458, -720.2587, 216.1421, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+934 , 180415, 571, 1, 1, 3620.047, -714.6027, 227.4171, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+935 , 180415, 571, 1, 1, 3630.439, -711.8963, 215.451, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+936 , 180415, 571, 1, 1, 3628.625, -714.6279, 221.3164, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+937 , 180415, 571, 1, 1, 3647.266, -723.0741, 220.1831, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+938 , 180415, 571, 1, 1, 3628.823, -712.1104, 221.3164, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+939 , 180415, 571, 1, 1, 3636.598, -710.9913, 218.9725, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+940 , 180415, 571, 1, 1, 3642.31, -722.2473, 220.5441, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+941 , 180415, 571, 1, 1, 3646.166, -718.1907, 216.172, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+942 , 180415, 571, 1, 1, 3635.955, -715.3896, 227.4597, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+943 , 180415, 571, 1, 1, 3639.688, -711.3333, 218.9725, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+944 , 180415, 571, 1, 1, 3633.46, -719.8217, 221.3129, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+945 , 180415, 571, 1, 1, 3632.302, -715.0294, 227.4236, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+946 , 180415, 571, 1, 1, 3630.115, -714.7449, 215.4509, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+947 , 180415, 571, 1, 1, 3633.867, -715.2915, 221.3129, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+948 , 180415, 571, 1, 1, 3628.883, -714.4942, 227.4169, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+949 , 180415, 571, 1, 1, 3629.475, -717.1203, 215.4509, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+950 , 180415, 571, 1, 1, 3635.079, -710.8333, 218.9725, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+951 , 180415, 571, 1, 1, 3645.829, -721.221, 216.172, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+952 , 180415, 571, 1, 1, 3619.787, -716.7102, 227.4115, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4177) +(@OGUID+953 , 180415, 571, 1, 1, 3539.074, 246.8349, 45.82254, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+954 , 180415, 571, 1, 1, 3560.01, 248.8549, 45.83335, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+955 , 180415, 571, 1, 1, 3549.851, 245.3113, 45.88549, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+956 , 180415, 571, 1, 1, 3520.715, 280.9288, 45.78613, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+957 , 180415, 571, 1, 1, 3564.364, 294.3126, 45.82972, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+958 , 180415, 571, 1, 1, 3526.05, 290.625, 45.8017, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+959 , 180415, 571, 1, 1, 3529.681, 251.9887, 45.82568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+960 , 180415, 571, 1, 1, 3570.418, 286.1223, 45.8264, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+961 , 180415, 571, 1, 1, 3534.023, 297.516, 45.87384, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+962 , 180415, 571, 1, 1, 3573.903, 275.7938, 45.8153, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+963 , 180415, 571, 1, 1, 3572.999, 265.1364, 45.80965, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+964 , 180415, 571, 1, 1, 3585.963, 283.0799, 48.30828, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+965 , 180415, 571, 1, 1, 3554.604, 299.7266, 45.90679, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+966 , 180415, 571, 1, 1, 3568.259, 255.9597, 45.78259, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+967 , 180415, 571, 1, 1, 3587.122, 271.1111, 48.3845, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+968 , 180415, 571, 1, 1, 3522.922, 260.132, 45.7541, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+969 , 180415, 571, 1, 1, 3596.911, 271.6074, 52.12251, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+970 , 180415, 571, 1, 1, 3519.316, 270.3384, 45.87571, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+971 , 180415, 571, 1, 1, 3595.522, 284.4653, 52.2077, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+972 , 180415, 571, 1, 1, 3544.37, 301.0424, 45.87925, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4161) +(@OGUID+973 , 180415, 571, 1, 1, 3453.492, 2004.011, 66.48942, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+974 , 180415, 571, 1, 1, 3451.072, 2013.826, 67.11924, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+975 , 180415, 571, 1, 1, 3460.914, 1999.812, 64.96242, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+976 , 180415, 571, 1, 1, 3450.717, 2005.431, 66.47033, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+977 , 180415, 571, 1, 1, 3464.852, 2005.66, 65.63439, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+978 , 180415, 571, 1, 1, 3457.145, 2001.683, 65.88113, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+979 , 180415, 571, 1, 1, 3457.17, 2010.24, 67.18584, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+980 , 180415, 571, 1, 1, 3461.157, 2007.909, 66.50739, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+981 , 180415, 571, 1, 1, 3447.548, 2007.21, 66.4343, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+982 , 180415, 571, 1, 1, 3454.485, 2011.974, 67.24349, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+983 , 180415, 571, 1, 1, 3485.54, 1982.056, 66.64336, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+984 , 180415, 571, 1, 1, 3491.24, 1972.217, 66.67846, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+985 , 180415, 571, 1, 1, 3484.478, 1982.79, 66.10648, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+986 , 180415, 571, 1, 1, 3486.18, 1980.53, 66.75633, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+987 , 180415, 571, 1, 1, 3488.036, 1984.502, 66.5727, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+988 , 180415, 571, 1, 1, 3488.738, 1974.252, 66.48361, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+989 , 180415, 571, 1, 1, 3486.124, 1985.773, 66.13934, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+990 , 180415, 571, 1, 1, 3489.454, 1972.877, 66.5388, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+991 , 180415, 571, 1, 1, 3486.32, 1978.385, 66.64598, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+992 , 180415, 571, 1, 1, 3484.899, 1984.623, 66.13567, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+993 , 180415, 571, 1, 1, 3490.6, 1973.335, 66.56937, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+994 , 180415, 571, 1, 1, 3486.279, 1984.052, 66.72491, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+995 , 180415, 571, 1, 1, 3488.017, 1982.2, 69.24107, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+996 , 180415, 571, 1, 1, 3496.877, 1986.814, 66.14459, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+997 , 180415, 571, 1, 1, 3499.981, 1976.101, 66.6926, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+998 , 180415, 571, 1, 1, 3498.515, 1987.265, 66.15958, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+999 , 180415, 571, 1, 1, 3494.6, 1971.783, 69.21862, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1000, 180415, 571, 1, 1, 3498.208, 1985.489, 66.55852, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1001, 180415, 571, 1, 1, 3492.497, 1984.687, 66.91064, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1002, 180415, 571, 1, 1, 3499.862, 1974.142, 66.74924, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1003, 180415, 571, 1, 1, 3499.545, 1986.568, 66.14841, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1004, 180415, 571, 1, 1, 3497.163, 1972.785, 67.83695, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1005, 180415, 571, 1, 1, 3498.545, 1983.968, 66.78958, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1006, 180415, 571, 1, 1, 3499.741, 1984.807, 66.1551, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1007, 180415, 571, 1, 1, 3496.604, 1985.285, 66.52729, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1008, 180415, 571, 1, 1, 3490.234, 1984.203, 66.76582, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1009, 180415, 571, 1, 1, 3494.507, 1985.543, 66.86245, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1010, 180415, 571, 1, 1, 3492.613, 1987.125, 66.18999, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1011, 180415, 571, 1, 1, 3498.044, 1971.96, 67.97525, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1012, 180415, 571, 1, 1, 3500.235, 1977.234, 66.79019, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4158) +(@OGUID+1013, 180415, 571, 1, 1, 8446.374, -338.7054, 906.5311, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1014, 180415, 571, 1, 1, 8441.133, -333.9722, 906.3853, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1015, 180415, 571, 1, 1, 8449.194, -340.0696, 906.42, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1016, 180415, 571, 1, 1, 8438.914, -336.882, 906.3645, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1017, 180415, 571, 1, 1, 8450.9, -342.7731, 906.4547, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1018, 180415, 571, 1, 1, 8436.891, -329.9302, 906.4619, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1019, 180415, 571, 1, 1, 8440.131, -331.5573, 906.4849, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1020, 180415, 571, 1, 1, 8443.484, -341.0681, 906.538, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4436) +(@OGUID+1021, 180415, 571, 1, 1, 8438.455, -346.809, 906.3992, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484) +(@OGUID+1022, 180415, 571, 1, 1, 8434.126, -342.7607, 906.3992, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4484) +(@OGUID+1023, 180415, 571, 1, 1, 6135.286, -1087.107, 403.996, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1024, 180415, 571, 1, 1, 6135.75, -1082.272, 403.9787, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1025, 180415, 571, 1, 1, 6131.089, -1077.924, 404.0315, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1026, 180415, 571, 1, 1, 6124.53, -1100.04, 404.1576, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1027, 180415, 571, 1, 1, 6129.471, -1100.338, 404.0967, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1028, 180415, 571, 1, 1, 6134.075, -1100.798, 404.0411, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1029, 180415, 571, 1, 1, 6135.558, -1078.466, 403.9826, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1030, 180415, 571, 1, 1, 6135.308, -1092.608, 404.0045, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1031, 180415, 571, 1, 1, 6135.531, -1097.868, 403.998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1032, 180415, 571, 1, 1, 6128.174, -1077.363, 404.1137, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1033, 180415, 571, 1, 1, 6114.59, -1100.005, 404.2581, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1034, 180415, 571, 1, 1, 6119.64, -1099.892, 404.2052, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1035, 180415, 571, 1, 1, 6117.122, -1080.053, 403.8957, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1036, 180415, 571, 1, 1, 6110.035, -1085.667, 404.2946, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1037, 180415, 571, 1, 1, 6116.569, -1077.83, 403.8956, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1038, 180415, 571, 1, 1, 6110.022, -1094.398, 404.3128, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1039, 180415, 571, 1, 1, 6113.951, -1077.961, 403.9418, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1040, 180415, 571, 1, 1, 6109.78, -1099.722, 404.3831, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1041, 180415, 571, 1, 1, 6109.548, -1083.051, 404.3193, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1042, 180415, 571, 1, 1, 6108.985, -1078.398, 404.2991, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4419) +(@OGUID+1043, 180415, 571, 1, 1, 6665.15, -200.775, 950.982, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1044, 180415, 571, 1, 1, 6667.429, -202.9508, 950.2484, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1045, 180415, 571, 1, 1, 6670.192, -202.2401, 950.4054, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1046, 180415, 571, 1, 1, 6676.213, -197.9583, 951.1501, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1047, 180415, 571, 1, 1, 6676.812, -200.8755, 951.2551, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1048, 180415, 571, 1, 1, 6671.391, -199.7399, 951.0316, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1049, 180415, 571, 1, 1, 6671.051, -196.6817, 951.0138, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1050, 180415, 571, 1, 1, 6666.553, -195.6487, 951.7457, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1051, 180415, 571, 1, 1, 6680.188, -200.7511, 955.8945, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1052, 180415, 571, 1, 1, 6664.639, -197.5128, 951.639, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4428) +(@OGUID+1053, 180415, 571, 1, 1, 5534.743, 5748.256, -76.63572, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1054, 180415, 571, 1, 1, 5543.521, 5771.278, -76.01951, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1055, 180415, 571, 1, 1, 5523.451, 5778.276, -78.78996, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1056, 180415, 571, 1, 1, 5543.232, 5771.354, -76.01951, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1057, 180415, 571, 1, 1, 5525.911, 5782.684, -78.17769, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1058, 180415, 571, 1, 1, 5555.896, 5763.036, -76.68411, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1059, 180415, 571, 1, 1, 5552.697, 5767.842, -75.99409, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1060, 180415, 571, 1, 1, 5557.079, 5767.963, -77.05219, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1061, 180415, 571, 1, 1, 5557.415, 5769.394, -76.74715, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1062, 180415, 571, 1, 1, 5589.266, 5819.588, -69.22645, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1063, 180415, 571, 1, 1, 5585.25, 5746.126, -71.12965, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1064, 180415, 571, 1, 1, 5589.826, 5820.498, -69.06834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1065, 180415, 571, 1, 1, 5598.222, 5811.789, -69.80727, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1066, 180415, 571, 1, 1, 5608.288, 5809.12, -70.3611, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1067, 180415, 571, 1, 1, 5629.481, 5831.32, -63.68258, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1068, 180415, 571, 1, 1, 5624.22, 5848.555, -62.23083, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1069, 180415, 571, 1, 1, 5624.355, 5836.35, -64.11382, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1070, 180415, 571, 1, 1, 5615.792, 5854.673, -61.52033, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1071, 180415, 571, 1, 1, 5617.778, 5835.836, -64.42644, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1072, 180415, 571, 1, 1, 5621.542, 5839.372, -63.8798, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1073, 180415, 571, 1, 1, 5620.175, 5851.535, -61.9314, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1074, 180415, 571, 1, 1, 5617.97, 5842.27, -63.73035, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1075, 180415, 571, 1, 1, 5631.269, 5841.848, -62.78385, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1076, 180415, 571, 1, 1, 5614.699, 5845.393, -63.52262, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1077, 180415, 571, 1, 1, 5628.023, 5845.315, -62.64318, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1078, 180415, 571, 1, 1, 5599.996, 5811.131, -69.81374, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1079, 180415, 571, 1, 1, 5610.43, 5848.424, -63.39353, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1080, 180415, 571, 1, 1, 5609.851, 5840.359, -64.56908, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4285) +(@OGUID+1081, 180415, 571, 1, 1, 5638.223, 5830.514, -63.40969, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284) +(@OGUID+1082, 180415, 571, 1, 1, 5635.809, 5835.991, -63.02237, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4284) +(@OGUID+1083, 180415, 571, 1, 1, 5512.584, 4747.444, -194.4338, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1084, 180415, 571, 1, 1, 5476.778, 4745.321, -195.5257, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1085, 180415, 571, 1, 1, 5509.279, 4742.423, -194.4338, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1086, 180415, 571, 1, 1, 5498.675, 4751.812, -194.4338, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1087, 180415, 571, 1, 1, 5503.33, 4741.617, -194.4338, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1088, 180415, 571, 1, 1, 5504.156, 4755.996, -194.4338, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1089, 180415, 571, 1, 1, 5498.581, 4745.667, -194.4338, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1090, 180415, 571, 1, 1, 5477.044, 4749.278, -195.3024, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1091, 180415, 571, 1, 1, 5510.276, 4753.492, -194.4338, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1092, 180415, 571, 1, 1, 5485.467, 4727.866, -194.3498, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4290) +(@OGUID+1093, 180415, 571, 1, 1, 4472.118, 5710.065, 81.82111, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1094, 180415, 571, 1, 1, 4475.728, 5707.702, 81.28061, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1095, 180415, 571, 1, 1, 4474.857, 5707.663, 81.27406, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1096, 180415, 571, 1, 1, 4470.187, 5711.333, 81.82111, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4123) +(@OGUID+1097, 180415, 571, 1, 1, 4502.521, 5716.321, 83.2894, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1098, 180415, 571, 1, 1, 4501.978, 5716.594, 83.29294, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1099, 180415, 571, 1, 1, 4512.208, 5702.231, 82.31032, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1100, 180415, 571, 1, 1, 4508.148, 5720.678, 81.53056, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1101, 180415, 571, 1, 1, 4508.037, 5721.736, 81.52561, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1102, 180415, 571, 1, 1, 4511.359, 5702.256, 82.3114, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4122) +(@OGUID+1103, 180415, 571, 1, 1, 4175.995, 5285.556, 39.60876, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1104, 180415, 571, 1, 1, 4174.72, 5282.509, 40.74071, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1105, 180415, 571, 1, 1, 4182.015, 5285.288, 40.89171, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1106, 180415, 571, 1, 1, 4176.526, 5277.981, 41.3796, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1107, 180415, 571, 1, 1, 4182.998, 5284, 40.91432, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1108, 180415, 571, 1, 1, 4175.992, 5278.304, 40.8171, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1109, 180415, 571, 1, 1, 4174.827, 5281.086, 40.75976, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1110, 180415, 571, 1, 1, 4181.757, 5280.178, 39.78754, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1111, 180415, 571, 1, 1, 4177.348, 5277.492, 40.8917, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1112, 180415, 571, 1, 1, 4176.902, 5277.699, 41.40043, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4108) +(@OGUID+1113, 180415, 571, 1, 1, 2816.064, 6140.755, 84.60281, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1114, 180415, 571, 1, 1, 2817.546, 6142.036, 84.77279, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1115, 180415, 571, 1, 1, 2808.348, 6133.652, 84.35007, 4.71239, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1116, 180415, 571, 1, 1, 2814.547, 6139.239, 84.48197, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1117, 180415, 571, 1, 1, 2813.243, 6137.908, 84.43053, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1118, 180415, 571, 1, 1, 2811.692, 6136.515, 84.40427, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1119, 180415, 571, 1, 1, 2809.904, 6135.145, 84.37815, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1120, 180415, 571, 1, 1, 2806.884, 6132.39, 84.32622, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1121, 180415, 571, 1, 1, 2787.17, 6166.139, 84.44685, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1122, 180415, 571, 1, 1, 2785.56, 6164.665, 84.41692, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1123, 180415, 571, 1, 1, 2784.033, 6163.104, 84.38836, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1124, 180415, 571, 1, 1, 2791.778, 6170.236, 84.69099, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1125, 180415, 571, 1, 1, 2790.21, 6168.888, 84.58121, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1126, 180415, 571, 1, 1, 2788.624, 6167.527, 84.47393, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1127, 180415, 571, 1, 1, 2781.09, 6160.348, 84.3336, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1128, 180415, 571, 1, 1, 2779.682, 6158.85, 84.30719, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1129, 180415, 571, 1, 1, 2805.326, 6131.063, 84.3011, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1130, 180415, 571, 1, 1, 2791.639, 6139.96, 84.81071, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1131, 180415, 571, 1, 1, 2803.804, 6129.789, 84.27695, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1132, 180415, 571, 1, 1, 2782.543, 6161.761, 84.36069, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1133, 180415, 571, 1, 1, 2788.538, 6143.428, 84.79273, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1134, 180415, 571, 1, 1, 2776.865, 6126.743, 91.12935, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1135, 180415, 571, 1, 1, 2788.898, 6137.514, 86.33366, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1136, 180415, 571, 1, 1, 2774.129, 6129.736, 91.13658, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1137, 180415, 571, 1, 1, 2780.254, 6135.889, 89.43606, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1138, 180415, 571, 1, 1, 2785.656, 6141.002, 86.35069, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1139, 180415, 571, 1, 1, 2778.103, 6157.446, 84.27789, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1140, 180415, 571, 1, 1, 2781.07, 6130.521, 90.43552, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1141, 180415, 571, 1, 1, 2785.955, 6135.013, 87.93523, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1142, 180415, 571, 1, 1, 2777.994, 6133.772, 90.43637, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1143, 180415, 571, 1, 1, 2782.876, 6138.491, 87.9035, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1144, 180415, 571, 1, 1, 2783.253, 6132.512, 89.46143, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1145, 180415, 571, 1, 1, 2779.491, 6129.215, 90.78801, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1146, 180415, 571, 1, 1, 2776.609, 6132.236, 90.81976, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1147, 180415, 571, 1, 1, 2772.306, 6123.107, 91.52767, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1148, 180415, 571, 1, 1, 2768.484, 6124.985, 97.70737, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1149, 180415, 571, 1, 1, 2771.088, 6121.854, 97.64502, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1150, 180415, 571, 1, 1, 2771.566, 6127.16, 91.71031, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1151, 180415, 571, 1, 1, 2773.846, 6124.534, 91.67098, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1152, 180415, 571, 1, 1, 2769.93, 6125.85, 91.52602, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4129) +(@OGUID+1153, 180415, 571, 1, 1, 2297.869, 5280.106, 13.11051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1154, 180415, 571, 1, 1, 2292.861, 5276.689, 13.39523, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1155, 180415, 571, 1, 1, 2292.751, 5278.278, 13.39523, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1156, 180415, 571, 1, 1, 2293.383, 5279.647, 13.39523, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1157, 180415, 571, 1, 1, 2295.305, 5274.703, 13.39523, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1158, 180415, 571, 1, 1, 2291.743, 5276.248, 13.28105, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1159, 180415, 571, 1, 1, 2293.839, 5275.374, 13.39523, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1160, 180415, 571, 1, 1, 2293.025, 5274.428, 13.18383, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1161, 180415, 571, 1, 1, 2298.755, 5278.823, 13.17301, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1162, 180415, 571, 1, 1, 2298.857, 5277.28, 13.15912, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1163, 180415, 571, 1, 1, 2269.472, 5199.901, 11.49839, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1164, 180415, 571, 1, 1, 2270.224, 5199.647, 11.84797, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1165, 180415, 571, 1, 1, 2267.266, 5195.724, 11.25468, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1166, 180415, 571, 1, 1, 2271.104, 5199.311, 12.33314, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1167, 180415, 571, 1, 1, 2262.667, 5194.889, 14.41752, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1168, 180415, 571, 1, 1, 2269.422, 5194.798, 12.2818, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1169, 180415, 571, 1, 1, 2268.748, 5200.188, 11.23592, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1170, 180415, 571, 1, 1, 2264.628, 5203.938, 12.71451, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1171, 180415, 571, 1, 1, 2268.505, 5195.202, 11.93541, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1172, 180415, 571, 1, 1, 2267.729, 5195.542, 11.41191, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1173, 180415, 571, 1, 1, 2269.927, 5181.998, 20.93, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1174, 180415, 571, 1, 1, 2288.382, 5209.055, 17.64837, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1175, 180415, 571, 1, 1, 2268.734, 5184.522, 20.88139, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1176, 180415, 571, 1, 1, 2271.566, 5188.706, 20.67995, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1177, 180415, 571, 1, 1, 2271.873, 5189.512, 21.19639, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1178, 180415, 571, 1, 1, 2272.297, 5190.432, 21.74726, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1179, 180415, 571, 1, 1, 2292.874, 5206.81, 17.99297, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1180, 180415, 571, 1, 1, 2288.034, 5203.917, 13.63426, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1181, 180415, 571, 1, 1, 2289.651, 5198.8, 24.89842, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1182, 180415, 571, 1, 1, 2285.987, 5198.663, 13.60694, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1183, 180415, 571, 1, 1, 2289.193, 5206.791, 13.63426, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1184, 180415, 571, 1, 1, 2277.729, 5188.15, 21.78212, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1185, 180415, 571, 1, 1, 2300.695, 5202.11, 18.77489, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1186, 180415, 571, 1, 1, 2277.347, 5187.327, 21.23565, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1187, 180415, 571, 1, 1, 2299.122, 5197.798, 18.77534, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1188, 180415, 571, 1, 1, 2276.96, 5186.483, 20.70242, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1189, 180415, 571, 1, 1, 2303.15, 5193.464, 18.77864, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1190, 180415, 571, 1, 1, 2273.479, 5180.935, 20.96472, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1191, 180415, 571, 1, 1, 2304.057, 5195.878, 18.77864, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1192, 180415, 571, 1, 1, 2275.646, 5181.717, 21.01333, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4032) +(@OGUID+1193, 180415, 571, 1, 1, 3000.993, 4068.12, 30.11452, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1194, 180415, 571, 1, 1, 3014.259, 4067.539, 31.04936, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1195, 180415, 571, 1, 1, 3001.769, 4049.21, 26.07964, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1196, 180415, 571, 1, 1, 3007.144, 4059.308, 26.76467, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1197, 180415, 571, 1, 1, 3003.417, 4061.542, 26.18109, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1198, 180415, 571, 1, 1, 3003.007, 4059.802, 26.62822, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1199, 180415, 571, 1, 1, 3007.312, 4061.112, 26.29614, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1200, 180415, 571, 1, 1, 3003.312, 4060.399, 26.59323, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1201, 180415, 571, 1, 1, 3007.251, 4060.04, 26.53866, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1202, 180415, 571, 1, 1, 3004.535, 4048.617, 26.07964, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1203, 180415, 571, 1, 1, 2862.335, 4038.781, 5.057745, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1204, 180415, 571, 1, 1, 2860.901, 4036.917, 10.936, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1205, 180415, 571, 1, 1, 2863.556, 4030.712, 10.90262, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1206, 180415, 571, 1, 1, 2870.361, 4032.718, 5.063904, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1207, 180415, 571, 1, 1, 2874.672, 4034.085, 5.337824, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1208, 180415, 571, 1, 1, 2871.422, 4041.642, 5.131527, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1209, 180415, 571, 1, 1, 2866.514, 4040.803, 5.103539, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1210, 180415, 571, 1, 1, 2865.706, 4030.687, 5.018806, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1211, 180415, 571, 1, 1, 2852.11, 4024.6, 5.079292, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1212, 180415, 571, 1, 1, 2834.966, 4027.097, 5.066519, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1213, 180415, 571, 1, 1, 2857.513, 4036.657, 5.022579, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1214, 180415, 571, 1, 1, 2847.389, 4022.759, 5.015669, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1215, 180415, 571, 1, 1, 2848.344, 4032.73, 5.091734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1216, 180415, 571, 1, 1, 2839.194, 4028.807, 5.034027, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1217, 180415, 571, 1, 1, 2861.214, 4028.713, 4.992302, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1218, 180415, 571, 1, 1, 2853.19, 4035.031, 5.072161, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1219, 180415, 571, 1, 1, 2844.015, 4030.81, 5.057843, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1220, 180415, 571, 1, 1, 2842.966, 4020.906, 4.97491, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1221, 180415, 571, 1, 1, 2856.586, 4026.636, 5.041717, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1222, 180415, 571, 1, 1, 2838.301, 4018.869, 5.02294, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4113) +(@OGUID+1223, 180415, 571, 1, 1, 3434.656, 4170.812, 14.18469, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1224, 180415, 571, 1, 1, 3436.351, 4170.699, 14.72765, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1225, 180415, 571, 1, 1, 3434.991, 4175.841, 14.25499, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1226, 180415, 571, 1, 1, 3437.776, 4170.405, 15.33066, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1227, 180415, 571, 1, 1, 3436.812, 4175.733, 14.72314, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 0) +(@OGUID+1228, 180415, 571, 1, 1, 3438.13, 4175.703, 15.35011, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1229, 180415, 571, 1, 1, 3439.169, 4170.2, 15.85179, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1230, 180415, 571, 1, 1, 3439.449, 4175.608, 15.88088, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1231, 180415, 571, 1, 1, 3441.065, 4175.682, 16.57793, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1232, 180415, 571, 1, 1, 3441.056, 4170.128, 16.49479, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1233, 180415, 571, 1, 1, 3460.127, 4139.347, 15.29107, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1234, 180415, 571, 1, 1, 3460.05, 4142.877, 16.52606, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1235, 180415, 571, 1, 1, 3465.668, 4142.377, 16.36272, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1236, 180415, 571, 1, 1, 3460.073, 4138.049, 15.04643, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1237, 180415, 571, 1, 1, 3459.941, 4140.769, 15.82715, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1238, 180415, 571, 1, 1, 3465.849, 4140.417, 15.76362, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1239, 180415, 571, 1, 1, 3458.424, 4132.354, 17.18105, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1240, 180415, 571, 1, 1, 3465.589, 4138.927, 15.2921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1241, 180415, 571, 1, 1, 3458.859, 4132.616, 17.19908, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1242, 180415, 571, 1, 1, 3465.348, 4137.641, 15.11139, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1243, 180415, 571, 1, 1, 3491.878, 4167.745, 15.70641, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1244, 180415, 571, 1, 1, 3490.802, 4173.49, 16.09687, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1245, 180415, 571, 1, 1, 3493.248, 4167.78, 15.00927, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1246, 180415, 571, 1, 1, 3490.705, 4167.838, 16.1151, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1247, 180415, 571, 1, 1, 3497.003, 4167.765, 13.85431, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1248, 180415, 571, 1, 1, 3497.161, 4173.208, 13.8974, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1249, 180415, 571, 1, 1, 3495.283, 4173.163, 14.59191, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1250, 180415, 571, 1, 1, 3493.558, 4173.144, 15.14168, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1251, 180415, 571, 1, 1, 3495.103, 4167.599, 14.42155, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1252, 180415, 571, 1, 1, 3492.093, 4173.33, 15.54947, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 180415 (Area: 4043) +(@OGUID+1253, 180472, 571, 1, 1, 5202.763, -1310.045, 247.7712, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66) +(@OGUID+1254, 180472, 571, 1, 1, 5205.405, -1316.248, 247.7859, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66) +(@OGUID+1255, 180472, 571, 1, 1, 5196.807, -1312.714, 247.8102, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66) +(@OGUID+1256, 180472, 571, 1, 1, 5198.6, -1318.504, 247.8461, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 66) +(@OGUID+1257, 180472, 571, 1, 1, 3842.744, -4550, 214.0861, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1258, 180472, 571, 1, 1, 3877.871, -4502.53, 218.5026, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1259, 180472, 571, 1, 1, 3843.904, -4545.311, 213.8107, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1260, 180472, 571, 1, 1, 3839.872, -4542.153, 213.6485, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1261, 180472, 571, 1, 1, 3872.773, -4503.769, 218.4031, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1262, 180472, 571, 1, 1, 3869.185, -4499.854, 218.2175, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211) +(@OGUID+1263, 180472, 571, 1, 1, 3870.929, -4494.531, 218.1595, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211) +(@OGUID+1264, 180472, 571, 1, 1, 3879.285, -4497.91, 218.7872, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211) +(@OGUID+1265, 180472, 571, 1, 1, 3876.223, -4493.979, 218.6851, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4211) +(@OGUID+1266, 180472, 571, 1, 1, 2671.557, -4386.672, 291.2738, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4065) +(@OGUID+1267, 180472, 571, 1, 1, 2676.202, -4381.061, 290.9279, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4065) +(@OGUID+1268, 180472, 571, 1, 1, 422.7614, -4514.731, 254.5068, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991) +(@OGUID+1269, 180472, 571, 1, 1, 422.1116, -4519.995, 254.5345, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991) +(@OGUID+1270, 180472, 571, 1, 1, 416.6321, -4519.402, 254.5415, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991) +(@OGUID+1271, 180472, 571, 1, 1, 417.3981, -4513.884, 254.597, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3991) +(@OGUID+1272, 180472, 571, 1, 1, 723.5851, -2929.853, 11.01728, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987) +(@OGUID+1273, 180472, 571, 1, 1, 695.5886, -2934.49, 3.196574, 0, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987) +(@OGUID+1274, 180472, 571, 1, 1, 811.0573, -2915.457, 17.58987, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3987) +(@OGUID+1275, 180472, 571, 1, 1, 1421.413, -3278.163, 182.3756, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1276, 180472, 571, 1, 1, 1423.51, -3272.448, 182.0631, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1277, 180472, 571, 1, 1, 1422.446, -3281.979, 181.9594, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1278, 180472, 571, 1, 1, 1426.693, -3282.785, 182.3478, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1279, 180472, 571, 1, 1, 1431.63, -3279.372, 182.0839, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3998) +(@OGUID+1280, 180472, 571, 1, 1, 639.705, -5012.253, 8.629839, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1281, 180472, 571, 1, 1, 592.1059, -4952.096, 34.07586, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1282, 180472, 571, 1, 1, 610.4792, -4920.491, 22.26099, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1283, 180472, 571, 1, 1, 586.1684, -4953.842, 33.8328, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1284, 180472, 571, 1, 1, 596.9149, -5010.774, 7.315163, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1285, 180472, 571, 1, 1, 580.2164, -4941.878, 23.65312, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1286, 180472, 571, 1, 1, 548.9089, -5022.439, 15.06125, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 3981) +(@OGUID+1287, 180472, 571, 1, 1, 2472.567, -5063.961, 290.0428, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4003) +(@OGUID+1288, 180472, 571, 1, 1, 2472.634, -5068.495, 290.1004, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4003) +(@OGUID+1289, 180472, 571, 1, 1, 2546.96, -1842.127, 15.45883, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1290, 180472, 571, 1, 1, 2492.571, -1926.668, 18.88001, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1291, 180472, 571, 1, 1, 2492.924, -1957.088, 19.6185, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1292, 180472, 571, 1, 1, 2497.964, -1933.934, 18.74674, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1293, 180472, 571, 1, 1, 2548.99, -1836.533, 16.33319, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1294, 180472, 571, 1, 1, 2470.893, -1923.861, 19.63781, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1295, 180472, 571, 1, 1, 2492.745, -1840.021, 15.76282, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1296, 180472, 571, 1, 1, 2558.018, -1829.936, 16.32347, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1297, 180472, 571, 1, 1, 2563.788, -1830.118, 15.46013, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4242) +(@OGUID+1298, 180472, 571, 1, 1, 3654.827, -701.1371, 229.9562, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177) +(@OGUID+1299, 180472, 571, 1, 1, 3660.257, -706.6854, 219.9831, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177) +(@OGUID+1300, 180472, 571, 1, 1, 3650.975, -716.6632, 220.7892, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177) +(@OGUID+1301, 180472, 571, 1, 1, 3624.304, -716.2471, 218.5354, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4177) +(@OGUID+1302, 180472, 571, 1, 1, 3472.093, 1983.797, 70.11913, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4158) +(@OGUID+1303, 180472, 571, 1, 1, 3475.918, 2008.681, 70.16867, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4158) +(@OGUID+1304, 180472, 571, 1, 1, 3842.197, 1512.92, 103.3451, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4165) +(@OGUID+1305, 180472, 571, 1, 1, 7777.079, -2831.855, 1230.241, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1306, 180472, 571, 1, 1, 7776.125, -2826.765, 1230.253, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 0) +(@OGUID+1307, 180472, 571, 1, 1, 7799.851, -2952.78, 1268.356, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4441) +(@OGUID+1308, 180472, 571, 1, 1, 7809.275, -2957.787, 1268.587, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4441) +(@OGUID+1309, 180472, 571, 1, 1, 6133.882, -1074.452, 408.0246, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4419) +(@OGUID+1310, 180472, 571, 1, 1, 6122.911, -1073.775, 408.7633, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4419) +(@OGUID+1311, 180472, 571, 1, 1, 6111.259, -1074.321, 408.5562, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4419) +(@OGUID+1312, 180472, 571, 1, 1, 6676.293, -199.2238, 957.2843, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4428) +(@OGUID+1313, 180472, 571, 1, 1, 5550.766, 5732.24, -72.42144, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285) +(@OGUID+1314, 180472, 571, 1, 1, 5543.742, 5736.505, -72.40427, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285) +(@OGUID+1315, 180472, 571, 1, 1, 5545.069, 5730.92, -72.33108, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285) +(@OGUID+1316, 180472, 571, 1, 1, 5549.416, 5737.876, -72.36977, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285) +(@OGUID+1317, 180472, 571, 1, 1, 5563.28, 5767.702, -68.84998, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285) +(@OGUID+1318, 180472, 571, 1, 1, 5570.772, 5774.083, -68.8186, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285) +(@OGUID+1319, 180472, 571, 1, 1, 5577.149, 5766.814, -68.80267, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285) +(@OGUID+1320, 180472, 571, 1, 1, 5569.961, 5760.628, -68.76757, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4285) +(@OGUID+1321, 180472, 571, 1, 1, 5482.561, 4728.407, -190.2393, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4290) +(@OGUID+1322, 180472, 571, 1, 1, 4496.243, 5710.914, 87.39838, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4123) +(@OGUID+1323, 180472, 571, 1, 1, 4504.742, 5718.78, 88.16618, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4122) +(@OGUID+1324, 180472, 571, 1, 1, 4510.791, 5692.819, 87.46987, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4122) +(@OGUID+1325, 180472, 571, 1, 1, 4514.077, 5725.089, 87.45109, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4122) +(@OGUID+1326, 180472, 571, 1, 1, 4528.651, 5707.221, 87.4934, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4122) +(@OGUID+1327, 180472, 571, 1, 1, 4166.699, 5280.941, 32.17652, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4108) +(@OGUID+1328, 180472, 571, 1, 1, 2816.226, 6166.392, 93.11073, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4129) +(@OGUID+1329, 180472, 571, 1, 1, 2271.969, 5196.342, 17.54031, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4032) +(@OGUID+1330, 180472, 571, 1, 1, 2283.616, 5204.792, 18.22377, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4032) +(@OGUID+1331, 180472, 571, 1, 1, 2275.164, 5189.711, 27.38649, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4032) +(@OGUID+1332, 180472, 571, 1, 1, 3463.354, 4178.378, 23.5975, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4043) +(@OGUID+1333, 180472, 571, 1, 1, 3467.106, 4178.543, 23.5734, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180472 (Area: 4043) +(@OGUID+1334, 180425, 571, 1, 1, 5220.801, -1312.929, 242.096, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1335, 180425, 571, 1, 1, 5219.449, -1310.885, 242.0745, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1336, 180425, 571, 1, 1, 5231.815, -1317.981, 242.3635, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1337, 180425, 571, 1, 1, 5231.988, -1321.641, 242.3571, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1338, 180425, 571, 1, 1, 5233.578, -1319.166, 242.3319, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1339, 180425, 571, 1, 1, 5220.486, -1314.131, 242.052, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1340, 180425, 571, 1, 1, 5218.222, -1315.866, 241.8938, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1341, 180425, 571, 1, 1, 5220.872, -1331.886, 242.2099, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1342, 180425, 571, 1, 1, 5222.452, -1332.75, 242.4185, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1343, 180425, 571, 1, 1, 5213.813, -1299.402, 242.4057, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1344, 180425, 571, 1, 1, 5221.667, -1334.106, 242.3032, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1345, 180425, 571, 1, 1, 5219.712, -1332.302, 242.2887, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1346, 180425, 571, 1, 1, 5214.818, -1299.522, 242.3706, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 66) +(@OGUID+1347, 180425, 571, 1, 1, 5763.354, -3564.075, 387.949, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323) +(@OGUID+1348, 180425, 571, 1, 1, 5765.062, -3566.035, 388.1909, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323) +(@OGUID+1349, 180425, 571, 1, 1, 5766.175, -3563.893, 387.8907, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4323) +(@OGUID+1350, 180425, 571, 1, 1, 3407.464, -2802.637, 212.434, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+1351, 180425, 571, 1, 1, 3412.858, -2802.222, 212.7033, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+1352, 180425, 571, 1, 1, 3408.691, -2804.216, 212.4176, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+1353, 180425, 571, 1, 1, 3400.027, -2790.777, 212.3845, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+1354, 180425, 571, 1, 1, 3397.131, -2788.776, 212.3823, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+1355, 180425, 571, 1, 1, 3398.373, -2790.181, 212.3858, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 0) +(@OGUID+1356, 180425, 571, 1, 1, 1904.425, -6141.741, 19.07745, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4000) +(@OGUID+1357, 180425, 571, 1, 1, 605.681, -4923.877, 19.09374, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+1358, 180425, 571, 1, 1, 606.3546, -4926.564, 19.09381, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+1359, 180425, 571, 1, 1, 587.7562, -4951.589, 27.65986, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+1360, 180425, 571, 1, 1, 582.8324, -4936.509, 31.0752, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+1361, 180425, 571, 1, 1, 581.9504, -4926.806, 19.88217, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 3981) +(@OGUID+1362, 180425, 571, 1, 1, 5564.997, 5765.261, -74.12132, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285) +(@OGUID+1363, 180425, 571, 1, 1, 5587.477, 5747.581, -71.46241, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285) +(@OGUID+1364, 180425, 571, 1, 1, 5587.182, 5750.653, -71.4938, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285) +(@OGUID+1365, 180425, 571, 1, 1, 5589.738, 5741.145, -69.95851, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180425 (Area: 4285) +(@OGUID+1366, 180426, 571, 1, 1, 5759.534, -3544.033, 396.188, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1367, 180426, 571, 1, 1, 5761.476, -3543.627, 394.9244, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1368, 180426, 571, 1, 1, 5760.164, -3544.849, 397.1731, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1369, 180426, 571, 1, 1, 5759.306, -3545.708, 394.7601, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1370, 180426, 571, 1, 1, 5761.338, -3545.427, 398.2059, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1371, 180426, 571, 1, 1, 3856.363, -4541.962, 219.7176, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1372, 180426, 571, 1, 1, 3854.806, -4539.307, 220.7594, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1373, 180426, 571, 1, 1, 3856.938, -4540.484, 224.4462, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1374, 180426, 571, 1, 1, 3854.925, -4535.948, 222.5168, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1375, 180426, 571, 1, 1, 3857.097, -4538.585, 223.1828, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1376, 180426, 571, 1, 1, 4590.376, -4234.787, 193.9518, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159) +(@OGUID+1377, 180426, 571, 1, 1, 4590.996, -4232.708, 196.9146, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159) +(@OGUID+1378, 180426, 571, 1, 1, 4588.499, -4235.377, 199.5923, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4159) +(@OGUID+1379, 180426, 571, 1, 1, 3413.123, -2821.453, 213.0589, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1380, 180426, 571, 1, 1, 3408.973, -2821.946, 212.8639, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1381, 180426, 571, 1, 1, 3406.235, -2823.066, 211.4089, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1382, 180426, 571, 1, 1, 3407.286, -2820.172, 209.3393, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1383, 180426, 571, 1, 1, 3407.906, -2825.792, 214.426, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1384, 180426, 571, 1, 1, 3444.409, -2768.932, 208.7122, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1385, 180426, 571, 1, 1, 3442.279, -2768.483, 208.9515, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1386, 180426, 571, 1, 1, 3446.616, -2769.13, 209.847, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1387, 180426, 571, 1, 1, 3442.672, -2767.101, 211.0916, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4204) +(@OGUID+1388, 180426, 571, 1, 1, 3441.674, -2765.563, 210.9066, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4204) +(@OGUID+1389, 180426, 571, 1, 1, 3255.571, -2257.918, 124.4686, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4248) +(@OGUID+1390, 180426, 571, 1, 1, 3261.756, -2252.54, 130.7128, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1391, 180426, 571, 1, 1, 3255.756, -2251.26, 124.3831, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1392, 180426, 571, 1, 1, 3245.001, -2244.356, 130.5014, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1393, 180426, 571, 1, 1, 3245.857, -2254.095, 131.8804, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1394, 180426, 571, 1, 1, 3249.491, -2250.945, 125.1241, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1395, 180426, 571, 1, 1, 3242.157, -2246.462, 133.1835, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1396, 180426, 571, 1, 1, 3251.072, -2245.957, 127.2621, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1397, 180426, 571, 1, 1, 3253.139, -2253.7, 124.5425, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1398, 180426, 571, 1, 1, 3258.291, -2247.109, 125.9945, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4206) +(@OGUID+1399, 180426, 571, 1, 1, 2665.021, -4365.307, 293.8361, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065) +(@OGUID+1400, 180426, 571, 1, 1, 2659.459, -4361.625, 304.2402, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065) +(@OGUID+1401, 180426, 571, 1, 1, 2660.582, -4368.252, 294.3411, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065) +(@OGUID+1402, 180426, 571, 1, 1, 2671.556, -4363.807, 296.0383, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4065) +(@OGUID+1403, 180426, 571, 1, 1, 762.1302, -2923.717, 34.17405, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+1404, 180426, 571, 1, 1, 761.934, -2924.54, 36.54957, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+1405, 180426, 571, 1, 1, 767.8195, -2920.502, 33.86417, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+1406, 180426, 571, 1, 1, 759.9549, -2911.951, 42.32548, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+1407, 180426, 571, 1, 1, 766.9323, -2913.224, 34.78922, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+1408, 180426, 571, 1, 1, 753.5833, -2915.382, 46.25695, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+1409, 180426, 571, 1, 1, 769.243, -2910.061, 45.63573, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+1410, 180426, 571, 1, 1, 755.2222, -2907.67, 46.01165, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3987) +(@OGUID+1411, 180426, 571, 1, 1, 1445.891, -3264.745, 200.1135, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+1412, 180426, 571, 1, 1, 1426.741, -3276.997, 203.4877, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+1413, 180426, 571, 1, 1, 1437.927, -3264.418, 201.1698, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+1414, 180426, 571, 1, 1, 1453.434, -3267.578, 204.6001, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+1415, 180426, 571, 1, 1, 1453.021, -3271.075, 202.1549, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3998) +(@OGUID+1416, 180426, 571, 1, 1, 585.0469, -4935.894, 57.77173, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+1417, 180426, 571, 1, 1, 584.2552, -4927.658, 53.76381, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+1418, 180426, 571, 1, 1, 586.4132, -4924.658, 54.59381, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+1419, 180426, 571, 1, 1, 579.7292, -4928.83, 52.11523, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+1420, 180426, 571, 1, 1, 582.1268, -4925.632, 54.62183, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 3981) +(@OGUID+1421, 180426, 571, 1, 1, 2474.248, -5056.83, 313.3344, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003) +(@OGUID+1422, 180426, 571, 1, 1, 2485.361, -5057.889, 309.7409, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003) +(@OGUID+1423, 180426, 571, 1, 1, 2484.832, -5065.577, 312.5736, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003) +(@OGUID+1424, 180426, 571, 1, 1, 2496.339, -5058.946, 314.3534, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003) +(@OGUID+1425, 180426, 571, 1, 1, 2494.715, -5066.793, 317.6408, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4003) +(@OGUID+1426, 180426, 571, 1, 1, 3677.996, -706.5052, 228.3673, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177) +(@OGUID+1427, 180426, 571, 1, 1, 3677.367, -707.6371, 229.6971, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177) +(@OGUID+1428, 180426, 571, 1, 1, 3678.253, -708.9809, 226.644, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177) +(@OGUID+1429, 180426, 571, 1, 1, 3676.219, -710.4948, 225.2403, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177) +(@OGUID+1430, 180426, 571, 1, 1, 3676.188, -708.6979, 224.8116, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4177) +(@OGUID+1431, 180426, 571, 1, 1, 2785.015, 901.6146, 48.99309, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152) +(@OGUID+1432, 180426, 571, 1, 1, 2783.98, 899.7049, 45.72382, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152) +(@OGUID+1433, 180426, 571, 1, 1, 2782.839, 900.9566, 42.67208, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152) +(@OGUID+1434, 180426, 571, 1, 1, 2784.394, 900.7917, 45.83669, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152) +(@OGUID+1435, 180426, 571, 1, 1, 2785.267, 900.8837, 44.81691, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152) +(@OGUID+1436, 180426, 571, 1, 1, 2791.718, 899.5538, 46.09661, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4152) +(@OGUID+1437, 180426, 571, 1, 1, 3476.73, 2003.599, 73.99326, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4158) +(@OGUID+1438, 180426, 571, 1, 1, 3478.633, 2003.365, 74.23189, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4158) +(@OGUID+1439, 180426, 571, 1, 1, 3477.792, 2004.891, 73.60688, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4158) +(@OGUID+1440, 180426, 571, 1, 1, 3832.804, 1582.106, 131.3168, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165) +(@OGUID+1441, 180426, 571, 1, 1, 3834.938, 1583.884, 120.4484, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165) +(@OGUID+1442, 180426, 571, 1, 1, 3833.898, 1575.861, 122.9623, 0, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165) +(@OGUID+1443, 180426, 571, 1, 1, 3832.198, 1579.66, 132.7393, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165) +(@OGUID+1444, 180426, 571, 1, 1, 3832.526, 1581.196, 115.3859, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165) +(@OGUID+1445, 180426, 571, 1, 1, 3828.906, 1584.929, 118.9345, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4165) +(@OGUID+1446, 180426, 571, 1, 1, 8451.43, -327.9097, 914.515, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436) +(@OGUID+1447, 180426, 571, 1, 1, 8455.598, -326.3663, 917.7674, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436) +(@OGUID+1448, 180426, 571, 1, 1, 8452.833, -325.8889, 914.8189, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436) +(@OGUID+1449, 180426, 571, 1, 1, 8453.292, -324.0052, 920.886, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436) +(@OGUID+1450, 180426, 571, 1, 1, 8455.642, -323.2222, 920.7881, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4436) +(@OGUID+1451, 180426, 571, 1, 1, 7844.746, -767.5608, 1191.334, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1452, 180426, 571, 1, 1, 7842.545, -767.6215, 1194.276, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1453, 180426, 571, 1, 1, 7852.141, -767.2952, 1195.834, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1454, 180426, 571, 1, 1, 7848.913, -766.7743, 1195.129, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1455, 180426, 571, 1, 1, 7846.739, -767.25, 1197.022, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1456, 180426, 571, 1, 1, 7784.639, -2821.964, 1236.108, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1457, 180426, 571, 1, 1, 7787.075, -2819.984, 1232.689, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1458, 180426, 571, 1, 1, 7785.59, -2818.872, 1223.526, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1459, 180426, 571, 1, 1, 7786.157, -2818.262, 1232.046, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1460, 180426, 571, 1, 1, 7786.893, -2823.276, 1229.596, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 0) +(@OGUID+1461, 180426, 571, 1, 1, 7809.587, -2948.196, 1286.938, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441) +(@OGUID+1462, 180426, 571, 1, 1, 7808.482, -2948.068, 1278.769, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441) +(@OGUID+1463, 180426, 571, 1, 1, 7811.129, -2948.326, 1271.424, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441) +(@OGUID+1464, 180426, 571, 1, 1, 7809.795, -2948.993, 1281.115, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441) +(@OGUID+1465, 180426, 571, 1, 1, 7809.976, -2947.82, 1273.044, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4441) +(@OGUID+1466, 180426, 571, 1, 1, 6124.135, -1068.075, 411.8809, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419) +(@OGUID+1467, 180426, 571, 1, 1, 6122.108, -1068.535, 420.491, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419) +(@OGUID+1468, 180426, 571, 1, 1, 6123.244, -1067.774, 409.9026, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419) +(@OGUID+1469, 180426, 571, 1, 1, 6122.385, -1067.681, 413.6337, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419) +(@OGUID+1470, 180426, 571, 1, 1, 6122.577, -1068.896, 413.7191, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4419) +(@OGUID+1471, 180426, 571, 1, 1, 6669.006, -214.7808, 958.1622, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428) +(@OGUID+1472, 180426, 571, 1, 1, 6664.553, -212.3703, 959.6836, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428) +(@OGUID+1473, 180426, 571, 1, 1, 6666.44, -213.5402, 956.314, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428) +(@OGUID+1474, 180426, 571, 1, 1, 6664.914, -213.9151, 950.6545, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428) +(@OGUID+1475, 180426, 571, 1, 1, 6666.836, -214.4378, 958.3149, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4428) +(@OGUID+1476, 180426, 571, 1, 1, 5567.995, 5752.299, -62.10584, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285) +(@OGUID+1477, 180426, 571, 1, 1, 5568.181, 5751.221, -65.01084, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285) +(@OGUID+1478, 180426, 571, 1, 1, 5568.765, 5752.361, -63.27361, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285) +(@OGUID+1479, 180426, 571, 1, 1, 5568.257, 5751.483, -56.20333, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285) +(@OGUID+1480, 180426, 571, 1, 1, 5567.479, 5751.587, -63.41621, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285) +(@OGUID+1481, 180426, 571, 1, 1, 5568.979, 5751.631, -64.44835, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285) +(@OGUID+1482, 180426, 571, 1, 1, 5568.839, 5751.018, -65.4025, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4285) +(@OGUID+1483, 180426, 571, 1, 1, 4499.143, 5724.713, 94.13822, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122) +(@OGUID+1484, 180426, 571, 1, 1, 4498.088, 5725.452, 96.62789, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122) +(@OGUID+1485, 180426, 571, 1, 1, 4500.556, 5723.295, 96.2418, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122) +(@OGUID+1486, 180426, 571, 1, 1, 4500.435, 5726.292, 99.393, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122) +(@OGUID+1487, 180426, 571, 1, 1, 4499.346, 5726.276, 93.53715, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4122) +(@OGUID+1488, 180426, 571, 1, 1, 4157.167, 5280.416, 44.40583, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108) +(@OGUID+1489, 180426, 571, 1, 1, 4156.833, 5281.772, 41.02469, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108) +(@OGUID+1490, 180426, 571, 1, 1, 4158.027, 5280.627, 37.15991, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108) +(@OGUID+1491, 180426, 571, 1, 1, 4154.264, 5279.829, 46.06804, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108) +(@OGUID+1492, 180426, 571, 1, 1, 4155.604, 5278.076, 34.83815, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4108) +(@OGUID+1493, 180426, 571, 1, 1, 2257.031, 5204.031, 24.98001, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032) +(@OGUID+1494, 180426, 571, 1, 1, 2254.734, 5204.108, 23.51893, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032) +(@OGUID+1495, 180426, 571, 1, 1, 2257.891, 5202.354, 23.84128, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032) +(@OGUID+1496, 180426, 571, 1, 1, 2255.429, 5202.67, 27.84299, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032) +(@OGUID+1497, 180426, 571, 1, 1, 2254.955, 5201.296, 28.10752, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4032) +(@OGUID+1498, 180426, 571, 1, 1, 3005.91, 4082.433, 33.96024, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113) +(@OGUID+1499, 180426, 571, 1, 1, 3008.585, 4082.515, 34.65242, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113) +(@OGUID+1500, 180426, 571, 1, 1, 3010.312, 4081.898, 33.98342, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113) +(@OGUID+1501, 180426, 571, 1, 1, 3007.68, 4082.023, 37.0425, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113) +(@OGUID+1502, 180426, 571, 1, 1, 3008.446, 4080.726, 38.37628, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 180426 (Area: 4113) +(@OGUID+1503, 180427, 571, 1, 1, 5761.307, -3544.524, 395.4309, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1504, 180427, 571, 1, 1, 5760.497, -3546.056, 402.0221, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1505, 180427, 571, 1, 1, 5759.438, -3544.823, 396.8367, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1506, 180427, 571, 1, 1, 5760.398, -3543.224, 397.3958, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1507, 180427, 571, 1, 1, 5760.684, -3547.167, 398.6145, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1508, 180427, 571, 1, 1, 3853.183, -4534.543, 222.1418, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1509, 180427, 571, 1, 1, 3852.957, -4539.858, 219.1484, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1510, 180427, 571, 1, 1, 3856.241, -4539.436, 221.1546, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1511, 180427, 571, 1, 1, 3854.542, -4540.624, 227.1623, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1512, 180427, 571, 1, 1, 3856.855, -4536.955, 221.3848, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1513, 180427, 571, 1, 1, 4589.936, -4232.887, 187.0824, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159) +(@OGUID+1514, 180427, 571, 1, 1, 4590.229, -4234.215, 186.7581, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159) +(@OGUID+1515, 180427, 571, 1, 1, 4590.728, -4233.71, 184.4032, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4159) +(@OGUID+1516, 180427, 571, 1, 1, 3408.324, -2823.502, 209.3464, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1517, 180427, 571, 1, 1, 3406.425, -2821.385, 209.7437, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1518, 180427, 571, 1, 1, 3410.176, -2822.778, 209.1109, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1519, 180427, 571, 1, 1, 3409.967, -2820.047, 210.1583, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1520, 180427, 571, 1, 1, 3407.021, -2824.786, 209.5089, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1521, 180427, 571, 1, 1, 3447.131, -2770.391, 210.325, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1522, 180427, 571, 1, 1, 3444.766, -2768.226, 210.0436, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1523, 180427, 571, 1, 1, 3444.436, -2767.122, 211.3138, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204) +(@OGUID+1524, 180427, 571, 1, 1, 3441.46, -2766.443, 210.7611, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204) +(@OGUID+1525, 180427, 571, 1, 1, 3446.277, -2767.188, 208.8508, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4204) +(@OGUID+1526, 180427, 571, 1, 1, 3251.26, -2253.675, 124.9079, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1527, 180427, 571, 1, 1, 3251.778, -2250.464, 129.6705, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1528, 180427, 571, 1, 1, 3247.308, -2252, 130.7534, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1529, 180427, 571, 1, 1, 3254.531, -2247.668, 129.1577, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1530, 180427, 571, 1, 1, 3252.336, -2248.873, 122.8677, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1531, 180427, 571, 1, 1, 3255.591, -2250.547, 129.6846, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1532, 180427, 571, 1, 1, 3241.862, -2241.349, 122.2494, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1533, 180427, 571, 1, 1, 3248.178, -2245.37, 125.104, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1534, 180427, 571, 1, 1, 3247.814, -2247.866, 124.5073, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1535, 180427, 571, 1, 1, 3245.019, -2248.802, 122.5996, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4206) +(@OGUID+1536, 180427, 571, 1, 1, 2663.781, -4367.163, 302.1978, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065) +(@OGUID+1537, 180427, 571, 1, 1, 2667.21, -4368.415, 300.2386, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065) +(@OGUID+1538, 180427, 571, 1, 1, 2660.796, -4362.103, 307.4751, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4065) +(@OGUID+1539, 180427, 571, 1, 1, 768.6163, -2922.156, 38.30094, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+1540, 180427, 571, 1, 1, 762.2813, -2920.307, 44.85577, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+1541, 180427, 571, 1, 1, 767.7639, -2914.931, 50.20907, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+1542, 180427, 571, 1, 1, 771.118, -2914.354, 33.8317, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+1543, 180427, 571, 1, 1, 764.632, -2912.734, 28.99734, 0, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+1544, 180427, 571, 1, 1, 764.7379, -2907.014, 42.12639, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3987) +(@OGUID+1545, 180427, 571, 1, 1, 1448.717, -3267.089, 201.6755, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+1546, 180427, 571, 1, 1, 1450.106, -3254.806, 202.5467, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+1547, 180427, 571, 1, 1, 1432.74, -3253.945, 209.4203, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+1548, 180427, 571, 1, 1, 1460.863, -3277.345, 207.5119, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+1549, 180427, 571, 1, 1, 1461.863, -3264.878, 201.965, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3998) +(@OGUID+1550, 180427, 571, 1, 1, 586.9097, -4944.667, 47.7813, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+1551, 180427, 571, 1, 1, 587.7552, -4923.743, 55.51563, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+1552, 180427, 571, 1, 1, 584.0382, -4927.713, 53.33385, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+1553, 180427, 571, 1, 1, 586.8472, -4927.104, 56.76656, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+1554, 180427, 571, 1, 1, 576.6077, -4929.509, 55.73938, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 3981) +(@OGUID+1555, 180427, 571, 1, 1, 2473.661, -5056.833, 313.4054, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003) +(@OGUID+1556, 180427, 571, 1, 1, 2484.688, -5057.96, 311.5289, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003) +(@OGUID+1557, 180427, 571, 1, 1, 2496.554, -5058.851, 314.3859, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003) +(@OGUID+1558, 180427, 571, 1, 1, 2485.07, -5065.702, 312.3187, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003) +(@OGUID+1559, 180427, 571, 1, 1, 2494.877, -5066.533, 313.6038, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4003) +(@OGUID+1560, 180427, 571, 1, 1, 3678.568, -707.9114, 225.9042, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177) +(@OGUID+1561, 180427, 571, 1, 1, 3677.82, -709.7309, 223.8333, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177) +(@OGUID+1562, 180427, 571, 1, 1, 3677.2, -708.3906, 226.7975, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177) +(@OGUID+1563, 180427, 571, 1, 1, 3676.558, -707.3646, 227.4937, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177) +(@OGUID+1564, 180427, 571, 1, 1, 3676.709, -706.5208, 226.6307, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4177) +(@OGUID+1565, 180427, 571, 1, 1, 2788.414, 901.0035, 36.56704, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4152) +(@OGUID+1566, 180427, 571, 1, 1, 2785.122, 899.9236, 47.7719, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4152) +(@OGUID+1567, 180427, 571, 1, 1, 2777.589, 900.8507, 38.11501, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4152) +(@OGUID+1568, 180427, 571, 1, 1, 2781.267, 897.5538, 39.2057, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4152) +(@OGUID+1569, 180427, 571, 1, 1, 3478.735, 2004.005, 74.2953, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4158) +(@OGUID+1570, 180427, 571, 1, 1, 3477.231, 2002.613, 75.02769, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4158) +(@OGUID+1571, 180427, 571, 1, 1, 3477.298, 2003.34, 75.31145, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4158) +(@OGUID+1572, 180427, 571, 1, 1, 3827.1, 1578.188, 128.2818, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165) +(@OGUID+1573, 180427, 571, 1, 1, 3830.623, 1585.576, 119.5804, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165) +(@OGUID+1574, 180427, 571, 1, 1, 3828.786, 1575.78, 123.5387, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165) +(@OGUID+1575, 180427, 571, 1, 1, 3835.45, 1577.592, 123.1637, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165) +(@OGUID+1576, 180427, 571, 1, 1, 3826.248, 1582.507, 126.0943, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165) +(@OGUID+1577, 180427, 571, 1, 1, 3835.907, 1582.106, 112.2748, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4165) +(@OGUID+1578, 180427, 571, 1, 1, 8456.487, -325.2882, 919.9067, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436) +(@OGUID+1579, 180427, 571, 1, 1, 8455.944, -329.2031, 921.132, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436) +(@OGUID+1580, 180427, 571, 1, 1, 8453.988, -324.809, 919.7067, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436) +(@OGUID+1581, 180427, 571, 1, 1, 8454.191, -327.691, 920.1603, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436) +(@OGUID+1582, 180427, 571, 1, 1, 8456.37, -323.9236, 922.8885, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4436) +(@OGUID+1583, 180427, 571, 1, 1, 7843.921, -768.7327, 1192.044, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1584, 180427, 571, 1, 1, 7850.358, -768.4479, 1195.303, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1585, 180427, 571, 1, 1, 7845.897, -769.2344, 1196.449, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1586, 180427, 571, 1, 1, 7849.522, -769.5695, 1199.962, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1587, 180427, 571, 1, 1, 7848.237, -768.1614, 1194.201, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1588, 180427, 571, 1, 1, 7784.186, -2819.071, 1242.727, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1589, 180427, 571, 1, 1, 7785.482, -2818.214, 1235.832, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1590, 180427, 571, 1, 1, 7784.766, -2818.804, 1243.944, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1591, 180427, 571, 1, 1, 7786.441, -2820.347, 1243.845, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 0) +(@OGUID+1592, 180427, 571, 1, 1, 7809.966, -2947.446, 1282.999, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4441) +(@OGUID+1593, 180427, 571, 1, 1, 7808.862, -2947.845, 1287.751, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4441) +(@OGUID+1594, 180427, 571, 1, 1, 7810.013, -2948.613, 1278.556, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4441) +(@OGUID+1595, 180427, 571, 1, 1, 6124.222, -1067.016, 412.4096, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419) +(@OGUID+1596, 180427, 571, 1, 1, 6123.186, -1068.443, 417.4877, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419) +(@OGUID+1597, 180427, 571, 1, 1, 6121.662, -1067.535, 412.6524, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419) +(@OGUID+1598, 180427, 571, 1, 1, 6122.928, -1067.632, 413.933, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419) +(@OGUID+1599, 180427, 571, 1, 1, 6123.296, -1066.87, 411.8166, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4419) +(@OGUID+1600, 180427, 571, 1, 1, 6667.715, -213.3303, 956.631, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428) +(@OGUID+1601, 180427, 571, 1, 1, 6669.567, -213.4681, 959.522, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428) +(@OGUID+1602, 180427, 571, 1, 1, 6668.282, -214.2138, 957.4736, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428) +(@OGUID+1603, 180427, 571, 1, 1, 6666.536, -212.2774, 960.9269, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428) +(@OGUID+1604, 180427, 571, 1, 1, 6668.823, -212.848, 958.5125, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4428) +(@OGUID+1605, 180427, 571, 1, 1, 5567.438, 5750.866, -63.57895, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285) +(@OGUID+1606, 180427, 571, 1, 1, 5566.66, 5750.427, -61.74266, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285) +(@OGUID+1607, 180427, 571, 1, 1, 5567.792, 5750.745, -66.3998, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285) +(@OGUID+1608, 180427, 571, 1, 1, 5567.268, 5752.111, -65.63297, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285) +(@OGUID+1609, 180427, 571, 1, 1, 5568.124, 5751.938, -64.30065, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285) +(@OGUID+1610, 180427, 571, 1, 1, 5566.167, 5751.143, -59.03475, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285) +(@OGUID+1611, 180427, 571, 1, 1, 5569.404, 5750.22, -68.71603, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4285) +(@OGUID+1612, 180427, 571, 1, 1, 4497.501, 5724.35, 92.66317, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122) +(@OGUID+1613, 180427, 571, 1, 1, 4499.618, 5724.213, 92.10083, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122) +(@OGUID+1614, 180427, 571, 1, 1, 4498.766, 5723.341, 92.95933, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122) +(@OGUID+1615, 180427, 571, 1, 1, 4500.167, 5725.043, 93.06795, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122) +(@OGUID+1616, 180427, 571, 1, 1, 4498.657, 5724.655, 94.03511, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4122) +(@OGUID+1617, 180427, 571, 1, 1, 4155.36, 5279.535, 41.24209, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108) +(@OGUID+1618, 180427, 571, 1, 1, 4155.128, 5281.559, 43.11319, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108) +(@OGUID+1619, 180427, 571, 1, 1, 4158.647, 5282.077, 43.25044, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108) +(@OGUID+1620, 180427, 571, 1, 1, 4157.104, 5278.291, 42.53542, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108) +(@OGUID+1621, 180427, 571, 1, 1, 4155.704, 5276.774, 34.64015, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4108) +(@OGUID+1622, 180427, 571, 1, 1, 2254.229, 5202.443, 25.58039, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032) +(@OGUID+1623, 180427, 571, 1, 1, 2255.703, 5204.931, 32.91465, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032) +(@OGUID+1624, 180427, 571, 1, 1, 2253.278, 5203.004, 26.03876, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032) +(@OGUID+1625, 180427, 571, 1, 1, 2253.696, 5204.979, 23.99093, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032) +(@OGUID+1626, 180427, 571, 1, 1, 2256.316, 5206.545, 25.55317, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4032) +(@OGUID+1627, 180427, 571, 1, 1, 3007.375, 4081.898, 36.05743, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113) +(@OGUID+1628, 180427, 571, 1, 1, 3009.335, 4081.919, 33.73442, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113) +(@OGUID+1629, 180427, 571, 1, 1, 3009.694, 4083.431, 32.96307, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113) +(@OGUID+1630, 180427, 571, 1, 1, 3006.938, 4083.318, 34.42048, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113) +(@OGUID+1631, 180427, 571, 1, 1, 3009.286, 4080.991, 33.72022, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 180427 (Area: 4113) +(@OGUID+1632, 180471, 571, 1, 1, 5204.491, -1317.474, 246.2982, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66) +(@OGUID+1633, 180471, 571, 1, 1, 5204.556, -1311.417, 246.2742, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66) +(@OGUID+1634, 180471, 571, 1, 1, 5197.808, -1310.934, 246.395, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66) +(@OGUID+1635, 180471, 571, 1, 1, 5197.694, -1316.509, 246.3158, 0, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 66) +(@OGUID+1636, 180471, 571, 1, 1, 3199.965, -2298.588, 111.0376, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4248) +(@OGUID+1637, 180471, 571, 1, 1, 1900.167, -6132.452, 23.4388, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+1638, 180471, 571, 1, 1, 1902.965, -6131.993, 23.66091, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+1639, 180471, 571, 1, 1, 1898.609, -6134.413, 23.38325, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+1640, 180471, 571, 1, 1, 1900.699, -6138.649, 23.68888, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+1641, 180471, 571, 1, 1, 1905.079, -6133.762, 23.68171, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+1642, 180471, 571, 1, 1, 1903.922, -6138.372, 23.43309, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+1643, 180471, 571, 1, 1, 1905.227, -6136.752, 23.46658, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+1644, 180471, 571, 1, 1, 1899.095, -6137.361, 23.69575, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4060) +(@OGUID+1645, 180471, 571, 1, 1, 588.3511, -4940.63, 23.00664, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981) +(@OGUID+1646, 180471, 571, 1, 1, 587.6937, -4938.055, 22.97886, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981) +(@OGUID+1647, 180471, 571, 1, 1, 584.658, -4926.464, 22.94742, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981) +(@OGUID+1648, 180471, 571, 1, 1, 585.3281, -4928.837, 22.95987, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 3981) +(@OGUID+1649, 180471, 571, 1, 1, 3661.782, -704.7066, 218.3424, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177) +(@OGUID+1650, 180471, 571, 1, 1, 3661.339, -709.0174, 218.379, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177) +(@OGUID+1651, 180471, 571, 1, 1, 3651.781, -708.625, 219.3715, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177) +(@OGUID+1652, 180471, 571, 1, 1, 3652.332, -704.342, 219.3648, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4177) +(@OGUID+1653, 180471, 571, 1, 1, 3579.464, 251.9427, 52.88466, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+1654, 180471, 571, 1, 1, 3575.279, 246.6563, 52.87777, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+1655, 180471, 571, 1, 1, 3523.501, 237.7691, 52.94661, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+1656, 180471, 571, 1, 1, 3517.737, 242.4236, 52.90497, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+1657, 180471, 571, 1, 1, 3512.637, 297, 52.89811, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+1658, 180471, 571, 1, 1, 3517.312, 302.6024, 52.912, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+1659, 180471, 571, 1, 1, 3568.188, 304.9097, 52.96114, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+1660, 180471, 571, 1, 1, 3573.999, 300.1875, 52.88476, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4161) +(@OGUID+1661, 180471, 571, 1, 1, 3480.169, 1977.233, 70.1636, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158) +(@OGUID+1662, 180471, 571, 1, 1, 3484.095, 2013.983, 69.28771, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158) +(@OGUID+1663, 180471, 571, 1, 1, 3506.038, 1986.319, 68.24009, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4158) +(@OGUID+1664, 180471, 571, 1, 1, 4508.732, 5716.75, 84.35536, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122) +(@OGUID+1665, 180471, 571, 1, 1, 4506.331, 5715.979, 85.08492, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122) +(@OGUID+1666, 180471, 571, 1, 1, 4506.083, 5715.355, 84.23188, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122) +(@OGUID+1667, 180471, 571, 1, 1, 4508.761, 5717.552, 85.0927, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4122) +(@OGUID+1668, 180471, 571, 1, 1, 2869.387, 6211.827, 213.7105, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4020) +(@OGUID+1669, 180471, 571, 1, 1, 2867.295, 6213.874, 213.6728, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4020) +(@OGUID+1670, 180471, 571, 1, 1, 2816.863, 6165.138, 90.56039, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+1671, 180471, 571, 1, 1, 2814.848, 6167.205, 90.52396, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+1672, 180471, 571, 1, 1, 2791.958, 6145.722, 91.96442, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+1673, 180471, 571, 1, 1, 2793.936, 6143.066, 92.17467, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+1674, 180471, 571, 1, 1, 2769.591, 6124.062, 95.95924, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+1675, 180471, 571, 1, 1, 2770.471, 6122.91, 95.92594, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4129) +(@OGUID+1676, 180471, 571, 1, 1, 2278.516, 5192.333, 16.84088, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4032) +(@OGUID+1677, 180471, 571, 1, 1, 2280.049, 5196.121, 16.84082, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4032) +(@OGUID+1678, 180471, 571, 1, 1, 3003.927, 4062.122, 33.84514, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+1679, 180471, 571, 1, 1, 3006.915, 4061.78, 33.92781, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+1680, 180471, 571, 1, 1, 3006.462, 4067.487, 34.17837, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+1681, 180471, 571, 1, 1, 3026.681, 4045.708, 28.72306, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+1682, 180471, 571, 1, 1, 3005.008, 4059.406, 34.61089, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+1683, 180471, 571, 1, 1, 2979.829, 4053.98, 28.70936, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 180471 (Area: 4113) +(@OGUID+1684, 180523, 571, 1, 1, 5471.11, -2643.376, 307.0311, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4275) +(@OGUID+1685, 180523, 571, 1, 1, 5757.718, -3563.73, 386.8262, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4323) +(@OGUID+1686, 180523, 571, 1, 1, 3864.262, -4536.794, 209.4336, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0) +(@OGUID+1687, 180523, 571, 1, 1, 4604.042, -4237.24, 178.9002, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4159) +(@OGUID+1688, 180523, 571, 1, 1, 3402.777, -2788.145, 201.5207, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0) +(@OGUID+1689, 180523, 571, 1, 1, 3256.107, -2192.384, 117.3726, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4206) +(@OGUID+1690, 180523, 571, 1, 1, 2678.036, -4392.695, 284.8349, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4018) +(@OGUID+1691, 180523, 571, 1, 1, 1889.731, -6193.472, 23.6236, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4000) +(@OGUID+1692, 180523, 571, 1, 1, 452.467, -4536.335, 244.877, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3991) +(@OGUID+1693, 180523, 571, 1, 1, 698.1771, -2928.019, -2.640473, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3987) +(@OGUID+1694, 180523, 571, 1, 1, 1436.052, -3258.58, 167.779, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3998) +(@OGUID+1695, 180523, 571, 1, 1, 578.6011, -4929.339, 19.16861, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 3981) +(@OGUID+1696, 180523, 571, 1, 1, 2481.56, -5054.175, 284.8836, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4003) +(@OGUID+1697, 180523, 571, 1, 1, 3211.594, -677.0414, 167.9602, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0) +(@OGUID+1698, 180523, 571, 1, 1, 3657.321, -716.2959, 215.2677, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4177) +(@OGUID+1699, 180523, 571, 1, 1, 3575.916, 257.0831, 47.28813, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4161) +(@OGUID+1700, 180523, 571, 1, 1, 2775.545, 925.4372, 22.99003, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4152) +(@OGUID+1701, 180523, 571, 1, 1, 3468.981, 2004.253, 64.86234, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4158) +(@OGUID+1702, 180523, 571, 1, 1, 3847.863, 1505.001, 92.51198, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4165) +(@OGUID+1703, 180523, 571, 1, 1, 8437.674, -355.5473, 906.4015, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4484) +(@OGUID+1704, 180523, 571, 1, 1, 7839.014, -805.3143, 1183.294, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 0) +(@OGUID+1705, 180523, 571, 1, 1, 7798.68, -2973.132, 1259.494, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4441) +(@OGUID+1706, 180523, 571, 1, 1, 6128.351, -1083.17, 402.6452, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4419) +(@OGUID+1707, 180523, 571, 1, 1, 6675.385, -195.2562, 951.1111, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4428) +(@OGUID+1708, 180523, 571, 1, 1, 5565.757, 5759.502, -75.22591, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4285) +(@OGUID+1709, 180523, 571, 1, 1, 4506.858, 5710.637, 81.51824, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4122) +(@OGUID+1710, 180523, 571, 1, 1, 4175.616, 5283.527, 26.69308, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4108) +(@OGUID+1711, 180523, 571, 1, 1, 2804.783, 6168.423, 85.37867, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4129) +(@OGUID+1712, 180523, 571, 1, 1, 2299.602, 5193.956, 11.70278, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4032) +(@OGUID+1713, 180523, 571, 1, 1, 3007.872, 4052.658, 26.60726, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4113) +(@OGUID+1714, 180523, 571, 1, 1, 3468.352, 4151.25, 17.5926, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 180523 (Area: 4043) +(@OGUID+1715, 180431, 571, 1, 1, 5448.499, -2687.353, 317.0294, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+1716, 180431, 571, 1, 1, 3885.052, -4516.659, 244.4485, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+1717, 180431, 571, 1, 1, 3326.384, -2324.99, 148.8137, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+1718, 180431, 571, 1, 1, 3249.887, -2332.044, 113.358, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+1719, 180431, 571, 1, 1, 3228.007, -2376.978, 142.2661, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+1720, 180431, 571, 1, 1, 3194.981, -2324.08, 142.3525, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+1721, 180431, 571, 1, 1, 3355.472, -2264.87, 151.9365, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 0) +(@OGUID+1722, 180431, 571, 1, 1, 2534.615, -1939.123, 6.753963, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394) +(@OGUID+1723, 180431, 571, 1, 1, 2505.454, -1955.444, 11.24014, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394) +(@OGUID+1724, 180431, 571, 1, 1, 2576.156, -1817.301, 10.01707, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 394) +(@OGUID+1725, 180431, 571, 1, 1, 2545.243, -1802.575, 11.32091, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4242) +(@OGUID+1726, 180431, 571, 1, 1, 3690.41, 272.8268, 52.22741, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4254) +(@OGUID+1727, 180431, 571, 1, 1, 3687.912, 302.2261, 52.22742, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 180431 (Area: 4254) +(@OGUID+1728, 180431, 571, 1, 1, 4512.567, 5708.924, 97.69891, 4.433136, 0, 0, 0, 1, 120, 255, 1); -- 180431 (Area: 4123) + +SET @OGUID:=81188; +SET @Event:=12; +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+2471 AND `eventEntry`=@Event; +INSERT INTO game_event_gameobject SELECT @Event, gameobject.guid FROM `gameobject` WHERE gameobject.guid BETWEEN @OGUID+0 AND @OGUID+1728; From 11b3a60900b81bb5edc5a0f2f9b25a96eee3b085 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 12 Nov 2015 16:59:07 +0100 Subject: [PATCH 324/524] Buildsystem: Fixed building on windows 10 with cmake 3.4 (cherry picked from commit b5fbf773a5071fc4c88f8e0112ffe8a9f2f760e3) --- cmake/macros/ConfigureBoost.cmake | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/cmake/macros/ConfigureBoost.cmake b/cmake/macros/ConfigureBoost.cmake index 022d84246e..b3a71b8a68 100644 --- a/cmake/macros/ConfigureBoost.cmake +++ b/cmake/macros/ConfigureBoost.cmake @@ -1,13 +1,3 @@ -macro(get_WIN32_WINNT version) - if (WIN32 AND CMAKE_SYSTEM_VERSION) - set(ver ${CMAKE_SYSTEM_VERSION}) - string(REPLACE "." "" ver ${ver}) - string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver}) - - set(${version} "0x${ver}") - endif() -endmacro() - if(WIN32) set(BOOST_DEBUG ON) if(DEFINED ENV{BOOST_ROOT}) @@ -25,8 +15,7 @@ if(WIN32) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) - get_WIN32_WINNT(ver) - add_definitions(-D_WIN32_WINNT=${ver}) + add_definitions(-D_WIN32_WINNT=0x0601) endif() find_package(Boost 1.49 REQUIRED system filesystem thread program_options iostreams regex) From 9bc5088a81fa4989c4127dc7f40253f8400fa084 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 12 Nov 2015 17:54:22 +0100 Subject: [PATCH 325/524] Core/DBLayer: Ensure that MySQL version used when compiling is the same as libmysql.dll version used for running the server. Ref #15848 (cherry picked from commit 0a27f8bce264b8f6d8c55efa8ebc97f6e9cb7d11) --- src/server/database/Database/DatabaseWorkerPool.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index 32837daf5d..c34192592e 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -67,6 +67,7 @@ class DatabaseWorkerPool 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() == LIBMYSQL_VERSION_ID, "Used MySQL library does not match the version used to compile TrinityCore."); } ~DatabaseWorkerPool() From 880412205124570e6e90a3a3410303e71c800c9c Mon Sep 17 00:00:00 2001 From: MitchesD Date: Thu, 12 Nov 2015 19:47:18 +0100 Subject: [PATCH 326/524] Rename 2015_10_PR15523_world.sql to 2015_11_12_01_world.sql --- .../world/{2015_10_PR15523_world.sql => 2015_11_12_01_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_10_PR15523_world.sql => 2015_11_12_01_world.sql} (100%) diff --git a/sql/updates/world/2015_10_PR15523_world.sql b/sql/updates/world/2015_11_12_01_world.sql similarity index 100% rename from sql/updates/world/2015_10_PR15523_world.sql rename to sql/updates/world/2015_11_12_01_world.sql From 536365a70ffc1c443dc8ca2b95081a3061be5478 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 13 Nov 2015 09:28:14 +0100 Subject: [PATCH 327/524] Fix build for mysql versions older than 5.7 (cherry picked from commit 5604aed5f130a48a660fa2a2f957489f6a3024ea) --- src/server/database/Database/DatabaseWorkerPool.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index c34192592e..2c5e7c37e6 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -67,7 +67,7 @@ class DatabaseWorkerPool 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() == LIBMYSQL_VERSION_ID, "Used MySQL library does not match the version used to compile TrinityCore."); + WPFatal(mysql_get_client_version() == MYSQL_VERSION_ID, "Used MySQL library does not match the version used to compile TrinityCore."); } ~DatabaseWorkerPool() From 2ee01a7b3d7b4b48a10231c9237b8d600690da5b Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Fri, 13 Nov 2015 20:19:16 +0100 Subject: [PATCH 328/524] Core: Fix non pch build --- src/server/scripts/World/duel_reset.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp index ae98c0eb4a..9e72045569 100644 --- a/src/server/scripts/World/duel_reset.cpp +++ b/src/server/scripts/World/duel_reset.cpp @@ -18,6 +18,7 @@ #include "ScriptMgr.h" #include "Player.h" #include "Pet.h" +#include "SpellInfo.h" class DuelResetScript : public PlayerScript { @@ -34,8 +35,8 @@ class DuelResetScript : public PlayerScript player2->GetSpellHistory()->SaveCooldownStateBeforeDuel(); - ResetSpellCooldowns(player1, true); - ResetSpellCooldowns(player2, true); + ResetSpellCooldowns(player1); + ResetSpellCooldowns(player2); } // Health and mana reset @@ -73,8 +74,8 @@ class DuelResetScript : public PlayerScript if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) { - ResetSpellCooldowns(winner, true); - ResetSpellCooldowns(loser, true); + ResetSpellCooldowns(winner); + ResetSpellCooldowns(loser); winner->GetSpellHistory()->RestoreCooldownStateAfterDuel(); loser->GetSpellHistory()->RestoreCooldownStateAfterDuel(); @@ -88,16 +89,16 @@ class DuelResetScript : public PlayerScript // check if player1 class uses mana if (winner->getPowerType() == POWER_MANA || winner->getClass() == CLASS_DRUID) - winner->RestoreManaAfterDuel(); + winner->RestoreManaAfterDuel(); // check if player2 class uses mana if (loser->getPowerType() == POWER_MANA || loser->getClass() == CLASS_DRUID) - loser->RestoreManaAfterDuel(); + loser->RestoreManaAfterDuel(); } } } - void ResetSpellCooldowns(Player* player, bool removeActivePetCooldowns) + static void ResetSpellCooldowns(Player* player) { // remove cooldowns on spells that have < 10 min CD and has no onHold player->GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool @@ -107,9 +108,8 @@ class DuelResetScript : public PlayerScript }, true); // pet cooldowns - if (removeActivePetCooldowns) - if (Pet* pet = player->GetPet()) - pet->GetSpellHistory()->ResetAllCooldowns(); + if (Pet* pet = player->GetPet()) + pet->GetSpellHistory()->ResetAllCooldowns(); } }; From d1889602166b03a9c4dc07b6523410714ef3d1f6 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 14 Nov 2015 00:56:44 +0100 Subject: [PATCH 329/524] Core/Condition: Fix issue reported by static analysis Coverity defect ID: 1339314 --- src/server/game/Conditions/ConditionMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index d9fa125b64..a3e8dfb58e 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -324,7 +324,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const Unit* unit = object->ToUnit(); if (toUnit && unit) { - switch (ConditionValue2) + switch (static_cast(ConditionValue2)) { case RELATION_SELF: condMeets = unit == toUnit; From d0c28c66eb294c2a8443054f76fbce7a309b6356 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 14 Nov 2015 01:23:28 +0100 Subject: [PATCH 330/524] Core: Fix warning --- src/server/game/Conditions/ConditionMgr.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index a3e8dfb58e..8e8c640ccf 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -344,6 +344,8 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const case RELATION_CREATED_BY: condMeets = unit->GetCreatorGUID() == toUnit->GetGUID(); break; + default: + break; } } } From 95d6f09243af81e6e91697b05bac9f664dabd54e Mon Sep 17 00:00:00 2001 From: tkrokli Date: Sat, 14 Nov 2015 05:09:46 +0100 Subject: [PATCH 331/524] Scripts/Thaddius: Coverity scan Control flow issues (MISSING_BREAK) Coverity scan defects CID 1339315, 1339316 and 1339317: - CID 1339315: boss_thaddius.cpp: 542 - CID 1339316: boss_thaddius.cpp: 811 - CID 1339317: boss_thaddius.cpp: 398 Added missing break; statements. --- src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 1563765eb4..9dcd46ec8a 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -395,6 +395,7 @@ public: case EVENT_SHIFT_TALK: Talk(SAY_ELECT); Talk(EMOTE_POLARITY_SHIFTED); + break; case EVENT_CHAIN: if (me->FindCurrentSpellBySpellId(SPELL_POLARITY_SHIFT)) // delay until shift is over events.ScheduleEvent(EVENT_CHAIN, 3 * IN_MILLISECONDS, 0, PHASE_THADDIUS); @@ -539,6 +540,7 @@ public: if (Creature* coil = myCoil()) if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) coil->CastSpell(thaddius, SPELL_SHOCK_VISUAL); + break; case ACTION_TRANSITION_3: if (GameObject* coil = myCoilGO()) coil->SetGoState(GO_STATE_READY); @@ -808,6 +810,7 @@ public: if (Creature* coil = myCoil()) if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) coil->CastSpell(thaddius, SPELL_SHOCK_VISUAL); + break; case ACTION_TRANSITION_3: if (GameObject* coil = myCoilGO()) coil->SetGoState(GO_STATE_READY); From 1438c841ed22ecb5bfeb0f0fd210c341b841bf2a Mon Sep 17 00:00:00 2001 From: Carbenium Date: Fri, 13 Nov 2015 02:39:45 +0100 Subject: [PATCH 332/524] Core/Player: Move TradeData to its own file (cherry picked from commit 2d7d6f505c6e4e08b5fbbd0bc88b46753191c7aa) Conflicts: src/server/game/Entities/Item/Item.cpp src/server/game/Entities/Player/Player.cpp src/server/game/Entities/Player/Player.h src/server/game/Handlers/TradeHandler.cpp src/server/game/Spells/Spell.cpp --- src/server/game/Entities/Item/Item.cpp | 1 + src/server/game/Entities/Player/Player.cpp | 121 --------------- src/server/game/Entities/Player/Player.h | 61 +------- src/server/game/Entities/Player/TradeData.cpp | 139 ++++++++++++++++++ src/server/game/Entities/Player/TradeData.h | 81 ++++++++++ src/server/game/Handlers/TradeHandler.cpp | 1 + src/server/game/Spells/Spell.cpp | 1 + 7 files changed, 225 insertions(+), 180 deletions(-) create mode 100644 src/server/game/Entities/Player/TradeData.cpp create mode 100644 src/server/game/Entities/Player/TradeData.h diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 19cf9beff2..1b7914fd85 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -28,6 +28,7 @@ #include "ConditionMgr.h" #include "Player.h" #include "WorldSession.h" +#include "TradeData.h" void AddItemsSetItem(Player* player, Item* item) { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3d11e786d5..a443f20e67 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -289,127 +289,6 @@ std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi) return ss; } -//== TradeData ================================================= - -TradeData* TradeData::GetTraderData() const -{ - return m_trader->GetTradeData(); -} - -Item* TradeData::GetItem(TradeSlots slot) const -{ - return m_items[slot] ? m_player->GetItemByGuid(m_items[slot]) : NULL; -} - -bool TradeData::HasItem(ObjectGuid itemGuid) const -{ - for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i) - if (m_items[i] == itemGuid) - return true; - - return false; -} - -TradeSlots TradeData::GetTradeSlotForItem(ObjectGuid itemGuid) const -{ - for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i) - if (m_items[i] == itemGuid) - return TradeSlots(i); - - return TRADE_SLOT_INVALID; -} - -Item* TradeData::GetSpellCastItem() const -{ - return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL; -} - -void TradeData::SetItem(TradeSlots slot, Item* item, bool update /*= false*/) -{ - ObjectGuid itemGuid; - if (item) - itemGuid = item->GetGUID(); - - if (m_items[slot] == itemGuid && !update) - return; - - m_items[slot] = itemGuid; - - SetAccepted(false); - GetTraderData()->SetAccepted(false); - - Update(); - - // need remove possible trader spell applied to changed item - if (slot == TRADE_SLOT_NONTRADED) - GetTraderData()->SetSpell(0); - - // need remove possible player spell applied (possible move reagent) - SetSpell(0); -} - -void TradeData::SetSpell(uint32 spell_id, Item* castItem /*= NULL*/) -{ - ObjectGuid itemGuid = castItem ? castItem->GetGUID() : ObjectGuid::Empty; - - if (m_spell == spell_id && m_spellCastItem == itemGuid) - return; - - m_spell = spell_id; - m_spellCastItem = itemGuid; - - SetAccepted(false); - GetTraderData()->SetAccepted(false); - - Update(true); // send spell info to item owner - Update(false); // send spell info to caster self -} - -void TradeData::SetMoney(uint32 money) -{ - if (m_money == money) - return; - - if (!m_player->HasEnoughMoney(money)) - { - TradeStatusInfo info; - info.Status = TRADE_STATUS_CLOSE_WINDOW; - info.Result = EQUIP_ERR_NOT_ENOUGH_MONEY; - m_player->GetSession()->SendTradeStatus(info); - return; - } - - m_money = money; - - SetAccepted(false); - GetTraderData()->SetAccepted(false); - - Update(true); -} - -void TradeData::Update(bool forTarget /*= true*/) -{ - if (forTarget) - m_trader->GetSession()->SendUpdateTrade(true); // player state for trader - else - m_player->GetSession()->SendUpdateTrade(false); // player state for player -} - -void TradeData::SetAccepted(bool state, bool crosssend /*= false*/) -{ - m_accepted = state; - - if (!state) - { - TradeStatusInfo info; - info.Status = TRADE_STATUS_BACK_TO_TRADE; - if (crosssend) - m_trader->GetSession()->SendTradeStatus(info); - else - m_player->GetSession()->SendTradeStatus(info); - } -} - // == KillRewarder ==================================================== // KillRewarder incapsulates logic of rewarding player upon kill with: // * XP; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c9388fe56b..f8850eedb2 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -29,6 +29,7 @@ #include "SpellMgr.h" #include "SpellHistory.h" #include "Unit.h" +#include "TradeData.h" #include #include @@ -687,14 +688,6 @@ struct ItemPosCount }; typedef std::vector ItemPosCountVec; -enum TradeSlots -{ - TRADE_SLOT_COUNT = 7, - TRADE_SLOT_TRADED_COUNT = 6, - TRADE_SLOT_NONTRADED = 6, - TRADE_SLOT_INVALID = -1 -}; - enum TransferAbortReason { TRANSFER_ABORT_NONE = 0x00, @@ -1007,56 +1000,6 @@ struct TradeStatusInfo uint8 Slot; }; -class TradeData -{ - public: // constructors - TradeData(Player* player, Player* trader) : - m_player(player), m_trader(trader), m_accepted(false), m_acceptProccess(false), - m_money(0), m_spell(0), m_spellCastItem() { } - - Player* GetTrader() const { return m_trader; } - TradeData* GetTraderData() const; - - Item* GetItem(TradeSlots slot) const; - bool HasItem(ObjectGuid itemGuid) const; - TradeSlots GetTradeSlotForItem(ObjectGuid itemGuid) const; - void SetItem(TradeSlots slot, Item* item, bool update = false); - - uint32 GetSpell() const { return m_spell; } - void SetSpell(uint32 spell_id, Item* castItem = NULL); - - Item* GetSpellCastItem() const; - bool HasSpellCastItem() const { return !m_spellCastItem.IsEmpty(); } - - uint32 GetMoney() const { return m_money; } - void SetMoney(uint32 money); - - bool IsAccepted() const { return m_accepted; } - void SetAccepted(bool state, bool crosssend = false); - - bool IsInAcceptProcess() const { return m_acceptProccess; } - void SetInAcceptProcess(bool state) { m_acceptProccess = state; } - - private: // internal functions - - void Update(bool for_trader = true); - - private: // fields - - Player* m_player; // Player who own of this TradeData - Player* m_trader; // Player who trade with m_player - - bool m_accepted; // m_player press accept for trade list - bool m_acceptProccess; // one from player/trader press accept and this processed - - uint32 m_money; // m_player place money to trade - - uint32 m_spell; // m_player apply spell to non-traded slot item - ObjectGuid m_spellCastItem; // applied spell cast by item use - - ObjectGuid m_items[TRADE_SLOT_COUNT]; // traded items from m_player side including non-traded slot -}; - class KillRewarder { public: @@ -1325,7 +1268,7 @@ class Player : public Unit, public GridObject float GetReputationPriceDiscount(Creature const* creature) const; - Player* GetTrader() const { return m_trade ? m_trade->GetTrader() : NULL; } + Player* GetTrader() const { return m_trade ? m_trade->GetTrader() : nullptr; } TradeData* GetTradeData() const { return m_trade; } void TradeCancel(bool sendback); diff --git a/src/server/game/Entities/Player/TradeData.cpp b/src/server/game/Entities/Player/TradeData.cpp new file mode 100644 index 0000000000..bbbd1c8177 --- /dev/null +++ b/src/server/game/Entities/Player/TradeData.cpp @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2008-2015 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 "TradeData.h" +#include "Player.h" +#include "WorldSession.h" + +TradeData* TradeData::GetTraderData() const +{ + return _trader->GetTradeData(); +} + +Item* TradeData::GetItem(TradeSlots slot) const +{ + return !_items[slot].IsEmpty() ? _player->GetItemByGuid(_items[slot]) : nullptr; +} + +bool TradeData::HasItem(ObjectGuid itemGuid) const +{ + for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i) + if (_items[i] == itemGuid) + return true; + + return false; +} + +TradeSlots TradeData::GetTradeSlotForItem(ObjectGuid itemGuid) const +{ + for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i) + if (_items[i] == itemGuid) + return TradeSlots(i); + + return TRADE_SLOT_INVALID; +} + +Item* TradeData::GetSpellCastItem() const +{ + return !_spellCastItem.IsEmpty() ? _player->GetItemByGuid(_spellCastItem) : nullptr; +} + +void TradeData::SetItem(TradeSlots slot, Item* item, bool update /*= false*/) +{ + ObjectGuid itemGuid; + if (item) + itemGuid = item->GetGUID(); + + if (_items[slot] == itemGuid && !update) + return; + + _items[slot] = itemGuid; + + SetAccepted(false); + GetTraderData()->SetAccepted(false); + + Update(); + + // need remove possible trader spell applied to changed item + if (slot == TRADE_SLOT_NONTRADED) + GetTraderData()->SetSpell(0); + + // need remove possible player spell applied (possible move reagent) + SetSpell(0); +} + +void TradeData::SetSpell(uint32 spell_id, Item* castItem /*= nullptr*/) +{ + ObjectGuid itemGuid = castItem ? castItem->GetGUID() : ObjectGuid::Empty; + + if (_spell == spell_id && _spellCastItem == itemGuid) + return; + + _spell = spell_id; + _spellCastItem = itemGuid; + + SetAccepted(false); + GetTraderData()->SetAccepted(false); + + Update(true); // send spell info to item owner + Update(false); // send spell info to caster self +} + +void TradeData::SetMoney(uint32 money) +{ + if (_money == money) + return; + + if (!_player->HasEnoughMoney(money)) + { + TradeStatusInfo info; + info.Status = TRADE_STATUS_CLOSE_WINDOW; + info.Result = EQUIP_ERR_NOT_ENOUGH_MONEY; + _player->GetSession()->SendTradeStatus(info); + return; + } + + _money = money; + + SetAccepted(false); + GetTraderData()->SetAccepted(false); + + Update(true); +} + +void TradeData::Update(bool forTrader /*= true*/) const +{ + if (forTrader) + _trader->GetSession()->SendUpdateTrade(true); // player state for trader + else + _player->GetSession()->SendUpdateTrade(false); // player state for player +} + +void TradeData::SetAccepted(bool state, bool forTrader /*= false*/) +{ + _accepted = state; + + if (!state) + { + TradeStatusInfo info; + info.Status = TRADE_STATUS_BACK_TO_TRADE; + if (forTrader) + _trader->GetSession()->SendTradeStatus(info); + else + _player->GetSession()->SendTradeStatus(info); + } +} diff --git a/src/server/game/Entities/Player/TradeData.h b/src/server/game/Entities/Player/TradeData.h new file mode 100644 index 0000000000..cfaf066bde --- /dev/null +++ b/src/server/game/Entities/Player/TradeData.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2008-2015 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 TradeData_h__ +#define TradeData_h__ + +#include "ObjectGuid.h" + +enum TradeSlots +{ + TRADE_SLOT_COUNT = 7, + TRADE_SLOT_TRADED_COUNT = 6, + TRADE_SLOT_NONTRADED = 6, + TRADE_SLOT_INVALID = -1 +}; + +class Item; +class Player; + +class TradeData +{ +public: + TradeData(Player* player, Player* trader) : + _player(player), _trader(trader), _accepted(false), _acceptProccess(false), + _money(0), _spell(0), _spellCastItem() { } + + Player* GetTrader() const { return _trader; } + TradeData* GetTraderData() const; + + Item* GetItem(TradeSlots slot) const; + bool HasItem(ObjectGuid itemGuid) const; + TradeSlots GetTradeSlotForItem(ObjectGuid itemGuid) const; + void SetItem(TradeSlots slot, Item* item, bool update = false); + + uint32 GetSpell() const { return _spell; } + void SetSpell(uint32 spell_id, Item* castItem = nullptr); + + Item* GetSpellCastItem() const; + bool HasSpellCastItem() const { return !_spellCastItem.IsEmpty(); } + + uint32 GetMoney() const { return _money; } + void SetMoney(uint32 money); + + bool IsAccepted() const { return _accepted; } + void SetAccepted(bool state, bool forTrader = false); + + bool IsInAcceptProcess() const { return _acceptProccess; } + void SetInAcceptProcess(bool state) { _acceptProccess = state; } + +private: + void Update(bool for_trader = true) const; + + Player* _player; // Player who own of this TradeData + Player* _trader; // Player who trade with _player + + bool _accepted; // _player press accept for trade list + bool _acceptProccess; // one from player/trader press accept and this processed + + uint32 _money; // _player place money to trade + + uint32 _spell; // _player apply spell to non-traded slot item + ObjectGuid _spellCastItem; // applied spell cast by item use + + ObjectGuid _items[TRADE_SLOT_COUNT]; // traded items from _player side including non-traded slot +}; + +#endif // TradeData_h__ diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index fbfd16ae1c..53160c25c9 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -28,6 +28,7 @@ #include "SocialMgr.h" #include "Language.h" #include "AccountMgr.h" +#include "TradeData.h" void WorldSession::SendTradeStatus(TradeStatusInfo const& info) { diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 76eefa0bb0..7c9d956edd 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -53,6 +53,7 @@ #include "SpellHistory.h" #include "Battlefield.h" #include "BattlefieldMgr.h" +#include "TradeData.h" extern pEffect SpellEffects[TOTAL_SPELL_EFFECTS]; From 7631ec444e2e0310ddafcc4d3e223bfd44d7f29d Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 13 Nov 2015 22:43:36 +0100 Subject: [PATCH 333/524] Core/DBLayer: Improve error message from 0a27f8bce264b8f6d8c55efa8ebc97f6e9cb7d11 (cherry picked from commit d31706b07e5e4a4d632f5deea7076e864b467bbe) --- src/common/Debugging/Errors.cpp | 11 ++++++++--- src/common/Debugging/Errors.h | 4 ++-- src/server/database/Database/DatabaseWorkerPool.h | 3 ++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/common/Debugging/Errors.cpp b/src/common/Debugging/Errors.cpp index 45f130ceb3..4c7e91a821 100644 --- a/src/common/Debugging/Errors.cpp +++ b/src/common/Debugging/Errors.cpp @@ -59,10 +59,15 @@ void Assert(char const* file, int line, char const* function, char const* messag exit(1); } -void Fatal(char const* file, int line, char const* function, char const* message) +void Fatal(char const* file, int line, char const* function, char const* message, ...) { - fprintf(stderr, "\n%s:%i in %s FATAL ERROR:\n %s\n", - file, line, function, message); + va_list args; + va_start(args, message); + + fprintf(stderr, "\n%s:%i in %s FATAL ERROR:\n ", file, line, function); + vfprintf(stderr, message, args); + fprintf(stderr, "\n"); + fflush(stderr); std::this_thread::sleep_for(std::chrono::seconds(10)); *((volatile int*)NULL) = 0; diff --git a/src/common/Debugging/Errors.h b/src/common/Debugging/Errors.h index 3ceaf2c328..9e526933ac 100644 --- a/src/common/Debugging/Errors.h +++ b/src/common/Debugging/Errors.h @@ -26,7 +26,7 @@ namespace Trinity DECLSPEC_NORETURN void Assert(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; DECLSPEC_NORETURN void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) ATTR_NORETURN ATTR_PRINTF(5, 6); - DECLSPEC_NORETURN void Fatal(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; + DECLSPEC_NORETURN void Fatal(char const* file, int line, char const* function, char const* message, ...) ATTR_NORETURN ATTR_PRINTF(4, 5); DECLSPEC_NORETURN void Error(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; @@ -45,7 +45,7 @@ namespace Trinity #endif #define WPAssert(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, #cond, ##__VA_ARGS__); } while(0) ASSERT_END -#define WPFatal(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END +#define WPFatal(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); } while(0) ASSERT_END #define WPError(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END #define WPWarning(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END #define WPAbort() ASSERT_BEGIN do { Trinity::Abort(__FILE__, __LINE__, __FUNCTION__); } while(0) ASSERT_END diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index 2c5e7c37e6..c7b5d8c8fe 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -67,7 +67,8 @@ class DatabaseWorkerPool 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 does not match the version used to compile TrinityCore."); + 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() From b292321798df6d2187541f96f4d7ed2b89c50791 Mon Sep 17 00:00:00 2001 From: Carbenium Date: Fri, 13 Nov 2015 14:14:54 +0100 Subject: [PATCH 334/524] Core/Player: Move KillRewarder to its own file (cherry picked from commit 4e76974ce5ba3f6ebd73d6dd96860b60d50a19f4) Conflicts: src/server/game/Entities/Player/Player.cpp src/server/game/Entities/Player/Player.h --- .../game/Entities/Player/KillRewarder.cpp | 274 ++++++++++++++++++ .../game/Entities/Player/KillRewarder.h | 59 ++++ src/server/game/Entities/Player/Player.cpp | 248 +--------------- src/server/game/Entities/Player/Player.h | 32 -- 4 files changed, 334 insertions(+), 279 deletions(-) create mode 100644 src/server/game/Entities/Player/KillRewarder.cpp create mode 100644 src/server/game/Entities/Player/KillRewarder.h diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp new file mode 100644 index 0000000000..ad2f8f641e --- /dev/null +++ b/src/server/game/Entities/Player/KillRewarder.cpp @@ -0,0 +1,274 @@ +/* + * Copyright (C) 2008-2015 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 "KillRewarder.h" +#include "SpellAuraEffects.h" +#include "Creature.h" +#include "Formulas.h" +#include "Group.h" +#include "Guild.h" +#include "GuildMgr.h" +#include "InstanceScript.h" +#include "Pet.h" +#include "Player.h" + + // == KillRewarder ==================================================== + // KillRewarder encapsulates logic of rewarding player upon kill with: + // * XP; + // * honor; + // * reputation; + // * kill credit (for quest objectives). + // Rewarding is initiated in two cases: when player kills unit in Unit::Kill() + // and on battlegrounds in Battleground::RewardXPAtKill(). + // + // Rewarding algorithm is: + // 1. Initialize internal variables to default values. + // 2. In case when player is in group, initialize variables necessary for group calculations: + // 2.1. _count - number of alive group members within reward distance; + // 2.2. _sumLevel - sum of levels of alive group members within reward distance; + // 2.3. _maxLevel - maximum level of alive group member within reward distance; + // 2.4. _maxNotGrayMember - maximum level of alive group member within reward distance, + // for whom victim is not gray; + // 2.5. _isFullXP - flag identifying that for all group members victim is not gray, + // so 100% XP will be rewarded (50% otherwise). + // 3. Reward killer (and group, if necessary). + // 3.1. If killer is in group, reward group. + // 3.1.1. Initialize initial XP amount based on maximum level of group member, + // for whom victim is not gray. + // 3.1.2. Alter group rate if group is in raid (not for battlegrounds). + // 3.1.3. Reward each group member (even dead) within reward distance (see 4. for more details). + // 3.2. Reward single killer (not group case). + // 3.2.1. Initialize initial XP amount based on killer's level. + // 3.2.2. Reward killer (see 4. for more details). + // 4. Reward player. + // 4.1. Give honor (player must be alive and not on BG). + // 4.2. Give XP. + // 4.2.1. If player is in group, adjust XP: + // * set to 0 if player's level is more than maximum level of not gray member; + // * cut XP in half if _isFullXP is false. + // 4.2.2. Apply auras modifying rewarded XP. + // 4.2.3. Give XP to player. + // 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case). + // 4.3. Give reputation (player must not be on BG). + // 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse). + // 5. Credit instance encounter. + +KillRewarder::KillRewarder(Player* killer, Unit* victim, bool isBattleGround) : + // 1. Initialize internal variables to default values. + _killer(killer), _victim(victim), _group(killer->GetGroup()), + _groupRate(1.0f), _maxNotGrayMember(nullptr), _count(0), _sumLevel(0), _xp(0), + _isFullXP(false), _maxLevel(0), _isBattleGround(isBattleGround), _isPvP(false) +{ + // mark the credit as pvp if victim is player + if (victim->GetTypeId() == TYPEID_PLAYER) + _isPvP = true; + // or if its owned by player and its not a vehicle + else if (victim->GetCharmerOrOwnerGUID().IsPlayer()) + _isPvP = !victim->IsVehicle(); + + _InitGroupData(); +} + +inline void KillRewarder::_InitGroupData() +{ + if (_group) + { + // 2. In case when player is in group, initialize variables necessary for group calculations: + for (GroupReference* itr = _group->GetFirstMember(); itr != nullptr; itr = itr->next()) + if (Player* member = itr->GetSource()) + if (member->IsAlive() && member->IsAtGroupRewardDistance(_victim)) + { + const uint8 lvl = member->getLevel(); + // 2.1. _count - number of alive group members within reward distance; + ++_count; + // 2.2. _sumLevel - sum of levels of alive group members within reward distance; + _sumLevel += lvl; + // 2.3. _maxLevel - maximum level of alive group member within reward distance; + if (_maxLevel < lvl) + _maxLevel = lvl; + // 2.4. _maxNotGrayMember - maximum level of alive group member within reward distance, + // for whom victim is not gray; + uint32 grayLevel = Trinity::XP::GetGrayLevel(lvl); + if (_victim->getLevel() > grayLevel && (!_maxNotGrayMember || _maxNotGrayMember->getLevel() < lvl)) + _maxNotGrayMember = member; + } + // 2.5. _isFullXP - flag identifying that for all group members victim is not gray, + // so 100% XP will be rewarded (50% otherwise). + _isFullXP = _maxNotGrayMember && (_maxLevel == _maxNotGrayMember->getLevel()); + } + else + _count = 1; +} + +inline void KillRewarder::_InitXP(Player* player) +{ + // Get initial value of XP for kill. + // XP is given: + // * on battlegrounds; + // * otherwise, not in PvP; + // * not if killer is on vehicle. + if (_isBattleGround || (!_isPvP && !_killer->GetVehicle())) + _xp = Trinity::XP::Gain(player, _victim, _isBattleGround); +} + +inline void KillRewarder::_RewardHonor(Player* player) +{ + // Rewarded player must be alive. + if (player->IsAlive()) + player->RewardHonor(_victim, _count, -1, true); +} + +inline void KillRewarder::_RewardXP(Player* player, float rate) +{ + uint32 xp(_xp); + if (_group) + { + // 4.2.1. If player is in group, adjust XP: + // * set to 0 if player's level is more than maximum level of not gray member; + // * cut XP in half if _isFullXP is false. + if (_maxNotGrayMember && player->IsAlive() && + _maxNotGrayMember->getLevel() >= player->getLevel()) + xp = _isFullXP ? + uint32(xp * rate) : // Reward FULL XP if all group members are not gray. + uint32(xp * rate / 2) + 1; // Reward only HALF of XP if some of group members are gray. + else + xp = 0; + } + if (xp) + { + // 4.2.2. Apply auras modifying rewarded XP (SPELL_AURA_MOD_XP_PCT). + for (auto const& aura : player->GetAuraEffectsByType(SPELL_AURA_MOD_XP_PCT)) + AddPct(xp, aura->GetAmount()); + + // 4.2.3. Give XP to player. + player->GiveXP(xp, _victim, _groupRate); + if (Pet* pet = player->GetPet()) + // 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case). + pet->GivePetXP(_group ? xp / 2 : xp); + } +} + +inline void KillRewarder::_RewardReputation(Player* player, float rate) +{ + // 4.3. Give reputation (player must not be on BG). + // Even dead players and corpses are rewarded. + player->RewardReputation(_victim, rate); +} + +inline void KillRewarder::_RewardKillCredit(Player* player) +{ + // 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse). + if (!_group || player->IsAlive() || !player->GetCorpse()) + if (Creature* target = _victim->ToCreature()) + { + player->KilledMonster(target->GetCreatureTemplate(), target->GetGUID()); + player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE, target->GetCreatureType(), 1, target); + } +} + +void KillRewarder::_RewardPlayer(Player* player, bool isDungeon) +{ + // 4. Reward player. + if (!_isBattleGround) + { + // 4.1. Give honor (player must be alive and not on BG). + _RewardHonor(player); + // 4.1.1 Send player killcredit for quests with PlayerSlain + if (_victim->GetTypeId() == TYPEID_PLAYER) + player->KilledPlayerCredit(); + } + // Give XP only in PvE or in battlegrounds. + // Give reputation and kill credit only in PvE. + if (!_isPvP || _isBattleGround) + { + float const rate = _group ? + _groupRate * float(player->getLevel()) / _sumLevel : // Group rate depends on summary level. + 1.0f; // Personal rate is 100%. + if (_xp) + // 4.2. Give XP. + _RewardXP(player, rate); + if (!_isBattleGround) + { + // If killer is in dungeon then all members receive full reputation at kill. + _RewardReputation(player, isDungeon ? 1.0f : rate); + _RewardKillCredit(player); + } + } +} + +void KillRewarder::_RewardGroup() +{ + if (_maxLevel) + { + if (_maxNotGrayMember) + // 3.1.1. Initialize initial XP amount based on maximum level of group member, + // for whom victim is not gray. + _InitXP(_maxNotGrayMember); + // To avoid unnecessary calculations and calls, + // proceed only if XP is not ZERO or player is not on battleground + // (battleground rewards only XP, that's why). + if (!_isBattleGround || _xp) + { + bool const isDungeon = !_isPvP && sMapStore.LookupEntry(_killer->GetMapId())->IsDungeon(); + if (!_isBattleGround) + { + // 3.1.2. Alter group rate if group is in raid (not for battlegrounds). + bool const isRaid = !_isPvP && sMapStore.LookupEntry(_killer->GetMapId())->IsRaid() && _group->isRaidGroup(); + _groupRate = Trinity::XP::xp_in_group_rate(_count, isRaid); + } + + // 3.1.3. Reward each group member (even dead or corpse) within reward distance. + for (GroupReference* itr = _group->GetFirstMember(); itr != nullptr; itr = itr->next()) + { + if (Player* member = itr->GetSource()) + { + if (member->IsAtGroupRewardDistance(_victim)) + { + _RewardPlayer(member, isDungeon); + member->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL, 1, 0, _victim); + } + } + } + } + } +} + +void KillRewarder::Reward() +{ + // 3. Reward killer (and group, if necessary). + if (_group) + // 3.1. If killer is in group, reward group. + _RewardGroup(); + else + { + // 3.2. Reward single killer (not group case). + // 3.2.1. Initialize initial XP amount based on killer's level. + _InitXP(_killer); + // To avoid unnecessary calculations and calls, + // proceed only if XP is not ZERO or player is not on battleground + // (battleground rewards only XP, that's why). + if (!_isBattleGround || _xp) + // 3.2.2. Reward killer. + _RewardPlayer(_killer, false); + } + + // 5. Credit instance encounter. + if (Creature* victim = _victim->ToCreature()) + if (victim->IsDungeonBoss()) + if (InstanceScript* instance = _victim->GetInstanceScript()) + instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim); +} diff --git a/src/server/game/Entities/Player/KillRewarder.h b/src/server/game/Entities/Player/KillRewarder.h new file mode 100644 index 0000000000..577a8ffea2 --- /dev/null +++ b/src/server/game/Entities/Player/KillRewarder.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2008-2015 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 KillRewarder_h__ +#define KillRewarder_h__ + +#include "Define.h" + +class Player; +class Unit; +class Group; + +class KillRewarder +{ +public: + KillRewarder(Player* killer, Unit* victim, bool isBattleGround); + + void Reward(); + +private: + void _InitXP(Player* player); + void _InitGroupData(); + + void _RewardHonor(Player* player); + void _RewardXP(Player* player, float rate); + void _RewardReputation(Player* player, float rate); + void _RewardKillCredit(Player* player); + void _RewardPlayer(Player* player, bool isDungeon); + void _RewardGroup(); + + Player* _killer; + Unit* _victim; + Group* _group; + float _groupRate; + Player* _maxNotGrayMember; + uint32 _count; + uint32 _sumLevel; + uint32 _xp; + bool _isFullXP; + uint8 _maxLevel; + bool _isBattleGround; + bool _isPvP; +}; + +#endif // KillRewarder_h__ diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a443f20e67..2e498958b6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -48,6 +48,7 @@ #include "GuildMgr.h" #include "InstanceSaveMgr.h" #include "InstanceScript.h" +#include "KillRewarder.h" #include "LFGMgr.h" #include "Language.h" #include "Log.h" @@ -289,253 +290,6 @@ std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi) return ss; } -// == KillRewarder ==================================================== -// KillRewarder incapsulates logic of rewarding player upon kill with: -// * XP; -// * honor; -// * reputation; -// * kill credit (for quest objectives). -// Rewarding is initiated in two cases: when player kills unit in Unit::Kill() -// and on battlegrounds in Battleground::RewardXPAtKill(). -// -// Rewarding algorithm is: -// 1. Initialize internal variables to default values. -// 2. In case when player is in group, initialize variables necessary for group calculations: -// 2.1. _count - number of alive group members within reward distance; -// 2.2. _sumLevel - sum of levels of alive group members within reward distance; -// 2.3. _maxLevel - maximum level of alive group member within reward distance; -// 2.4. _maxNotGrayMember - maximum level of alive group member within reward distance, -// for whom victim is not gray; -// 2.5. _isFullXP - flag identifying that for all group members victim is not gray, -// so 100% XP will be rewarded (50% otherwise). -// 3. Reward killer (and group, if necessary). -// 3.1. If killer is in group, reward group. -// 3.1.1. Initialize initial XP amount based on maximum level of group member, -// for whom victim is not gray. -// 3.1.2. Alter group rate if group is in raid (not for battlegrounds). -// 3.1.3. Reward each group member (even dead) within reward distance (see 4. for more details). -// 3.2. Reward single killer (not group case). -// 3.2.1. Initialize initial XP amount based on killer's level. -// 3.2.2. Reward killer (see 4. for more details). -// 4. Reward player. -// 4.1. Give honor (player must be alive and not on BG). -// 4.2. Give XP. -// 4.2.1. If player is in group, adjust XP: -// * set to 0 if player's level is more than maximum level of not gray member; -// * cut XP in half if _isFullXP is false. -// 4.2.2. Apply auras modifying rewarded XP. -// 4.2.3. Give XP to player. -// 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case). -// 4.3. Give reputation (player must not be on BG). -// 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse). -// 5. Credit instance encounter. -KillRewarder::KillRewarder(Player* killer, Unit* victim, bool isBattleGround) : - // 1. Initialize internal variables to default values. - _killer(killer), _victim(victim), _group(killer->GetGroup()), - _groupRate(1.0f), _maxNotGrayMember(NULL), _count(0), _sumLevel(0), _xp(0), - _isFullXP(false), _maxLevel(0), _isBattleGround(isBattleGround), _isPvP(false) -{ - // mark the credit as pvp if victim is player - if (victim->GetTypeId() == TYPEID_PLAYER) - _isPvP = true; - // or if its owned by player and its not a vehicle - else if (victim->GetCharmerOrOwnerGUID().IsPlayer()) - _isPvP = !victim->IsVehicle(); - - _InitGroupData(); -} - -inline void KillRewarder::_InitGroupData() -{ - if (_group) - { - // 2. In case when player is in group, initialize variables necessary for group calculations: - for (GroupReference* itr = _group->GetFirstMember(); itr != NULL; itr = itr->next()) - if (Player* member = itr->GetSource()) - if (member->IsAlive() && member->IsAtGroupRewardDistance(_victim)) - { - const uint8 lvl = member->getLevel(); - // 2.1. _count - number of alive group members within reward distance; - ++_count; - // 2.2. _sumLevel - sum of levels of alive group members within reward distance; - _sumLevel += lvl; - // 2.3. _maxLevel - maximum level of alive group member within reward distance; - if (_maxLevel < lvl) - _maxLevel = lvl; - // 2.4. _maxNotGrayMember - maximum level of alive group member within reward distance, - // for whom victim is not gray; - uint32 grayLevel = Trinity::XP::GetGrayLevel(lvl); - if (_victim->getLevel() > grayLevel && (!_maxNotGrayMember || _maxNotGrayMember->getLevel() < lvl)) - _maxNotGrayMember = member; - } - // 2.5. _isFullXP - flag identifying that for all group members victim is not gray, - // so 100% XP will be rewarded (50% otherwise). - _isFullXP = _maxNotGrayMember && (_maxLevel == _maxNotGrayMember->getLevel()); - } - else - _count = 1; -} - -inline void KillRewarder::_InitXP(Player* player) -{ - // Get initial value of XP for kill. - // XP is given: - // * on battlegrounds; - // * otherwise, not in PvP; - // * not if killer is on vehicle. - if (_isBattleGround || (!_isPvP && !_killer->GetVehicle())) - _xp = Trinity::XP::Gain(player, _victim, _isBattleGround); -} - -inline void KillRewarder::_RewardHonor(Player* player) -{ - // Rewarded player must be alive. - if (player->IsAlive()) - player->RewardHonor(_victim, _count, -1, true); -} - -inline void KillRewarder::_RewardXP(Player* player, float rate) -{ - uint32 xp(_xp); - if (_group) - { - // 4.2.1. If player is in group, adjust XP: - // * set to 0 if player's level is more than maximum level of not gray member; - // * cut XP in half if _isFullXP is false. - if (_maxNotGrayMember && player->IsAlive() && - _maxNotGrayMember->getLevel() >= player->getLevel()) - xp = _isFullXP ? - uint32(xp * rate) : // Reward FULL XP if all group members are not gray. - uint32(xp * rate / 2) + 1; // Reward only HALF of XP if some of group members are gray. - else - xp = 0; - } - if (xp) - { - // 4.2.2. Apply auras modifying rewarded XP (SPELL_AURA_MOD_XP_PCT). - Unit::AuraEffectList const& auras = player->GetAuraEffectsByType(SPELL_AURA_MOD_XP_PCT); - for (Unit::AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i) - AddPct(xp, (*i)->GetAmount()); - - // 4.2.3. Give XP to player. - player->GiveXP(xp, _victim, _groupRate); - if (Pet* pet = player->GetPet()) - // 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case). - pet->GivePetXP(_group ? xp / 2 : xp); - } -} - -inline void KillRewarder::_RewardReputation(Player* player, float rate) -{ - // 4.3. Give reputation (player must not be on BG). - // Even dead players and corpses are rewarded. - player->RewardReputation(_victim, rate); -} - -inline void KillRewarder::_RewardKillCredit(Player* player) -{ - // 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse). - if (!_group || player->IsAlive() || !player->GetCorpse()) - if (Creature* target = _victim->ToCreature()) - { - player->KilledMonster(target->GetCreatureTemplate(), target->GetGUID()); - player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE_TYPE, target->GetCreatureType(), 1, target); - } -} - -void KillRewarder::_RewardPlayer(Player* player, bool isDungeon) -{ - // 4. Reward player. - if (!_isBattleGround) - { - // 4.1. Give honor (player must be alive and not on BG). - _RewardHonor(player); - // 4.1.1 Send player killcredit for quests with PlayerSlain - if (_victim->GetTypeId() == TYPEID_PLAYER) - player->KilledPlayerCredit(); - } - // Give XP only in PvE or in battlegrounds. - // Give reputation and kill credit only in PvE. - if (!_isPvP || _isBattleGround) - { - const float rate = _group ? - _groupRate * float(player->getLevel()) / _sumLevel : // Group rate depends on summary level. - 1.0f; // Personal rate is 100%. - if (_xp) - // 4.2. Give XP. - _RewardXP(player, rate); - if (!_isBattleGround) - { - // If killer is in dungeon then all members receive full reputation at kill. - _RewardReputation(player, isDungeon ? 1.0f : rate); - _RewardKillCredit(player); - } - } -} - -void KillRewarder::_RewardGroup() -{ - if (_maxLevel) - { - if (_maxNotGrayMember) - // 3.1.1. Initialize initial XP amount based on maximum level of group member, - // for whom victim is not gray. - _InitXP(_maxNotGrayMember); - // To avoid unnecessary calculations and calls, - // proceed only if XP is not ZERO or player is not on battleground - // (battleground rewards only XP, that's why). - if (!_isBattleGround || _xp) - { - const bool isDungeon = !_isPvP && sMapStore.LookupEntry(_killer->GetMapId())->IsDungeon(); - if (!_isBattleGround) - { - // 3.1.2. Alter group rate if group is in raid (not for battlegrounds). - const bool isRaid = !_isPvP && sMapStore.LookupEntry(_killer->GetMapId())->IsRaid() && _group->isRaidGroup(); - _groupRate = Trinity::XP::xp_in_group_rate(_count, isRaid); - } - - // 3.1.3. Reward each group member (even dead or corpse) within reward distance. - for (GroupReference* itr = _group->GetFirstMember(); itr != NULL; itr = itr->next()) - { - if (Player* member = itr->GetSource()) - { - if (member->IsAtGroupRewardDistance(_victim)) - { - _RewardPlayer(member, isDungeon); - member->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL, 1, 0, _victim); - } - } - } - } - } -} - -void KillRewarder::Reward() -{ - // 3. Reward killer (and group, if necessary). - if (_group) - // 3.1. If killer is in group, reward group. - _RewardGroup(); - else - { - // 3.2. Reward single killer (not group case). - // 3.2.1. Initialize initial XP amount based on killer's level. - _InitXP(_killer); - // To avoid unnecessary calculations and calls, - // proceed only if XP is not ZERO or player is not on battleground - // (battleground rewards only XP, that's why). - if (!_isBattleGround || _xp) - // 3.2.2. Reward killer. - _RewardPlayer(_killer, false); - } - - // 5. Credit instance encounter. - if (Creature* victim = _victim->ToCreature()) - if (victim->IsDungeonBoss()) - if (InstanceScript* instance = _victim->GetInstanceScript()) - instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim); -} - Player::Player(WorldSession* session): Unit(true) { m_speakTime = 0; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index f8850eedb2..2a9dfc4928 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1000,38 +1000,6 @@ struct TradeStatusInfo uint8 Slot; }; -class KillRewarder -{ -public: - KillRewarder(Player* killer, Unit* victim, bool isBattleGround); - - void Reward(); - -private: - void _InitXP(Player* player); - void _InitGroupData(); - - void _RewardHonor(Player* player); - void _RewardXP(Player* player, float rate); - void _RewardReputation(Player* player, float rate); - void _RewardKillCredit(Player* player); - void _RewardPlayer(Player* player, bool isDungeon); - void _RewardGroup(); - - Player* _killer; - Unit* _victim; - Group* _group; - float _groupRate; - Player* _maxNotGrayMember; - uint32 _count; - uint32 _sumLevel; - uint32 _xp; - bool _isFullXP; - uint8 _maxLevel; - bool _isBattleGround; - bool _isPvP; -}; - class Player : public Unit, public GridObject { friend class WorldSession; From 1ce5a62feb4e03fbe4c13d2963c9dbecc75c2136 Mon Sep 17 00:00:00 2001 From: Naios Date: Sat, 14 Nov 2015 17:08:01 +0100 Subject: [PATCH 335/524] Core/Worldserver: Enable the database updater by default. * Seems like this feature is stable enough to enable it by default since the last missing bugs were fixed some months ago. * The database updater is the preferred method to update the databases as described in the wiki: http://collab.kpsn.org/display/tc/Databases+Installation (cherry picked from commit 25185967e8df949e0f13ec0a7ff45b14ba977c76) --- src/server/worldserver/worldserver.conf.dist | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 381df37393..8619a86499 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1142,11 +1142,11 @@ BirthdayTime = 1222964635 # DATABASE_CHARACTER = 2, // Character database # DATABASE_WORLD = 4, // World database # -# Default: 0 - (All Disabled) +# Default: 7 - (All enabled) # 4 - (Enable world only) -# 7 - (All enabled) +# 0 - (All disabled) -Updates.EnableDatabases = 0 +Updates.EnableDatabases = 7 # # Updates.SourcePath From 145b0b27da2962050ecf2c8d83346ba814e6896f Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 14 Nov 2015 18:26:00 +0100 Subject: [PATCH 336/524] Core/Battleground: Fix issue reported by static analysis Coverity defect ID: 1339311 --- src/server/game/Battlegrounds/BattlegroundQueue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index 87e07e1519..223b71eb8c 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -1069,7 +1069,7 @@ bool BGQueueRemoveEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) if (bgQueue.IsPlayerInvited(m_PlayerGuid, m_BgInstanceGUID, m_RemoveTime)) { // track if player leaves the BG by not clicking enter button - if (bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) && + if (bg && bg->isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_TRACK_DESERTERS) && (bg->GetStatus() == STATUS_IN_PROGRESS || bg->GetStatus() == STATUS_WAIT_JOIN)) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_DESERTER_TRACK); From f01ef901efab7f5b705948880c79eaf23061791e Mon Sep 17 00:00:00 2001 From: Carbenium Date: Sat, 14 Nov 2015 19:48:05 +0100 Subject: [PATCH 337/524] Script/Naxxramas: Fix a -Winconsistent-missing-override warning reported by clang 3.6 --- .../scripts/Northrend/Naxxramas/boss_thaddius.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 9dcd46ec8a..50077fe9dc 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -984,12 +984,12 @@ public: struct npc_teslaAI : public ScriptedAI { - public: - npc_teslaAI(Creature* creature) : ScriptedAI(creature) { } - void EnterEvadeMode() override { } // never stop casting due to evade - void UpdateAI(uint32 /*diff*/) override { } // never do anything unless told - void EnterCombat(Unit* /*who*/) override { } - void DamageTaken(Unit* /*who*/, uint32& damage) { damage = 0; } // no, you can't kill it + npc_teslaAI(Creature* creature) : ScriptedAI(creature) { } + + void EnterEvadeMode() override { } // never stop casting due to evade + void UpdateAI(uint32 /*diff*/) override { } // never do anything unless told + void EnterCombat(Unit* /*who*/) override { } + void DamageTaken(Unit* /*who*/, uint32& damage) override { damage = 0; } // no, you can't kill it }; }; @@ -1021,7 +1021,7 @@ class spell_thaddius_polarity_charge : public SpellScriptLoader return; uint32 triggeringId = GetTriggeringSpell()->Id; - uint32 ampId = 0u; + uint32 ampId; switch (triggeringId) { case SPELL_POSITIVE_CHARGE_APPLY: From ecbbcc8972f43376c65cb726c37cf777ee968f66 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 15 Nov 2015 00:31:17 +0100 Subject: [PATCH 338/524] Core/Spells: Fixed Raise Dead cooldown Closes #15862 --- src/server/game/Spells/SpellHistory.cpp | 111 ++++++++++++++---------- src/server/game/Spells/SpellHistory.h | 3 + src/server/scripts/Spells/spell_dk.cpp | 10 +++ 3 files changed, 79 insertions(+), 45 deletions(-) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index f8593fc800..0dd4ff8c10 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -41,6 +41,7 @@ struct SpellHistory::PersistenceHelper if (!sSpellMgr->GetSpellInfo(*spellId)) return false; + cooldownEntry->SpellId = *spellId; cooldownEntry->CooldownEnd = Clock::from_time_t(time_t(fields[2].GetUInt32())); cooldownEntry->ItemId = fields[1].GetUInt32(); cooldownEntry->CategoryId = fields[3].GetUInt32(); @@ -72,6 +73,7 @@ struct SpellHistory::PersistenceHelper if (!sSpellMgr->GetSpellInfo(*spellId)) return false; + cooldownEntry->SpellId = *spellId; cooldownEntry->CooldownEnd = Clock::from_time_t(time_t(fields[1].GetUInt32())); cooldownEntry->ItemId = 0; cooldownEntry->CategoryId = fields[2].GetUInt32(); @@ -280,32 +282,7 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel int32 cooldown = -1; int32 categoryCooldown = -1; - // some special item spells without correct cooldown in SpellInfo - // cooldown information stored in item prototype - if (itemId) - { - if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId)) - { - for (uint8 idx = 0; idx < MAX_ITEM_PROTO_SPELLS; ++idx) - { - if (uint32(proto->Spells[idx].SpellId) == spellInfo->Id) - { - categoryId = proto->Spells[idx].SpellCategory; - cooldown = proto->Spells[idx].SpellCooldown; - categoryCooldown = proto->Spells[idx].SpellCategoryCooldown; - break; - } - } - } - } - - // if no cooldown found above then base at DBC data - if (cooldown < 0 && categoryCooldown < 0) - { - categoryId = spellInfo->GetCategory(); - cooldown = spellInfo->RecoveryTime; - categoryCooldown = spellInfo->CategoryRecoveryTime; - } + GetCooldownDurations(spellInfo, itemId, &cooldown, &categoryId, &categoryCooldown); Clock::time_point curTime = Clock::now(); Clock::time_point catrecTime; @@ -381,23 +358,39 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel void SpellHistory::SendCooldownEvent(SpellInfo const* spellInfo, uint32 itemId /*= 0*/, Spell* spell /*= nullptr*/, bool startCooldown /*= true*/) { - // start cooldowns at server side, if any - if (startCooldown) - StartCooldown(spellInfo, itemId, spell); - // Send activate cooldown timer (possible 0) at client side if (Player* player = GetPlayerOwner()) { + uint32 category = spellInfo->GetCategory(); + GetCooldownDurations(spellInfo, itemId, nullptr, &category, nullptr); + + auto categoryItr = _categoryCooldowns.find(category); + if (categoryItr != _categoryCooldowns.end() && categoryItr->second->SpellId != spellInfo->Id) + { + WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8); + data << uint32(categoryItr->second->SpellId); + data << uint64(_owner->GetGUID()); + player->SendDirectMessage(&data); + + if (startCooldown) + StartCooldown(sSpellMgr->EnsureSpellInfo(categoryItr->second->SpellId), itemId, spell); + } + WorldPacket data(SMSG_COOLDOWN_EVENT, 4 + 8); data << uint32(spellInfo->Id); data << uint64(_owner->GetGUID()); player->SendDirectMessage(&data); } + + // start cooldowns at server side, if any + if (startCooldown) + StartCooldown(spellInfo, itemId, spell); } void SpellHistory::AddCooldown(uint32 spellId, uint32 itemId, Clock::time_point cooldownEnd, uint32 categoryId, Clock::time_point categoryEnd, bool onHold /*= false*/) { CooldownEntry& cooldownEntry = _spellCooldowns[spellId]; + cooldownEntry.SpellId = spellId; cooldownEntry.CooldownEnd = cooldownEnd; cooldownEntry.ItemId = itemId; cooldownEntry.CategoryId = categoryId; @@ -478,21 +471,7 @@ bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/ return true; uint32 category = 0; - if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId)) - { - for (uint32 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) - { - if (uint32(itemTemplate->Spells[i].SpellId) == spellInfo->Id) - { - category = itemTemplate->Spells[i].SpellCategory; - break; - } - } - } - - if (!category) - category = spellInfo->GetCategory(); - + GetCooldownDurations(spellInfo, itemId, nullptr, &itemId, nullptr); if (!category) return false; @@ -651,6 +630,48 @@ void SpellHistory::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCoo } } +void SpellHistory::GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemId, int32* cooldown, uint32* categoryId, int32* categoryCooldown) +{ + ASSERT(cooldown || categoryId || categoryCooldown); + int32 tmpCooldown = -1; + uint32 tmpCategoryId = 0; + int32 tmpCategoryCooldown = -1; + + // some special item spells without correct cooldown in SpellInfo + // cooldown information stored in item prototype + if (itemId) + { + if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId)) + { + for (uint8 idx = 0; idx < MAX_ITEM_PROTO_SPELLS; ++idx) + { + if (uint32(proto->Spells[idx].SpellId) == spellInfo->Id) + { + tmpCooldown = proto->Spells[idx].SpellCooldown; + tmpCategoryId = proto->Spells[idx].SpellCategory; + tmpCategoryCooldown = proto->Spells[idx].SpellCategoryCooldown; + break; + } + } + } + } + + // if no cooldown found above then base at DBC data + if (tmpCooldown < 0 && tmpCategoryCooldown < 0) + { + tmpCooldown = spellInfo->RecoveryTime; + tmpCategoryId = spellInfo->GetCategory(); + tmpCategoryCooldown = spellInfo->CategoryRecoveryTime; + } + + if (cooldown) + *cooldown = tmpCooldown; + if (categoryId) + *categoryId = tmpCategoryId; + if (categoryCooldown) + *categoryCooldown = tmpCategoryCooldown; +} + void SpellHistory::SaveCooldownStateBeforeDuel() { _spellCooldownsBeforeDuel = _spellCooldowns; diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h index 6a1da28f08..db65cd50c3 100644 --- a/src/server/game/Spells/SpellHistory.h +++ b/src/server/game/Spells/SpellHistory.h @@ -38,6 +38,7 @@ public: struct CooldownEntry { + uint32 SpellId = 0; Clock::time_point CooldownEnd; uint32 ItemId = 0; uint32 CategoryId = 0; @@ -135,6 +136,8 @@ private: typedef std::unordered_map PacketCooldowns; void BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns) const; + static void GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemId, int32* cooldown, uint32* categoryId, int32* categoryCooldown); + Unit* _owner; CooldownStorageType _spellCooldowns; CooldownStorageType _spellCooldownsBeforeDuel; diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index cd0052c24b..88271dc713 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -1343,6 +1343,15 @@ class spell_dk_raise_dead : public SpellScriptLoader GetCaster()->CastSpell(targets, spellInfo, NULL, TRIGGERED_FULL_MASK); } + void OverrideCooldown() + { + // Because the ghoul is summoned by one of triggered spells SendCooldownEvent is not sent for this spell + // but the client has locked it by itself so we need some link between this spell and the real spell summoning. + // Luckily such link already exists - spell category + // This starts infinite category cooldown which can later be used by SendCooldownEvent to send packet for this spell + GetCaster()->GetSpellHistory()->StartCooldown(GetSpellInfo(), 0, nullptr, true); + } + void Register() override { OnCheckCast += SpellCheckCastFn(spell_dk_raise_dead_SpellScript::CheckCast); @@ -1351,6 +1360,7 @@ class spell_dk_raise_dead : public SpellScriptLoader OnCast += SpellCastFn(spell_dk_raise_dead_SpellScript::ConsumeReagents); OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleRaiseDead, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleRaiseDead, EFFECT_2, SPELL_EFFECT_DUMMY); + AfterCast += SpellCastFn(spell_dk_raise_dead_SpellScript::OverrideCooldown); } private: From 63f2675076e96abe9dad04baf1f7310b429d9eae Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 15 Nov 2015 16:01:14 +0100 Subject: [PATCH 339/524] Core/Player: Fix issue reported by static analysis Coverity defect IDs: 1010154 --- src/server/game/Entities/Player/Player.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2e498958b6..2d70329fab 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -535,6 +535,8 @@ Player::Player(WorldSession* session): Unit(true) SetPendingBind(0, 0); _activeCheats = CHEAT_NONE; + healthBeforeDuel = 0; + manaBeforeDuel = 0; m_achievementMgr = new AchievementMgr(this); m_reputationMgr = new ReputationMgr(this); } From fbaed38b5ea605e3dbd65a99835db1778ac24391 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 15 Nov 2015 16:17:12 +0100 Subject: [PATCH 340/524] Core/Quest: Fix issues reported by static analysis Coverity defect IDs: 1339309, 1339310 --- src/server/game/Entities/Player/Player.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2d70329fab..1a9c0fbce4 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15562,8 +15562,9 @@ bool Player::GetQuestRewardStatus(uint32 quest_id) const if (qInfo->IsSeasonal() && !qInfo->IsRepeatable()) { uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo); - if (m_seasonalquests.find(eventId) != m_seasonalquests.end()) - return m_seasonalquests.find(eventId)->second.find(quest_id) != m_seasonalquests.find(eventId)->second.end(); + auto seasonalQuestItr = m_seasonalquests.find(eventId); + if (seasonalQuestItr != m_seasonalquests.end()) + return seasonalQuestItr->second.find(quest_id) != seasonalQuestItr->second.end(); return false; } @@ -15591,7 +15592,8 @@ QuestStatus Player::GetQuestStatus(uint32 quest_id) const if (qInfo->IsSeasonal() && !qInfo->IsRepeatable()) { uint16 eventId = sGameEventMgr->GetEventIdForQuest(qInfo); - if (m_seasonalquests.find(eventId) == m_seasonalquests.end() || m_seasonalquests.find(eventId)->second.find(quest_id) == m_seasonalquests.find(eventId)->second.end()) + auto seasonalQuestItr = m_seasonalquests.find(eventId); + if (seasonalQuestItr == m_seasonalquests.end() || seasonalQuestItr->second.find(quest_id) == seasonalQuestItr->second.end()) return QUEST_STATUS_NONE; } From 071ede8a93ab239e06c2ab338bc918791cb14b06 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 16 Nov 2015 00:08:32 +0100 Subject: [PATCH 341/524] Core/Misc: Fixed memory leak in trade handler (cherry picked from commit fc852181c578e2ab8644bebfef13199a7897ebe9) CID 1339313 CID 1339312 --- src/server/game/Handlers/TradeHandler.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 53160c25c9..1bb2197193 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -455,6 +455,8 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/) SendTradeStatus(myCanCompleteInfo); my_trade->SetAccepted(false); his_trade->SetAccepted(false); + delete my_spell; + delete his_spell; return; } else if (hisCanCompleteInfo.Result != EQUIP_ERR_OK) @@ -467,6 +469,8 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPacket& /*recvPacket*/) trader->GetSession()->SendTradeStatus(hisCanCompleteInfo); my_trade->SetAccepted(false); his_trade->SetAccepted(false); + delete my_spell; + delete his_spell; return; } From ce90e30a80a742640396a04a767e767c6518a0a5 Mon Sep 17 00:00:00 2001 From: Golrag Date: Wed, 11 Nov 2015 13:46:42 +0100 Subject: [PATCH 342/524] Scripts/ICC: * Bosses now enter when in aggro range. * Removed some of the MoveInLineOfSight calls * Added more AreaTriggerScripts --- sql/updates/world/yyyy_mm_dd_xx.sql | 5 ++ .../boss_blood_prince_council.cpp | 86 ++++++++++--------- .../boss_deathbringer_saurfang.cpp | 1 - .../IcecrownCitadel/boss_festergut.cpp | 1 - .../boss_lady_deathwhisper.cpp | 51 ++++++++--- .../IcecrownCitadel/boss_lord_marrowgar.cpp | 56 ++++++++---- .../boss_professor_putricide.cpp | 3 +- .../IcecrownCitadel/boss_rotface.cpp | 5 -- .../IcecrownCitadel/boss_sindragosa.cpp | 7 +- .../IcecrownCitadel/icecrown_citadel.h | 86 ++++++++++--------- .../instance_icecrown_citadel.cpp | 18 ++++ 11 files changed, 194 insertions(+), 125 deletions(-) create mode 100644 sql/updates/world/yyyy_mm_dd_xx.sql diff --git a/sql/updates/world/yyyy_mm_dd_xx.sql b/sql/updates/world/yyyy_mm_dd_xx.sql new file mode 100644 index 0000000000..99cc9e1464 --- /dev/null +++ b/sql/updates/world/yyyy_mm_dd_xx.sql @@ -0,0 +1,5 @@ +DELETE FROM `areatrigger_scripts` WHERE `entry` IN (5732 /*entrance Lord Marrowgar*/, 5708/*Blood Prince Council*/, 5709 /*entrance Lady Deathwhisper*/); +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES +(5732, 'at_lord_marrowgar_entrance'), +(5708, 'at_blood_prince_council_start_intro'), +(5709, 'at_lady_deathwhisper_entrance'); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index aeaf8a70ba..cfeb31d552 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -136,11 +136,12 @@ enum Events enum Actions { - ACTION_STAND_UP = 1, - ACTION_CAST_INVOCATION = 2, - ACTION_REMOVE_INVOCATION = 3, - ACTION_KINETIC_BOMB_JUMP = 4, - ACTION_FLAME_BALL_CHASE = 5, + ACTION_START_INTRO = 1, + ACTION_STAND_UP = 2, + ACTION_CAST_INVOCATION = 3, + ACTION_REMOVE_INVOCATION = 4, + ACTION_KINETIC_BOMB_JUMP = 5, + ACTION_FLAME_BALL_CHASE = 6, }; enum Points @@ -162,6 +163,7 @@ class StandUpEvent : public BasicEvent bool Execute(uint64 /*eventTime*/, uint32 /*diff*/) { _owner.HandleEmoteCommand(EMOTE_ONESHOT_ROAR); + _owner.SetReactState(REACT_AGGRESSIVE); return true; } @@ -382,8 +384,6 @@ class boss_prince_keleseth_icc : public CreatureScript if (!me->isDead()) JustRespawned(); - - me->SetReactState(REACT_DEFENSIVE); } void Reset() override @@ -395,7 +395,6 @@ class boss_prince_keleseth_icc : public CreatureScript _isEmpowered = false; me->SetHealth(_spawnHealth); instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true)); - me->SetReactState(REACT_DEFENSIVE); } void EnterCombat(Unit* /*who*/) override @@ -597,8 +596,6 @@ class boss_prince_taldaram_icc : public CreatureScript if (!me->isDead()) JustRespawned(); - - me->SetReactState(REACT_DEFENSIVE); } void Reset() override @@ -610,12 +607,6 @@ class boss_prince_taldaram_icc : public CreatureScript _isEmpowered = false; me->SetHealth(_spawnHealth); instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true)); - me->SetReactState(REACT_DEFENSIVE); - } - - void MoveInLineOfSight(Unit* /*who*/) override - - { } void EnterCombat(Unit* /*who*/) override @@ -821,8 +812,6 @@ class boss_prince_valanar_icc : public CreatureScript if (!me->isDead()) JustRespawned(); - - me->SetReactState(REACT_DEFENSIVE); } void Reset() override @@ -834,12 +823,6 @@ class boss_prince_valanar_icc : public CreatureScript _isEmpowered = false; me->SetHealth(me->GetMaxHealth()); instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true)); - me->SetReactState(REACT_DEFENSIVE); - } - - void MoveInLineOfSight(Unit* /*who*/) override - - { } void EnterCombat(Unit* /*who*/) override @@ -905,6 +888,7 @@ class boss_prince_valanar_icc : public CreatureScript default: break; } + summons.Summon(summon); if (me->IsInCombat()) DoZoneInCombat(summon); @@ -1070,25 +1054,28 @@ class npc_blood_queen_lana_thel : public CreatureScript me->SetVisible(true); } - void MoveInLineOfSight(Unit* who) override - + void DoAction(int32 action) override { - if (_introDone) - return; - - if (!me->IsWithinDistInMap(who, 35.0f, false)) - return; - - _introDone = true; - Talk(SAY_INTRO_1); - _events.SetPhase(1); - _events.ScheduleEvent(EVENT_INTRO_1, 14000); - // summon a visual trigger - if (Creature* summon = DoSummon(NPC_FLOATING_TRIGGER, triggerPos, 15000, TEMPSUMMON_TIMED_DESPAWN)) + switch (action) { - summon->CastSpell(summon, SPELL_OOC_INVOCATION_VISUAL, true); - summon->SetSpeed(MOVE_FLIGHT, 0.15f, true); - summon->GetMotionMaster()->MovePoint(0, triggerEndPos); + case ACTION_START_INTRO: + if (!_introDone) + { + _introDone = true; + Talk(SAY_INTRO_1); + _events.SetPhase(1); + _events.ScheduleEvent(EVENT_INTRO_1, 14000); + // summon a visual trigger + if (Creature* summon = DoSummon(NPC_FLOATING_TRIGGER, triggerPos, 15000, TEMPSUMMON_TIMED_DESPAWN)) + { + summon->CastSpell(summon, SPELL_OOC_INVOCATION_VISUAL, true); + summon->SetSpeed(MOVE_FLIGHT, 0.15f, true); // todo: creature is swimming, check if this is blizzlike or not. + summon->GetMotionMaster()->MovePoint(0, triggerEndPos); + } + } + break; + default: + break; } } @@ -1328,7 +1315,6 @@ class npc_dark_nucleus : public CreatureScript } void MoveInLineOfSight(Unit* who) override - { ScriptedAI::MoveInLineOfSight(who); } @@ -1670,6 +1656,21 @@ class spell_blood_council_shadow_prison_damage : public SpellScriptLoader } }; +class at_blood_prince_council_start_intro : public AreaTriggerScript +{ + public: + at_blood_prince_council_start_intro() : AreaTriggerScript("at_blood_prince_council_start_intro") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + { + if (InstanceScript* instance = player->GetInstanceScript()) + if (Creature* bloodQueen = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL))) + bloodQueen->AI()->DoAction(ACTION_START_INTRO); + + return true; + } +}; + void AddSC_boss_blood_prince_council() { new boss_blood_council_controller(); @@ -1689,4 +1690,5 @@ void AddSC_boss_blood_prince_council() new spell_valanar_kinetic_bomb_absorb(); new spell_blood_council_shadow_prison(); new spell_blood_council_shadow_prison_damage(); + new at_blood_prince_council_start_intro(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 365e0a1588..54c2476924 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -268,7 +268,6 @@ class boss_deathbringer_saurfang : public CreatureScript void Reset() override { _Reset(); - me->SetReactState(REACT_DEFENSIVE); events.SetPhase(PHASE_COMBAT); Initialize(); me->SetPower(POWER_ENERGY, 0); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index e3e89d865f..f76c415ab9 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -93,7 +93,6 @@ class boss_festergut : public CreatureScript void Reset() override { _Reset(); - me->SetReactState(REACT_DEFENSIVE); events.ScheduleEvent(EVENT_BERSERK, 300000); events.ScheduleEvent(EVENT_INHALE_BLIGHT, urand(25000, 30000)); events.ScheduleEvent(EVENT_GAS_SPORE, urand(20000, 25000)); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index f5843cbfd3..b2aa6dadd8 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -174,6 +174,11 @@ enum DeprogrammingData POINT_DESPAWN = 384721, }; +enum Actions +{ + ACTION_START_INTRO +}; + #define NPC_DARNAVAN RAID_MODE(NPC_DARNAVAN_10, NPC_DARNAVAN_25, NPC_DARNAVAN_10, NPC_DARNAVAN_25) #define NPC_DARNAVAN_CREDIT RAID_MODE(NPC_DARNAVAN_CREDIT_10, NPC_DARNAVAN_CREDIT_25, NPC_DARNAVAN_CREDIT_10, NPC_DARNAVAN_CREDIT_25) #define QUEST_DEPROGRAMMING RAID_MODE(QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25, QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25) @@ -241,20 +246,26 @@ class boss_lady_deathwhisper : public CreatureScript me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false); } - void MoveInLineOfSight(Unit* who) override - + void DoAction(int32 action) override { - if (!_introDone && me->IsWithinDistInMap(who, 110.0f)) + switch (action) { - _introDone = true; - Talk(SAY_INTRO_1); - events.SetPhase(PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_2, 11000, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_3, 21000, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_4, 31500, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_5, 39500, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_6, 48500, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_7, 58000, 0, PHASE_INTRO); + case ACTION_START_INTRO: + if (!_introDone) + { + _introDone = true; + Talk(SAY_INTRO_1); + events.SetPhase(PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_2, 11000, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_3, 21000, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_4, 31500, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_5, 39500, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_6, 48500, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_7, 58000, 0, PHASE_INTRO); + } + break; + default: + break; } } @@ -1024,6 +1035,21 @@ class spell_cultist_dark_martyrdom : public SpellScriptLoader } }; +class at_lady_deathwhisper_entrance : public AreaTriggerScript +{ + public: + at_lady_deathwhisper_entrance() : AreaTriggerScript("at_lady_deathwhisper_entrance") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + { + if (InstanceScript* instance = player->GetInstanceScript()) + if (Creature* ladyDeathwhisper = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_LADY_DEATHWHISPER))) + ladyDeathwhisper->AI()->DoAction(ACTION_START_INTRO); + + return true; + } +}; + void AddSC_boss_lady_deathwhisper() { new boss_lady_deathwhisper(); @@ -1033,4 +1059,5 @@ void AddSC_boss_lady_deathwhisper() new npc_darnavan(); new spell_deathwhisper_mana_barrier(); new spell_cultist_dark_martyrdom(); + new at_lady_deathwhisper_entrance(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 2fbd129389..993fc75fcd 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -89,11 +89,15 @@ enum MiscInfo //DATA_SPIKE_IMMUNE_1, = 2, // Reserved & used //DATA_SPIKE_IMMUNE_2, = 3, // Reserved & used - ACTION_CLEAR_SPIKE_IMMUNITIES = 1, - MAX_BONE_SPIKE_IMMUNE = 3, }; +enum Actions +{ + ACTION_CLEAR_SPIKE_IMMUNITIES = 1, + ACTION_TALK_ENTER_ZONE = 2 +}; + class BoneSpikeTargetSelector : public std::unary_function { public: @@ -131,7 +135,6 @@ class boss_lord_marrowgar : public CreatureScript _boneStormDuration = RAID_MODE(20000, 30000, 20000, 30000); _baseSpeed = creature->GetSpeedRate(MOVE_RUN); _coldflameLastPos.Relocate(creature); - _introDone = false; _boneSlice = false; } @@ -146,6 +149,7 @@ class boss_lord_marrowgar : public CreatureScript events.ScheduleEvent(EVENT_COLDFLAME, 5000, EVENT_GROUP_SPECIAL); events.ScheduleEvent(EVENT_WARN_BONE_STORM, urand(45000, 50000)); events.ScheduleEvent(EVENT_ENRAGE, 600000); + _introDone = false; _boneSlice = false; _boneSpikeImmune.clear(); } @@ -179,16 +183,6 @@ class boss_lord_marrowgar : public CreatureScript Talk(SAY_KILL); } - void MoveInLineOfSight(Unit* who) override - - { - if (!_introDone && me->IsWithinDistInMap(who, 70.0f)) - { - Talk(SAY_ENTER_ZONE); - _introDone = true; - } - } - void UpdateAI(uint32 diff) override { if (!UpdateVictim() || !CheckInRoom()) @@ -324,10 +318,21 @@ class boss_lord_marrowgar : public CreatureScript void DoAction(int32 action) override { - if (action != ACTION_CLEAR_SPIKE_IMMUNITIES) - return; - - _boneSpikeImmune.clear(); + switch (action) + { + case ACTION_CLEAR_SPIKE_IMMUNITIES: + _boneSpikeImmune.clear(); + break; + case ACTION_TALK_ENTER_ZONE: + if (!_introDone) + { + Talk(SAY_ENTER_ZONE); + _introDone = true; + } + break; + default: + break; + } } private: @@ -742,6 +747,22 @@ class spell_marrowgar_bone_slice : public SpellScriptLoader } }; +class at_lord_marrowgar_entrance : public AreaTriggerScript +{ + public: + at_lord_marrowgar_entrance() : AreaTriggerScript("at_lord_marrowgar_entrance") { } + + bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + { + if (InstanceScript* instance = player->GetInstanceScript()) + if (Creature* lordMarrowgar = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_LORD_MARROWGAR))) + lordMarrowgar->AI()->DoAction(ACTION_TALK_ENTER_ZONE); + + return true; + } + +}; + void AddSC_boss_lord_marrowgar() { new boss_lord_marrowgar(); @@ -753,4 +774,5 @@ void AddSC_boss_lord_marrowgar() new spell_marrowgar_bone_spike_graveyard(); new spell_marrowgar_bone_storm(); new spell_marrowgar_bone_slice(); + new at_lord_marrowgar_entrance(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index be134a0617..4c67c0a716 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -236,7 +236,6 @@ class boss_professor_putricide : public CreatureScript summons.DespawnAll(); SetPhase(PHASE_COMBAT_1); _experimentState = EXPERIMENT_STATE_OOZE; - me->SetReactState(REACT_DEFENSIVE); me->SetWalk(false); if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); @@ -616,7 +615,7 @@ class boss_professor_putricide : public CreatureScript DoCast(me, SPELL_TEAR_GAS_PERIODIC_TRIGGER, true); break; case EVENT_RESUME_ATTACK: - me->SetReactState(REACT_DEFENSIVE); + me->SetReactState(REACT_AGGRESSIVE); AttackStart(me->GetVictim()); // remove Tear Gas me->RemoveAurasDueToSpell(SPELL_TEAR_GAS_PERIODIC_TRIGGER); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index 1a2ebd179f..d03925f734 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -168,11 +168,6 @@ class boss_rotface : public CreatureScript Talk(SAY_SLIME_SPRAY); } - void MoveInLineOfSight(Unit* /*who*/) override - { - // don't enter combat - } - void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_VILE_GAS_STALKER) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 65d99b022d..8917af0038 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -234,7 +234,6 @@ class boss_sindragosa : public CreatureScript void Reset() override { BossAI::Reset(); - me->SetReactState(REACT_DEFENSIVE); DoCast(me, SPELL_TANK_MARKER, true); events.ScheduleEvent(EVENT_BERSERK, 600000); events.ScheduleEvent(EVENT_CLEAVE, 10000, EVENT_GROUP_LAND_PHASE); @@ -659,7 +658,6 @@ class npc_spinestalker : public CreatureScript _events.ScheduleEvent(EVENT_BELLOWING_ROAR, urand(20000, 25000)); _events.ScheduleEvent(EVENT_CLEAVE_SPINESTALKER, urand(10000, 15000)); _events.ScheduleEvent(EVENT_TAIL_SWEEP, urand(8000, 12000)); - me->SetReactState(REACT_DEFENSIVE); if (!_summoned) { @@ -699,6 +697,7 @@ class npc_spinestalker : public CreatureScript me->GetMotionMaster()->MoveIdle(); me->StopMoving(); me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, SpinestalkerFlyPos); + me->SetReactState(REACT_DEFENSIVE); } } @@ -714,6 +713,7 @@ class npc_spinestalker : public CreatureScript me->SetHomePosition(SpinestalkerLandPos); me->SetFacingTo(SpinestalkerLandPos.GetOrientation()); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->SetReactState(REACT_AGGRESSIVE); } void UpdateAI(uint32 diff) override @@ -794,7 +794,6 @@ class npc_rimefang : public CreatureScript _events.Reset(); _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, urand(12000, 15000)); _events.ScheduleEvent(EVENT_ICY_BLAST, urand(30000, 35000)); - me->SetReactState(REACT_DEFENSIVE); Initialize(); if (!_summoned) @@ -835,6 +834,7 @@ class npc_rimefang : public CreatureScript me->GetMotionMaster()->MoveIdle(); me->StopMoving(); me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, RimefangFlyPos); + me->SetReactState(REACT_DEFENSIVE); } } @@ -850,6 +850,7 @@ class npc_rimefang : public CreatureScript me->SetHomePosition(RimefangLandPos); me->SetFacingTo(RimefangLandPos.GetOrientation()); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->SetReactState(REACT_AGGRESSIVE); } void EnterCombat(Unit* /*victim*/) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index e739f5a503..224aa6cda4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -72,50 +72,51 @@ enum TeleporterSpells enum DataTypes { // Encounter States/Boss GUIDs - DATA_LORD_MARROWGAR = 0, - DATA_LADY_DEATHWHISPER = 1, - DATA_ICECROWN_GUNSHIP_BATTLE = 2, - DATA_DEATHBRINGER_SAURFANG = 3, - DATA_FESTERGUT = 4, - DATA_ROTFACE = 5, - DATA_PROFESSOR_PUTRICIDE = 6, - DATA_BLOOD_PRINCE_COUNCIL = 7, - DATA_BLOOD_QUEEN_LANA_THEL = 8, - DATA_SISTER_SVALNA = 9, - DATA_VALITHRIA_DREAMWALKER = 10, - DATA_SINDRAGOSA = 11, - DATA_THE_LICH_KING = 12, + DATA_LORD_MARROWGAR = 0, + DATA_LADY_DEATHWHISPER = 1, + DATA_ICECROWN_GUNSHIP_BATTLE = 2, + DATA_DEATHBRINGER_SAURFANG = 3, + DATA_FESTERGUT = 4, + DATA_ROTFACE = 5, + DATA_PROFESSOR_PUTRICIDE = 6, + DATA_BLOOD_PRINCE_COUNCIL = 7, + DATA_BLOOD_QUEEN_LANA_THEL = 8, + DATA_SISTER_SVALNA = 9, + DATA_VALITHRIA_DREAMWALKER = 10, + DATA_SINDRAGOSA = 11, + DATA_THE_LICH_KING = 12, // Additional data - DATA_SAURFANG_EVENT_NPC = 13, - DATA_BONED_ACHIEVEMENT = 14, - DATA_OOZE_DANCE_ACHIEVEMENT = 15, - DATA_PUTRICIDE_TABLE = 16, - DATA_NAUSEA_ACHIEVEMENT = 17, - DATA_ORB_WHISPERER_ACHIEVEMENT = 18, - DATA_PRINCE_KELESETH_GUID = 19, - DATA_PRINCE_TALDARAM_GUID = 20, - DATA_PRINCE_VALANAR_GUID = 21, - DATA_BLOOD_PRINCES_CONTROL = 22, - DATA_SINDRAGOSA_FROSTWYRMS = 23, - DATA_SPINESTALKER = 24, - DATA_RIMEFANG = 25, - DATA_COLDFLAME_JETS = 26, - DATA_TEAM_IN_INSTANCE = 27, - DATA_BLOOD_QUICKENING_STATE = 28, - DATA_HEROIC_ATTEMPTS = 29, - DATA_CROK_SCOURGEBANE = 30, - DATA_CAPTAIN_ARNATH = 31, - DATA_CAPTAIN_BRANDON = 32, - DATA_CAPTAIN_GRONDEL = 33, - DATA_CAPTAIN_RUPERT = 34, - DATA_VALITHRIA_TRIGGER = 35, - DATA_VALITHRIA_LICH_KING = 36, - DATA_HIGHLORD_TIRION_FORDRING = 37, - DATA_ARTHAS_PLATFORM = 38, - DATA_TERENAS_MENETHIL = 39, - DATA_ENEMY_GUNSHIP = 40, - DATA_UPPERSPIRE_TELE_ACT = 41, + DATA_SAURFANG_EVENT_NPC = 13, + DATA_BONED_ACHIEVEMENT = 14, + DATA_OOZE_DANCE_ACHIEVEMENT = 15, + DATA_PUTRICIDE_TABLE = 16, + DATA_NAUSEA_ACHIEVEMENT = 17, + DATA_ORB_WHISPERER_ACHIEVEMENT = 18, + DATA_PRINCE_KELESETH_GUID = 19, + DATA_PRINCE_TALDARAM_GUID = 20, + DATA_PRINCE_VALANAR_GUID = 21, + DATA_BLOOD_PRINCES_CONTROL = 22, + DATA_SINDRAGOSA_FROSTWYRMS = 23, + DATA_SPINESTALKER = 24, + DATA_RIMEFANG = 25, + DATA_COLDFLAME_JETS = 26, + DATA_TEAM_IN_INSTANCE = 27, + DATA_BLOOD_QUICKENING_STATE = 28, + DATA_HEROIC_ATTEMPTS = 29, + DATA_CROK_SCOURGEBANE = 30, + DATA_CAPTAIN_ARNATH = 31, + DATA_CAPTAIN_BRANDON = 32, + DATA_CAPTAIN_GRONDEL = 33, + DATA_CAPTAIN_RUPERT = 34, + DATA_VALITHRIA_TRIGGER = 35, + DATA_VALITHRIA_LICH_KING = 36, + DATA_HIGHLORD_TIRION_FORDRING = 37, + DATA_ARTHAS_PLATFORM = 38, + DATA_TERENAS_MENETHIL = 39, + DATA_ENEMY_GUNSHIP = 40, + DATA_UPPERSPIRE_TELE_ACT = 41, + DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL = 42 }; enum CreaturesIds @@ -247,6 +248,7 @@ enum CreaturesIds NPC_KINETIC_BOMB_TARGET = 38458, NPC_KINETIC_BOMB = 38454, NPC_SHOCK_VORTEX = 38422, + NPC_BLOOD_QUEEN_LANA_THEL_COUNCIL = 38004, // Blood-Queen Lana'thel NPC_BLOOD_QUEEN_LANA_THEL = 37955, diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 5354d1772b..718c0ebe23 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -173,6 +173,12 @@ class instance_icecrown_citadel : public InstanceMapScript switch (creature->GetEntry()) { + case NPC_LORD_MARROWGAR: + LordMarrowgarGUID = creature->GetGUID(); + break; + case NPC_LADY_DEATHWHISPER: + LadyDeahtwhisperGUID = creature->GetGUID(); + break; case NPC_KOR_KRON_GENERAL: if (TeamInInstance == ALLIANCE) creature->UpdateEntry(NPC_ALLIANCE_COMMANDER); @@ -249,6 +255,9 @@ class instance_icecrown_citadel : public InstanceMapScript case NPC_BLOOD_ORB_CONTROLLER: BloodCouncilControllerGUID = creature->GetGUID(); break; + case NPC_BLOOD_QUEEN_LANA_THEL_COUNCIL: + BloodQueenLanaThelCouncilGUID = creature->GetGUID(); + break; case NPC_BLOOD_QUEEN_LANA_THEL: BloodQueenLanaThelGUID = creature->GetGUID(); break; @@ -712,6 +721,10 @@ class instance_icecrown_citadel : public InstanceMapScript { switch (type) { + case DATA_LORD_MARROWGAR: + return LordMarrowgarGUID; + case DATA_LADY_DEATHWHISPER: + return LadyDeahtwhisperGUID; case DATA_ICECROWN_GUNSHIP_BATTLE: return GunshipGUID; case DATA_ENEMY_GUNSHIP: @@ -738,6 +751,8 @@ class instance_icecrown_citadel : public InstanceMapScript return BloodCouncilGUIDs[2]; case DATA_BLOOD_PRINCES_CONTROL: return BloodCouncilControllerGUID; + case DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL: + return BloodQueenLanaThelCouncilGUID; case DATA_BLOOD_QUEEN_LANA_THEL: return BloodQueenLanaThelGUID; case DATA_CROK_SCOURGEBANE: @@ -1425,6 +1440,8 @@ class instance_icecrown_citadel : public InstanceMapScript protected: EventMap Events; + ObjectGuid LordMarrowgarGUID; + ObjectGuid LadyDeahtwhisperGUID; ObjectGuid LadyDeathwisperElevatorGUID; ObjectGuid GunshipGUID; ObjectGuid EnemyGunshipGUID; @@ -1452,6 +1469,7 @@ class instance_icecrown_citadel : public InstanceMapScript ObjectGuid PutricideTableGUID; ObjectGuid BloodCouncilGUIDs[3]; ObjectGuid BloodCouncilControllerGUID; + ObjectGuid BloodQueenLanaThelCouncilGUID; ObjectGuid BloodQueenLanaThelGUID; ObjectGuid CrokScourgebaneGUID; ObjectGuid CrokCaptainGUIDs[4]; From 3fdbcf18ae2eeb7a965a9b2dc4b7e22796aaceae Mon Sep 17 00:00:00 2001 From: DevRival Date: Sun, 15 Nov 2015 02:00:18 +0100 Subject: [PATCH 343/524] Scripts/Spells: Hallow's End item Hallowed Wand Hallowed Wand items should cast a transformation on party members. by @DevRival, closes #3574 Before this patch, the following spells do not have any effect at all: - 24717, Pirate Costume - 24718, Ninja Costume - 24719, Leper Gnome Costume - 24720, Random Costume - 24737, Ghost Costume Details from testing on the current 3.3.5 branch (commit ecbbcc8): - 24724 (Skeleton Costume) seems to work as intended - 24733 (Bat Costume) only lasts 10 seconds instead of 60 minutes - 24741 (Wisp Costume) also seems to work as intended All the spells listed above are included in this PR. --- sql/updates/world/2015_11_15_3574_world.sql | 12 +++ src/server/scripts/Spells/spell_holiday.cpp | 81 +++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 sql/updates/world/2015_11_15_3574_world.sql diff --git a/sql/updates/world/2015_11_15_3574_world.sql b/sql/updates/world/2015_11_15_3574_world.sql new file mode 100644 index 0000000000..456a36fe88 --- /dev/null +++ b/sql/updates/world/2015_11_15_3574_world.sql @@ -0,0 +1,12 @@ +-- +-- Hallowed wand spell script names +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_hallow_end_wand'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(24717, 'spell_hallow_end_wand'), -- Pirate Costume +(24718, 'spell_hallow_end_wand'), -- Ninja Costume +(24719, 'spell_hallow_end_wand'), -- Leper Gnome Costume +(24720, 'spell_hallow_end_wand'), -- Random Costume +(24724, 'spell_hallow_end_wand'), -- Skeleton Costume +(24733, 'spell_hallow_end_wand'), -- Bat Costume +(24737, 'spell_hallow_end_wand'), -- Ghost Costume +(24741, 'spell_hallow_end_wand') -- Wisp Costume; diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index a1b218010a..e29f87a5ff 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -277,6 +277,86 @@ class spell_hallow_end_tricky_treat : public SpellScriptLoader } }; +// Hallowed wands +enum HallowendData +{ + //wand spells + SPELL_HALLOWED_WAND_PIRATE = 24717, + SPELL_HALLOWED_WAND_NINJA = 24718, + SPELL_HALLOWED_WAND_LEPER_GNOME = 24719, + SPELL_HALLOWED_WAND_RANDOM = 24720, + SPELL_HALLOWED_WAND_SKELETON = 24724, + SPELL_HALLOWED_WAND_WISP = 24733, + SPELL_HALLOWED_WAND_GHOST = 24737, + SPELL_HALLOWED_WAND_BAT = 24741 +}; + +class spell_hallow_end_wand : public SpellScriptLoader +{ +public: + spell_hallow_end_wand() : SpellScriptLoader("spell_hallow_end_wand") {} + + class spell_hallow_end_wand_SpellScript : public SpellScript + { + PrepareSpellScript(spell_hallow_end_wand_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_MALE) || + !sSpellMgr->GetSpellInfo(SPELL_PIRATE_COSTUME_FEMALE) || + !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_MALE) || + !sSpellMgr->GetSpellInfo(SPELL_NINJA_COSTUME_FEMALE) || + !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_MALE) || + !sSpellMgr->GetSpellInfo(SPELL_LEPER_GNOME_COSTUME_FEMALE) || + !sSpellMgr->GetSpellInfo(SPELL_GHOST_COSTUME_MALE) || + !sSpellMgr->GetSpellInfo(SPELL_GHOST_COSTUME_FEMALE)) + return false; + return true; + } + + void HandleScriptEffect() + { + Unit* caster = GetCaster(); + Unit* target = GetHitUnit(); + + uint32 spellId = 0; + uint8 gender = target->getGender(); + + switch (GetSpellInfo()->Id) + { + case SPELL_HALLOWED_WAND_LEPER_GNOME: + spellId = gender ? SPELL_LEPER_GNOME_COSTUME_FEMALE : SPELL_LEPER_GNOME_COSTUME_MALE; + break; + case SPELL_HALLOWED_WAND_PIRATE: + spellId = gender ? SPELL_PIRATE_COSTUME_FEMALE : SPELL_PIRATE_COSTUME_MALE; + break; + case SPELL_HALLOWED_WAND_GHOST: + spellId = gender ? SPELL_GHOST_COSTUME_FEMALE : SPELL_GHOST_COSTUME_MALE; + break; + case SPELL_HALLOWED_WAND_NINJA: + spellId = gender ? SPELL_NINJA_COSTUME_FEMALE : SPELL_NINJA_COSTUME_MALE; + break; + case SPELL_HALLOWED_WAND_RANDOM: + spellId = RAND(SPELL_HALLOWED_WAND_PIRATE, SPELL_HALLOWED_WAND_NINJA, SPELL_HALLOWED_WAND_LEPER_GNOME, SPELL_HALLOWED_WAND_SKELETON, SPELL_HALLOWED_WAND_WISP, SPELL_HALLOWED_WAND_GHOST, SPELL_HALLOWED_WAND_BAT); + break; + default: + return; + } + caster->CastSpell(target, spellId, true); + } + + void Register() override + { + AfterHit += SpellHitFn(spell_hallow_end_wand_SpellScript::HandleScriptEffect); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_hallow_end_wand_SpellScript(); + } +}; + enum PilgrimsBountyBuffFood { // Pilgrims Bounty Buff Food @@ -886,6 +966,7 @@ void AddSC_holiday_spell_scripts() new spell_hallow_end_trick(); new spell_hallow_end_trick_or_treat(); new spell_hallow_end_tricky_treat(); + new spell_hallow_end_wand(); // Pilgrims Bounty new spell_pilgrims_bounty_buff_food("spell_gen_slow_roasted_turkey", SPELL_WELL_FED_AP_TRIGGER); new spell_pilgrims_bounty_buff_food("spell_gen_cranberry_chutney", SPELL_WELL_FED_ZM_TRIGGER); From f012800751396309e75d0baf4ed3406855c8e93a Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 17 Nov 2015 17:51:09 +0100 Subject: [PATCH 344/524] Core/Spells: Fixed typo in ecbbcc8972f43376c65cb726c37cf777ee968f66 --- src/server/game/Spells/SpellHistory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 0dd4ff8c10..ed5c31c25c 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -471,7 +471,7 @@ bool SpellHistory::HasCooldown(SpellInfo const* spellInfo, uint32 itemId /*= 0*/ return true; uint32 category = 0; - GetCooldownDurations(spellInfo, itemId, nullptr, &itemId, nullptr); + GetCooldownDurations(spellInfo, itemId, nullptr, &category, nullptr); if (!category) return false; From 0e9f714a097bb9a5f16c4883e26f19db0dea9a1b Mon Sep 17 00:00:00 2001 From: jackpoz Date: Thu, 19 Nov 2015 20:23:09 +0100 Subject: [PATCH 345/524] Core/Items: Fix crash Fix crash happening if item_template.StatsCount field in the database was higher than 10. Fixes #15868 --- src/server/game/Globals/ObjectMgr.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 046ce422cd..b2be5c49b9 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2347,6 +2347,12 @@ void ObjectMgr::LoadItemTemplates() itemTemplate.ContainerSlots = uint32(fields[26].GetUInt8()); itemTemplate.StatsCount = uint32(fields[27].GetUInt8()); + if (itemTemplate.StatsCount > MAX_ITEM_PROTO_STATS) + { + TC_LOG_ERROR("sql.sql", "Item (Entry: %u) has too large value in statscount (%u), replace by hardcoded limit (%u).", entry, itemTemplate.StatsCount, MAX_ITEM_PROTO_STATS); + itemTemplate.StatsCount = MAX_ITEM_PROTO_STATS; + } + for (uint8 i = 0; i < itemTemplate.StatsCount; ++i) { itemTemplate.ItemStat[i].ItemStatType = uint32(fields[28 + i*2].GetUInt8()); @@ -2594,12 +2600,6 @@ void ObjectMgr::LoadItemTemplates() itemTemplate.ContainerSlots = MAX_BAG_SIZE; } - if (itemTemplate.StatsCount > MAX_ITEM_PROTO_STATS) - { - TC_LOG_ERROR("sql.sql", "Item (Entry: %u) has too large value in statscount (%u), replace by hardcoded limit (%u).", entry, itemTemplate.StatsCount, MAX_ITEM_PROTO_STATS); - itemTemplate.StatsCount = MAX_ITEM_PROTO_STATS; - } - for (uint8 j = 0; j < itemTemplate.StatsCount; ++j) { // for ItemStatValue != 0 From b5c12bd36f6d2e99ba4a94a1ba00de951a365f06 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 20 Nov 2015 15:02:20 +0100 Subject: [PATCH 346/524] DB/Quest: The Dead Rise! --- sql/updates/world/2015_11_20_00_world.sql | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 sql/updates/world/2015_11_20_00_world.sql diff --git a/sql/updates/world/2015_11_20_00_world.sql b/sql/updates/world/2015_11_20_00_world.sql new file mode 100644 index 0000000000..7c5fe7ea42 --- /dev/null +++ b/sql/updates/world/2015_11_20_00_world.sql @@ -0,0 +1,35 @@ +-- +UPDATE `creature_addon` SET `auras`="44792" WHERE `guid`=100024; +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (24883, 24876, 24877, 24875); +UPDATE `creature` SET `MovementType`=0, `spawndist`=0, `position_z`=329.648 WHERE `id`=24883; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (24883); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (24883) 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 +(24883,0,0,0,1,0,70,0,0,5000,6000,10000,11,44788,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"), +(24883,0,1,0,1,0,70,0,0,5000,6000,10000,11,44787,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"), +(24883,0,2,0,1,0,70,0,0,5000,6000,10000,11,44789,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"), +(24883,0,3,0,1,0,70,0,0,5000,6000,10000,11,44791,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"), +(24883,0,4,0,1,0,70,0,0,5000,6000,10000,11,44790,0,0,0,0,0,19,24876,20,0,0,0,0,0,"Rodin Lightning Enabler - Ooc - Cast Rodin's Lightning Bolt"); + +DELETE FROM `creature_text` WHERE `entry` IN (24876, 24875, 24877, 24874) AND `groupid`=1; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`, `BroadcastTextId`) VALUES +(24874, 1, 0, 'From sundered ground the sacrament was stolen. The Shield of Aesirites is lost. Unrest will be eternal.', 12, 0, 100, 0, 0, 0, 'Fengir the Disgraced', 23970), +(24876, 1, 0, 'The Staff of Storm''s Fury pilfered. A curse upon this land! The storms will never cease!', 12, 0, 100, 0, 0, 0, 'Rodin the Reckless', 23971), +(24877, 1, 0, 'The Frozen Heart of Isuldof will consume this land until it is returned. Woe unto those that hold the heart as the curse of frozen blood besets them...', 12, 0, 100, 0, 0, 0, 'Isuldof Iceheart', 23972), +(24875, 1, 0, 'The anguish of ten-thousand years awaits any foolish enough to don the Ancient Armor of the Kvaldir. Beware the mist and fog, mortals; for with them comes your end.', 12, 0, 100, 0, 0, 0, 'Windan of the Kvaldir', 23973); + +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (187023, 187026, 187022, 187027); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (187023, 187026, 187022, 187027) AND `source_type`=1; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (24876, 24875, 24877, 24874) AND `source_type`=0 AND id=2; +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 +(187023, 1, 0, 0, 70, 0, 100, 0, 1, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 24876, 30, 0, 0, 0, 0, 0, 'Relic - On State 1 - Set data'), +(187026, 1, 0, 0, 70, 0, 100, 0, 1, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 24877, 30, 0, 0, 0, 0, 0, 'Relic - On State 1 - Set data'), +(187022, 1, 0, 0, 70, 0, 100, 0, 1, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 24874, 30, 0, 0, 0, 0, 0, 'Relic - On State 1 - Set data'), +(187027, 1, 0, 0, 70, 0, 100, 0, 1, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 24875, 30, 0, 0, 0, 0, 0, 'Relic - On State 1 - Set data'), +(24876, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Rodin the Reckless - On data set - Say line 2'), +(24877, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Isuldof Iceheart - On data set - Say line 2'), +(24874, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Fengir the Disgraced - On data set - Say line 2'), +(24875, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Windan of the Kvaldir - On data set - Say line 2'); + +UPDATE `creature_template` SET `MovementType`=0 WHERE `entry`=30331; -- fix a DB error not related to the quest From 50afa7c7a5ea3723e5dccd155774a206b490acce Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 20 Nov 2015 23:16:43 +0100 Subject: [PATCH 347/524] Update UnixInstall.txt --- doc/UnixInstall.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/doc/UnixInstall.txt b/doc/UnixInstall.txt index 7c27e43149..968d6778ac 100644 --- a/doc/UnixInstall.txt +++ b/doc/UnixInstall.txt @@ -34,21 +34,21 @@ than where to install using flags built into our cmake files. Just open up CMakeLists.txt in the main folder and take a look at some of the flags like - SERVERS Build worldserver and authserver - SCRIPTS Build core with scripts included - TOOLS Build map/vmap extraction/assembler tools - USE_SCRIPTPCH Use precompiled headers when compiling scripts - USE_COREPCH Use precompiled headers when compiling servers - WITH_WARNINGS Show all warnings during compile - WITH_COREDEBUG Include additional debug-code in core - PREFIX Set installation directory - NOJEM Do not build with jemalloc (advanced users only) - CONF_DIR Set path as default configuration directory - LIBSDIR Set path as default library directory - CMAKE_C_FLAGS Set C_FLAGS for compile (advanced users only) - CMAKE_CXX_FLAGS Set CXX_FLAGS for compile (advanced users only) - CMAKE_BUILD_TYPE Set buildtype - the supported modes are : - Release, MinSizeRel, RelWithDebInfo, Debug + SERVERS Build worldserver and authserver + SCRIPTS Build core with scripts included + TOOLS Build map/vmap extraction/assembler tools + USE_SCRIPTPCH Use precompiled headers when compiling scripts + USE_COREPCH Use precompiled headers when compiling servers + WITH_WARNINGS Show all warnings during compile + WITH_COREDEBUG Include additional debug-code in core + CMAKE_INSTALL_PREFIX Set installation directory + NOJEM Do not build with jemalloc (advanced users only) + CONF_DIR Set path as default configuration directory + LIBSDIR Set path as default library directory + CMAKE_C_FLAGS Set C_FLAGS for compile (advanced users only) + CMAKE_CXX_FLAGS Set CXX_FLAGS for compile (advanced users only) + CMAKE_BUILD_TYPE Set buildtype - the supported modes are : + Release, MinSizeRel, RelWithDebInfo, Debug Of course, replace the paths in PREFIX, CONF_DIR and LIBSDIR with the directories you wish to install TrinityCore to. The datadir is where maps, From 2639783fe1fbb3050556948dd01066605247dbb2 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 20 Nov 2015 23:21:49 +0100 Subject: [PATCH 348/524] Update UnixInstall.txt --- doc/UnixInstall.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/UnixInstall.txt b/doc/UnixInstall.txt index 968d6778ac..4b37f5e316 100644 --- a/doc/UnixInstall.txt +++ b/doc/UnixInstall.txt @@ -6,10 +6,10 @@ WARNING: THIS DOCUMENTATION IS NOT ALWAYS UP TO DATE. FOR MORE UP-TO-DATE INFORMATION, CHECK THE TRINITY WIKI. ========================================================= -CHECK http://www.trinitycore.info/How-to:Linux FOR FURTHER HELP +CHECK http://www.trinitycore.info/ FOR FURTHER HELP These are instructions for installation in a Linux environment, if you are -using Windows refer to http://www.trinitycore.info/How-to:Win +using Windows refer to http://www.trinitycore.info/ Installing TrinityCore is fairly simple on a Linux machine, assuming you have all required applications @@ -25,7 +25,7 @@ you created a dir named build ad want to have your finalcompiled product installed in /home/trinity/server, an example sequence of commands can be : - cmake ../ -DPREFIX=/home/trinity/server -DTOOLS=1 -DWITH_WARNINGS=1 + cmake ../ -DCMAKE_INSTALL_PREFIX=/home/trinity/server -DTOOLS=1 -DWITH_WARNINGS=1 make make install @@ -50,8 +50,8 @@ flags like CMAKE_BUILD_TYPE Set buildtype - the supported modes are : Release, MinSizeRel, RelWithDebInfo, Debug -Of course, replace the paths in PREFIX, CONF_DIR and LIBSDIR with the -directories you wish to install TrinityCore to. The datadir is where maps, +Of course, replace the paths in CMAKE_INSTALL_PREFIX with the +directory you wish to install TrinityCore to. The datadir is where maps, DBCs, and SQLs are stored. The sysconfdir is where configuration files are stored. Once TrinityCore is installed you will need to apply database updates From 254aa21a85bbfda2503ef723fb6cb0d4c8670ca9 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 20 Nov 2015 23:23:21 +0100 Subject: [PATCH 349/524] Update UnixInstall.txt --- doc/UnixInstall.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/UnixInstall.txt b/doc/UnixInstall.txt index 4b37f5e316..a97fdd2bd3 100644 --- a/doc/UnixInstall.txt +++ b/doc/UnixInstall.txt @@ -36,7 +36,7 @@ flags like SERVERS Build worldserver and authserver SCRIPTS Build core with scripts included - TOOLS Build map/vmap extraction/assembler tools + TOOLS Build map/mmaps/vmap extraction/assembler tools USE_SCRIPTPCH Use precompiled headers when compiling scripts USE_COREPCH Use precompiled headers when compiling servers WITH_WARNINGS Show all warnings during compile From e4e0acbe5e349eaf51b50b610300de96971f5347 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 22 Nov 2015 12:04:20 +0100 Subject: [PATCH 350/524] DB/Creature: Delete duplicate spawn By tkrokli, closes #15874 --- sql/updates/world/2015_11_22_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_11_22_00_world.sql diff --git a/sql/updates/world/2015_11_22_00_world.sql b/sql/updates/world/2015_11_22_00_world.sql new file mode 100644 index 0000000000..2b70a2c97b --- /dev/null +++ b/sql/updates/world/2015_11_22_00_world.sql @@ -0,0 +1,2 @@ +-- Remove wrong spawn of Cornish Rex Cat in Dun Morogh: +DELETE FROM `creature` WHERE `guid`= 1528 and `id`= 7384; From 09b15428bc8854bd388d689e8ccf3ae9f9903d67 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 22 Nov 2015 12:08:18 +0100 Subject: [PATCH 351/524] DB/Misc: Fix typo in 'OdesyusLanding' By tkrokli, closes #15725 --- sql/updates/world/2015_11_22_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_11_22_01_world.sql diff --git a/sql/updates/world/2015_11_22_01_world.sql b/sql/updates/world/2015_11_22_01_world.sql new file mode 100644 index 0000000000..ba63c72ba1 --- /dev/null +++ b/sql/updates/world/2015_11_22_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `game_tele` SET `name` = 'OdesyusLanding' WHERE `id` = 693; From 5d155895a7c6f93b6a64328721b9bef9fec8ab79 Mon Sep 17 00:00:00 2001 From: sirikfoll Date: Sun, 22 Nov 2015 17:13:59 +0100 Subject: [PATCH 352/524] Core/Creature: Flying vehicles able to fly again by @sirikfoll, closes #15861 Flying vehicles could no longer leave the ground after commit 52692c3. This is a modification of commit 52692c3 to make flying vehicles work again. --- src/server/game/Entities/Creature/Creature.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 9173d44ae8..ea10ce7988 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -440,8 +440,8 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/) ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); } - LoadCreaturesAddon(); UpdateMovementFlags(); + LoadCreaturesAddon(); return true; } From 9a2fc98c73fa25673b21e424c3557a78a62a9f53 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Sun, 22 Nov 2015 20:45:15 +0100 Subject: [PATCH 353/524] DB/Quest: Fix Seal of Ascension (quest chain for Upper Blackrock Spire) by @Gargarensis Closes #15021 --- sql/updates/world/2015_11_22_03_world.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 sql/updates/world/2015_11_22_03_world.sql diff --git a/sql/updates/world/2015_11_22_03_world.sql b/sql/updates/world/2015_11_22_03_world.sql new file mode 100644 index 0000000000..9bf71a146d --- /dev/null +++ b/sql/updates/world/2015_11_22_03_world.sql @@ -0,0 +1,17 @@ +-- Seal of Ascension 4743 + +-- Emberstrife Template +UPDATE creature_template SET spell8=16054, AIName="SmartAI" WHERE entry=10321; + +-- Emberstrife Text +DELETE FROM creature_text WHERE entry=10321; +INSERT INTO creature_text (entry, groupid, id, TEXT, TYPE, LANGUAGE, probability, emote, duration, textrange, COMMENT) VALUES +(10321, 0, 0, "Emberstrife will falters!", 41, 0, 100, 0, 2000, 50, "Emberstrife Emote when below 10%"); + +-- Emberstrife AI +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 10321); +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 +(10321, 0, 0, 0, 2, 0, 100, 0, 0, 10, 60000, 60000, 1, 0, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Emote Below 10%'), +(10321, 0, 1, 0, 0, 0, 100, 0, 2000, 5000, 5000, 12000, 11, 9573, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Flame Breath'), +(10321, 0, 2, 0, 0, 0, 100, 0, 2000, 5000, 4000, 10000, 11, 40504, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Cleave'), +(10321, 0, 3, 0, 2, 0, 100, 0, 0, 10, 60000, 60000, 11, 8269, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Frenzy below 10%'); From d93b445d31aec7ffc4e937a2422ff95328b06a29 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Sun, 22 Nov 2015 20:47:00 +0100 Subject: [PATCH 354/524] Fix file name --- .../{2015_11_22_03_world.sql => 2015_11_22_03_world_355.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_11_22_03_world.sql => 2015_11_22_03_world_355.sql} (100%) diff --git a/sql/updates/world/2015_11_22_03_world.sql b/sql/updates/world/2015_11_22_03_world_355.sql similarity index 100% rename from sql/updates/world/2015_11_22_03_world.sql rename to sql/updates/world/2015_11_22_03_world_355.sql From 2cecc7b1f7b846d24f25e0f5acb957c4c4b4484d Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 23 Nov 2015 17:28:57 +0100 Subject: [PATCH 355/524] DB/Quest : Tomb of the Lightbringer Closes #14733 By @Gargarensis Clean required: https://github.com/TrinityCore/TrinityCore/blob/ab90f744866d761a302380e12ed7b0dee23697f0/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp#L280 --- sql/updates/world/2015_11_23_00_world_335.sql | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 sql/updates/world/2015_11_23_00_world_335.sql diff --git a/sql/updates/world/2015_11_23_00_world_335.sql b/sql/updates/world/2015_11_23_00_world_335.sql new file mode 100644 index 0000000000..fffc4531e5 --- /dev/null +++ b/sql/updates/world/2015_11_23_00_world_335.sql @@ -0,0 +1,74 @@ +-- +-- Quest Tomb of the Lighbringer - 9446 +-- Old scripts cleanup +DELETE FROM `script_waypoint` WHERE `entry`=17238; +-- Creature text +DELETE FROM `creature_text` WHERE `entry`=17238; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `TEXT`, `TYPE`, `LANGUAGE`, `probability`, `emote`, `duration`, `sound`, `TextRange`, `COMMENT`, `BroadcastTextId`) VALUES +(17238, 0, 0, "Shall we begin, my friend?", 12, 7, 100, 6, 0, 0, 0, "Q Tomb of the Lighbringer", 13613), +(17238, 1, 0, "This area is known to be full of foul Scourge. You may want to take a moment to prepare any defenses at your disposal.", 12, 7, 100, 1, 0, 0, 0, "Q Tomb of the Lighbringer", 13614), +(17238, 2, 0, "Beware! We are attacked!", 12, 7, 100, 5, 0, 0, 0, "Q Tomb of the Lighbringer", 13616), +(17238, 3, 0, "It must be the purity of the Mark of the Lightbringer that is drawing forth the Scourge to us. We must proceed with caution lest we be overwhelmed!", 12, 7, 100, 1, 0, 0, 0, "Q Tomb of the Lighbringer", 13617), +(17238, 4, 0, "We are beset upon again! Defend yourself!", 12, 7, 100, 5, 0, 0, 0, "Q Tomb of the Lighbringer", 13618), +(17238, 5, 0, "This land truly needs to be cleansed by the Light! Let us continue on to the tomb. It isn't far now.", 12, 7, 100, 1, 0, 0, 0, "Q Tomb of the Lighbringer", 13619), +(17238, 6, 0, "Very well, let us continue.", 12, 7, 100, 1, 0, 0, 0, "Q Tomb of the Lighbringer", 13615), +(17238, 7, 0, "Thank you my friend for making this possible. This is a day that I shall never forget! I think I will stay a while. Please return to High Priestess MacDonnell at the camp. I know that she'll be keenly interested to know of what has transpired here.", 12, 7, 100, 2, 0, 0, 0, "Q Tomb of the Lighbringer", 13624); + +-- Anchorite Truuen AI +UPDATE `creature_template` SET `scriptname`="", `AIName`="SmartAI" WHERE `entry` IN (17238, 17233); +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` IN (17238, 17233); +DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryorguid` IN (1723800, 1723801, 1723300); +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 +(17238, 0, 0, 1, 19, 0, 100, 0, 9446, 0, 0, 0, 1, 0, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Quest Taken - Say text'), +(17238, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 53, 0, 17238, 0, 9446, 45000, 1, 17, 0, 30, 0, 0, 0, 0, 0, 'Anchorite Truuen - Quest Taken - Start WP'), +(17238, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 54, 5000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Quest Taken - Pause before movements'), +(17238, 0, 3, 18, 61, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Quest Taken - Remove npc flag'), +(17238, 0, 4, 5, 40, 0, 100, 0, 3, 0, 0, 0, 54, 15000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Pause at WP 3'), +(17238, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 1, 6000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Speak'), +(17238, 0, 6, 7, 40, 0, 100, 0, 5, 0, 0, 0, 12, 4472, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1039.984, -1577.659, 61.437, 1.753951, 'Anchorite Truuen - On wp reached - Summon creature'), +(17238, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 12, 1802, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1031.033, -1576.279, 62.436, 0.265621, 'Anchorite Truuen - On wp reached - Summon creature'), +(17238, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 2, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Say text'), +(17238, 0, 9, 0, 40, 0, 100, 0, 7, 0, 0, 0, 1, 3, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Say text'), +(17238, 0, 10, 11, 40, 0, 100, 0, 11, 0, 0, 0, 1, 4, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Say text'), +(17238, 0, 11, 12, 61, 0, 100, 0, 0, 0, 0, 0, 12, 4475, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1110.658, -1742.137, 61.019, 2.413687, 'Anchorite Truuen - On wp reached - Summon creature'), +(17238, 0, 12, 13, 61, 0, 100, 0, 0, 0, 0, 0, 12, 4475, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1106.837, -1750.592, 61.174, 2.409762, 'Anchorite Truuen - On wp reached - Summon creature'), +(17238, 0, 13, 14, 61, 0, 100, 0, 0, 0, 0, 0, 12, 4475, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1111.725, -1753.404, 61.459, 2.755339, 'Anchorite Truuen - On wp reached - Summon creature'), +(17238, 0, 14, 0, 61, 0, 100, 0, 0, 0, 0, 0, 12, 4475, 3, 60000, 1, 0, 0, 8, 0, 0, 0, 1117.459, -1743.327, 61.000, 2.853514, 'Anchorite Truuen - On wp reached - Summon creature'), +(17238, 0, 15, 0, 40, 0, 100, 0, 12, 0, 0, 0, 1, 5, 2000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - say text'), +(17238, 0, 16, 17, 40, 0, 100, 0, 17, 0, 0, 0, 12, 17233, 3, 60000, 0, 0, 0, 8, 0, 0, 0, 971.86, -1825.42, 84, 0, 'Anchorite Truuen - On wp reached - Summon creature'), +(17238, 0, 17, 0, 61, 0, 100, 0, 0, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Kneels'), +(17238, 0, 18, 0, 61, 0, 100, 0, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On quest taken - Set Faction'), +(17238, 0, 19, 0, 40, 0, 100, 0, 3, 0, 0, 0, 80, 1723800, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On wp reached - Action list'), +(1723800, 9, 0, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Action list - Say text'), +(17238, 0, 20, 0, 38, 0, 100, 0, 0, 1, 0, 0, 80, 1723801, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - On data set - Action list'), +(1723801, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Action list - remove kneel'), +(1723801, 9, 1, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 1, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Action list - Say text'), +(1723801, 9, 2, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Truuen - Action list - Despawns'), +(17233, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 1723300, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost of Uther - Just summoned - Action list'), +(1723300, 9, 0, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost of Uther - Action list - Say text'), +(1723300, 9, 1, 0, 0, 0, 100, 0, 9000, 9000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost of Uther - Action list - Say text'), +(1723300, 9, 2, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 17238, 20, 0, 0, 0, 0, 0, 'Ghost of Uther - Action list - Set data'), +(1723300, 9, 3, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghost of Uther - Action list - Despawn'); + +-- Waypoints +DELETE FROM `waypoints` WHERE `entry`=17238; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(17238, 1, 946, -1430, 64, "anchorite_truuen_Q9446"), +(17238, 2, 974, -1439, 66, "anchorite_truuen_Q9446"), +(17238, 3, 1031, -1474, 64, "anchorite_truuen_Q9446"), +(17238, 4, 1039, -1503, 66, "anchorite_truuen_Q9446"), +(17238, 5, 1036, -1566, 62, "anchorite_truuen_Q9446"), +(17238, 6, 1036, -1568, 62, "anchorite_truuen_Q9446"), +(17238, 7, 1038, -1662, 61, "anchorite_truuen_Q9446"), +(17238, 8, 1047, -1683, 61, "anchorite_truuen_Q9446"), +(17238, 9, 1064, -1710, 61, "anchorite_truuen_Q9446"), +(17238, 10, 1099, -1738, 61, "anchorite_truuen_Q9446"), +(17238, 11, 1113, -1746, 61, "anchorite_truuen_Q9446"), +(17238, 12, 1118, -1750, 61, "anchorite_truuen_Q9446"), +(17238, 13, 1156, -1761, 61, "anchorite_truuen_Q9446"), +(17238, 14, 1152, -1773, 61, "anchorite_truuen_Q9446"), +(17238, 15, 1080, -1802, 65, "anchorite_truuen_Q9446"), +(17238, 16, 1019, -1810, 78, "anchorite_truuen_Q9446"), +(17238, 17, 976, -1823, 81, "anchorite_truuen_Q9446"); + +UPDATE `creature_text` SET `text`="%s's will falters.", `BroadcastTextId`=5594 WHERE `entry`=10321 AND `groupid`=0 AND `id`=0; -- Fix text for a previous commit From 659428f636a8cc0bd0732edf90edd6bd72af8d7f Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 23 Nov 2015 19:10:44 +0100 Subject: [PATCH 356/524] DB: Remove skinloot from Critters By @tkrokli Closes #15871 --- sql/updates/world/2015_11_23_01_world_335.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2015_11_23_01_world_335.sql diff --git a/sql/updates/world/2015_11_23_01_world_335.sql b/sql/updates/world/2015_11_23_01_world_335.sql new file mode 100644 index 0000000000..8432c2d14f --- /dev/null +++ b/sql/updates/world/2015_11_23_01_world_335.sql @@ -0,0 +1,3 @@ +UPDATE `creature_template` SET `skinloot` = 0 WHERE `entry` IN (721,883,890,1933,2098,2442,2620,4166,5951,10780,12296,12297,12298,12299,17467); +-- Remove unreferenced skinning_loot_template entries because of this update: +DELETE FROM `skinning_loot_template` WHERE `Entry` IN (1933,12299,100000); From 1461634e698561b55dd65a6c0e23b20379631b4c Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 23 Nov 2015 19:26:27 +0100 Subject: [PATCH 357/524] DB: Add comments on skinning loot template table By @tkrokli Closes #15760 --- sql/updates/world/2015_11_23_02_world_335.sql | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 sql/updates/world/2015_11_23_02_world_335.sql diff --git a/sql/updates/world/2015_11_23_02_world_335.sql b/sql/updates/world/2015_11_23_02_world_335.sql new file mode 100644 index 0000000000..ba569d1420 --- /dev/null +++ b/sql/updates/world/2015_11_23_02_world_335.sql @@ -0,0 +1,134 @@ +-- +-- Fill in the blanks in the `Comment` fields in `skinning_loot_template`: +UPDATE `skinning_loot_template` SET `Comment`= 'Light Hide' WHERE `Item`= 783 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Light Leather' WHERE `Item`= 2318 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Medium Leather' WHERE `Item`= 2319 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Wool Cloth' WHERE `Item`= 2592 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Ruined Leather Scraps' WHERE `Item`= 2934 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Medium Hide' WHERE `Item`= 4232 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Heavy Leather' WHERE `Item`= 4234 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Heavy Hide' WHERE `Item`= 4235 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Thick Leather' WHERE `Item`= 4304 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Deviate Scale' WHERE `Item`= 6470 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Perfect Deviate Scale' WHERE `Item`= 6471 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Black Whelp Scale' WHERE `Item`= 7286 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Red Whelp Scale' WHERE `Item`= 7287 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Green Whelp Scale' WHERE `Item`= 7392 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Shadowcat Hide' WHERE `Item`= 7428 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Zesty Clam Meat' WHERE `Item`= 7974 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Scorpid Scale' WHERE `Item`= 8154 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Worn Dragonscale' WHERE `Item`= 8165 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Turtle Scale' WHERE `Item`= 8167 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Thick Hide' WHERE `Item`= 8169 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Rugged Leather' WHERE `Item`= 8170 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Rugged Hide' WHERE `Item`= 8171 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Thick Wolfhide' WHERE `Item`= 8368 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Thick Yeti Hide' WHERE `Item`= 8973 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Patch of Tainted Skin' WHERE `Item`= 11512 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Thick Yeti Fur' WHERE `Item`= 12366 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Brilliant Chromatic Scale' WHERE `Item`= 12607 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Pristine Hide of the Beast' WHERE `Item`= 12731 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Heavy Scorpid Scale' WHERE `Item`= 15408 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Scale of Onyxia' WHERE `Item`= 15410 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Green Dragonscale' WHERE `Item`= 15412 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Red Dragonscale' WHERE `Item`= 15414 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Blue Dragonscale' WHERE `Item`= 15415 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Black Dragonscale' WHERE `Item`= 15416 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Devilsaur Leather' WHERE `Item`= 15417 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Warbear Leather' WHERE `Item`= 15419 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Frostsaber Leather' WHERE `Item`= 15422 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Chimera Leather' WHERE `Item`= 15423 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Core Leather' WHERE `Item`= 17012 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Shiny Fish Scales' WHERE `Item`= 17057 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Rage Scar Yeti Hide' WHERE `Item`= 18947 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Primal Bat Leather' WHERE `Item`= 19767 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Primal Tiger Leather' WHERE `Item`= 19768 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Silithid Chitin' WHERE `Item`= 20498 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Broken Silithid Chitin' WHERE `Item`= 20499 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Light Silithid Carapace' WHERE `Item`= 20500 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Heavy Silithid Carapace' WHERE `Item`= 20501 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Knothide Leather' WHERE `Item`= 21887 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Flame Spessarite' WHERE `Item`= 21929 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Air' WHERE `Item`= 22572 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Earth' WHERE `Item`= 22573 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Life' WHERE `Item`= 22575 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Mana' WHERE `Item`= 22576 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Shadow' WHERE `Item`= 22577 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Mote of Water' WHERE `Item`= 22578 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Felweed' WHERE `Item`= 22785 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Dreaming Glory' WHERE `Item`= 22786 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Ragveil' WHERE `Item`= 22787 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Terocone' WHERE `Item`= 22789 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Ancient Lichen' WHERE `Item`= 22790 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Mana Thistle' WHERE `Item`= 22793 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Fel Lotus' WHERE `Item`= 22794 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Blood Garnet' WHERE `Item`= 23077 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Deep Peridot' WHERE `Item`= 23079 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Shadow Draenite' WHERE `Item`= 23107 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Golden Draenite' WHERE `Item`= 23112 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Azure Moonstone' WHERE `Item`= 23117 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Adamantite Ore' WHERE `Item`= 23425 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Living Ruby' WHERE `Item`= 23436 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Talasite' WHERE `Item`= 23437 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Star of Elune' WHERE `Item`= 23438 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Noble Topaz' WHERE `Item`= 23439 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Dawnstone' WHERE `Item`= 23440 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Nightseye' WHERE `Item`= 23441 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Moongraze Buck Hide' WHERE `Item`= 23677 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Crystalline Fragments' WHERE `Item`= 24189 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Unidentified Plant Parts' WHERE `Item`= 24401 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Knothide Leather Scraps' WHERE `Item`= 25649 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Crystal Infused Leather' WHERE `Item`= 25699 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Fel Scales' WHERE `Item`= 25700 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Fel Hide' WHERE `Item`= 25707 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Thick Clefthoof Leather' WHERE `Item`= 25708 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Small Mushroom' WHERE `Item`= 25813 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Zangar Caps' WHERE `Item`= 27859 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Sporeggar Mushroom' WHERE `Item`= 29453 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Cobra Scales' WHERE `Item`= 29539 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Wind Scales' WHERE `Item`= 29547 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Nether Dragonscales' WHERE `Item`= 29548 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Lionseye' WHERE `Item`= 32229 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Nethermine Flayer Hide' WHERE `Item`= 32470 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Honey-Spiced Lichen' WHERE `Item`= 33452 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Borean Leather Scraps' WHERE `Item`= 33567 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Borean Leather' WHERE `Item`= 33568 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Nether Residue' WHERE `Item`= 35229 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Ice Shard Cluster' WHERE `Item`= 36728 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Sprung Sprocket' WHERE `Item`= 36813 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Goldclover' WHERE `Item`= 36901 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Constrictor Grass' WHERE `Item`= 36902 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Adder\'s Tongue' WHERE `Item`= 36903 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Tiger Lily' WHERE `Item`= 36904 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Lichbloom' WHERE `Item`= 36905 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Icethorn' WHERE `Item`= 36906 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Talandra\'s Rose' WHERE `Item`= 36907 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Air' WHERE `Item`= 37700 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Earth' WHERE `Item`= 37701 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Fire' WHERE `Item`= 37702 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Life' WHERE `Item`= 37704 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Crystallized Water' WHERE `Item`= 37705 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Icy Dragonscale' WHERE `Item`= 38557 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Nerubian Chitin' WHERE `Item`= 38558 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Jormungar Scale' WHERE `Item`= 38561 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Geodesic Fragments' WHERE `Item`= 39220 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Frosty Mushroom' WHERE `Item`= 39516 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Handful of Cobalt Bolts' WHERE `Item`= 39681 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Overcharged Capacitor' WHERE `Item`= 39682 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Hair Trigger' WHERE `Item`= 39684 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Indestructible Frame' WHERE `Item`= 39685 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Volatile Blasting Trigger' WHERE `Item`= 39690 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Arctic Fur' WHERE `Item`= 44128 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Whizzed-Out Gizmo' WHERE `Item`= 41337 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Sprung Whirlygig' WHERE `Item`= 41338 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Stoic Mammoth Hide' WHERE `Item`= 42542 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Loque\'Nahak\'s Pelt' WHERE `Item`= 44687 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Schematic: Jeeves' WHERE `Item`= 49050 AND `Comment` IS NULL; +-- Reference loot +UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Cobrascale Gloves' WHERE `Entry`= 29724 and `Reference`= 50017 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Windscale Hood' WHERE `Entry`= 29725 and `Reference`= 50013 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Hood of Primal Life' WHERE `Entry`= 29726 and `Reference`= 50014 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Gloves of the Living Touch' WHERE `Entry`= 29727 and `Reference`= 50016 AND `Comment` IS NULL; +UPDATE `skinning_loot_template` SET `Comment`= 'Pattern: Windslayer Wraps' WHERE `Entry`= 29728 and `Reference`= 50015 AND `Comment` IS NULL;UPDATE `creature_template` SET `skinloot` = 0 WHERE `entry` IN (721,883,890,1933,2098,2442,2620,4166,5951,10780,12296,12297,12298,12299,17467); +-- Remove unreferenced skinning_loot_template entries because of this update: +DELETE FROM `skinning_loot_template` WHERE `Entry` IN (1933,12299,100000); From 0d3ba0a79c1cdd281f57a6fd905036d5c68c1027 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 23 Nov 2015 19:37:37 +0100 Subject: [PATCH 358/524] DB/Loot: Fix Skinning Loot for Mottled Boar and Scorpid Worker By @tkrokli Closes #15773 Closes #15772 --- sql/updates/world/2015_11_23_03_world_335.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 sql/updates/world/2015_11_23_03_world_335.sql diff --git a/sql/updates/world/2015_11_23_03_world_335.sql b/sql/updates/world/2015_11_23_03_world_335.sql new file mode 100644 index 0000000000..9ef011f551 --- /dev/null +++ b/sql/updates/world/2015_11_23_03_world_335.sql @@ -0,0 +1,13 @@ +-- Mottled Boar - Skinning Loot +UPDATE `creature_template` SET `skinloot`= 3098 WHERE `entry` = 3098; +DELETE FROM `skinning_loot_template` WHERE `Entry`=3098; +INSERT INTO `skinning_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(3098, 2318, 0, 10, 0, 1, 1, 1, 1, NULL), -- Light Leather, 10% chance +(3098, 2934, 0, 88, 0, 1, 1, 1, 1, NULL); -- Ruined Leather Scraps, 88% chance + +-- Scorpid Worker - Skinning Loot +UPDATE `creature_template` SET `skinloot`= 3124 WHERE `entry` = 3124; +DELETE FROM `skinning_loot_template` WHERE `Entry`= 3124; +INSERT INTO `skinning_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(3124, 2318, 0, 10, 0, 1, 1, 1, 1, NULL), -- Light Leather, 10% chance +(3124, 2934, 0, 88, 0, 1, 1, 1, 1, NULL); -- Ruined Leather Scraps, 88% chance From 5c97339e89237807274f74a0d67224ed5f092c71 Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 23 Nov 2015 19:58:41 +0100 Subject: [PATCH 359/524] DB/Quest: The Might of Kalimdor By @sirikfoll Closes #15830 --- sql/updates/world/2015_11_23_04_world_335.sql | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 sql/updates/world/2015_11_23_04_world_335.sql diff --git a/sql/updates/world/2015_11_23_04_world_335.sql b/sql/updates/world/2015_11_23_04_world_335.sql new file mode 100644 index 0000000000..845eefeb7c --- /dev/null +++ b/sql/updates/world/2015_11_23_04_world_335.sql @@ -0,0 +1,29 @@ +SET @NPCTEXT= 724006; + +DELETE FROM `gossip_menu` WHERE `entry`=6539 AND `text_id`=@NPCTEXT; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(6539, @NPCTEXT); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=6539 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 +(6539,0,0,'I am ready, Anachronos. Please grant me the Scepter of the Shifting Sands.',11331,1,1,0,0,0,0,'',0); + +DELETE FROM `npc_text` WHERE `ID`=@NPCTEXT; +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `Probability0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`, `text1_0`, `text1_1`, `lang1`, `Probability1`, `em1_0`, `em1_1`, `em1_2`, `em1_3`, `em1_4`, `em1_5`, `text2_0`, `text2_1`, `lang2`, `Probability2`, `em2_0`, `em2_1`, `em2_2`, `em2_3`, `em2_4`, `em2_5`, `text3_0`, `text3_1`, `lang3`, `Probability3`, `em3_0`, `em3_1`, `em3_2`, `em3_3`, `em3_4`, `em3_5`, `text4_0`, `text4_1`, `lang4`, `Probability4`, `em4_0`, `em4_1`, `em4_2`, `em4_3`, `em4_4`, `em4_5`, `text5_0`, `text5_1`, `lang5`, `Probability5`, `em5_0`, `em5_1`, `em5_2`, `em5_3`, `em5_4`, `em5_5`, `text6_0`, `text6_1`, `lang6`, `Probability6`, `em6_0`, `em6_1`, `em6_2`, `em6_3`, `em6_4`, `em6_5`, `text7_0`, `text7_1`, `lang7`, `Probability7`, `em7_0`, `em7_1`, `em7_2`, `em7_3`, `em7_4`, `em7_5`, `VerifiedBuild`) VALUES +(@NPCTEXT, "The Scepter of the Shifting Sands is whole once more, $n.$B$BIt is you who must lead your armies into the cursed fortress city of Ahn'Qiraj and mete justice to its inhabitants.$B$BVenture to Silithus and present the Scepter of the Shifting Sands to Jonathan the Revelator.", '', 11333, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, '', '', 0, 0, 0, 0, 0, 0, 0, 0, -1); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=6539 AND `SourceEntry`=@NPCTEXT; +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=6539 AND `SourceEntry`=0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14,6539,@NPCTEXT,0,0,8,0,8742,0,0,0,0,0,'','Show gossip text after quest The Might of Kalimdor rewarded'), +(14,6539,@NPCTEXT,0,0,2,0,21175,1,1,1,0,0,'','Show gossip text if doesnt have item The Scepter of the Shifting Sands'), +(14,6539,@NPCTEXT,0,0,8,0,8745,0,0,1,0,0,'','Show gossip text if Treasure of the Timeless One is not rewarded'), +(15,6539,0,0,0,8,0,8742,0,0,0,0,0,'','Show gossip menu option after quest The Might of Kalimdor rewarded'), +(15,6539,0,0,0,2,0,21175,1,1,1,0,0,'','Show gossip menu option if doesnt have item The Scepter of the Shifting Sands'), +(15,6539,0,0,0,8,0,8745,0,0,1,0,0,'','Show gossip menu option if Treasure of the Timeless One is not rewarded'); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=15192; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=15192; +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 +(15192,0,0,1,62,0,100,0,6539,0,0,0,11,25861,0,0,0,0,0,7,0,0,0,0,0,0,0,'Anachronos - On Gossip Option 0 Selected - Cast \'Call Scepter DND\''), +(15192,0,1,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Anachronos - On Gossip Option 0 Selected - Close Gossip'); From 4298ade165aa07fd893d9d463ac57cf5e63bc9ae Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 23 Nov 2015 20:17:04 +0100 Subject: [PATCH 360/524] DB/Quest: Hot and Cold --- sql/updates/world/2015_11_23_05_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2015_11_23_05_world.sql diff --git a/sql/updates/world/2015_11_23_05_world.sql b/sql/updates/world/2015_11_23_05_world.sql new file mode 100644 index 0000000000..579af5a5ca --- /dev/null +++ b/sql/updates/world/2015_11_23_05_world.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `conditions` WHERE `SourceEntry` = 56099 AND `SourceTypeOrReferenceId` = 13; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,56099,0,0,31,0,3,30169,0,0,0,'','Essence of Ice target Smoldering Scrap Bunny'); + +DELETE FROM `creature` WHERE `guid` IN (116640, 116641, 116642); -- duplicated spawns From f0c7061f0b6dbd739f98dd91ad471395343fa836 Mon Sep 17 00:00:00 2001 From: Carbenium Date: Tue, 24 Nov 2015 02:08:52 +0100 Subject: [PATCH 361/524] Tools/MapExtractor: Fix a warning reported by gcc 4.9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /var/lib/jenkins/jobs/tc_335_release_gcc49/workspace/src/tools/map_extractor/System.cpp:113:25: error: ignoring return value of ‘int chdir(const char*)’, declared with attribute warn_unused_result [-Werror=unused-result] chdir("../"); *NO reextraction of dbcs/maps needed* Binary compatibility is ensured --- dep/CMakeLists.txt | 2 +- src/tools/map_extractor/CMakeLists.txt | 18 +- src/tools/map_extractor/System.cpp | 197 +++++++++------------- src/tools/map_extractor/loadlib.cpp | 8 +- src/tools/map_extractor/loadlib/loadlib.h | 30 +--- src/tools/map_extractor/mpq_libmpq04.h | 6 +- 6 files changed, 102 insertions(+), 159 deletions(-) diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt index 2b3796fb2f..f829956b7b 100644 --- a/dep/CMakeLists.txt +++ b/dep/CMakeLists.txt @@ -32,10 +32,10 @@ endif() if(SERVERS OR TOOLS) add_subdirectory(g3dlite) add_subdirectory(recastnavigation) + add_subdirectory(cppformat) endif() if(SERVERS) - add_subdirectory(cppformat) add_subdirectory(gsoap) endif() diff --git a/src/tools/map_extractor/CMakeLists.txt b/src/tools/map_extractor/CMakeLists.txt index 87d68cc7a2..b10956b326 100644 --- a/src/tools/map_extractor/CMakeLists.txt +++ b/src/tools/map_extractor/CMakeLists.txt @@ -9,13 +9,16 @@ # 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 *.cpp *.h) +file(GLOB_RECURSE mapextractor_SRCS *.cpp *.h) set(include_Dirs - ${CMAKE_SOURCE_DIR}/src/server/shared - ${CMAKE_SOURCE_DIR}/dep/libmpq - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/loadlib + ${CMAKE_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/dep/cppformat + ${CMAKE_SOURCE_DIR}/dep/libmpq + ${CMAKE_SOURCE_DIR}/src/common + ${CMAKE_SOURCE_DIR}/src/common/Utilities + ${CMAKE_SOURCE_DIR}/src/server/shared + ${CMAKE_CURRENT_SOURCE_DIR}/loadlib ) if( WIN32 ) @@ -28,13 +31,16 @@ endif() include_directories(${include_Dirs}) add_executable(mapextractor - ${sources} + ${mapextractor_SRCS} ) target_link_libraries(mapextractor + common + format mpq ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} + ${Boost_LIBRARIES} ) if( UNIX ) diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index dcaa3ba0a7..c0497a1cef 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -22,36 +22,17 @@ #include #include #include - -#ifdef _WIN32 -#include "direct.h" -#else -#include -#include -#endif +#include #include "dbcfile.h" #include "mpq_libmpq04.h" +#include "StringFormat.h" #include "adt.h" #include "wdt.h" -#include -#if defined( __GNUC__ ) - #define _open open - #define _close close - #ifndef O_BINARY - #define O_BINARY 0 - #endif -#else - #include -#endif +#include -#ifdef O_LARGEFILE - #define OPEN_FLAGS (O_RDONLY | O_BINARY | O_LARGEFILE) -#else - #define OPEN_FLAGS (O_RDONLY | O_BINARY) -#endif extern ArchiveSet gOpenArchives; typedef struct @@ -106,37 +87,14 @@ const char *CONF_mpq_list[]={ static const char* const langs[] = {"enGB", "enUS", "deDE", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" }; #define LANG_COUNT 12 -void CreateDir( const std::string& Path ) +void CreateDir(boost::filesystem::path const& path) { - if(chdir(Path.c_str()) == 0) - { - chdir("../"); - return; - } + namespace fs = boost::filesystem; + if (fs::exists(path)) + return; - int ret; - #ifdef _WIN32 - ret = _mkdir( Path.c_str()); - #else - ret = mkdir( Path.c_str(), 0777 ); - #endif - if (ret != 0) - { - printf("Fatal Error: Could not create directory %s check your permissions", Path.c_str()); - exit(1); - } -} - -bool FileExists( const char* FileName ) -{ - int fp = _open(FileName, OPEN_FLAGS); - if(fp != -1) - { - _close(fp); - return true; - } - - return false; + if (!fs::create_directory(path)) + throw new std::runtime_error("Unable to create directory" + path.string()); } void Usage(char* prg) @@ -207,7 +165,7 @@ void HandleArgs(int argc, char * arg[]) uint32 ReadBuild(int locale) { // include build info file also - std::string filename = std::string("component.wow-")+langs[locale]+".txt"; + std::string filename = Trinity::StringFormat("component.wow-%s.txt", langs[locale]); //printf("Read %s file... ", filename.c_str()); MPQFile m(filename.c_str()); @@ -269,7 +227,7 @@ uint32 ReadMapDBC() strncpy(map_ids[x].name, map_name, max_map_name_length); map_ids[x].name[max_map_name_length - 1] = '\0'; } - printf("Done! (%u maps loaded)\n", (uint32)map_count); + printf("Done! (" SZFMTD "maps loaded)\n", map_count); return map_count; } @@ -294,7 +252,7 @@ void ReadAreaTableDBC() maxAreaId = dbc.getMaxId(); - printf("Done! (%u areas loaded)\n", (uint32)area_count); + printf("Done! (" SZFMTD " areas loaded)\n", area_count); } void ReadLiquidTypeTableDBC() @@ -315,7 +273,7 @@ void ReadLiquidTypeTableDBC() for(uint32 x = 0; x < liqTypeCount; ++x) LiqType[dbc.getRecord(x).getUInt(0)] = dbc.getRecord(x).getUInt(3); - printf("Done! (%u LiqTypes loaded)\n", (uint32)liqTypeCount); + printf("Done! (" SZFMTD " LiqTypes loaded)\n", liqTypeCount); } // @@ -414,17 +372,17 @@ uint8 liquid_flags[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; bool liquid_show[ADT_GRID_SIZE][ADT_GRID_SIZE]; float liquid_height[ADT_GRID_SIZE+1][ADT_GRID_SIZE+1]; -bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, uint32 build) +bool ConvertADT(std::string const& inputPath, std::string const& outputPath, int /*cell_y*/, int /*cell_x*/, uint32 build) { ADT_file adt; - if (!adt.loadFile(filename)) + if (!adt.loadFile(inputPath)) return false; adt_MCIN *cells = adt.a_grid->getMCIN(); if (!cells) { - printf("Can't find cells in '%s'\n", filename); + printf("Can't find cells in '%s'\n", inputPath.c_str()); return false; } @@ -434,8 +392,8 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, // Prepare map header map_fileheader map; - map.mapMagic = *(uint32 const*)MAP_MAGIC; - map.versionMagic = *(uint32 const*)MAP_VERSION_MAGIC; + map.mapMagic = *reinterpret_cast(MAP_MAGIC); + map.versionMagic = *reinterpret_cast(MAP_VERSION_MAGIC); map.buildMagic = build; // Get area flags data @@ -452,7 +410,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, area_flags[i][j] = areas[areaid]; continue; } - printf("File: %s\nCan't find area flag for areaid %u [%d, %d].\n", filename, areaid, cell->ix, cell->iy); + printf("File: %s\nCan't find area flag for areaid %u [%d, %d].\n", inputPath.c_str(), areaid, cell->ix, cell->iy); } area_flags[i][j] = 0xffff; } @@ -478,7 +436,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, map.areaMapSize = sizeof(map_areaHeader); map_areaHeader areaHeader; - areaHeader.fourcc = *(uint32 const*)MAP_AREA_MAGIC; + areaHeader.fourcc = *reinterpret_cast(MAP_AREA_MAGIC); areaHeader.flags = 0; if (fullAreaData) { @@ -488,7 +446,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, else { areaHeader.flags |= MAP_AREA_NO_AREA; - areaHeader.gridArea = (uint16)areaflag; + areaHeader.gridArea = static_cast(areaflag); } // @@ -607,7 +565,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, map.heightMapSize = sizeof(map_heightHeader); map_heightHeader heightHeader; - heightHeader.fourcc = *(uint32 const*)MAP_HEIGHT_MAGIC; + heightHeader.fourcc = *reinterpret_cast(MAP_HEIGHT_MAGIC); heightHeader.flags = 0; heightHeader.gridHeight = minHeight; heightHeader.gridMaxHeight = maxHeight; @@ -763,7 +721,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, case LIQUID_TYPE_MAGMA: liquid_flags[i][j] |= MAP_LIQUID_TYPE_MAGMA; break; case LIQUID_TYPE_SLIME: liquid_flags[i][j] |= MAP_LIQUID_TYPE_SLIME; break; default: - printf("\nCan't find Liquid type %u for map %s\nchunk %d,%d\n", h->liquidType, filename, i, j); + printf("\nCan't find Liquid type %u for map %s\nchunk %d,%d\n", h->liquidType, inputPath.c_str(), i, j); break; } // Dark water detect @@ -848,7 +806,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, } map.liquidMapOffset = map.heightMapOffset + map.heightMapSize; map.liquidMapSize = sizeof(map_liquidHeader); - liquidHeader.fourcc = *(uint32 const*)MAP_LIQUID_MAGIC; + liquidHeader.fourcc = *reinterpret_cast(MAP_LIQUID_MAGIC); liquidHeader.flags = 0; liquidHeader.liquidType = 0; liquidHeader.offsetX = minX; @@ -906,69 +864,72 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, map.holesSize = 0; // Ok all data prepared - store it - FILE* output = fopen(filename2, "wb"); - if (!output) + + std::ofstream outFile(outputPath, std::ofstream::out | std::ofstream::binary); + if (!outFile) { - printf("Can't create the output file '%s'\n", filename2); + printf("Can't create the output file '%s'\n", outputPath.c_str()); return false; } - fwrite(&map, sizeof(map), 1, output); + + outFile.write(reinterpret_cast(&map), sizeof(map)); // Store area data - fwrite(&areaHeader, sizeof(areaHeader), 1, output); + outFile.write(reinterpret_cast(&areaHeader), sizeof(areaHeader)); if (!(areaHeader.flags&MAP_AREA_NO_AREA)) - fwrite(area_flags, sizeof(area_flags), 1, output); + outFile.write(reinterpret_cast(area_flags), sizeof(area_flags)); // Store height data - fwrite(&heightHeader, sizeof(heightHeader), 1, output); + outFile.write(reinterpret_cast(&heightHeader), sizeof(heightHeader)); if (!(heightHeader.flags & MAP_HEIGHT_NO_HEIGHT)) { if (heightHeader.flags & MAP_HEIGHT_AS_INT16) { - fwrite(uint16_V9, sizeof(uint16_V9), 1, output); - fwrite(uint16_V8, sizeof(uint16_V8), 1, output); + outFile.write(reinterpret_cast(uint16_V9), sizeof(uint16_V9)); + outFile.write(reinterpret_cast(uint16_V8), sizeof(uint16_V8)); } else if (heightHeader.flags & MAP_HEIGHT_AS_INT8) { - fwrite(uint8_V9, sizeof(uint8_V9), 1, output); - fwrite(uint8_V8, sizeof(uint8_V8), 1, output); + outFile.write(reinterpret_cast(uint8_V9), sizeof(uint8_V9)); + outFile.write(reinterpret_cast(uint8_V8), sizeof(uint8_V8)); } else { - fwrite(V9, sizeof(V9), 1, output); - fwrite(V8, sizeof(V8), 1, output); + outFile.write(reinterpret_cast(V9), sizeof(V9)); + outFile.write(reinterpret_cast(V8), sizeof(V8)); } } // Store liquid data if need if (map.liquidMapOffset) { - fwrite(&liquidHeader, sizeof(liquidHeader), 1, output); + outFile.write(reinterpret_cast(&liquidHeader), sizeof(liquidHeader)); + if (!(liquidHeader.flags&MAP_LIQUID_NO_TYPE)) { - fwrite(liquid_entry, sizeof(liquid_entry), 1, output); - fwrite(liquid_flags, sizeof(liquid_flags), 1, output); + outFile.write(reinterpret_cast(liquid_entry), sizeof(liquid_entry)); + outFile.write(reinterpret_cast(liquid_flags), sizeof(liquid_flags)); } + if (!(liquidHeader.flags&MAP_LIQUID_NO_HEIGHT)) { - for (int y=0; y(&liquid_height[y + liquidHeader.offsetY][liquidHeader.offsetX]), sizeof(float) * liquidHeader.width); } } // store hole data if (hasHoles) - fwrite(holes, map.holesSize, 1, output); - - fclose(output); + outFile.write(reinterpret_cast(holes), map.holesSize); + outFile.close(); return true; } void ExtractMapsFromMpq(uint32 build) { - char mpq_filename[1024]; - char output_filename[1024]; - char mpq_map_name[1024]; + std::string mpqFileName; + std::string outputFileName; + std::string mpqMapName; printf("Extracting maps...\n"); @@ -986,9 +947,10 @@ void ExtractMapsFromMpq(uint32 build) { printf("Extract %s (%d/%u) \n", map_ids[z].name, z+1, map_count); // Loadup map grid data - sprintf(mpq_map_name, "World\\Maps\\%s\\%s.wdt", map_ids[z].name, map_ids[z].name); + + mpqMapName = Trinity::StringFormat("World\\Maps\\%s\\%s.wdt", map_ids[z].name, map_ids[z].name); WDT_file wdt; - if (!wdt.loadFile(mpq_map_name, false)) + if (!wdt.loadFile(mpqMapName, false)) { // printf("Error loading %s map wdt data\n", map_ids[z].name); continue; @@ -1000,9 +962,10 @@ void ExtractMapsFromMpq(uint32 build) { if (!wdt.main->adt_list[y][x].exist) continue; - sprintf(mpq_filename, "World\\Maps\\%s\\%s_%u_%u.adt", map_ids[z].name, map_ids[z].name, x, y); - sprintf(output_filename, "%s/maps/%03u%02u%02u.map", output_path, map_ids[z].id, y, x); - ConvertADT(mpq_filename, output_filename, y, x, build); + + mpqFileName = Trinity::StringFormat("World\\Maps\\%s\\%s_%u_%u.adt", map_ids[z].name, map_ids[z].name, x, y); + outputFileName = Trinity::StringFormat("%s/maps/%03u%02u%02u.map", output_path, map_ids[z].id, y, x); + ConvertADT(mpqFileName, outputFileName, y, x, build); } // draw progress bar printf("Processing........................%d%%\r", (100 * (y+1)) / WDT_MAP_SIZE); @@ -1038,9 +1001,9 @@ void ExtractDBCFiles(int locale, bool basicLocale) // get DBC file list for(ArchiveSet::iterator i = gOpenArchives.begin(); i != gOpenArchives.end();++i) { - vector files; + std::vector files; (*i)->GetFileListTo(files); - for (vector::iterator iter = files.begin(); iter != files.end(); ++iter) + for (std::vector::iterator iter = files.begin(); iter != files.end(); ++iter) if (iter->rfind(".dbc") == iter->length() - strlen(".dbc")) dbcfiles.insert(*iter); } @@ -1057,20 +1020,20 @@ void ExtractDBCFiles(int locale, bool basicLocale) // extract Build info file { - string mpq_name = std::string("component.wow-") + langs[locale] + ".txt"; - string filename = path + mpq_name; + std::string mpq_name = std::string("component.wow-") + langs[locale] + ".txt"; + std::string filename = path + mpq_name; ExtractFile(mpq_name.c_str(), filename); } // extract DBCs uint32 count = 0; - for (set::iterator iter = dbcfiles.begin(); iter != dbcfiles.end(); ++iter) + for (std::set::iterator iter = dbcfiles.begin(); iter != dbcfiles.end(); ++iter) { - string filename = path; + std::string filename = path; filename += (iter->c_str() + strlen("DBFilesClient\\")); - if(FileExists(filename.c_str())) + if (boost::filesystem::exists(filename)) continue; if (ExtractFile(iter->c_str(), filename)) @@ -1081,32 +1044,31 @@ void ExtractDBCFiles(int locale, bool basicLocale) void LoadLocaleMPQFiles(int const locale) { - char filename[512]; + std::string fileName = Trinity::StringFormat("%s/Data/%s/locale-%s.MPQ", input_path, langs[locale], langs[locale]); - sprintf(filename,"%s/Data/%s/locale-%s.MPQ", input_path, langs[locale], langs[locale]); - new MPQArchive(filename); + new MPQArchive(fileName.c_str()); for(int i = 1; i < 5; ++i) { - char ext[3] = ""; - if(i > 1) - sprintf(ext, "-%i", i); + std::string ext; + if (i > 1) + ext = Trinity::StringFormat("-%i", i); - sprintf(filename,"%s/Data/%s/patch-%s%s.MPQ", input_path, langs[locale], langs[locale], ext); - if(FileExists(filename)) - new MPQArchive(filename); + fileName = Trinity::StringFormat("%s/Data/%s/patch-%s%s.MPQ", input_path, langs[locale], langs[locale], ext.c_str()); + if (boost::filesystem::exists(fileName)) + new MPQArchive(fileName.c_str()); } } void LoadCommonMPQFiles() { - char filename[512]; + std::string fileName; int count = sizeof(CONF_mpq_list)/sizeof(char*); for(int i = 0; i < count; ++i) { - sprintf(filename, "%s/Data/%s", input_path, CONF_mpq_list[i]); - if(FileExists(filename)) - new MPQArchive(filename); + fileName = Trinity::StringFormat("%s/Data/%s", input_path, CONF_mpq_list[i]); + if (boost::filesystem::exists(fileName)) + new MPQArchive(fileName.c_str()); } } @@ -1128,9 +1090,8 @@ int main(int argc, char * arg[]) for (int i = 0; i < LANG_COUNT; i++) { - char tmp1[512]; - sprintf(tmp1, "%s/Data/%s/locale-%s.MPQ", input_path, langs[i], langs[i]); - if (FileExists(tmp1)) + std::string filename = Trinity::StringFormat("%s/Data/%s/locale-%s.MPQ", input_path, langs[i], langs[i]); + if (boost::filesystem::exists(filename)) { printf("Detected locale: %s\n", langs[i]); diff --git a/src/tools/map_extractor/loadlib.cpp b/src/tools/map_extractor/loadlib.cpp index 936cdb72cf..2f31b472b5 100644 --- a/src/tools/map_extractor/loadlib.cpp +++ b/src/tools/map_extractor/loadlib.cpp @@ -38,14 +38,14 @@ FileLoader::~FileLoader() free(); } -bool FileLoader::loadFile(char *filename, bool log) +bool FileLoader::loadFile(std::string const& fileName, bool log) { free(); - MPQFile mf(filename); + MPQFile mf(fileName.c_str()); if(mf.isEof()) { if (log) - printf("No such file %s\n", filename); + printf("No such file %s\n", fileName.c_str()); return false; } @@ -57,7 +57,7 @@ bool FileLoader::loadFile(char *filename, bool log) if (prepareLoadedData()) return true; - printf("Error loading %s", filename); + printf("Error loading %s", fileName.c_str()); mf.close(); free(); return false; diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h index a0b62a8598..6547704d88 100644 --- a/src/tools/map_extractor/loadlib/loadlib.h +++ b/src/tools/map_extractor/loadlib/loadlib.h @@ -19,31 +19,9 @@ #ifndef LOAD_LIB_H #define LOAD_LIB_H -#ifdef _WIN32 -typedef __int64 int64; -typedef __int32 int32; -typedef __int16 int16; -typedef __int8 int8; -typedef unsigned __int64 uint64; -typedef unsigned __int32 uint32; -typedef unsigned __int16 uint16; -typedef unsigned __int8 uint8; -#else -#include -#ifndef uint64_t -#ifdef __linux__ -#include -#endif -#endif -typedef int64_t int64; -typedef int32_t int32; -typedef int16_t int16; -typedef int8_t int8; -typedef uint64_t uint64; -typedef uint32_t uint32; -typedef uint16_t uint16; -typedef uint8_t uint8; -#endif +#include "Define.h" + +#include #define FILE_FORMAT_VERSION 18 @@ -79,7 +57,7 @@ public: file_MVER *version; FileLoader(); ~FileLoader(); - bool loadFile(char *filename, bool log = true); + bool loadFile(std::string const& fileName, bool log = true); virtual void free(); }; diff --git a/src/tools/map_extractor/mpq_libmpq04.h b/src/tools/map_extractor/mpq_libmpq04.h index c6fe36a822..b9b332f95b 100644 --- a/src/tools/map_extractor/mpq_libmpq04.h +++ b/src/tools/map_extractor/mpq_libmpq04.h @@ -27,8 +27,6 @@ #include #include -using namespace std; - class MPQArchive { @@ -39,7 +37,7 @@ public: ~MPQArchive() { close(); } void close(); - void GetFileListTo(vector& filelist) { + void GetFileListTo(std::vector& filelist) { uint32_t filenum; if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return; libmpq__off_t size, transferred; @@ -58,7 +56,7 @@ public: while ((token != NULL) && (counter < size)) { //cout << token << endl; token[strlen(token) - 1] = 0; - string s = token; + std::string s = token; filelist.push_back(s); counter += strlen(token) + 2; token = strtok(NULL, seps); From 5df0bcdd4e2d55fb9c1abea882712585dbdcd1f3 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 24 Nov 2015 17:52:38 +0100 Subject: [PATCH 362/524] DB: Fix an incorrect Text range in creature_text --- sql/updates/world/2015_11_24_00_world_355.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_11_24_00_world_355.sql diff --git a/sql/updates/world/2015_11_24_00_world_355.sql b/sql/updates/world/2015_11_24_00_world_355.sql new file mode 100644 index 0000000000..0983d03e64 --- /dev/null +++ b/sql/updates/world/2015_11_24_00_world_355.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_text` SET `TextRange`=0 WHERE `entry`=10321 AND `groupid`=0 AND `id`=0; From 49a16c9fd05542260290e49e413a415d7e24d951 Mon Sep 17 00:00:00 2001 From: Carbenium Date: Tue, 24 Nov 2015 18:15:13 +0100 Subject: [PATCH 363/524] Tools/MMapGenerator: Fix some warnings reported by GCC 4.9 and MSVC 14 with W4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * /var/lib/jenkins/jobs/tc_335_release_gcc49/workspace/src/tools/mmaps_generator/MapBuilder.cpp: In member function ‘void MMAP::MapBuilder::WorkerThread()’: /var/lib/jenkins/jobs/tc_335_release_gcc49/workspace/src/tools/mmaps_generator/MapBuilder.cpp:174:28: error: ‘mapId’ may be used uninitialized in this function [-Werror=maybe-uninitialized] buildMap(mapId); * variable redefinition warning * remove 2 "using namespace std" *NO reextraction of mmaps needed* --- .../mmaps_generator/IntermediateValues.h | 1 - src/tools/mmaps_generator/MapBuilder.cpp | 20 ++++---- src/tools/mmaps_generator/MapBuilder.h | 16 +++--- src/tools/mmaps_generator/PathCommon.h | 5 +- src/tools/mmaps_generator/TerrainBuilder.cpp | 8 +-- src/tools/mmaps_generator/TerrainBuilder.h | 11 ++-- src/tools/vmap4_extractor/adtfile.cpp | 10 ++-- src/tools/vmap4_extractor/mpq_libmpq04.h | 19 +++---- src/tools/vmap4_extractor/vmapexport.cpp | 50 ++++++++----------- src/tools/vmap4_extractor/wdtfile.cpp | 5 +- src/tools/vmap4_extractor/wdtfile.h | 15 +++--- src/tools/vmap4_extractor/wmo.cpp | 6 +-- 12 files changed, 71 insertions(+), 95 deletions(-) diff --git a/src/tools/mmaps_generator/IntermediateValues.h b/src/tools/mmaps_generator/IntermediateValues.h index 95a651a2df..580e9e4313 100644 --- a/src/tools/mmaps_generator/IntermediateValues.h +++ b/src/tools/mmaps_generator/IntermediateValues.h @@ -22,7 +22,6 @@ #include "PathCommon.h" #include "TerrainBuilder.h" #include "Recast.h" -#include "DetourNavMesh.h" namespace MMAP { diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 69ca529702..ff2f72f353 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -15,17 +15,15 @@ * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ -#include #include "PathCommon.h" #include "MapBuilder.h" - #include "MapTree.h" -#include "ModelInstance.h" - #include "DetourNavMeshBuilder.h" #include "DetourNavMesh.h" -#include "DetourCommon.h" +#include "IntermediateValues.h" + +#include #define MMAP_MAGIC 0x4d4d4150 // 'MMAP' #define MMAP_VERSION 5 @@ -164,7 +162,7 @@ namespace MMAP { while (1) { - uint32 mapId; + uint32 mapId = 0; _queue.WaitAndPop(mapId); @@ -215,12 +213,12 @@ namespace MMAP } /**************************************************************************/ - void MapBuilder::getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) + void MapBuilder::getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) const { - maxX = INT_MAX; - maxY = INT_MAX; - minX = INT_MIN; - minY = INT_MIN; + maxX = std::numeric_limits::max(); + maxY = std::numeric_limits::max(); + minX = 0; + minY = 0; float bmin[3] = { 0, 0, 0 }; float bmax[3] = { 0, 0, 0 }; diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index ced03d1dde..432a0ee748 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -19,20 +19,18 @@ #ifndef _MAP_BUILDER_H #define _MAP_BUILDER_H -#include -#include -#include -#include -#include -#include - #include "TerrainBuilder.h" -#include "IntermediateValues.h" #include "Recast.h" #include "DetourNavMesh.h" #include "ProducerConsumerQueue.h" +#include +#include +#include +#include +#include + using namespace VMAP; namespace MMAP @@ -120,7 +118,7 @@ namespace MMAP void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax); - void getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY); + void getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) const; bool shouldSkipMap(uint32 mapID); bool isTransportMap(uint32 mapID); diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h index 9451e9d03b..aa9591fba2 100644 --- a/src/tools/mmaps_generator/PathCommon.h +++ b/src/tools/mmaps_generator/PathCommon.h @@ -19,11 +19,10 @@ #ifndef _MMAP_COMMON_H #define _MMAP_COMMON_H -#include -#include - #include "Common.h" +#include + #ifndef _WIN32 #include #include diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 9043627994..e525f24fce 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -764,12 +764,12 @@ namespace MMAP } uint32 liqOffset = meshData.liquidVerts.size() / 3; - for (uint32 i = 0; i < liqVerts.size(); ++i) - meshData.liquidVerts.append(liqVerts[i].y, liqVerts[i].z, liqVerts[i].x); + for (uint32 j = 0; j < liqVerts.size(); ++j) + meshData.liquidVerts.append(liqVerts[j].y, liqVerts[j].z, liqVerts[j].x); - for (uint32 i = 0; i < liqTris.size() / 3; ++i) + for (uint32 j = 0; j < liqTris.size() / 3; ++j) { - meshData.liquidTris.append(liqTris[i*3+1] + liqOffset, liqTris[i*3+2] + liqOffset, liqTris[i*3] + liqOffset); + meshData.liquidTris.append(liqTris[j*3+1] + liqOffset, liqTris[j*3+2] + liqOffset, liqTris[j*3] + liqOffset); meshData.liquidType.append(type); } } diff --git a/src/tools/mmaps_generator/TerrainBuilder.h b/src/tools/mmaps_generator/TerrainBuilder.h index 6c66ae45f4..f305bf0bd4 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.h +++ b/src/tools/mmaps_generator/TerrainBuilder.h @@ -81,11 +81,13 @@ namespace MMAP TerrainBuilder(bool skipLiquid); ~TerrainBuilder(); + TerrainBuilder(const TerrainBuilder &tb) = delete; + void loadMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData); bool loadVMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData); void loadOffMeshConnections(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData, const char* offMeshFilePath); - bool usesLiquids() { return !m_skipLiquid; } + bool usesLiquids() const { return !m_skipLiquid; } // vert and triangle methods static void transform(std::vector &original, std::vector &transformed, @@ -104,9 +106,6 @@ namespace MMAP /// Controls whether liquids are loaded bool m_skipLiquid; - /// Load the map terrain from file - bool loadHeightMap(uint32 mapID, uint32 tileX, uint32 tileY, G3D::Array &vertices, G3D::Array &triangles, Spot portion); - /// Get the vector coordinate for a specific position void getHeightCoord(int index, Grid grid, float xOffset, float yOffset, float* coord, float* v); @@ -121,10 +120,6 @@ namespace MMAP /// Get the liquid type for a specific position uint8 getLiquidType(int square, const uint8 liquid_type[16][16]); - - // hide parameterless and copy constructor - TerrainBuilder(); - TerrainBuilder(const TerrainBuilder &tb); }; } diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp index 557511f6d1..3a8b349565 100644 --- a/src/tools/vmap4_extractor/adtfile.cpp +++ b/src/tools/vmap4_extractor/adtfile.cpp @@ -86,11 +86,11 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY) uint32 size; - string xMap; - string yMap; + std::string xMap; + std::string yMap; Adtfilename.erase(Adtfilename.find(".adt"),4); - string TempMapNumber; + std::string TempMapNumber; TempMapNumber = Adtfilename.substr(Adtfilename.length()-6,6); xMap = TempMapNumber.substr(TempMapNumber.find("_")+1,(TempMapNumber.find_last_of("_")-1) - (TempMapNumber.find("_"))); yMap = TempMapNumber.substr(TempMapNumber.find_last_of("_")+1,(TempMapNumber.length()) - (TempMapNumber.find_last_of("_"))); @@ -134,7 +134,7 @@ bool ADTFile::init(uint32 map_num, uint32 tileX, uint32 tileY) ADT.read(buf, size); char *p=buf; int t=0; - ModelInstansName = new string[size]; + ModelInstansName = new std::string[size]; while (p -#include -#include -#include -#include -using namespace std; +#include +#include +#include +#include class MPQArchive { @@ -38,7 +36,7 @@ public: MPQArchive(const char* filename); ~MPQArchive() { close(); } - void GetFileListTo(vector& filelist) { + void GetFileListTo(std::vector& filelist) { uint32_t filenum; if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return; libmpq__off_t size, transferred; @@ -57,7 +55,7 @@ public: while ((token != NULL) && (counter < size)) { //cout << token << endl; token[strlen(token) - 1] = 0; - string s = token; + std::string s = token; filelist.push_back(s); counter += strlen(token) + 2; token = strtok(NULL, seps); @@ -78,9 +76,8 @@ class MPQFile char *buffer; libmpq__off_t pointer,size; - // disable copying - MPQFile(const MPQFile& /*f*/) {} - void operator=(const MPQFile& /*f*/) {} + MPQFile(const MPQFile& /*f*/) = delete; + void operator=(const MPQFile& /*f*/) = delete; public: MPQFile(const char* filename); // filenames are not case sensitive diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 7a12897563..78d6e86358 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -17,14 +17,15 @@ */ #define _CRT_SECURE_NO_DEPRECATE -#include -#include -#include -#include -#include + +#include "adtfile.h" +#include "wdtfile.h" +#include "dbcfile.h" +#include "wmo.h" +#include "mpq_libmpq04.h" +#include "vmapexport.h" #ifdef WIN32 - #include #include #include #define mkdir _mkdir @@ -32,23 +33,14 @@ #include #endif +#include +#include +#include +#include + #undef min #undef max -//#pragma warning(disable : 4505) -//#pragma comment(lib, "Winmm.lib") - -#include - -//From Extractor -#include "adtfile.h" -#include "wdtfile.h" -#include "dbcfile.h" -#include "wmo.h" -#include "mpq_libmpq04.h" - -#include "vmapexport.h" - //------------------------------------------------------------------------------ // Defines @@ -129,12 +121,12 @@ bool ExtractWmo() for (ArchiveSet::const_iterator ar_itr = gOpenArchives.begin(); ar_itr != gOpenArchives.end() && success; ++ar_itr) { - vector filelist; + std::vector filelist; (*ar_itr)->GetFileListTo(filelist); - for (vector::iterator fname = filelist.begin(); fname != filelist.end() && success; ++fname) + for (std::vector::iterator fname = filelist.begin(); fname != filelist.end() && success; ++fname) { - if (fname->find(".wmo") != string::npos) + if (fname->find(".wmo") != std::string::npos) success = ExtractSingleWmo(*fname); } } @@ -203,7 +195,7 @@ bool ExtractSingleWmo(std::string& fname) sprintf(groupFileName, "%s_%03u.wmo", temp, i); //printf("Trying to open groupfile %s\n",groupFileName); - string s = groupFileName; + std::string s = groupFileName; WMOGroup fgroup(s); if(!fgroup.open()) { @@ -305,7 +297,7 @@ bool fillArchiveNameVector(std::vector& pArchiveNames) printf("\nGame path: %s\n", input_path); char path[512]; - string in_path(input_path); + std::string in_path(input_path); std::vector locales, searchLocales; searchLocales.push_back("enGB"); @@ -345,10 +337,10 @@ bool fillArchiveNameVector(std::vector& pArchiveNames) } // open expansion and common files - pArchiveNames.push_back(input_path + string("common.MPQ")); - pArchiveNames.push_back(input_path + string("common-2.MPQ")); - pArchiveNames.push_back(input_path + string("expansion.MPQ")); - pArchiveNames.push_back(input_path + string("lichking.MPQ")); + pArchiveNames.push_back(input_path + std::string("common.MPQ")); + pArchiveNames.push_back(input_path + std::string("common-2.MPQ")); + pArchiveNames.push_back(input_path + std::string("expansion.MPQ")); + pArchiveNames.push_back(input_path + std::string("lichking.MPQ")); // now, scan for the patch levels in the core dir printf("Scanning patch levels from data directory.\n"); diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp index 877f49ce37..4e0b7b9770 100644 --- a/src/tools/vmap4_extractor/wdtfile.cpp +++ b/src/tools/vmap4_extractor/wdtfile.cpp @@ -19,6 +19,7 @@ #include "vmapexport.h" #include "wdtfile.h" #include "adtfile.h" + #include char * wdtGetPlainName(char * FileName) @@ -30,7 +31,7 @@ char * wdtGetPlainName(char * FileName) return FileName; } -WDTFile::WDTFile(char* file_name, char* file_name1) : WDT(file_name), gWmoInstansName(NULL), gnWMO(0) +WDTFile::WDTFile(char* file_name, char* file_name1) : gWmoInstansName(NULL), gnWMO(0), WDT(file_name) { filename.append(file_name1,strlen(file_name1)); } @@ -77,7 +78,7 @@ bool WDTFile::init(char* /*map_id*/, unsigned int mapID) WDT.read(buf, size); char *p=buf; int q = 0; - gWmoInstansName = new string[size]; + gWmoInstansName = new std::string[size]; while (p < buf + size) { char* s=wdtGetPlainName(p); diff --git a/src/tools/vmap4_extractor/wdtfile.h b/src/tools/vmap4_extractor/wdtfile.h index 22702133b9..81e84b36d1 100644 --- a/src/tools/vmap4_extractor/wdtfile.h +++ b/src/tools/vmap4_extractor/wdtfile.h @@ -20,26 +20,25 @@ #define WDTFILE_H #include "mpq_libmpq04.h" -#include "wmo.h" #include -#include "stdlib.h" class ADTFile; class WDTFile { -private: - MPQFile WDT; - string filename; public: WDTFile(char* file_name, char* file_name1); ~WDTFile(void); - bool init(char* map_id, unsigned int mapID); - string* gWmoInstansName; + bool init(char* map_id, unsigned int mapID); + ADTFile* GetMap(int x, int z); + + std::string* gWmoInstansName; int gnWMO; - ADTFile* GetMap(int x, int z); +private: + MPQFile WDT; + std::string filename; }; #endif diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index f6f59bbc47..80dfbb97c5 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -19,16 +19,14 @@ #include "vmapexport.h" #include "wmo.h" #include "vec3d.h" +#include "mpq_libmpq04.h" + #include #include #include -#include -#include #undef min #undef max -#include "mpq_libmpq04.h" -using namespace std; extern uint16 *LiqType; WMORoot::WMORoot(std::string &filename) From dd55e41c8158fe1f60e120b0b89469d4112158d2 Mon Sep 17 00:00:00 2001 From: Carbenium Date: Wed, 25 Nov 2015 13:56:33 +0100 Subject: [PATCH 364/524] Dep/SFMT: Fix a strict-aliasing warning reported by GCC 4.9 --- dep/SFMT/SFMT.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dep/SFMT/SFMT.h b/dep/SFMT/SFMT.h index 3d15d651e5..ccf21cecd5 100644 --- a/dep/SFMT/SFMT.h +++ b/dep/SFMT/SFMT.h @@ -173,7 +173,8 @@ public: uint32_t statesize = SFMT_N*4; // Size of state vector // Fill state vector with random numbers from seed - ((uint32_t*)state)[0] = y; + uint32_t* s = (uint32_t*)&state; + s[0] = y; const uint32_t factor = 1812433253U;// Multiplication factor for (i = 1; i < statesize; i++) { From d4608c8168e547581319386114e70e6ac953a97a Mon Sep 17 00:00:00 2001 From: Carbenium Date: Wed, 25 Nov 2015 14:18:49 +0100 Subject: [PATCH 365/524] Dep/SFMT: Add diff fordd55e41c8158fe1f60e120b0b89469d4112158d2 --- dep/SFMT/SFMT-hotfix1.diff | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 dep/SFMT/SFMT-hotfix1.diff diff --git a/dep/SFMT/SFMT-hotfix1.diff b/dep/SFMT/SFMT-hotfix1.diff new file mode 100644 index 0000000000..ba7810dc10 --- /dev/null +++ b/dep/SFMT/SFMT-hotfix1.diff @@ -0,0 +1,14 @@ +diff --git a/dep/SFMT/SFMT.h b/dep/SFMT/SFMT.h +index 3d15d65..ccf21ce 100644 +--- a/dep/SFMT/SFMT.h ++++ b/dep/SFMT/SFMT.h +@@ -173,7 +173,8 @@ public: + uint32_t statesize = SFMT_N*4; // Size of state vector + + // Fill state vector with random numbers from seed +- ((uint32_t*)state)[0] = y; ++ uint32_t* s = (uint32_t*)&state; ++ s[0] = y; + const uint32_t factor = 1812433253U;// Multiplication factor + + for (i = 1; i < statesize; i++) { From 246e568bbd1c741af7204e4a4941c113b7d63e60 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sun, 25 Oct 2015 10:10:57 +0100 Subject: [PATCH 366/524] Core/Spells: fix conflicts between duration and cast time of channeled spells --- src/server/game/Entities/Unit/Unit.cpp | 22 ++++++++++++++++--- src/server/game/Entities/Unit/Unit.h | 1 + .../game/Spells/Auras/SpellAuraEffects.cpp | 5 +---- src/server/game/Spells/Spell.cpp | 4 ++-- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 9ced65b56c..0de88a62f0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12987,9 +12987,6 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell* if (!spellInfo || castTime < 0) return; - if (spellInfo->IsChanneled() && !spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) - return; - // called from caster if (Player* modOwner = GetSpellModOwner()) modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CASTING_TIME, castTime, spell); @@ -13003,6 +13000,25 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell* castTime = 500; } +void Unit::ModSpellDurationTime(SpellInfo const* spellInfo, int32 & duration, Spell* spell) +{ + if (!spellInfo || duration < 0) + return; + + if (spellInfo->IsChanneled() && !spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) + return; + + // called from caster + if (Player* modOwner = GetSpellModOwner()) + modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_DURATION, duration, spell); + + if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) && + ((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT)) + duration = int32(float(duration) * GetFloatValue(UNIT_MOD_CAST_SPEED)); + else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) + duration = int32(float(duration) * m_modAttackSpeedPct[RANGED_ATTACK]); +} + DiminishingLevels Unit::GetDiminishing(DiminishingGroup group) { for (Diminishing::iterator i = m_Diminishing.begin(); i != m_Diminishing.end(); ++i) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 39b1c34be5..2500f32784 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1982,6 +1982,7 @@ class Unit : public WorldObject int32 CalcSpellDuration(SpellInfo const* spellProto); int32 ModSpellDuration(SpellInfo const* spellProto, Unit const* target, int32 duration, bool positive, uint32 effectMask); void ModSpellCastTime(SpellInfo const* spellProto, int32& castTime, Spell* spell = NULL); + void ModSpellDurationTime(SpellInfo const* spellProto, int32& castTime, Spell* spell = NULL); float CalculateLevelPenalty(SpellInfo const* spellProto) const; void addFollower(FollowerReference* pRef) { m_FollowingRefManager.insertFirst(pRef); } diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 0cc075a3dd..79658032c6 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -541,10 +541,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool create, bool load) { // Haste modifies periodic time of channeled spells if (m_spellInfo->IsChanneled()) - { - if (m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) - caster->ModSpellCastTime(m_spellInfo, m_amplitude); - } + caster->ModSpellDurationTime(m_spellInfo, m_amplitude); // and periodic time of auras affected by SPELL_AURA_PERIODIC_HASTE else if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) m_amplitude = int32(m_amplitude * caster->GetFloatValue(UNIT_MOD_CAST_SPEED)); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index e1302d48d2..0ae09913bc 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2624,7 +2624,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA // Haste modifies duration of channeled spells if (m_spellInfo->IsChanneled()) - m_originalCaster->ModSpellCastTime(aurSpellInfo, duration, this); + m_originalCaster->ModSpellDurationTime(aurSpellInfo, duration, this); // and duration of auras affected by SPELL_AURA_PERIODIC_HASTE else if (m_originalCaster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, aurSpellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) duration = int32(duration * m_originalCaster->GetFloatValue(UNIT_MOD_CAST_SPEED)); @@ -3258,7 +3258,7 @@ void Spell::handle_immediate() modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_DURATION, duration); // Apply haste mods - m_caster->ModSpellCastTime(m_spellInfo, duration, this); + m_caster->ModSpellDurationTime(m_spellInfo, duration, this); m_spellState = SPELL_STATE_CASTING; m_caster->AddInterruptMask(m_spellInfo->ChannelInterruptFlags); From 981b871d2f2a30c5624c5ffc439e13b7995b1bc9 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Wed, 25 Nov 2015 21:49:27 +0100 Subject: [PATCH 367/524] Tools/MMapGenerator: Fix an edge case of infinite loop Fix a (pseudo) infinite loop happening when generating mmaps for single tile maps (like 249) but with vmaps not present in the correct folder. This would trigger a 18446744065119600000 (uint32 max ^ 2) iterations loop. --- src/tools/mmaps_generator/MapBuilder.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index ff2f72f353..0c41be65cf 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -215,10 +215,12 @@ namespace MMAP /**************************************************************************/ void MapBuilder::getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) const { - maxX = std::numeric_limits::max(); - maxY = std::numeric_limits::max(); - minX = 0; - minY = 0; + // min and max are initialized to invalid values so the caller iterating the [min, max] range + // will never enter the loop unless valid min/max values are found + maxX = 0; + maxY = 0; + minX = std::numeric_limits::max(); + minY = std::numeric_limits::max(); float bmin[3] = { 0, 0, 0 }; float bmax[3] = { 0, 0, 0 }; From bf9963039906f4b4df218ecc1818f5b01bcc714d Mon Sep 17 00:00:00 2001 From: treeston Date: Thu, 26 Nov 2015 18:57:15 +0100 Subject: [PATCH 368/524] Scripts/Naxxramas: Thaddius follow-up: - Reduce initial spawn timer on the encounter from 30 seconds to 5 seconds - Rearrange respawn logic to fix the "petrified" visual from not showing properly - Fix a potential infinite respawn loop that could prevent the encounter from initializing properly (fixes and closes #15898) --- .../Northrend/Naxxramas/boss_thaddius.cpp | 22 +++++++++++-------- .../Naxxramas/instance_naxxramas.cpp | 7 +++--- .../scripts/Northrend/Naxxramas/naxxramas.h | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 50077fe9dc..13f0ad3033 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -173,7 +173,8 @@ public: events.SetPhase(PHASE_NOT_ENGAGED); SetCombatMovement(false); - BeginResetEncounter(); // initialize everything properly, and ensure that the coils are loaded by the time we initialize + // initialize everything properly, and ensure that the coils are loaded by the time we initialize + BeginResetEncounter(true); } } @@ -185,7 +186,7 @@ public: void Reset() override { - if(events.IsInPhase(PHASE_TRANSITION) || events.IsInPhase(PHASE_THADDIUS)) + if(events.IsInPhase(PHASE_TRANSITION) || (events.IsInPhase(PHASE_THADDIUS) && me->IsAlive())) BeginResetEncounter(); } @@ -278,15 +279,16 @@ public: events.ScheduleEvent(EVENT_TRANSITION_3, 14 * IN_MILLISECONDS, 0, PHASE_TRANSITION); } - void BeginResetEncounter() + void BeginResetEncounter(bool initial = false) { - if (!me->IsAlive()) + if (instance->GetBossState(BOSS_THADDIUS) == DONE) return; if (events.IsInPhase(PHASE_RESETTING)) return; - - instance->ProcessEvent(me, EVENT_THADDIUS_BEGIN_RESET); + if (initial) // signal shorter spawn timer to instance script + instance->SetBossState(BOSS_THADDIUS, SPECIAL); + instance->ProcessEvent(me, EVENT_THADDIUS_BEGIN_RESET); instance->SetBossState(BOSS_THADDIUS, NOT_STARTED); // remove polarity shift debuffs on reset @@ -307,17 +309,19 @@ public: void ResetEncounter() { - events.SetPhase(PHASE_NOT_ENGAGED); feugenAlive = true; stalaggAlive = true; + me->Respawn(true); - me->CastSpell(me, SPELL_THADDIUS_INACTIVE_VISUAL); + _Reset(); + events.SetPhase(PHASE_NOT_ENGAGED); + + me->CastSpell(me, SPELL_THADDIUS_INACTIVE_VISUAL, true); if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) feugen->AI()->DoAction(ACTION_RESET_ENCOUNTER); if (Creature* stalagg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_STALAGG))) stalagg->AI()->DoAction(ACTION_RESET_ENCOUNTER); - _Reset(); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 60999d1d88..63456e3ad1 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -193,9 +193,10 @@ class instance_naxxramas : public InstanceMapScript switch (eventId) { case EVENT_THADDIUS_BEGIN_RESET: - if (!source->ToCreature() || source->ToCreature()->GetEntry() != NPC_THADDIUS) - return; - events.ScheduleEvent(EVENT_THADDIUS_RESET, 30 * IN_MILLISECONDS); + if (GetBossState(BOSS_THADDIUS) == SPECIAL) // this is the initial spawn, we want a shorter spawn time + events.ScheduleEvent(EVENT_THADDIUS_RESET, 5 * IN_MILLISECONDS); + else + events.ScheduleEvent(EVENT_THADDIUS_RESET, 30 * IN_MILLISECONDS); break; } } diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index 9c5a4afba9..d2b9978495 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -175,7 +175,7 @@ enum InstanceEvents EVENT_DIALOGUE_GOTHIK_KORTHAZZ2, EVENT_DIALOGUE_GOTHIK_RIVENDARE2, - // Thaddius AI requesting timed encounter respawn + // Thaddius AI requesting timed encounter (re-)spawn EVENT_THADDIUS_BEGIN_RESET, EVENT_THADDIUS_RESET, From 3b90b0368a019d47911062da6257555e88d17fda Mon Sep 17 00:00:00 2001 From: MitchesD Date: Thu, 26 Nov 2015 19:28:53 +0100 Subject: [PATCH 369/524] Core/Misc: fix warning and misc codestyle fixes --- src/server/game/AI/SmartScripts/SmartScript.h | 2 +- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Server/WorldSession.cpp | 2 +- .../scripts/Northrend/Naxxramas/boss_anubrekhan.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_noth.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp | 8 ++++---- .../scripts/Northrend/Naxxramas/instance_naxxramas.cpp | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 6f9046520b..1c4b9a51ec 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -248,7 +248,7 @@ class SmartScript void DecPhase(int32 p = 1) { - if(mEventPhase > (uint32)p) + if (mEventPhase > (uint32)p) mEventPhase -= (uint32)p; else mEventPhase = 0; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b6ae38dc52..73c1bf65a6 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15818,7 +15818,7 @@ void Unit::SetFeared(bool apply) } if (Player* player = ToPlayer()) - if(!player->HasUnitState(UNIT_STATE_POSSESSED)) + if (!player->HasUnitState(UNIT_STATE_POSSESSED)) player->SetClientControl(this, !apply); } diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index b1a043c4b5..1ccd6a4151 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -341,7 +341,7 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet"); else if (_player->IsInWorld()) LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world"); - else if(AntiDOS.EvaluateOpcode(*packet, currentTime)) + else if (AntiDOS.EvaluateOpcode(*packet, currentTime)) { sScriptMgr->OnPacketReceive(this, *packet); (this->*opHandle.handler)(*packet); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 47569a6b85..11fe5f4145 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -197,7 +197,7 @@ public: if (!guardCorpses.empty()) { if (ObjectGuid target = Trinity::Containers::SelectRandomContainerElement(guardCorpses)) - if(Creature* creatureTarget = ObjectAccessor::GetCreature(*me, target)) + if (Creature* creatureTarget = ObjectAccessor::GetCreature(*me, target)) { creatureTarget->CastSpell(creatureTarget, SPELL_SUMMON_CORPSE_SCARABS_MOB, true, nullptr, nullptr, me->GetGUID()); creatureTarget->AI()->Talk(EMOTE_SCARAB); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index 106661b70b..7b3a9f8ac7 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -155,7 +155,7 @@ public: void KilledUnit(Unit* victim) override { - if(victim->GetTypeId() == TYPEID_PLAYER) + if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_SLAY); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 13f0ad3033..5d9ef44916 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -186,7 +186,7 @@ public: void Reset() override { - if(events.IsInPhase(PHASE_TRANSITION) || (events.IsInPhase(PHASE_THADDIUS) && me->IsAlive())) + if (events.IsInPhase(PHASE_TRANSITION) || (events.IsInPhase(PHASE_THADDIUS) && me->IsAlive())) BeginResetEncounter(); } @@ -640,7 +640,7 @@ public: void UpdateAI(uint32 uiDiff) override { - if(!isFeignDeath) + if (!isFeignDeath) if (!UpdateVictim()) return; @@ -657,7 +657,7 @@ public: else powerSurgeTimer -= uiDiff; - if(!isFeignDeath) + if (!isFeignDeath) DoMeleeAttackIfReady(); } @@ -825,7 +825,7 @@ public: void KilledUnit(Unit* victim) override { - if(victim->GetTypeId() == TYPEID_PLAYER) + if (victim->GetTypeId() == TYPEID_PLAYER) Talk(SAY_FEUGEN_SLAY); } diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 63456e3ad1..53ce68d3ef 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -188,7 +188,7 @@ class instance_naxxramas : public InstanceMapScript AddMinion(creature, false); } - void ProcessEvent(WorldObject* source, uint32 eventId) override + void ProcessEvent(WorldObject* /*source*/, uint32 eventId) override { switch (eventId) { From 6e296ddaa20a51327f7666f6ddaac60e4216ee23 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Thu, 26 Nov 2015 21:47:50 +0100 Subject: [PATCH 370/524] Scripts/EyeOfEternity: Fix crash Fix crash happening when a player would kill a Melee npc on the disks during Malygos fight and mount it before it ended the waypoint path. Close #15900 --- .../scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index cc9af9413e..33ffea4993 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -1244,8 +1244,9 @@ public: ++_wpCount; } else if (Vehicle* hoverDisk = me->GetVehicleKit()) - if (Unit* lordPassenger = hoverDisk->GetPassenger(0)) - lordPassenger->ToCreature()->AI()->DoAction(ACTION_SET_DISK_VICTIM_CHASE); + if (Unit* passenger = hoverDisk->GetPassenger(0)) + if (Creature* lordPassenger = passenger->ToCreature()) + lordPassenger->AI()->DoAction(ACTION_SET_DISK_VICTIM_CHASE); } private: From 5f917e2286809d7aafa8871be38042ae7966c26b Mon Sep 17 00:00:00 2001 From: jackpoz Date: Wed, 2 Sep 2015 22:54:02 +0200 Subject: [PATCH 371/524] Core/Player: Always allow accounts with RBAC_PERM_COMMAND_GM to enter instances on login Always allow accounts with RBAC_PERM_COMMAND_GM to enter instances on login even if player had .gm off . Send an ingame message to notify the user about the avoided kick. --- src/server/game/Entities/Player/Player.cpp | 22 +++++++++++++++++++--- src/server/game/Entities/Player/Player.h | 3 +++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1a9c0fbce4..87eedb4b5c 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2561,6 +2561,11 @@ void Player::SetGameMaster(bool on) UpdateObjectVisibility(); } +bool Player::CanBeGameMaster() const +{ + return m_session && m_session->HasPermission(rbac::RBAC_PERM_COMMAND_GM); +} + void Player::SetGMVisible(bool on) { if (on) @@ -18674,17 +18679,28 @@ bool Player::CheckInstanceLoginValid(Map* map) { // cannot be in raid instance without a group if (!GetGroup()) - return false; + return IsInstanceLoginGameMasterException(); } else { // cannot be in normal instance without a group and more players than 1 in instance if (!GetGroup() && map->GetPlayersCountExceptGMs() > 1) - return false; + return IsInstanceLoginGameMasterException(); } // do checks for satisfy accessreqs, instance full, encounter in progress (raid), perm bind group != perm bind player - return sMapMgr->CanPlayerEnter(map->GetId(), this, true); + return sMapMgr->CanPlayerEnter(map->GetId(), this, true) || IsInstanceLoginGameMasterException(); +} + +bool Player::IsInstanceLoginGameMasterException() const +{ + if (CanBeGameMaster()) + { + ChatHandler(GetSession()).PSendSysMessage("You didn't get kicked out of the instance even if Player::CheckInstanceLoginValid() returned false and without .gm on flag"); + return true; + } + else + return false; } bool Player::CheckInstanceCount(uint32 instanceId) const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2a9dfc4928..8057a4ee54 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1072,6 +1072,7 @@ class Player : public Unit, public GridObject bool isAcceptWhispers() const { return (m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS) != 0; } void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; } bool IsGameMaster() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_ON) != 0; } + bool CanBeGameMaster() const; void SetGameMaster(bool on); bool isGMChat() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_CHAT) != 0; } void SetGMChat(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_GM_CHAT; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_CHAT; } @@ -2500,6 +2501,8 @@ class Player : public Unit, public GridObject bool IsHasDelayedTeleport() const { return m_bHasDelayedTeleport; } void SetDelayedTeleportFlag(bool setting) { m_bHasDelayedTeleport = setting; } void ScheduleDelayedOperation(uint32 operation) { if (operation < DELAYED_END) m_DelayedOperations |= operation; } + + bool IsInstanceLoginGameMasterException() const; MapReference m_mapRef; From 66073e4403d931088da0063daae79fdc9c996856 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Fri, 27 Nov 2015 03:42:08 +0100 Subject: [PATCH 372/524] Core/Scripts: remove redundant script npc_anchorite_truuen The cpp script npc_anchorite_truuen has become redundant because it has been replaced by a SAI script in commit 2cecc7b. This script currently causes an error line in DBErrors.log: ``` Script named 'npc_anchorite_truuen' does not have a script name assigned in database. ``` --- .../zone_western_plaguelands.cpp | 140 ------------------ 1 file changed, 140 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp index 9cecbc3166..9af23f17dc 100644 --- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp @@ -276,145 +276,6 @@ public: }; }; -/*###### -## npc_anchorite_truuen -######*/ - -enum Truuen -{ - NPC_GHOST_UTHER = 17233, - NPC_THEL_DANIS = 1854, - NPC_GHOUL = 1791, //ambush - - QUEST_TOMB_LIGHTBRINGER = 9446, - - SAY_WP_0 = 0, //Beware! We are attacked! - SAY_WP_1 = 1, //It must be the purity of the Mark of the Lightbringer that is drawing forth the Scourge to attack us. We must proceed with caution lest we be overwhelmed! - SAY_WP_2 = 2, //This land truly needs to be cleansed by the Light! Let us continue on to the tomb. It isn't far now... - SAY_WP_3 = 0, //Be welcome, friends! - SAY_WP_4 = 0, //Thank you for coming here in remembrance of me. Your efforts in recovering that symbol, while unnecessary, are certainly touching to an old man's heart. - SAY_WP_5 = 1, //Please, rise my friend. Keep the Blessing as a symbol of the strength of the Light and how heroes long gone might once again rise in each of us to inspire. - SAY_WP_6 = 2 //Thank you my friend for making this possible. This is a day that I shall never forget! I think I will stay a while. Please return to High Priestess MacDonnell at the camp. I know that she'll be keenly interested to know of what has transpired here. -}; - -class npc_anchorite_truuen : public CreatureScript -{ -public: - npc_anchorite_truuen() : CreatureScript("npc_anchorite_truuen") { } - - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override - { - if (quest->GetQuestId() == QUEST_TOMB_LIGHTBRINGER) - { - npc_escortAI* pEscortAI = ENSURE_AI(npc_anchorite_truuen::npc_anchorite_truuenAI, creature->AI()); - pEscortAI->Start(true, true, player->GetGUID()); - } - return false; - } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_anchorite_truuenAI(creature); - } - - struct npc_anchorite_truuenAI : public npc_escortAI - { - npc_anchorite_truuenAI(Creature* creature) : npc_escortAI(creature) - { - Initialize(); - } - - void Initialize() - { - m_uiChatTimer = 7000; - } - - uint32 m_uiChatTimer; - - ObjectGuid UghostGUID; - - void Reset() override - { - Initialize(); - } - - void JustSummoned(Creature* summoned) override - { - if (summoned->GetEntry() == NPC_GHOUL) - summoned->AI()->AttackStart(me); - } - - void WaypointReached(uint32 waypointId) override - { - Player* player = GetPlayerForEscort(); - - switch (waypointId) - { - case 8: - Talk(SAY_WP_0); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+7.0f, me->GetPositionY()+7.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+5.0f, me->GetPositionY()+5.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - break; - case 9: - Talk(SAY_WP_1); - break; - case 14: - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+7.0f, me->GetPositionY()+7.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+5.0f, me->GetPositionY()+5.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+10.0f, me->GetPositionY()+10.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - me->SummonCreature(NPC_GHOUL, me->GetPositionX()+8.0f, me->GetPositionY()+8.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 90000); - break; - case 15: - Talk(SAY_WP_2); - break; - case 21: - if (Creature* Theldanis = GetClosestCreatureWithEntry(me, NPC_THEL_DANIS, 150)) - Theldanis->AI()->Talk(SAY_WP_3); - break; - case 23: - if (Creature* Ughost = me->SummonCreature(NPC_GHOST_UTHER, 971.86f, -1825.42f, 81.99f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000)) - { - UghostGUID = Ughost->GetGUID(); - Ughost->SetDisableGravity(true); - Ughost->AI()->Talk(SAY_WP_4, me); - } - m_uiChatTimer = 4000; - break; - case 24: - if (Creature* Ughost = ObjectAccessor::GetCreature(*me, UghostGUID)) - Ughost->AI()->Talk(SAY_WP_5, me); - m_uiChatTimer = 4000; - break; - case 25: - if (Creature* Ughost = ObjectAccessor::GetCreature(*me, UghostGUID)) - Ughost->AI()->Talk(SAY_WP_6, me); - m_uiChatTimer = 4000; - break; - case 26: - if (player) - player->GroupEventHappens(QUEST_TOMB_LIGHTBRINGER, me); - break; - } - } - - void EnterCombat(Unit* /*who*/) override { } - - void JustDied(Unit* /*killer*/) override - { - if (Player* player = GetPlayerForEscort()) - player->FailQuest(QUEST_TOMB_LIGHTBRINGER); - } - - void UpdateAI(uint32 uiDiff) override - { - npc_escortAI::UpdateAI(uiDiff); - DoMeleeAttackIfReady(); - if (HasEscortState(STATE_ESCORT_ESCORTING)) - m_uiChatTimer = 6000; - } - }; -}; - /*###### ## ######*/ @@ -425,5 +286,4 @@ void AddSC_western_plaguelands() new npc_myranda_the_hag(); new npc_the_scourge_cauldron(); new npc_andorhal_tower(); - new npc_anchorite_truuen(); } From 9573ec52f0ea2fbda0fdcac1bd9ed2617d359338 Mon Sep 17 00:00:00 2001 From: ForesterDev Date: Fri, 27 Nov 2015 11:59:13 +0400 Subject: [PATCH 373/524] Core/Player: cleanup function CheckInstanceLoginValid --- sql/updates/world/2015_11_27_00_world_355.sql | 3 +++ src/server/game/Entities/Player/Player.cpp | 12 ++++++------ src/server/game/Miscellaneous/Language.h | 4 +++- 3 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 sql/updates/world/2015_11_27_00_world_355.sql diff --git a/sql/updates/world/2015_11_27_00_world_355.sql b/sql/updates/world/2015_11_27_00_world_355.sql new file mode 100644 index 0000000000..15be2ab73e --- /dev/null +++ b/sql/updates/world/2015_11_27_00_world_355.sql @@ -0,0 +1,3 @@ +DELETE FROM `trinity_string` WHERE `entry` = 11010; +INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES +(11010, 'You didn\'t get kicked out of the instance even if Player::CheckInstanceLoginValid() returned false and without .gm on flag'); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 87eedb4b5c..539d1d3a77 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2563,7 +2563,7 @@ void Player::SetGameMaster(bool on) bool Player::CanBeGameMaster() const { - return m_session && m_session->HasPermission(rbac::RBAC_PERM_COMMAND_GM); + return GetSession()->HasPermission(rbac::RBAC_PERM_COMMAND_GM); } void Player::SetGMVisible(bool on) @@ -18672,31 +18672,31 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report bool Player::CheckInstanceLoginValid(Map* map) { - if (!map->IsDungeon() || IsGameMaster()) + if (!map->IsDungeon() || IsInstanceLoginGameMasterException()) return true; if (map->IsRaid()) { // cannot be in raid instance without a group if (!GetGroup()) - return IsInstanceLoginGameMasterException(); + return false; } else { // cannot be in normal instance without a group and more players than 1 in instance if (!GetGroup() && map->GetPlayersCountExceptGMs() > 1) - return IsInstanceLoginGameMasterException(); + return false; } // do checks for satisfy accessreqs, instance full, encounter in progress (raid), perm bind group != perm bind player - return sMapMgr->CanPlayerEnter(map->GetId(), this, true) || IsInstanceLoginGameMasterException(); + return sMapMgr->CanPlayerEnter(map->GetId(), this, true); } bool Player::IsInstanceLoginGameMasterException() const { if (CanBeGameMaster()) { - ChatHandler(GetSession()).PSendSysMessage("You didn't get kicked out of the instance even if Player::CheckInstanceLoginValid() returned false and without .gm on flag"); + ChatHandler(GetSession()).SendSysMessage(LANG_INSTANCE_LOGIN_GAMEMASTER_EXCEPTION); return true; } else diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index de117905b3..838f8556be 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1202,7 +1202,9 @@ enum TrinityStrings LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD = 11007, LANG_NPCINFO_INHABIT_TYPE = 11008, - LANG_NPCINFO_FLAGS_EXTRA = 11009 + LANG_NPCINFO_FLAGS_EXTRA = 11009, + + LANG_INSTANCE_LOGIN_GAMEMASTER_EXCEPTION = 11010 }; #endif From 3c4f4356298d974c507fbd4c3fa54c1d4075e091 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Fri, 27 Nov 2015 17:12:35 +0000 Subject: [PATCH 374/524] DB/SAI: Underbog Colossus http://www.wowhead.com/npc=21251/underbog-colossus#comments Add missing on death events, previously when killed these always cast toxic pool When killed now one of the following will happen * Nothing * Spawn Toxic Pool * Spawn 2 Colossus Lurker http://www.wowhead.com/npc=22347/colossus-lurker#comments * Spawn around 10 of Colossus Rager http://www.wowhead.com/npc=22352/colossus-rager#comments --- sql/updates/world/2015_11_27_00_world.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/updates/world/2015_11_27_00_world.sql diff --git a/sql/updates/world/2015_11_27_00_world.sql b/sql/updates/world/2015_11_27_00_world.sql new file mode 100644 index 0000000000..632dec537d --- /dev/null +++ b/sql/updates/world/2015_11_27_00_world.sql @@ -0,0 +1,15 @@ +UPDATE `spell_dbc` SET `Effect1`=28,`EffectMiscValueB1`=64 WHERE `Id` IN(38922,38928); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=21251 AND `source_type`=0 AND `id`>6; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(2125100,2125101,2125102,2125103) 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 +(21251, 0, 7, 0, 11, 0, 100, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - On Spawn - Set Invincibility HP'), +(21251, 0, 8, 0, 2, 0, 100, 1, 0, 1, 0, 0, 87, 2125100, 2125101, 2125102, 2125103, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - On Less than 1% HP - Run Random Script'), +(2125100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38718, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 1 - Cast \'Toxic Pool\' '), +(2125100, 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, 'Underbog Colossus - Script 1 - Die'), +(2125101, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38922, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 2 - Cast \'Summon Colossus Lurkers\' '), +(2125101, 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, 'Underbog Colossus - Script 2 - Die'), +(2125102, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38928, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 3 - Cast \'Summon Colossus Ragers\' '), +(2125102, 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, 'Underbog Colossus - Script 3 - Die'), +(2125103, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Underbog Colossus - Script 4 - Die'); From ba1e00399db9c90bbba2c295ad93415d9f1acada Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 27 Nov 2015 18:29:20 +0100 Subject: [PATCH 375/524] Core/Players: Use constant gender from PLAYER_BYTES_3 where appropriate. Closes #15895 --- .../game/Achievements/AchievementMgr.cpp | 2 +- src/server/game/Entities/Player/Player.cpp | 6 +-- src/server/game/Handlers/CharacterHandler.cpp | 10 ++-- src/server/game/Handlers/MiscHandler.cpp | 2 +- .../game/Spells/Auras/SpellAuraEffects.cpp | 48 +++++++------------ 5 files changed, 27 insertions(+), 41 deletions(-) diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 2bacaff496..a6359a353e 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -1533,7 +1533,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) //! Since no common attributes were found, (not even in titleRewardFlags field) //! we explicitly check by ID. Maybe in the future we could move the achievement_reward //! condition fields to the condition system. - if (uint32 titleId = reward->titleId[achievement->ID == 1793 ? GetPlayer()->getGender() : (GetPlayer()->GetTeam() == ALLIANCE ? 0 : 1)]) + if (uint32 titleId = reward->titleId[achievement->ID == 1793 ? GetPlayer()->GetByteValue(PLAYER_BYTES_3, 0) : (GetPlayer()->GetTeam() == ALLIANCE ? 0 : 1)]) if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId)) GetPlayer()->SetTitle(titleEntry); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 87eedb4b5c..40a7dbccbe 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4777,18 +4777,16 @@ Corpse* Player::CreateCorpse() _corpseLocation.WorldRelocate(*this); - _uf = GetUInt32Value(UNIT_FIELD_BYTES_0); _pb = GetUInt32Value(PLAYER_BYTES); _pb2 = GetUInt32Value(PLAYER_BYTES_2); - uint8 race = (uint8)(_uf); uint8 skin = (uint8)(_pb); uint8 face = (uint8)(_pb >> 8); uint8 hairstyle = (uint8)(_pb >> 16); uint8 haircolor = (uint8)(_pb >> 24); uint8 facialhair = (uint8)(_pb2); - _cfb1 = ((0x00) | (race << 8) | (getGender() << 16) | (skin << 24)); + _cfb1 = ((0x00) | (getRace() << 8) | (GetByteValue(PLAYER_BYTES_3, 0) << 16) | (skin << 24)); _cfb2 = ((face) | (hairstyle << 8) | (haircolor << 16) | (facialhair << 24)); corpse->SetUInt32Value(CORPSE_FIELD_BYTES_1, _cfb1); @@ -21085,7 +21083,7 @@ void Player::InitDisplayIds() return; } - uint8 gender = getGender(); + uint8 gender = GetByteValue(PLAYER_BYTES_3, 0); switch (gender) { case GENDER_FEMALE: diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index e5b32f548f..60ec60443d 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -642,7 +642,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte TC_LOG_INFO("entities.player.character", "Account: %d (IP: %s) Create Character:[%s] (GUID: %u)", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().GetCounter()); sScriptMgr->OnPlayerCreate(&newChar); - sWorld->AddCharacterInfo(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel()); + sWorld->AddCharacterInfo(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.GetByteValue(PLAYER_BYTES_3, 0), newChar.getRace(), newChar.getClass(), newChar.getLevel()); newChar.CleanupsBeforeDelete(); delete createInfo; @@ -1242,20 +1242,20 @@ void WorldSession::HandleAlterAppearance(WorldPacket& recvData) BarberShopStyleEntry const* bs_hair = sBarberShopStyleStore.LookupEntry(Hair); - if (!bs_hair || bs_hair->type != 0 || bs_hair->race != _player->getRace() || bs_hair->gender != _player->getGender()) + if (!bs_hair || bs_hair->type != 0 || bs_hair->race != _player->getRace() || bs_hair->gender != _player->GetByteValue(PLAYER_BYTES_3, 0)) return; BarberShopStyleEntry const* bs_facialHair = sBarberShopStyleStore.LookupEntry(FacialHair); - if (!bs_facialHair || bs_facialHair->type != 2 || bs_facialHair->race != _player->getRace() || bs_facialHair->gender != _player->getGender()) + if (!bs_facialHair || bs_facialHair->type != 2 || bs_facialHair->race != _player->getRace() || bs_facialHair->gender != _player->GetByteValue(PLAYER_BYTES_3, 0)) return; BarberShopStyleEntry const* bs_skinColor = sBarberShopStyleStore.LookupEntry(SkinColor); - if (bs_skinColor && (bs_skinColor->type != 3 || bs_skinColor->race != _player->getRace() || bs_skinColor->gender != _player->getGender())) + if (bs_skinColor && (bs_skinColor->type != 3 || bs_skinColor->race != _player->getRace() || bs_skinColor->gender != _player->GetByteValue(PLAYER_BYTES_3, 0))) return; - if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->getGender(), bs_hair->hair_id, Color, _player->GetByteValue(PLAYER_BYTES, 1), bs_facialHair->hair_id, bs_skinColor ? bs_skinColor->hair_id : _player->GetByteValue(PLAYER_BYTES, 0))) + if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->GetByteValue(PLAYER_BYTES_3, 0), bs_hair->hair_id, Color, _player->GetByteValue(PLAYER_BYTES, 1), bs_facialHair->hair_id, bs_skinColor ? bs_skinColor->hair_id : _player->GetByteValue(PLAYER_BYTES, 0))) return; GameObject* go = _player->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_BARBER_CHAIR, 5.0f); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 2eebbfc100..6dcd3242a6 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -283,7 +283,7 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recvData) continue; uint32 pzoneid = target->GetZoneId(); - uint8 gender = target->getGender(); + uint8 gender = target->GetByteValue(PLAYER_BYTES_3, 0); bool z_show = true; for (uint32 i = 0; i < zones_count; ++i) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index da3504f5a0..200e16a966 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1863,43 +1863,43 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, { // Blood Elf case RACE_BLOODELF: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 17829 : 17830); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 17830 : 17829); break; // Orc case RACE_ORC: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 10139 : 10140); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10140 : 10139); break; // Troll case RACE_TROLL: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 10135 : 10134); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10134 : 10135); break; // Tauren case RACE_TAUREN: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 10136 : 10147); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10147 : 10136); break; // Undead case RACE_UNDEAD_PLAYER: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 10146 : 10145); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10145 : 10146); break; // Draenei case RACE_DRAENEI: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 17827 : 17828); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 17828 : 17827); break; // Dwarf case RACE_DWARF: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 10141 : 10142); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10142 : 10141); break; // Gnome case RACE_GNOME: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 10148 : 10149); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10149 : 10148); break; // Human case RACE_HUMAN: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 10137 : 10138); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10138 : 10137); break; // Night Elf case RACE_NIGHTELF: - target->SetDisplayId(target->getGender() == GENDER_MALE ? 10143 : 10144); + target->SetDisplayId(target->getGender() == GENDER_FEMALE ? 10144 : 10143); break; default: break; @@ -4643,17 +4643,10 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool { if (caster) { - switch (caster->getGender()) - { - case GENDER_FEMALE: - caster->CastSpell(target, 37095, true, NULL, this); // Blood Elf Disguise - break; - case GENDER_MALE: - caster->CastSpell(target, 37093, true, NULL, this); - break; - default: - break; - } + if (caster->getGender() == GENDER_FEMALE) + caster->CastSpell(target, 37095, true, NULL, this); // Blood Elf Disguise + else + caster->CastSpell(target, 37093, true, NULL, this); } break; } @@ -4683,15 +4676,10 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool case 46354: // Blood Elf Illusion if (caster) { - switch (caster->getGender()) - { - case GENDER_FEMALE: - caster->CastSpell(target, 46356, true, NULL, this); - break; - case GENDER_MALE: - caster->CastSpell(target, 46355, true, NULL, this); - break; - } + if (caster->getGender() == GENDER_FEMALE) + caster->CastSpell(target, 46356, true, NULL, this); + else + caster->CastSpell(target, 46355, true, NULL, this); } break; case 46361: // Reinforced Net From e266278f7d029f1547b1ae3228d658463c69da09 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Fri, 27 Nov 2015 22:10:21 +0100 Subject: [PATCH 376/524] Core/Players: Fixed warning --- 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 40a7dbccbe..4d171f4a8d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4764,7 +4764,7 @@ Corpse* Player::CreateCorpse() // prevent existence 2 corpse for player SpawnCorpseBones(); - uint32 _uf, _pb, _pb2, _cfb1, _cfb2; + uint32 _pb, _pb2, _cfb1, _cfb2; Corpse* corpse = new Corpse((m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH) ? CORPSE_RESURRECTABLE_PVP : CORPSE_RESURRECTABLE_PVE); SetPvPDeath(false); From 5fae63804ceb61dd009ac77f76911605e255b5c8 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sat, 28 Nov 2015 00:23:34 +0100 Subject: [PATCH 377/524] Core/Spells fix Arcane Missiles - close #15902 --- 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 73c1bf65a6..63de39f570 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13010,7 +13010,7 @@ void Unit::ModSpellDurationTime(SpellInfo const* spellInfo, int32 & duration, Sp // called from caster if (Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_DURATION, duration, spell); + modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CASTING_TIME, duration, spell); if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) && ((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT)) From 787b7ae85058ca0a8b81e7a6b440bb0a0038b8d1 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 28 Nov 2015 21:14:04 +0100 Subject: [PATCH 378/524] DB/Quest: Prisoner of the Bladespire Closes #15913 --- sql/updates/world/2015_11_28_00_world.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 sql/updates/world/2015_11_28_00_world.sql diff --git a/sql/updates/world/2015_11_28_00_world.sql b/sql/updates/world/2015_11_28_00_world.sql new file mode 100644 index 0000000000..0a1dd574fb --- /dev/null +++ b/sql/updates/world/2015_11_28_00_world.sql @@ -0,0 +1,16 @@ +-- +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry` IN (22268, 22460); +UPDATE `gameobject` SET `position_z`=-16.9 WHERE `guid`=99984 AND `id`= 185307; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `Entry` IN (22268, 22460); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (22268, 22460) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2226800, 2246000) 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 +(22460, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 2246000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit - Just summoned - action list'), +(2246000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3672.275635, 5286.437988, 20.585167, 5.40622, 'Spirit - action list - move to pos'), +(2246000, 9, 1, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3672.275635, 5286.437988, 20.585167, 5.40622, 'Spirit - action list - Set Orientation'), +(2246000, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 9, 0, 0, 0, 0, 0, 0, 20, 185296, 20, 0, 0, 0, 0, 0, 'Spirit - action list - Activate object'), +(2246000, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 22268, 20, 0, 0, 0, 0, 0, 'Spirit - action list - Set data'), +(2246000, 9, 4, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Spirit - action list - Despawn'), +(22268, 0, 0, 0, 38, 0, 100, 0, 0, 1, 0, 0, 80, 2226800, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Leok - On data set - action list'), +(2226800, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3638.89575, 5343.02978, 23.28319, 2.086646, 'Leok - action list - Move to pos'), +(2226800, 9, 1, 0, 0, 0, 100, 0, 12000, 12000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Leok - action list - Despawn'); From c0faee079542c134925025a3c32c9324e750dfaa Mon Sep 17 00:00:00 2001 From: treeston Date: Sat, 28 Nov 2015 19:21:33 +0100 Subject: [PATCH 379/524] Core/Util: Add a urandms(min,max) helper to make urand(min*IN_MILLISECONDS, max*IN_MILLISECONDS) shorter to write for random time intervals (boss scripts). --- src/common/Utilities/Util.cpp | 7 +++++++ src/common/Utilities/Util.h | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index 33c273fb05..9f61dd12e4 100644 --- a/src/common/Utilities/Util.cpp +++ b/src/common/Utilities/Util.cpp @@ -58,6 +58,13 @@ uint32 urand(uint32 min, uint32 max) return GetRng()->URandom(min, max); } +uint32 urandms(uint32 min, uint32 max) +{ + ASSERT(max >= min); + ASSERT(INT_MAX/IN_MILLISECONDS >= max); + return GetRng()->URandom(min * IN_MILLISECONDS, max * IN_MILLISECONDS); +} + float frand(float min, float max) { ASSERT(max >= min); diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h index 6a872b44a6..b748e83408 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -82,6 +82,9 @@ int32 irand(int32 min, int32 max); /* Return a random number in the range min..max (inclusive). */ uint32 urand(uint32 min, uint32 max); +/* Return a random millisecond value between min and max seconds. Functionally equivalent to urand(min*IN_MILLISECONDS, max*IN_MILLISECONDS). */ +uint32 urandms(uint32 min, uint32 max); + /* Return a random number in the range 0 .. UINT32_MAX. */ uint32 rand32(); From 3ab108c8ea02740aeaa473f985f55096850bdd8b Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 29 Nov 2015 14:13:30 +0100 Subject: [PATCH 380/524] Core/Spells: Fixed passibe talent auras targeting pets instead of player Closes #1543 Closes #15918 --- src/server/game/Spells/SpellMgr.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 019b9e6f4d..ec616c1d4c 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2923,6 +2923,11 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Speed = SPEED_CHARGE; break; } + + // Passive talent auras cannot target pets + if (spellInfo->IsPassive() && GetTalentSpellCost(i)) + if (spellInfo->Effects[j].TargetA.GetTarget() == TARGET_UNIT_PET) + spellInfo->Effects[j].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER); } if (spellInfo->ActiveIconID == 2158) // flight From 1be635a0255955533c413d0b3cc5a36fa514e403 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 29 Nov 2015 18:41:36 +0100 Subject: [PATCH 381/524] Unit/PossessBar: Fix spell ordering on possess bar to reflect spell position in DB. Fixes Razuvious adds et al. --- src/server/game/Entities/Unit/Unit.cpp | 12 +++++++----- src/server/game/Entities/Unit/Unit.h | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 63de39f570..92fb04b483 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13788,7 +13788,7 @@ void CharmInfo::InitPossessCreateSpells() break; } - for (uint32 i = 0; i < CREATURE_MAX_SPELLS; ++i) + for (uint8 i = 0; i < CREATURE_MAX_SPELLS; ++i) { uint32 spellId = _unit->ToCreature()->m_spells[i]; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); @@ -13797,7 +13797,7 @@ void CharmInfo::InitPossessCreateSpells() if (spellInfo->IsPassive()) _unit->CastSpell(_unit, spellInfo, true); else - AddSpellToActionBar(spellInfo, ACT_PASSIVE); + AddSpellToActionBar(spellInfo, ACT_PASSIVE, i % MAX_UNIT_ACTION_BAR_INDEX); } } } @@ -13855,11 +13855,12 @@ void CharmInfo::InitCharmCreateSpells() } } -bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate) +bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate, uint8 preferredSlot) { uint32 spell_id = spellInfo->Id; uint32 first_id = spellInfo->GetFirstRankSpell()->Id; + ASSERT(preferredSlot < MAX_UNIT_ACTION_BAR_INDEX); // new spell rank can be already listed for (uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i) { @@ -13876,9 +13877,10 @@ bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates new // or use empty slot in other case for (uint8 i = 0; i < MAX_UNIT_ACTION_BAR_INDEX; ++i) { - if (!PetActionBar[i].GetAction() && PetActionBar[i].IsActionBarForSpell()) + uint8 j = (preferredSlot + i) % MAX_UNIT_ACTION_BAR_INDEX; + if (!PetActionBar[j].GetAction() && PetActionBar[j].IsActionBarForSpell()) { - SetActionBar(i, spell_id, newstate == ACT_DECIDE ? spellInfo->IsAutocastable() ? ACT_DISABLED : ACT_PASSIVE : newstate); + SetActionBar(j, spell_id, newstate == ACT_DECIDE ? spellInfo->IsAutocastable() ? ACT_DISABLED : ACT_PASSIVE : newstate); return true; } } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 2500f32784..72f3a6682f 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1119,7 +1119,7 @@ struct CharmInfo void InitEmptyActionBar(bool withAttack = true); //return true if successful - bool AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate = ACT_DECIDE); + bool AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates newstate = ACT_DECIDE, uint8 preferredSlot = 0); bool RemoveSpellFromActionBar(uint32 spell_id); void LoadPetActionBar(const std::string& data); void BuildActionBar(WorldPacket* data); From 43129b33ca503bfce60d7f1e2e53b4b7c6b7d66e Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 29 Nov 2015 19:57:03 +0100 Subject: [PATCH 382/524] DB/Quest: Creatures of the Eco-Domes Closes #3025 --- sql/updates/world/2015_11_29_00_world.sql | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 sql/updates/world/2015_11_29_00_world.sql diff --git a/sql/updates/world/2015_11_29_00_world.sql b/sql/updates/world/2015_11_29_00_world.sql new file mode 100644 index 0000000000..fd64b65bd0 --- /dev/null +++ b/sql/updates/world/2015_11_29_00_world.sql @@ -0,0 +1,41 @@ +-- Talbuk Doe SAI +SET @ENTRY := 20610; -- Talbuk Doe +SET @SPELL_GORE := 32019; -- Gore +SET @SPELL_TAG := 35771; -- Tag Subbued Talbuk +SET @SPELL_TAG_CREDIT := 40347; -- Talbuk Tagging Credit +SET @SPELL_SLEEPING := 14915; -- Sleeping Sleep +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100); +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 +(@ENTRY,0,0,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Aggro - Say text 0"), +(@ENTRY,0,1,0,0,0,100,0,1000,1000,8000,11000,11,@SPELL_GORE,0,0,0,0,0,2,0,0,0,0,0,0,0,"Talbuk Doe - In Combat - Cast Gore"), +(@ENTRY,0,2,0,2,0,100,1,0,20,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - At 20% HP - Say Text 1"), +(@ENTRY,0,5,0,4,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,20777,30,0,0,0,0,0,"Talbuk Doe - On Aggro - Set data"), +(@ENTRY,0,3,0,8,0,100,0,@SPELL_TAG,0,0,0,80,@ENTRY*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Spellhit - Run Script"), +(@ENTRY,0,4,0,11,0,100,0,0,0,0,0,19,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - On Respawn - Remove Unit Flag"), +(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,85,@SPELL_TAG_CREDIT ,0,0,0,0,0,7,0,0,0,0,0,0,0,"Talbuk Doe - Script - Give Quest Credit"), +(@ENTRY*100,9,1,0,0,0,100,1,0,0,0,0,27,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Stop combat"), +(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,18,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Set Unit Flag"), +(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,11,@SPELL_SLEEPING,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Cast Sleeping Sleep"), +(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,11,55795,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Doe - Script - Cast visual death state"), +(@ENTRY*100, 9, 5, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Talbuk Doe - On Script - Despawn'); + +-- Talbuk Sire SAI +SET @ENTRY := 20777; -- Talbuk Sire +SET @SPELL_STOMP := 32023; -- Hoof Stomp +SET @SPELL_TAG := 35771; -- Tag Subbued Talbuk +SET @SPELL_SLEEPING := 14915; -- Sleeping Sleep +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100); +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 +(@ENTRY,0,0,0,0,0,100,0,4000,6000,8000,11000,11,@SPELL_STOMP,0,0,0,0,0,2,0,0,0,0,0,0,0,"Talbuk Sire - In Combat - Cast Hoof Stomp"), +(@ENTRY,0,1,0,2,0,100,1,0,20,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - At 20% HP - Say Text 0"), +(@ENTRY,0,4,0,38,0,100,0,0,1,0,0,49,0,0,0,0,0,0,21,40,0,0,0,0,0,0,"Talbuk Sire - On data set - Start attack"), +(@ENTRY,0,2,0,8,0,100,0,@SPELL_TAG,0,0,0,80,@ENTRY*100,2,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - On Spellhit - Run Script"), +(@ENTRY,0,3,0,11,0,100,0,0,0,0,0,19,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - On Respawn - Remove Unit Flag"), +(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,85,@SPELL_TAG_CREDIT ,0,0,0,0,0,7,0,0,0,0,0,0,0,"Talbuk Sire - Script - Give Quest Credit"), +(@ENTRY*100,9,1,0,0,0,100,1,0,0,0,0,27,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Stop combat"), +(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,18,386,0,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Set Unit Flag"), +(@ENTRY*100,9,3,0,0,0,100,0,0,0,0,0,11,@SPELL_SLEEPING,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Cast Sleeping Sleep"), +(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,11,55795,1,0,0,0,0,1,0,0,0,0,0,0,0,"Talbuk Sire - Script - Cast visual death state"), +(@ENTRY*100, 9, 5, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Talbuk Sire - On Script - Despawn'); From 01beba21b5210860ddd6a37471c6b2bea77a369e Mon Sep 17 00:00:00 2001 From: Killyana Date: Mon, 30 Nov 2015 00:31:55 +0100 Subject: [PATCH 383/524] DB/Quest: Fel Reavers, No Thanks! By @Gargarensis Closes #3965 --- sql/updates/world/2015_11_29_01_world.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/updates/world/2015_11_29_01_world.sql diff --git a/sql/updates/world/2015_11_29_01_world.sql b/sql/updates/world/2015_11_29_01_world.sql new file mode 100644 index 0000000000..cd46800c5d --- /dev/null +++ b/sql/updates/world/2015_11_29_01_world.sql @@ -0,0 +1,15 @@ +-- +DELETE FROM `creature_text` WHERE `entry` = 22293; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `TextRange`, `comment`, `BroadcastTextId`) VALUES +(22293, 0, 0, "%s begins to sputter as its engine malfunctions.", 16, 0, 100, 0, 0, 0, 0, "Inactive Fel Reaver", 20103); + +-- Creature Script - Inactive Fel Reaver +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 22293); +DELETE FROM `smart_scripts` WHERE (source_type = 9 AND entryorguid = 2229300); +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 +(22293, 0, 0, 0, 20, 0, 100, 0, 10850, 0, 0, 0, 80, 2229300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - On Quest complete - Action list'), +(2229300, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Say text'), +(2229300, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Remove npc flag'), +(2229300, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 89, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Random Move'), +(2229300, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 33, 22293, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Give Credit'), +(2229300, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Inactive Fel Reaver - Action list - Kill Itself'); From 5dd61633872fc40d83dfa13aa58a1c7de717c012 Mon Sep 17 00:00:00 2001 From: treeston Date: Fri, 9 Oct 2015 18:38:54 +0200 Subject: [PATCH 384/524] Scripts/Naxxramas: Maexxna cleanup: - Improved Web Wrap target selection - Added missing text - Cleanup of web wrap positioning - two players will never be flung to the same position (25-man) - Further improvement to web wrap spawn behavior - targetable web wrap now only spawns after the player has finished being flung to the respective position (blizzlike) - Add additional web wrap positions (sniff) --- sql/updates/world/2015_10_09_maexxna.sql | 6 + .../Northrend/Naxxramas/boss_maexxna.cpp | 153 ++++++++++++------ 2 files changed, 112 insertions(+), 47 deletions(-) create mode 100644 sql/updates/world/2015_10_09_maexxna.sql diff --git a/sql/updates/world/2015_10_09_maexxna.sql b/sql/updates/world/2015_10_09_maexxna.sql new file mode 100644 index 0000000000..375d0941ad --- /dev/null +++ b/sql/updates/world/2015_10_09_maexxna.sql @@ -0,0 +1,6 @@ +-- maexxna cleanup +DELETE FROM `creature_text` WHERE `entry`=15952; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(15952,0,0,"Spiderlings appear on the web!",41,100,32305,3,"Maexxna EMOTE_SPIDERS"), +(15952,1,0,"%s spins her web into a cocoon!",41,100,32303,3,"Maexxna EMOTE_WEB_WRAP"), +(15952,2,0,"%s sprays strands of web everywhere!",41,100,32304,3,"Maexxna EMOTE_WEB_SPRAY"); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index e52731d003..5c4d0ad456 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -18,6 +18,7 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "PassiveAI.h" +#include "SpellScript.h" #include "naxxramas.h" enum Spells @@ -28,6 +29,14 @@ enum Spells SPELL_NECROTIC_POISON = 28776, SPELL_FRENZY = 54123 }; +#define SPELL_FRENZY_HELPER RAID_MODE(54123,54124) + +enum Emotes +{ + EMOTE_SPIDERS = 0, + EMOTE_WEB_WRAP = 1, + EMOTE_WEB_SPRAY = 2 +}; enum Creatures { @@ -35,12 +44,16 @@ enum Creatures NPC_SPIDERLING = 17055, }; -#define MAX_POS_WRAP 3 -const Position PosWrap[MAX_POS_WRAP] = +#define MAX_WRAP_POSITION 7 +const Position WrapPositions[MAX_WRAP_POSITION] = { - {3546.796f, -3869.082f, 296.450f, 0.0f}, - {3531.271f, -3847.424f, 299.450f, 0.0f}, - {3497.067f, -3843.384f, 302.384f, 0.0f}, + {3453.818f, -3854.651f, 308.7581f, 4.362833f}, + {3535.042f, -3842.383f, 300.795f, 3.179324f}, + {3538.399f, -3846.088f, 299.964f, 4.310297f}, + {3548.464f, -3854.676f, 298.6075f, 4.546609f}, + {3557.663f, -3870.123f, 297.5027f, 3.756433f}, + {3560.546f, -3879.353f, 297.4843f, 2.508937f}, + {3562.535f, -3892.507f, 298.532f, 6.022466f}, }; enum Events @@ -51,7 +64,24 @@ enum Events EVENT_POISON, EVENT_WRAP, EVENT_SUMMON, - EVENT_FRENZY, +}; + +const float WEB_WRAP_MOVE_SPEED = 20.0f; + +struct WebTargetSelector : public std::unary_function +{ + WebTargetSelector(Unit* maexxna) : _maexxna(maexxna) {} + bool operator()(Unit const* target) const + { + if (_maexxna->GetVictim() == target) // never target tank + return false; + if (target->HasAura(SPELL_WEB_WRAP)) // never target targets that are already webbed + return false; + return true; + } + + private: + const Unit* _maexxna; }; class boss_maexxna : public CreatureScript @@ -66,27 +96,22 @@ public: struct boss_maexxnaAI : public BossAI { - boss_maexxnaAI(Creature* creature) : BossAI(creature, BOSS_MAEXXNA) - { - Initialize(); - } - - void Initialize() - { - enraged = false; - } - - bool enraged; + boss_maexxnaAI(Creature* creature) : BossAI(creature, BOSS_MAEXXNA) { } void EnterCombat(Unit* /*who*/) override { _EnterCombat(); - Initialize(); - events.ScheduleEvent(EVENT_WRAP, 20000); - events.ScheduleEvent(EVENT_SPRAY, 40000); - events.ScheduleEvent(EVENT_SHOCK, urand(5000, 10000)); - events.ScheduleEvent(EVENT_POISON, urand(10000, 15000)); - events.ScheduleEvent(EVENT_SUMMON, 30000); + events.ScheduleEvent(EVENT_WRAP, 20 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_SPRAY, 40 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_SHOCK, urandms(5, 10)); + events.ScheduleEvent(EVENT_POISON, urandms(10, 15)); + events.ScheduleEvent(EVENT_SUMMON, 30 * IN_MILLISECONDS); + } + + void Reset() override + { + _Reset(); + instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_WEB_WRAP); } void UpdateAI(uint32 diff) override @@ -94,10 +119,9 @@ public: if (!UpdateVictim() || !CheckInRoom()) return; - if (!enraged && HealthBelowPct(30)) + if (HealthBelowPct(30) && !me->HasAura(SPELL_FRENZY_HELPER)) { - enraged = true; - events.ScheduleEvent(EVENT_FRENZY, 0); // will be cast immediately + DoCast(SPELL_FRENZY); } events.Update(diff); @@ -107,41 +131,49 @@ public: switch (eventId) { case EVENT_WRAP: - /// @todo Add missing text - for (uint8 i = 0; i < RAID_MODE(1, 2); ++i) + { + std::list targets; + SelectTargetList(targets, WebTargetSelector(me), RAID_MODE(1, 2), SELECT_TARGET_RANDOM); + if (!targets.empty()) { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0, true, -SPELL_WEB_WRAP)) + Talk(EMOTE_WEB_WRAP); + int8 wrapPos = -1; + for (Unit* target : targets) { + if (wrapPos == -1) // allow all positions on the first target + wrapPos = urand(0, MAX_WRAP_POSITION - 1); + else // on subsequent iterations, only allow positions that are not equal to the previous one (this is sufficient since we should only have two targets at most, ever) + wrapPos = (wrapPos + urand(1, MAX_WRAP_POSITION - 1)) % MAX_WRAP_POSITION; + target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_WEB_SPRAY, me)); - uint8 pos = rand32() % MAX_POS_WRAP; - target->GetMotionMaster()->MoveJump(PosWrap[pos].GetPositionX(), PosWrap[pos].GetPositionY(), PosWrap[pos].GetPositionZ(), 20, 20); - if (Creature* wrap = DoSummon(NPC_WEB_WRAP, PosWrap[pos], 0, TEMPSUMMON_CORPSE_DESPAWN)) - wrap->AI()->SetGUID(target->GetGUID()); + if (Creature* wrap = DoSummon(NPC_WEB_WRAP, WrapPositions[wrapPos], 70 * IN_MILLISECONDS, TEMPSUMMON_TIMED_DESPAWN)) + { + wrap->AI()->SetGUID(target->GetGUID()); // handles application of debuff + target->GetMotionMaster()->MoveJump(WrapPositions[wrapPos], WEB_WRAP_MOVE_SPEED, WEB_WRAP_MOVE_SPEED); // move after stun to avoid stun cancelling move + } } } events.ScheduleEvent(EVENT_WRAP, 40000); break; + } case EVENT_SPRAY: + Talk(EMOTE_WEB_SPRAY); DoCastAOE(SPELL_WEB_SPRAY); events.ScheduleEvent(EVENT_SPRAY, 40000); break; case EVENT_SHOCK: DoCastAOE(SPELL_POISON_SHOCK); - events.ScheduleEvent(EVENT_SHOCK, urand(10000, 20000)); + events.ScheduleEvent(EVENT_SHOCK, urandms(10, 20)); break; case EVENT_POISON: DoCastVictim(SPELL_NECROTIC_POISON); - events.ScheduleEvent(EVENT_POISON, urand(10000, 20000)); - break; - case EVENT_FRENZY: - DoCast(me, SPELL_FRENZY, true); - events.ScheduleEvent(EVENT_FRENZY, 600000); + events.ScheduleEvent(EVENT_POISON, urandms(10, 20)); break; case EVENT_SUMMON: - /// @todo Add missing text + Talk(EMOTE_SPIDERS); uint8 amount = urand(8, 10); for (uint8 i = 0; i < amount; ++i) - DoSummon(NPC_SPIDERLING, me, 0, TEMPSUMMON_CORPSE_DESPAWN); + DoSummon(NPC_SPIDERLING, me, 4.0f, 5 * IN_MILLISECONDS, TEMPSUMMON_CORPSE_TIMED_DESPAWN); events.ScheduleEvent(EVENT_SUMMON, 40000); break; } @@ -165,23 +197,49 @@ public: struct npc_webwrapAI : public NullCreatureAI { - npc_webwrapAI(Creature* creature) : NullCreatureAI(creature) { } + npc_webwrapAI(Creature* creature) : NullCreatureAI(creature), visibleTimer(0) { } ObjectGuid victimGUID; + uint32 visibleTimer; + + void InitializeAI() override + { + me->SetVisible(false); + } void SetGUID(ObjectGuid guid, int32 /*param*/) override { + if (!guid) + return; victimGUID = guid; - if (me->m_spells[0] && victimGUID) - if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID)) - victim->CastSpell(victim, me->m_spells[0], true, NULL, NULL, me->GetGUID()); + if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID)) + { + visibleTimer = (me->GetDistance2d(victim)/WEB_WRAP_MOVE_SPEED + 0.5f) * IN_MILLISECONDS; + victim->CastSpell(victim, SPELL_WEB_WRAP, true, NULL, NULL, me->GetGUID()); + } + } + + void UpdateAI(uint32 diff) override + { + if (!visibleTimer) + return; + + if (diff >= visibleTimer) + { + visibleTimer = 0; + me->SetVisible(true); + } + else + visibleTimer -= diff; } void JustDied(Unit* /*killer*/) override { - if (me->m_spells[0] && victimGUID) + if (victimGUID && !victimGUID.IsEmpty()) if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID)) - victim->RemoveAurasDueToSpell(me->m_spells[0], me->GetGUID()); + victim->RemoveAurasDueToSpell(SPELL_WEB_WRAP, me->GetGUID()); + + me->DespawnOrUnsummon(5 * IN_MILLISECONDS); } }; @@ -190,5 +248,6 @@ public: void AddSC_boss_maexxna() { new boss_maexxna(); + new npc_webwrap(); } From 332d08a859ef4fe6f41f6fb73783fd851bedcea0 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Tue, 1 Dec 2015 15:05:48 +0100 Subject: [PATCH 385/524] Rename 2015_11_15_3574_world.sql to 2015_12_01_00_world.sql --- .../world/{2015_11_15_3574_world.sql => 2015_12_01_00_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_11_15_3574_world.sql => 2015_12_01_00_world.sql} (100%) diff --git a/sql/updates/world/2015_11_15_3574_world.sql b/sql/updates/world/2015_12_01_00_world.sql similarity index 100% rename from sql/updates/world/2015_11_15_3574_world.sql rename to sql/updates/world/2015_12_01_00_world.sql From 94e4bddb903d581293b5a7f50f9b32d1262d2c20 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 1 Dec 2015 19:27:17 +0100 Subject: [PATCH 386/524] Scripts/Icecrown Citadel: Professor Putricide - fixed Expunged Gas damage formula Closes #6396 --- src/server/game/Entities/Unit/Unit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 92fb04b483..4fedf80e96 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -7475,8 +7475,8 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, Sp uint32 stack = triggeredByAura->GetStackAmount(); int32 const mod = (GetMap()->GetSpawnMode() & 1) ? 1500 : 1250; int32 dmg = 0; - for (uint8 i = 1; i < stack; ++i) - dmg += mod * stack; + for (uint8 i = 1; i <= stack; ++i) + dmg += mod * i; if (Unit* caster = triggeredByAura->GetCaster()) caster->CastCustomSpell(70701, SPELLVALUE_BASE_POINT0, dmg); break; From f8f815dbc3a9ba7ab7fd0700722e4c589e88edff Mon Sep 17 00:00:00 2001 From: Asterc Date: Wed, 2 Dec 2015 14:27:10 -0200 Subject: [PATCH 387/524] Correctly reset the redirected threat of the hunter's spell Misdirection in cases when it has RemoveMode AURA_REMOVE_BY_DEFAULT Closes #15930 --- src/server/scripts/Spells/spell_hunter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index f2871871c3..0ca4112b28 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -480,7 +480,7 @@ class spell_hun_misdirection : public SpellScriptLoader void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT) + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT || !GetTarget()->HasAura(SPELL_HUNTER_MISDIRECTION_PROC)) GetTarget()->ResetRedirectThreat(); } From ab831507c64c8a0bc838ec835299c79f88c70ed7 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Thu, 3 Dec 2015 21:37:33 +0100 Subject: [PATCH 388/524] Core/Conditions: extended CONDITION_NEAR_CREATURE, condition value 3 is now used to check for dead creature entries (0 - alive, 1 - dead) * I used 0 for alive to avoid touching all conditions with this type (cherry picked from commit cdb5bd3eb78ea40fbd927c5662e1dad778bf12d5) --- src/server/game/Conditions/ConditionMgr.cpp | 4 ++-- src/server/game/Conditions/ConditionMgr.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 8e8c640ccf..bae400adcc 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -89,7 +89,7 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND { "PhaseMask", true, false, false }, { "Level", true, true, false }, { "Quest Completed", true, false, false }, - { "Near Creature", true, true, false }, + { "Near Creature", true, true, true }, { "Near GameObject", true, true, false }, { "Object Entry or Guid", true, true, true }, { "Object TypeMask", true, false, false }, @@ -280,7 +280,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const } case CONDITION_NEAR_CREATURE: { - condMeets = GetClosestCreatureWithEntry(object, ConditionValue1, (float)ConditionValue2) ? true : false; + condMeets = GetClosestCreatureWithEntry(object, ConditionValue1, (float)ConditionValue2, bool(!ConditionValue3)) ? true : false; break; } case CONDITION_NEAR_GAMEOBJECT: diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 81fe379f0d..43454aba04 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -59,7 +59,7 @@ enum ConditionTypes CONDITION_PHASEMASK = 26, // phasemask 0 0 true if object is in phasemask CONDITION_LEVEL = 27, // level ComparisonType 0 true if unit's level is equal to param1 (param2 can modify the statement) CONDITION_QUEST_COMPLETE = 28, // quest_id 0 0 true if player has quest_id with all objectives complete, but not yet rewarded - CONDITION_NEAR_CREATURE = 29, // creature entry distance 0 true if there is a creature of entry in range + CONDITION_NEAR_CREATURE = 29, // creature entry distance dead (0/1) true if there is a creature of entry in range CONDITION_NEAR_GAMEOBJECT = 30, // gameobject entry distance 0 true if there is a gameobject of entry in range CONDITION_OBJECT_ENTRY_GUID = 31, // TypeID entry guid true if object is type TypeID and the entry is 0 or matches entry of the object or matches guid of the object CONDITION_TYPE_MASK = 32, // TypeMask 0 0 true if object is type object's TypeMask matches provided TypeMask From 6695c98b59d1b69cb3345a8241ccbf4b7299532b Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 4 Dec 2015 16:50:47 +0100 Subject: [PATCH 389/524] DB/Quest: Gorgrom the Dragon-Eater Closes #6326 --- sql/updates/world/2015_12_04_00_world.sql | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 sql/updates/world/2015_12_04_00_world.sql diff --git a/sql/updates/world/2015_12_04_00_world.sql b/sql/updates/world/2015_12_04_00_world.sql new file mode 100644 index 0000000000..ee721273be --- /dev/null +++ b/sql/updates/world/2015_12_04_00_world.sql @@ -0,0 +1,34 @@ +-- +DELETE FROM `gameobject` WHERE `id`=185295; +DELETE FROM `creature_text` WHERE `entry` IN (21514, 10204); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `TextRange`, `comment`, `BroadcastTextId`) VALUES +(10204, 0, 0, "Misha lets OUT a loud roar AS she rakes her claws AGAINST the gronn's altar.", 16, 0, 100, 0, 0, 0, 0, "Misha", 20261), +(21514, 0, 0, "Who dares defile the altar of Gorgrom the Dragon-Eater?", 14, 0, 100, 0, 0, 0, 0, "Gorgrom the Dragon-Eater", 20262), +(21514, 1, 0, "I will crush it and flay it and eat its meat and crack its bones one by one when I am done.", 14, 0, 100, 0, 0, 0, 0, "Gorgrom the Dragon-Eater", 20264); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN (21514, 10204); +DELETE FROM `smart_scripts` WHERE source_type = 0 AND entryorguid IN (21514, 10204); +DELETE FROM `smart_scripts` WHERE source_type = 9 AND entryorguid IN (2151400, 1020400); +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 +(21514, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 2151400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - On Just summoned - Action list'), +(2151400, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - Set unit flag'), +(2151400, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - Say text'), +(2151400, 9, 2, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - Say text'), +(2151400, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3608.135986, 7183.374023, 139.581833, 2.321033, 'Gorgrom the Dragon-Eater - Action list - Move to pos'), +(2151400, 9, 4, 0, 0, 0, 100, 0, 2500, 2500, 0, 0, 11, 35470, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - Cast explosion'), +(2151400, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 50, 185295, 60, 0, 0, 0, 0, 8, 0, 0, 0, 3608.135986, 7183.374023, 139.581833, 2.321033, 'Gorgrom the Dragon-Eater - Action list - Summon Gorgrom corpse spell focus object'), +(2151400, 9, 6, 0, 0, 0, 100, 0, 400, 400, 0, 0, 11, 58951, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - cast Permanent Feign Death'), +(2151400, 9, 7, 0, 0, 0, 100, 0, 40000, 40000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgrom the Dragon-Eater - Action list - Despawn'), +(10204, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 80, 1020400, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Misha - On Just summoned - Action list'), +(1020400, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Misha - Action list - Set unit flag'), +(1020400, 9, 1, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Misha - Action list - Say text'), +(1020400, 9, 2, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3612.911865, 7193.020508, 139.651291, 5.472856, 'Misha - Action list - Move to pos'), +(1020400, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 3612.911865, 7193.020508, 139.651291, 5.472856, 'Misha - Action list - Set Orientation'), +(1020400, 9, 4, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Misha - Action list - Despawn'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceEntry` IN (39264, 39220); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(17, 0, 39264, 0, 0, 29, 1, 21514, 30, 0, 1, 0, 0, '', "Sablemane's Trap Require Gorgrom the Dragon-Eater not around"), +(17, 0, 39220, 0, 0, 29, 1, 21514, 30, 0, 1, 0, 0, '', "Sablemane's Trap Require Gorgrom the Dragon-Eater not around"), +(17, 0, 39264, 0, 0, 28, 0, 10802, 0, 0, 1, 0, 0, '', "Sablemane's Trap RequireGorgrom the Dragon-Eater not Completed"), +(17, 0, 39220, 0, 0, 28, 0, 10723, 0, 0, 1, 0, 0, '', "Sablemane's Trap RequireGorgrom the Dragon-Eater not Completed"); From bcc2b0007258a3e20f78946d6439251f133a57a6 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 4 Dec 2015 17:17:33 +0100 Subject: [PATCH 390/524] DB: Fix a Typo --- sql/updates/world/2015_12_01_00_world.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/updates/world/2015_12_01_00_world.sql b/sql/updates/world/2015_12_01_00_world.sql index 456a36fe88..1572245a51 100644 --- a/sql/updates/world/2015_12_01_00_world.sql +++ b/sql/updates/world/2015_12_01_00_world.sql @@ -9,4 +9,4 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (24724, 'spell_hallow_end_wand'), -- Skeleton Costume (24733, 'spell_hallow_end_wand'), -- Bat Costume (24737, 'spell_hallow_end_wand'), -- Ghost Costume -(24741, 'spell_hallow_end_wand') -- Wisp Costume; +(24741, 'spell_hallow_end_wand'); -- Wisp Costume From 984bf32fa89d25000f3ff369092bf9034e7a860b Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 5 Dec 2015 03:53:51 +0100 Subject: [PATCH 391/524] DB/Quest: Restore deleted sql for Anatoly Will Talk --- sql/updates/world/2015_12_05_00_world.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 sql/updates/world/2015_12_05_00_world.sql diff --git a/sql/updates/world/2015_12_05_00_world.sql b/sql/updates/world/2015_12_05_00_world.sql new file mode 100644 index 0000000000..c2c90164a4 --- /dev/null +++ b/sql/updates/world/2015_12_05_00_world.sql @@ -0,0 +1,8 @@ +-- +SET @TATJANA := 27627; +DELETE FROM `smart_scripts` WHERE `entryorguid`IN (27627) 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 +(@TATJANA,0,0,1,8,0,100,0,49134,0,0,0,11,49135,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tatjana - On spellhit Tranquilizer Dart - Spellcast Tatjana Ping'), +(@TATJANA,0,1,2,61,0,100,0,0,0,0,0,2,35,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tatjana - On spellhit Tranquilizer Dart - Set faction'), +(@TATJANA,0,2,0,61,0,100,0,0,0,0,0,20,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tatjana - On Spellhit \'Tranquilizer Dart\' - Stop Attack'), +(@TATJANA,0,3,0,0,0,100,0,2000,6000,9000,12000,11,32009,0,0,0,0,0,2,0,0,0,0,0,0,0,'Tatjana - On update IC - Spellcast Cutdown'); From 03215a2eb76167e1fb175a6b96440c752d1bcdf8 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Sun, 6 Dec 2015 03:44:12 +0100 Subject: [PATCH 392/524] Core/Spell: fixed possible exploit in Duel Reset script - thanks @Runico for reporting it --- src/server/game/Spells/SpellHistory.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index ed5c31c25c..faad54d0af 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -695,9 +695,7 @@ void SpellHistory::RestoreCooldownStateAfterDuel() // check for spell with onHold active before and during the duel for (auto itr = _spellCooldownsBeforeDuel.begin(); itr != _spellCooldownsBeforeDuel.end(); ++itr) { - if (!itr->second.OnHold && - _spellCooldowns.find(itr->first) != _spellCooldowns.end() && - !_spellCooldowns[itr->first].OnHold) + if (!itr->second.OnHold && !_spellCooldowns[itr->first].OnHold) _spellCooldowns[itr->first] = _spellCooldownsBeforeDuel[itr->first]; } From e60bbaa7d39c690a759c96ee83ab8311e700a8e1 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 6 Dec 2015 20:04:13 +0100 Subject: [PATCH 393/524] DB/Quest: Great Bear Spirit Closes #15950 --- sql/updates/world/2015_12_06_00_world.sql | 35 +++++++++++ .../scripts/Kalimdor/zone_moonglade.cpp | 59 ------------------- 2 files changed, 35 insertions(+), 59 deletions(-) create mode 100644 sql/updates/world/2015_12_06_00_world.sql diff --git a/sql/updates/world/2015_12_06_00_world.sql b/sql/updates/world/2015_12_06_00_world.sql new file mode 100644 index 0000000000..b60d4d3e88 --- /dev/null +++ b/sql/updates/world/2015_12_06_00_world.sql @@ -0,0 +1,35 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=11956; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=11956 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 +(11956, 0, 0, 0, 62, 0, 100, 0, 3884, 0, 0, 0, 15, 5930, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Great Bear Spirit - On Gossip Select - Quest explored'), +(11956, 0, 1, 0, 62, 0, 100, 0, 3884, 1, 0, 0, 15, 5929, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Great Bear Spirit - On Gossip Select - Quest explored'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=3884; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,3884,0,0,9,5930,0,0,0,0,'','Show the gossip option if the quest 5930 is taken'), +(15,3884,1,0,9,5929,0,0,0,0,'','Show the gossip option if the quest 5929 is taken'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=3882; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`Comment`) VALUES +(14,3882,4719,0,9,5929,0,0,0,"Only show text_id 4719 if the quest 5929 is taken"), +(14,3882,4719,1,9,5930,0,0,0,"Only show text_id 4719 if the quest 5930 is taken"); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=3882; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,3882,0,0,9,5930,0,0,0,0,'','Show the gossip option if the quest 5930 is taken'), +(15,3882,0,1,9,5929,0,0,0,0,'','Show the gossip option if the quest 5929 is taken'); + +DELETE FROM `gossip_menu` WHERE `entry`=3882 AND `text_id`=4719; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (3882, 4719); + +DELETE FROM `gossip_menu` WHERE `entry`=3882 AND `text_id`=4719; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES (3882, 4719); +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (3881, 3882, 3883, 3884); +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 +(3882,0,0,'What do you represent, spirit?',7439,1,1,3881,0,0,0,'',0), +(3881,0,0,'I seek to understand the importance of strength of the body.',7442,1,1,3883,0,0,0,'',0), +(3883,0,0,'I seek to understand the importance of strength of the heart.',7444,1,1,3884,0,0,0,'',0), +(3884,0,0,'I have heard your words, Great Bear Spirit, and I understand. I now seek your blessings to fully learn the way of the Claw.',7446,1,1,3885,0,0,0,'',0), +(3884,1,0,'I have heard your words, Great Bear Spirit, and I understand. I now seek your blessings to fully learn the way of the Claw.',7446,1,1,3885,0,0,0,'',0); diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 163620230e..c7decd3e28 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -107,64 +107,6 @@ public: }; -/*###### -## npc_great_bear_spirit -######*/ - -#define GOSSIP_BEAR1 "What do you represent, spirit?" -#define GOSSIP_BEAR2 "I seek to understand the importance of strength of the body." -#define GOSSIP_BEAR3 "I seek to understand the importance of strength of the heart." -#define GOSSIP_BEAR4 "I have heard your words, Great Bear Spirit, and I understand. I now seek your blessings to fully learn the way of the Claw." - -class npc_great_bear_spirit : public CreatureScript -{ -public: - npc_great_bear_spirit() : CreatureScript("npc_great_bear_spirit") { } - - 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_BEAR2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->SEND_GOSSIP_MENU(4721, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BEAR3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - player->SEND_GOSSIP_MENU(4733, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BEAR4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - player->SEND_GOSSIP_MENU(4734, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - player->SEND_GOSSIP_MENU(4735, creature->GetGUID()); - if (player->GetQuestStatus(5929) == QUEST_STATUS_INCOMPLETE) - player->AreaExploredOrEventHappens(5929); - if (player->GetQuestStatus(5930) == QUEST_STATUS_INCOMPLETE) - player->AreaExploredOrEventHappens(5930); - break; - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - //ally or horde quest - if (player->GetQuestStatus(5929) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(5930) == QUEST_STATUS_INCOMPLETE) - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BEAR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - player->SEND_GOSSIP_MENU(4719, creature->GetGUID()); - } - else - player->SEND_GOSSIP_MENU(4718, creature->GetGUID()); - - return true; - } - -}; - /*###### ## npc_silva_filnaveth ######*/ @@ -712,7 +654,6 @@ public: void AddSC_moonglade() { new npc_bunthen_plainswind(); - new npc_great_bear_spirit(); new npc_silva_filnaveth(); new npc_clintar_spirit(); new npc_omen(); From f1f4005ad8a17ea5fdd2b66f8ed3d0bd7c4c1efb Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 6 Dec 2015 21:02:52 +0100 Subject: [PATCH 394/524] Core/Quest: Fix issues reported by static analysis --- src/server/game/Entities/Unit/Unit.cpp | 7 ++++--- src/server/game/Entities/Unit/Unit.h | 6 ++++++ src/server/game/Handlers/GroupHandler.cpp | 2 +- src/server/game/Spells/SpellEffects.cpp | 2 +- src/server/game/Spells/SpellMgr.cpp | 4 ++-- src/server/scripts/Commands/cs_wp.cpp | 6 ++++++ 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4fedf80e96..277ead92df 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8291,6 +8291,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg case 15337: // Improved Spirit Tap (Rank 1) case 15338: // Improved Spirit Tap (Rank 2) { + ASSERT(procSpell); if (procSpell->SpellFamilyFlags[0] & 0x800000) if ((procSpell->Id != 58381) || !roll_chance_i(50)) return false; @@ -8552,7 +8553,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg // try detect target manually if not set if (target == NULL) - target = !(procFlags & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)) && triggerEntry && triggerEntry->IsPositive() ? this : victim; + target = !(procFlags & (PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS | PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS)) && triggerEntry->IsPositive() ? this : victim; if (basepoints0) CastCustomSpell(target, trigger_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura); @@ -9648,7 +9649,7 @@ Unit* Unit::GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo) && _IsValidAttackTarget(magnet, spellInfo)) { /// @todo handle this charge drop by proc in cast phase on explicit target - if (victim && spellInfo->Speed > 0.0f) + if (spellInfo->Speed > 0.0f) { // Set up missile speed based delay uint32 delay = uint32(std::floor(std::max(victim->GetDistance(this), 5.0f) / spellInfo->Speed * 1000.0f)); @@ -16041,7 +16042,7 @@ void Unit::RemoveCharmedBy(Unit* charmer) // Vehicle should not attack its passenger after he exists the seat if (type != CHARM_TYPE_VEHICLE) - LastCharmerGUID = charmer->GetGUID(); + LastCharmerGUID = ASSERT_NOTNULL(charmer)->GetGUID(); } // If charmer still exists diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 72f3a6682f..f8e45c073f 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -898,6 +898,12 @@ public: uint32 GetHitMask() const { return _hitMask; } SpellInfo const* GetSpellInfo() const { return NULL; } + SpellInfo const* EnsureSpellInfo() const + { + SpellInfo const* spellInfo = GetSpellInfo(); + ASSERT(spellInfo); + return spellInfo; + } SpellSchoolMask GetSchoolMask() const { return SPELL_SCHOOL_MASK_NONE; } DamageInfo* GetDamageInfo() const { return _damageInfo; } diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 30764fea2a..9f225df842 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -991,7 +991,7 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket &recvData) data.put(maskPos, auraMask); // GROUP_UPDATE_FLAG_AURAS if (updateFlags & GROUP_UPDATE_FLAG_PET_GUID) - data << uint64(pet->GetGUID()); + data << uint64(ASSERT_NOTNULL(pet)->GetGUID()); data << std::string(pet ? pet->GetName() : ""); // GROUP_UPDATE_FLAG_PET_NAME data << uint16(pet ? pet->GetDisplayId() : 0); // GROUP_UPDATE_FLAG_PET_MODEL_ID diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index b345c5affe..b3ab72dcbf 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5638,7 +5638,7 @@ void Spell::EffectGameObjectDamage(SpellEffIndex /*effIndex*/) FactionTemplateEntry const* casterFaction = caster->GetFactionTemplateEntry(); FactionTemplateEntry const* targetFaction = sFactionTemplateStore.LookupEntry(gameObjTarget->GetUInt32Value(GAMEOBJECT_FACTION)); // Do not allow to damage GO's of friendly factions (ie: Wintergrasp Walls/Ulduar Storm Beacons) - if ((casterFaction && targetFaction && !casterFaction->IsFriendlyTo(*targetFaction)) || !targetFaction) + if (!targetFaction || (casterFaction && targetFaction && !casterFaction->IsFriendlyTo(*targetFaction))) gameObjTarget->ModifyHealth(-damage, caster, GetSpellInfo()->Id); } diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index ec616c1d4c..2d990ad3ed 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -969,10 +969,10 @@ bool SpellMgr::CanSpellTriggerProcOnEvent(SpellProcEntry const& procEntry, ProcE // check spell family name/flags (if set) for spells if (eventInfo.GetTypeMask() & (PERIODIC_PROC_FLAG_MASK | SPELL_PROC_FLAG_MASK | PROC_FLAG_DONE_TRAP_ACTIVATION)) { - if (procEntry.spellFamilyName && eventInfo.GetSpellInfo() && (procEntry.spellFamilyName != eventInfo.GetSpellInfo()->SpellFamilyName)) + if (procEntry.spellFamilyName && eventInfo.GetSpellInfo() && (procEntry.spellFamilyName != eventInfo.EnsureSpellInfo()->SpellFamilyName)) return false; - if (procEntry.spellFamilyMask && eventInfo.GetSpellInfo() && !(procEntry.spellFamilyMask & eventInfo.GetSpellInfo()->SpellFamilyFlags)) + if (procEntry.spellFamilyMask && eventInfo.GetSpellInfo() && !(procEntry.spellFamilyMask & eventInfo.EnsureSpellInfo()->SpellFamilyFlags)) return false; } diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index b35e71dbd5..30ee8254f7 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -374,6 +374,12 @@ public: if (show == "del") { + if (!arg_id) + { + handler->SendSysMessage("|cffff33ffERROR: Waypoint script guid not present.|r"); + return true; + } + id = atoi(arg_id); stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID); From bffaa92633937d220ab19f565faa5906995530a2 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 6 Dec 2015 22:31:01 +0100 Subject: [PATCH 395/524] Core/Quest: Fix issues reported by static analysis --- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 1 - .../game/AI/ScriptedAI/ScriptedCreature.h | 3 --- src/server/game/Entities/Pet/Pet.cpp | 18 +++++++++--------- src/server/game/Entities/Pet/Pet.h | 2 +- src/server/game/Groups/Group.cpp | 2 +- src/server/game/Texts/CreatureTextMgr.cpp | 2 +- 6 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 7b145268d2..9a6742b5eb 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -97,7 +97,6 @@ bool SummonList::HasEntry(uint32 entry) const } ScriptedAI::ScriptedAI(Creature* creature) : CreatureAI(creature), - me(creature), IsFleeing(false), _evadeCheckCooldown(2500), _isCombatMovementAllowed(true) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index 7d7811d9e7..242acbcd44 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -184,9 +184,6 @@ struct ScriptedAI : public CreatureAI // Variables // ************* - //Pointer to creature we are manipulating - Creature* me; - //For fleeing bool IsFleeing; diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 0121194e32..a399600d2f 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -52,7 +52,7 @@ Pet::Pet(Player* owner, PetType type) : } m_name = "Pet"; - m_regenTimer = PET_FOCUS_REGEN_INTERVAL; + m_focusRegenTimer = PET_FOCUS_REGEN_INTERVAL; } Pet::~Pet() @@ -589,22 +589,22 @@ void Pet::Update(uint32 diff) } //regenerate focus for hunter pets or energy for deathknight's ghoul - if (m_regenTimer) + if (m_focusRegenTimer) { - if (m_regenTimer > diff) - m_regenTimer -= diff; + if (m_focusRegenTimer > diff) + m_focusRegenTimer -= diff; else { switch (getPowerType()) { case POWER_FOCUS: Regenerate(POWER_FOCUS); - m_regenTimer += PET_FOCUS_REGEN_INTERVAL - diff; - if (!m_regenTimer) ++m_regenTimer; + m_focusRegenTimer += PET_FOCUS_REGEN_INTERVAL - diff; + if (!m_focusRegenTimer) ++m_focusRegenTimer; // Reset if large diff (lag) causes focus to get 'stuck' - if (m_regenTimer > PET_FOCUS_REGEN_INTERVAL) - m_regenTimer = PET_FOCUS_REGEN_INTERVAL; + if (m_focusRegenTimer > PET_FOCUS_REGEN_INTERVAL) + m_focusRegenTimer = PET_FOCUS_REGEN_INTERVAL; break; @@ -615,7 +615,7 @@ void Pet::Update(uint32 diff) // if (!m_regenTimer) ++m_regenTimer; // break; default: - m_regenTimer = 0; + m_focusRegenTimer = 0; break; } } diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index 85c1f83d4a..c8e95a06a2 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -152,7 +152,7 @@ class Pet : public Guardian int32 m_duration; // time until unsummon (used mostly for summoned guardians and not used for controlled pets) uint64 m_auraRaidUpdateMask; bool m_loading; - uint32 m_regenTimer; + uint32 m_focusRegenTimer; DeclinedName *m_declinedname; diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 5f500156f5..4f8accee69 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -539,7 +539,7 @@ bool Group::RemoveMember(ObjectGuid guid, const RemoveMethod& method /*= GROUP_R } // Reevaluate group enchanter if the leaving player had enchanting skill or the player is offline - if ((player && player->GetSkillValue(SKILL_ENCHANTING)) || !player) + if (!player || player->GetSkillValue(SKILL_ENCHANTING)) ResetMaxEnchantingLevel(); // Remove player from loot rolls diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 9f75d917ae..034fe96306 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -293,7 +293,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly); } - if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f)) + if (isEqualChanced || totalChance == 100.0f) SetRepeatId(source, textGroup, iter->id); return iter->duration; From 1ddf44caf3b0c9af2cc4169b608f1801c2f6f52a Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 6 Dec 2015 23:26:27 +0100 Subject: [PATCH 396/524] Core/Quest: Fix issues reported by static analysis --- src/server/game/Quests/QuestDef.cpp | 12 ++++++++++++ src/server/game/Server/WorldSession.cpp | 5 ++--- .../BattleForMountHyjal/boss_anetheron.cpp | 2 +- .../BattleForMountHyjal/boss_azgalor.cpp | 4 +--- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 58bc4915d3..a3f662f2ad 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -127,6 +127,18 @@ Quest::Quest(Field* questRecord) for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) if (RewardChoiceItemId[i]) ++_rewChoiceItemsCount; + + for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) + DetailsEmote[i] = 0; + + for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) + DetailsEmoteDelay[i] = 0; + + for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) + OfferRewardEmote[i] = 0; + + for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) + OfferRewardEmoteDelay[i] = 0; } void Quest::LoadQuestDetails(Field* fields) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 1ccd6a4151..6ae63f2efa 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -858,9 +858,8 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi) // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_PITCH_UP (0x840) // MOVEMENTFLAG_ROOT + MOVEMENTFLAG_PITCH_DOWN (0x880) // If none of these are true, clear the root - if (mi->HasMovementFlag(MOVEMENTFLAG_ROOT) && mi->HasMovementFlag(MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT | MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN)) - REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT), - MOVEMENTFLAG_MASK_MOVING); + REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_ROOT) && mi->HasMovementFlag(MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT | MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN), + MOVEMENTFLAG_MASK_MOVING); } else { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp index 254e3a41d6..d0a9b23345 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp @@ -235,7 +235,7 @@ public: if (AnetheronGUID) { Creature* boss = ObjectAccessor::GetCreature(*me, AnetheronGUID); - if (!boss || (boss && boss->isDead())) + if (!boss || boss->isDead()) { me->setDeathState(JUST_DIED); me->RemoveCorpse(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index 08942e3393..8bfdee067b 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -200,7 +200,6 @@ public: CrippleTimer = 50000; WarstompTimer = 10000; CheckTimer = 5000; - instance = creature->GetInstanceScript(); AzgalorGUID = instance->GetGuidData(DATA_AZGALOR); } @@ -208,7 +207,6 @@ public: uint32 WarstompTimer; uint32 CheckTimer; ObjectGuid AzgalorGUID; - InstanceScript* instance; void Reset() override { @@ -248,7 +246,7 @@ public: if (AzgalorGUID) { Creature* boss = ObjectAccessor::GetCreature(*me, AzgalorGUID); - if (!boss || (boss && boss->isDead())) + if (!boss || boss->isDead()) { me->setDeathState(JUST_DIED); me->RemoveCorpse(); From 3267c90102068ed88c0bd7146ae747fe8ba44771 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 7 Dec 2015 20:06:02 +0100 Subject: [PATCH 397/524] Core/Unit: Add Unit::KillSelf() overload Add Unit::KillSelf() function as overload of Unit::Kill(this) . Use KillSelf() whenever the killer and the victim are the same to clearly state the Unit is going to kill itself. --- .../game/AI/SmartScripts/SmartScript.cpp | 4 ++-- src/server/game/Entities/Unit/Unit.h | 1 + .../game/Spells/Auras/SpellAuraEffects.cpp | 2 +- .../EasternKingdoms/Karazhan/boss_midnight.cpp | 4 ++-- .../Karazhan/boss_prince_malchezaar.cpp | 2 +- .../boss_felblood_kaelthas.cpp | 6 +++--- .../MagistersTerrace/boss_selin_fireheart.cpp | 4 ++-- .../ScarletEnclave/chapter5.cpp | 4 ++-- .../boss_headless_horseman.cpp | 4 ++-- .../instance_scarlet_monastery.cpp | 2 +- .../EasternKingdoms/Stratholme/stratholme.cpp | 4 ++-- .../SunwellPlateau/boss_eredar_twins.cpp | 2 +- .../SunwellPlateau/boss_kiljaeden.cpp | 4 ++-- .../CullingOfStratholme/boss_mal_ganis.cpp | 2 +- .../culling_of_stratholme.cpp | 4 ++-- .../Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp | 18 +++++++++--------- .../scripts/Kalimdor/zone_dustwallow_marsh.cpp | 2 +- .../Ahnkahet/boss_jedoga_shadowseeker.cpp | 2 +- .../ObsidianSanctum/obsidian_sanctum.cpp | 6 +++--- .../RubySanctum/boss_halion.cpp | 6 +++--- .../IcecrownCitadel/boss_lady_deathwhisper.cpp | 4 ++-- .../Northrend/Naxxramas/boss_thaddius.cpp | 4 ++-- .../Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 2 +- .../Ulduar/Ulduar/boss_yogg_saron.cpp | 4 ++-- .../scripts/Northrend/zone_borean_tundra.cpp | 2 +- .../scripts/Northrend/zone_sholazar_basin.cpp | 2 +- .../boss_grandmaster_vorpil.cpp | 2 +- .../SerpentShrine/boss_lady_vashj.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 2 +- src/server/scripts/Spells/spell_item.cpp | 2 +- 30 files changed, 55 insertions(+), 54 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index a1703dfa78..7ca4274bc4 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -979,7 +979,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (me && !me->isDead()) { - me->Kill(me); + me->KillSelf(); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_DIE: Creature %u", me->GetGUID().GetCounter()); } break; @@ -1249,7 +1249,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsUnit(*itr)) continue; - (*itr)->ToUnit()->Kill((*itr)->ToUnit()); + (*itr)->ToUnit()->KillSelf(); } delete targets; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index f8e45c073f..2ddbe398f7 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1401,6 +1401,7 @@ class Unit : public WorldObject void DealDamageMods(Unit* victim, uint32 &damage, uint32* absorb); uint32 DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDamage = NULL, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = NULL, bool durabilityLoss = true); void Kill(Unit* victim, bool durabilityLoss = true); + void KillSelf(bool durabilityLoss = true) { Kill(this, durabilityLoss); } int32 DealHeal(Unit* victim, uint32 addhealth); void ProcDamageAndSpell(Unit* victim, uint32 procAttacker, uint32 procVictim, uint32 procEx, uint32 amount, WeaponAttackType attType = BASE_ATTACK, SpellInfo const* procSpell = NULL, SpellInfo const* procAura = NULL); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 200e16a966..01f27a38e9 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -5562,7 +5562,7 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) case 31347: { target->CastSpell(target, 31350, true, NULL, this); - target->Kill(target); + target->KillSelf(); return; } // Spellcloth diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 0b5c330289..96c7c5d810 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -108,7 +108,7 @@ public: { Talk(SAY_DEATH); if (Unit* midnight = ObjectAccessor::GetUnit(*me, Midnight)) - midnight->Kill(midnight); + midnight->KillSelf(); } void UpdateAI(uint32 diff) override; @@ -264,7 +264,7 @@ void boss_attumen::boss_attumenAI::UpdateAI(uint32 diff) } Midnight.Clear(); me->SetVisible(false); - me->Kill(me); + me->KillSelf(); } else ResetTimer -= diff; } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 0abba3dfff..d11c4a6e58 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -295,7 +295,7 @@ public: { Unit* axe = ObjectAccessor::GetUnit(*me, axes[i]); if (axe && axe->IsAlive()) - axe->Kill(axe); + axe->KillSelf(); axes[i].Clear(); } } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index a95ac9aaa2..e4cc7c0e84 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -473,7 +473,7 @@ public: if (FlameStrikeTimer <= diff) { DoCast(me, SPELL_FLAMESTRIKE1_NORMAL, true); - me->Kill(me); + me->KillSelf(); } else FlameStrikeTimer -= diff; } }; @@ -636,7 +636,7 @@ public: if (HatchTimer <= diff) { me->SummonCreature(CREATURE_PHOENIX, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); - me->Kill(me); + me->KillSelf(); } else HatchTimer -= diff; } }; @@ -675,7 +675,7 @@ public: void UpdateAI(uint32 diff) override { if (DespawnTimer <= diff) - me->Kill(me); + me->KillSelf(); else DespawnTimer -= diff; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index f57de5316a..480fd8848f 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -139,7 +139,7 @@ class boss_selin_fireheart : public CreatureScript for (Creature* crystal : Crystals) { if (crystal && crystal->IsAlive()) - crystal->Kill(crystal); + crystal->KillSelf(); } } @@ -218,7 +218,7 @@ class boss_selin_fireheart : public CreatureScript Creature* CrystalChosen = ObjectAccessor::GetCreature(*me, CrystalGUID); if (CrystalChosen && CrystalChosen->IsAlive()) - CrystalChosen->Kill(CrystalChosen); + CrystalChosen->KillSelf(); CrystalGUID.Clear(); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 2714d65774..ce8b094bb8 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -1218,7 +1218,7 @@ public: if (Creature* temp = ObjectAccessor::GetCreature(*me, uiLichKingGUID)) // Lich king disappears here { temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN17); - temp->Kill(temp); + temp->KillSelf(); } JumpToNextStep(10000); break; @@ -1633,7 +1633,7 @@ public: if (temp->IsAlive()) { temp->SetVisible(false); - temp->Kill(temp); + temp->KillSelf(); } } }; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index a78ad740c9..bac4e450a0 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -359,8 +359,8 @@ public: { die = false; if (Unit* body = ObjectAccessor::GetUnit(*me, bodyGUID)) - body->Kill(body); - me->Kill(me); + body->KillSelf(); + me->KillSelf(); } else wait -= diff; } diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp index ed9f7ccb6d..c41b1d87d6 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp @@ -121,7 +121,7 @@ class instance_scarlet_monastery : public InstanceMapScript { Creature* add = instance->GetCreature(guid); if (add && add->IsAlive()) - add->Kill(add); + add->KillSelf(); } HorsemanAdds.clear(); HandleGameObject(PumpkinShrineGUID, false); diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp index ba99df8cdd..60dd27eed9 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp @@ -170,7 +170,7 @@ public: { if (Player* player = temp->ToPlayer()) player->KilledMonsterCredit(NPC_RESTLESS, me->GetGUID()); - me->Kill(me); + me->KillSelf(); } } else @@ -248,7 +248,7 @@ public: if (Tagged) { if (Die_Timer <= diff) - me->Kill(me); + me->KillSelf(); else Die_Timer -= diff; } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index 31ca716e0f..77e0e680f4 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -698,7 +698,7 @@ public: if (KillTimer <= diff) { - me->Kill(me); + me->KillSelf(); KillTimer = 9999999; } else KillTimer -= diff; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 4d544ccdea..e3deac506b 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -1112,7 +1112,7 @@ public: else if (me->IsWithinDistInMap(me->GetVictim(), 3)) // Explode if it's close enough to it's target { DoCastVictim(SPELL_FELFIRE_FISSION); - me->Kill(me); + me->KillSelf(); } } }; @@ -1172,7 +1172,7 @@ public: uiTimer = 5000; break; case 3: - me->Kill(me); + me->KillSelf(); me->RemoveCorpse(); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index 70ecaad3d8..c39fbc9079 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -218,7 +218,7 @@ public: break; case 5: me->SetVisible(false); - me->Kill(me); + me->KillSelf(); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index b5d2931377..a73a6b8d99 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -817,7 +817,7 @@ public: cityman1->AI()->Talk(SAY_PHASE204); cityman1->SetTarget(me->GetGUID()); if (Creature* cityman0 = ObjectAccessor::GetCreature(*me, citymenGUID[0])) - cityman0->Kill(cityman0); + cityman0->KillSelf(); me->SetTarget(citymenGUID[1]); } JumpToNextStep(0); @@ -829,7 +829,7 @@ public: break; case 33: if (Creature* cityman1 = ObjectAccessor::GetCreature(*me, citymenGUID[1])) - cityman1->Kill(cityman1); + cityman1->KillSelf(); JumpToNextStep(1000); break; case 34: diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index 8e84f1b426..6016893a78 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -917,7 +917,7 @@ public: void JustDied(Unit* /*killer*/) override { if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) - p->Kill(p); + p->KillSelf(); } void Reset() override @@ -943,7 +943,7 @@ public: //KillSelfTimer if (KillSelfTimer <= diff) { - me->Kill(me); + me->KillSelf(); return; } else KillSelfTimer -= diff; @@ -997,7 +997,7 @@ public: void JustDied(Unit* /*killer*/) override { if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) - p->Kill(p); + p->KillSelf(); } void Reset() override @@ -1025,7 +1025,7 @@ public: if (EvadeTimer <= diff) { if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) - p->Kill(p); + p->KillSelf(); //Dissapear and reappear at new position me->SetVisible(false); @@ -1033,7 +1033,7 @@ public: Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0); if (!target) { - me->Kill(me); + me->KillSelf(); return; } @@ -1113,7 +1113,7 @@ public: void JustDied(Unit* /*killer*/) override { if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) - p->Kill(p); + p->KillSelf(); } void Reset() override @@ -1142,7 +1142,7 @@ public: if (EvadeTimer <= diff) { if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) - p->Kill(p); + p->KillSelf(); //Dissapear and reappear at new position me->SetVisible(false); @@ -1150,7 +1150,7 @@ public: Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0); if (!target) { - me->Kill(me); + me->KillSelf(); return; } @@ -1231,7 +1231,7 @@ public: void JustDied(Unit* /*killer*/) override { if (Unit* p = ObjectAccessor::GetUnit(*me, Portal)) - p->Kill(p); + p->KillSelf(); } void Reset() override diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index b080091876..fba0956ccf 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -352,7 +352,7 @@ class spell_ooze_zap_channel_end : public SpellScriptLoader PreventHitDefaultEffect(effIndex); if (Player* player = GetCaster()->ToPlayer()) player->CastSpell(player, SPELL_OOZE_CHANNEL_CREDIT, true); - GetHitUnit()->Kill(GetHitUnit()); + GetHitUnit()->KillSelf(); } void Register() override diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp index 5890b9cbec..240e8a7b95 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp @@ -433,7 +433,7 @@ public: { ENSURE_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok = true; ENSURE_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = false; - me->Kill(me); + me->KillSelf(); } } break; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index eac84d1f6c..3b12104a90 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -338,14 +338,14 @@ struct dummy_dragonAI : public ScriptedAI if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS) instance->SetBossState(DATA_SHADRON, DONE); if (Creature* acolyte = me->FindNearestCreature(NPC_ACOLYTE_OF_SHADRON, 100.0f)) - acolyte->Kill(acolyte); + acolyte->KillSelf(); break; case NPC_VESPERON: spellId = SPELL_POWER_OF_VESPERON; if (instance->GetBossState(DATA_SARTHARION) != IN_PROGRESS) instance->SetBossState(DATA_VESPERON, DONE); if (Creature* acolyte = me->FindNearestCreature(NPC_ACOLYTE_OF_VESPERON, 100.0f)) - acolyte->Kill(acolyte); + acolyte->KillSelf(); break; } @@ -948,7 +948,7 @@ public: //DoCastVictim(57620, true); //DoCastVictim(57874, true); me->RemoveAllAuras(); - me->Kill(me); + me->KillSelf(); } } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 0b8fa7459a..6bc49de531 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -360,11 +360,11 @@ class boss_halion : public CreatureScript if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TWILIGHT_HALION))) if (twilightHalion->IsAlive()) - twilightHalion->Kill(twilightHalion); + twilightHalion->KillSelf(); if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER))) if (controller->IsAlive()) - controller->Kill(controller); + controller->KillSelf(); } Position const* GetMeteorStrikePosition() const { return &_meteorStrikePos; } @@ -523,7 +523,7 @@ class boss_twilight_halion : public CreatureScript if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER))) if (controller->IsAlive()) - controller->Kill(controller); + controller->KillSelf(); instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index f5843cbfd3..3a745e2c98 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -820,7 +820,7 @@ class npc_vengeful_shade : public CreatureScript case SPELL_VENGEFUL_BLAST_25N: case SPELL_VENGEFUL_BLAST_10H: case SPELL_VENGEFUL_BLAST_25H: - me->Kill(me); + me->KillSelf(); break; default: break; @@ -1008,7 +1008,7 @@ class spell_cultist_dark_martyrdom : public SpellScriptLoader if (Unit* owner = GetCaster()->ToTempSummon()->GetSummoner()) owner->GetAI()->SetGUID(GetCaster()->GetGUID(), GUID_CULTIST); - GetCaster()->Kill(GetCaster()); + GetCaster()->KillSelf(); GetCaster()->SetDisplayId(uint32(GetCaster()->GetEntry() == NPC_CULT_FANATIC ? 38009 : 38010)); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 5d9ef44916..5d3b038d41 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -531,7 +531,7 @@ public: } break; case ACTION_TRANSITION: - me->Kill(me); // true death + me->KillSelf(); // true death me->DespawnOrUnsummon(); if (Creature* coil = myCoil()) @@ -801,7 +801,7 @@ public: magneticPullTimer = 30 * IN_MILLISECONDS; break; case ACTION_TRANSITION: - me->Kill(me); // true death this time around + me->KillSelf(); // true death this time around me->DespawnOrUnsummon(); if (Creature* coil = myCoil()) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index bd4fee60c4..5c852cd7f2 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -701,7 +701,7 @@ class boss_leviathan_mk_ii : public CreatureScript { me->CastStop(); if (Unit* turret = me->GetVehicleKit()->GetPassenger(3)) - turret->Kill(turret); + turret->KillSelf(); me->SetSpeed(MOVE_RUN, 1.5f, true); me->GetMotionMaster()->MovePoint(WP_MKII_P1_IDLE, VehicleRelocation[WP_MKII_P1_IDLE]); 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 6f07a88536..8545d5b21e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -2423,7 +2423,7 @@ class spell_yogg_saron_squeeze : public SpellScriptLoader // 64125 { if (Unit* vehicle = GetTarget()->GetVehicleBase()) if (vehicle->IsAlive()) - vehicle->Kill(vehicle); // should tentacle die or just release its target? + vehicle->KillSelf(); // should tentacle die or just release its target? } void Register() override @@ -2905,7 +2905,7 @@ class spell_yogg_saron_insane : public SpellScriptLoader // 63120 void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { if (GetTarget()->IsAlive()) - GetTarget()->Kill(GetTarget()); + GetTarget()->KillSelf(); } void Register() override diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 4cdfa65322..6ef9abe226 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1326,7 +1326,7 @@ public: arlos->AI()->Talk(SAY_ARLOS_1); arlos->AI()->Talk(SAY_ARLOS_2); leryssa->AI()->Talk(SAY_LERYSSA_1); - arlos->Kill(arlos, false); + arlos->KillSelf(false); leryssa->RemoveAura(SPELL_STUN); leryssa->ClearUnitState(UNIT_STATE_STUNNED); leryssa->SetWalk(false); diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 6e4a8df6f2..5d47e7fa4e 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -778,7 +778,7 @@ public: wilhelm->AI()->Talk(SAY_WILHELM_MISS); drostan->AI()->Talk(SAY_DROSTAN_REPLY_MISS); - bird->Kill(bird); + bird->KillSelf(); crunchy->GetMotionMaster()->MovePoint(0, bird->GetPositionX(), bird->GetPositionY(), bird->GetMap()->GetWaterOrGroundLevel(bird->GetPositionX(), bird->GetPositionY(), bird->GetPositionZ())); /// @todo Make crunchy perform emote eat when he reaches the bird diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index b16a963033..04d3a20d94 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -257,7 +257,7 @@ class npc_voidtraveler : public CreatureScript { DoCastAOE(SPELL_EMPOWERING_SHADOWS, true); DoCast(me, SPELL_SHADOW_NOVA, true); - me->Kill(me); + me->KillSelf(); return; } me->GetMotionMaster()->MoveFollow(Vorpil, 0, 0); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index 787b191e23..0292ed6569 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -633,7 +633,7 @@ public: } if (Creature* vashj = ObjectAccessor::GetCreature(*me, VashjGUID)) if (!vashj->IsInCombat() || ENSURE_AI(boss_lady_vashj::boss_lady_vashjAI, vashj->AI())->Phase != 2 || vashj->isDead()) - me->Kill(me); + me->KillSelf(); Move = 1000; } else Move -= diff; } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 872269fd19..2d99fd9bac 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -1286,7 +1286,7 @@ class npc_kael_flamestrike : public CreatureScript DoCast(me, SPELL_FLAME_STRIKE_DMG); } else - me->Kill(me); + me->KillSelf(); KillSelf = true; Timer = 1000; diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 717382a0e3..f0b6c0945c 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -2509,7 +2509,7 @@ class spell_item_chicken_cover : public SpellScriptLoader if (!target->HasAura(SPELL_CHICKEN_NET) && (caster->GetQuestStatus(QUEST_CHICKEN_PARTY) == QUEST_STATUS_INCOMPLETE || caster->GetQuestStatus(QUEST_FLOWN_THE_COOP) == QUEST_STATUS_INCOMPLETE)) { caster->CastSpell(caster, SPELL_CAPTURE_CHICKEN_ESCAPE, true); - target->Kill(target); + target->KillSelf(); } } } From 5b8b32dac7bd4071462aebdc94b2b3ae45e60b1e Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 7 Dec 2015 20:55:33 +0100 Subject: [PATCH 398/524] Core/Quest: Fix issues reported by static analysis --- src/server/database/Database/DatabaseLoader.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/server/database/Database/DatabaseLoader.cpp b/src/server/database/Database/DatabaseLoader.cpp index 69e212cf7e..39719e4c6a 100644 --- a/src/server/database/Database/DatabaseLoader.cpp +++ b/src/server/database/Database/DatabaseLoader.cpp @@ -37,14 +37,14 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool& pool, std::st std::string const dbString = sConfigMgr->GetStringDefault(name + "DatabaseInfo", ""); if (dbString.empty()) { - TC_LOG_ERROR(_logger.c_str(), "Database %s not specified in configuration file!", name.c_str()); + TC_LOG_ERROR(_logger, "Database %s not specified in configuration file!", name.c_str()); return false; } uint8 const asyncThreads = uint8(sConfigMgr->GetIntDefault(name + "Database.WorkerThreads", 1)); if (asyncThreads < 1 || asyncThreads > 32) { - TC_LOG_ERROR(_logger.c_str(), "%s database: invalid number of worker threads specified. " + TC_LOG_ERROR(_logger, "%s database: invalid number of worker threads specified. " "Please pick a value between 1 and 32.", name.c_str()); return false; } @@ -85,7 +85,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool& pool, std::st { if (!DBUpdater::Populate(pool)) { - TC_LOG_ERROR(_logger.c_str(), "Could not populate the %s database, see log for details.", name.c_str()); + TC_LOG_ERROR(_logger, "Could not populate the %s database, see log for details.", name.c_str()); return false; } return true; @@ -95,7 +95,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool& pool, std::st { if (!DBUpdater::Update(pool)) { - TC_LOG_ERROR(_logger.c_str(), "Could not update the %s database, see log for details.", name.c_str()); + TC_LOG_ERROR(_logger, "Could not update the %s database, see log for details.", name.c_str()); return false; } return true; @@ -106,7 +106,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool& pool, std::st { if (!pool.PrepareStatements()) { - TC_LOG_ERROR(_logger.c_str(), "Could not prepare statements of the %s database, see log for details.", name.c_str()); + TC_LOG_ERROR(_logger, "Could not prepare statements of the %s database, see log for details.", name.c_str()); return false; } return true; From 2cb54d5606109305194ed3cdb1b56ca62317b891 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 7 Dec 2015 23:34:00 +0100 Subject: [PATCH 399/524] Core/Player: Fix crash related to vehicles Fix assertion triggered when entering a vehicle while channelling a shared vision spell. Fix #15953 --- 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 58a9626776..aa9cd9fa04 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23833,7 +23833,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply) // farsight dynobj or puppet may be very far away UpdateVisibilityOf(target); - if (target->isType(TYPEMASK_UNIT) && !GetVehicle()) + if (target->isType(TYPEMASK_UNIT) && target != GetVehicleBase()) ((Unit*)target)->AddPlayerToVision(this); } else @@ -23846,7 +23846,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply) return; } - if (target->isType(TYPEMASK_UNIT) && !GetVehicle()) + if (target->isType(TYPEMASK_UNIT) && target != GetVehicleBase()) ((Unit*)target)->RemovePlayerFromVision(this); //must immediately set seer back otherwise may crash From f6e709cde30f4485bcf2cd3739b8c82641b50b79 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 8 Dec 2015 00:16:53 +0100 Subject: [PATCH 400/524] DB/Creature: Gubber Blump Add gossip option to learn fishing if the quest 1141 is taken an fishing is not learned Closes #15954 --- sql/updates/world/2015_12_08_00_world_335.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/updates/world/2015_12_08_00_world_335.sql diff --git a/sql/updates/world/2015_12_08_00_world_335.sql b/sql/updates/world/2015_12_08_00_world_335.sql new file mode 100644 index 0000000000..e742130b1a --- /dev/null +++ b/sql/updates/world/2015_12_08_00_world_335.sql @@ -0,0 +1,15 @@ +-- +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (2562) AND `id`=1; +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 +(2562,1,0,"Gubber, I don't know how to fish.",5529,1,1,0,0,0,0,'',0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=2562; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,2562,1,0,9,1141,0,0,0,0,'','Show the gossip option if the quest 1141 is taken'), +(15,2562,1,0,25,7620,0,0,1,0,'','Show the gossip option if Fishing is not learned'); + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=10216; +DELETE FROM `smart_scripts` WHERE `entryorguid`=10216 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 +(10216, 0, 0, 1, 62, 0, 100, 0, 2562, 1, 0, 0, 85, 7733, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Gubber Blump- On Gossip Select - Cast Fishing'), +(10216, 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, 'Gubber Blump- On Gossip Select - Close gossip'); From b6942cd090f34196a7a633f05d48c92a344106a1 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 8 Dec 2015 00:30:33 +0100 Subject: [PATCH 401/524] DB/SAI: Reduce the LOS for snow mounds from 15 to 7 yards --- sql/updates/world/2015_12_08_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_12_08_01_world.sql diff --git a/sql/updates/world/2015_12_08_01_world.sql b/sql/updates/world/2015_12_08_01_world.sql new file mode 100644 index 0000000000..9e24acd91d --- /dev/null +++ b/sql/updates/world/2015_12_08_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `event_param2`=7 WHERE `entryorguid` IN (34146, 34150, 34151) AND `source_type`=0 AND `id`=0; From 7773984f94a15f45e0260e6478edf991c77d6e87 Mon Sep 17 00:00:00 2001 From: Naios Date: Tue, 8 Dec 2015 16:26:58 +0100 Subject: [PATCH 402/524] Dep/CppFormat: Update cppformat to cppformat/cppformat@5c76d107cbaf (cherry picked from commit aa3020c26d54fa63fde16c5a765b1d72649c7e30) --- dep/PackageList.txt | 2 +- dep/cppformat/ChangeLog.rst | 358 +++++++++- dep/cppformat/README.rst | 9 +- dep/cppformat/format.cc | 562 +++------------ dep/cppformat/format.h | 1334 +++++++++++++++++++++++++++-------- dep/cppformat/posix.cc | 5 +- dep/cppformat/posix.h | 6 +- 7 files changed, 1489 insertions(+), 787 deletions(-) diff --git a/dep/PackageList.txt b/dep/PackageList.txt index 65533192da..e84fef8d3b 100644 --- a/dep/PackageList.txt +++ b/dep/PackageList.txt @@ -14,7 +14,7 @@ bzip2 (a freely available, patent free, high-quality data compressor) cppformat (type safe format library) https://github.com/cppformat/cppformat - Version: 7859f8123311c1b8f69856d3c5e1b8501fbdae11 + Version: 5c76d107cbaf5e851bd66b6c563e4fc7c90be7ad G3D (a commercial-grade C++ 3D engine available as Open Source (BSD License) http://g3d.sourceforge.net/ diff --git a/dep/cppformat/ChangeLog.rst b/dep/cppformat/ChangeLog.rst index 89d5af8e9c..d2a77f8712 100644 --- a/dep/cppformat/ChangeLog.rst +++ b/dep/cppformat/ChangeLog.rst @@ -1,3 +1,356 @@ +2.0.0 - 2015-12-01 +------------------ + +General +~~~~~~~ + +* [Breaking] Named arguments + (`#169 `_, + `#173 `_, + `#174 `_): + + .. code:: c++ + + fmt::print("The answer is {answer}.", fmt::arg("answer", 42)); + + Thanks to `@jamboree `_. + +* [Experimental] User-defined literals for format and named arguments + (`#204 `_, + `#206 `_, + `#207 `_): + + .. code:: c++ + + using namespace fmt::literals; + fmt::print("The answer is {answer}.", "answer"_a=42); + + Thanks to `@dean0x7d (Dean Moldovan) `_. + +* [Breaking] Formatting of more than 16 arguments is now supported when using + variadic templates + (`#141 `_). + Thanks to `@Shauren `_. + +* Runtime width specification + (`#168 `_): + + .. code:: c++ + + fmt::format("{0:{1}}", 42, 5); // gives " 42" + + Thanks to `@jamboree `_. + +* [Breaking] Enums are now formatted with an overloaded ``std::ostream`` insertion + operator (``operator<<``) if available + (`#232 `_). + +* [Breaking] Changed default ``bool`` format to textual, "true" or "false" + (`#170 `_): + + .. code:: c++ + + fmt::print("{}", true); // prints "true" + + To print ``bool`` as a number use numeric format specifier such as ``d``: + + .. code:: c++ + + fmt::print("{:d}", true); // prints "1" + +* ``fmt::printf`` and ``fmt::sprintf`` now support formatting of ``bool`` with the + ``%s`` specifier giving textual output, "true" or "false" + (`#223 `_): + + .. code:: c++ + + fmt::printf("%s", true); // prints "true" + + Thanks to `@LarsGullik `_. + +* [Breaking] ``signed char`` and ``unsigned char`` are now formatted as integers by default + (`#217 `_). + +* [Breaking] Pointers to C strings can now be formatted with the ``p`` specifier + (`#223 `_): + + .. code:: c++ + + fmt::print("{:p}", "test"); // prints pointer value + + Thanks to `@LarsGullik `_. + +* [Breaking] ``fmt::printf`` and ``fmt::sprintf`` now print null pointers as ``(nil)`` + and null strings as ``(null)`` for consistency with glibc + (`#226 `_). + Thanks to `@LarsGullik `_. + +* [Breaking] ``fmt::(s)printf`` now supports formatting of objects of user-defined types + that provide an overloaded ``std::ostream`` insertion operator (``operator<<``) + (`#201 `_): + + .. code:: c++ + + fmt::printf("The date is %s", Date(2012, 12, 9)); + +* [Breaking] The ``Buffer`` template is now part of the public API and can be used + to implement custom memory buffers + (`#140 `_). + Thanks to `@polyvertex (Jean-Charles Lefebvre) `_. + +* [Breaking] Improved compatibility between ``BasicStringRef`` and + `std::experimental::basic_string_view + `_ + (`#100 `_, + `#159 `_, + `#183 `_): + + - Comparison operators now compare string content, not pointers + - ``BasicStringRef::c_str`` replaced by ``BasicStringRef::data`` + - ``BasicStringRef`` is no longer assumed to be null-terminated + + References to null-terminated strings are now represented by a new class, + ``BasicCStringRef``. + +* Dependency on pthreads introduced by Google Test is now optional + (`#185 `_). + +* New CMake options ``FMT_DOC``, ``FMT_INSTALL`` and ``FMT_TEST`` to control + generation of ``doc``, ``install`` and ``test`` targets respectively, on by default + (`#197 `_, + `#198 `_, + `#200 `_). + Thanks to `@maddinat0r (Alex Martin) `_. + +* ``noexcept`` is now used when compiling with MSVC2015 + (`#215 `_). + Thanks to `@dmkrepo (Dmitriy) `_. + +* Added an option to disable use of ``windows.h`` when ``FMT_USE_WINDOWS_H`` + is defined as 0 before including ``format.h`` + (`#171 `_). + Thanks to `@alfps (Alf P. Steinbach) `_. + +* [Breaking] ``windows.h`` is now included with ``NOMINMAX`` unless + ``FMT_WIN_MINMAX`` is defined. This is done to prevent breaking code using + ``std::min`` and ``std::max`` and only affects the header-only configuration + (`#152 `_, + `#153 `_, + `#154 `_). + Thanks to `@DevO2012 `_. + +* Improved support for custom character types + (`#171 `_). + Thanks to `@alfps (Alf P. Steinbach) `_. + +* Added an option to disable use of IOStreams when ``FMT_USE_IOSTREAMS`` + is defined as 0 before including ``format.h`` + (`#205 `_, + `#208 `_). + Thanks to `@JodiTheTigger `_. + +* Improved detection of ``isnan``, ``isinf`` and ``signbit``. + +Optimization +~~~~~~~~~~~~ + +* Made formatting of user-defined types more efficient with a custom stream buffer + (`#92 `_, + `#230 `_). + Thanks to `@NotImplemented `_. + +* Further improved performance of ``fmt::Writer`` on integer formatting + and fixed a minor regression. Now it is ~7% faster than ``karma::generate`` + on Karma's benchmark + (`#186 `_). + +* [Breaking] Reduced `compiled code size + `_ + (`#143 `_, + `#149 `_). + +Distribution +~~~~~~~~~~~~ + +* [Breaking] Headers are now installed in + ``${CMAKE_INSTALL_PREFIX}/include/cppformat`` + (`#178 `_). + Thanks to `@jackyf (Eugene V. Lyubimkin) `_. + +* [Breaking] Changed the library name from ``format`` to ``cppformat`` + for consistency with the project name and to avoid potential conflicts + (`#178 `_). + Thanks to `@jackyf (Eugene V. Lyubimkin) `_. + +* C++ Format is now available in `Debian `_ GNU/Linux + (`stretch `_, + `sid `_) and + derived distributions such as + `Ubuntu `_ 15.10 and later + (`#155 `_):: + + $ sudo apt-get install libcppformat1-dev + + Thanks to `@jackyf (Eugene V. Lyubimkin) `_. + +* `Packages for Fedora and RHEL `_ + are now available. Thanks to Dave Johansen. + +* C++ Format can now be installed via `Homebrew `_ on OS X + (`#157 `_):: + + $ brew install cppformat + + Thanks to `@ortho `_, Anatoliy Bulukin. + +Documentation +~~~~~~~~~~~~~ + +* Migrated from ReadTheDocs to GitHub Pages for better responsiveness + and reliability + (`#128 `_). + New documentation address is http://cppformat.github.io/. + + +* Added `Building the documentation + `_ + section to the documentation. + +* Documentation build script is now compatible with Python 3 and newer pip versions. + (`#189 `_, + `#209 `_). + Thanks to `@JodiTheTigger `_ and + `@xentec `_. + +* Documentation fixes and improvements + (`#36 `_, + `#75 `_, + `#125 `_, + `#160 `_, + `#161 `_, + `#162 `_, + `#165 `_, + `#210 `_). + Thanks to `@syohex (Syohei YOSHIDA) `_ and + bug reporters. + +* Fixed out-of-tree documentation build + (`#177 `_). + Thanks to `@jackyf (Eugene V. Lyubimkin) `_. + +Fixes +~~~~~ + +* Fixed ``initializer_list`` detection + (`#136 `_). + Thanks to `@Gachapen (Magnus Bjerke Vik) `_. + +* [Breaking] Fixed formatting of enums with numeric format specifiers in + ``fmt::(s)printf`` + (`#131 `_, + `#139 `_): + + .. code:: c++ + + enum { ANSWER = 42 }; + fmt::printf("%d", ANSWER); + + Thanks to `@Naios `_. + +* Improved compatibility with old versions of MinGW + (`#129 `_, + `#130 `_, + `#132 `_). + Thanks to `@cstamford (Christopher Stamford) `_. + +* Fixed a compile error on MSVC with disabled exceptions + (`#144 `_). + +* Added a workaround for broken implementation of variadic templates in MSVC2012 + (`#148 `_). + +* Placed the anonymous namespace within ``fmt`` namespace for the header-only + configuration + (`#171 `_). + Thanks to `@alfps (Alf P. Steinbach) `_. + +* Fixed issues reported by Coverity Scan + (`#187 `_, + `#192 `_). + +* Implemented a workaround for a name lookup bug in MSVC2010 + (`#188 `_). + +* Fixed compiler warnings + (`#95 `_, + `#96 `_, + `#114 `_, + `#135 `_, + `#142 `_, + `#145 `_, + `#146 `_, + `#158 `_, + `#163 `_, + `#175 `_, + `#190 `_, + `#191 `_, + `#194 `_, + `#196 `_, + `#216 `_, + `#218 `_, + `#220 `_, + `#229 `_, + `#233 `_, + `#234 `_, + `#236 `_). + Thanks to `@seanmiddleditch (Sean Middleditch) `_, + `@dixlorenz (Dix Lorenz) `_, + `@CarterLi (李通洲) `_, + `@Naios `_, + `@fmatthew5876 (Matthew Fioravante) `_, + `@LevskiWeng (Levski Weng) `_, + `@rpopescu `_, + `@gabime (Gabi Melman) `_, + `@cubicool (Jeremy Moles) `_, + `@jkflying (Julian Kent) `_, + `@LogicalKnight (Sean L) `_, + `@inguin (Ingo van Lil) `_ and + `@Jopie64 (Johan) `_. + +* Fixed portability issues (mostly causing test failures) on ARM, ppc64, ppc64le, + s390x and SunOS 5.11 i386 ( + `#138 `_, + `#179 `_, + `#180 `_, + `#202 `_, + `#225 `_, + `Red Hat Bugzilla Bug 1260297 `_). + Thanks to `@Naios `_, + `@jackyf (Eugene V. Lyubimkin) `_ and Dave Johansen. + +* Fixed a name conflict with macro ``free`` defined in + ``crtdbg.h`` when ``_CRTDBG_MAP_ALLOC`` is set + (`#211 `_). + +* Fixed shared library build on OS X + (`#212 `_). + Thanks to `@dean0x7d (Dean Moldovan) `_. + +* Fixed an overload conflict on MSVC when ``/Zc:wchar_t-`` option is specified + (`#214 `_). + Thanks to `@slavanap (Vyacheslav Napadovsky) `_. + +* Improved compatibility with MSVC 2008 + (`#236 `_). + Thanks to `@Jopie64 (Johan) `_. + +* Improved compatibility with bcc32 + (`#227 `_). + +* Fixed ``static_assert`` detection on Clang + (`#228 `_). + Thanks to `@dean0x7d (Dean Moldovan) `_. + 1.1.0 - 2015-03-06 ------------------ @@ -66,11 +419,6 @@ * Fixed packaging issues (`#94 `_). -* Fixed warnings in GCC, MSVC and Xcode/Clang - (`#95 `_, - `#96 `_ and - `#114 `_). - * Added `changelog `_ (`#103 `_). diff --git a/dep/cppformat/README.rst b/dep/cppformat/README.rst index 29f433480f..fb4399f0af 100644 --- a/dep/cppformat/README.rst +++ b/dep/cppformat/README.rst @@ -7,9 +7,6 @@ C++ Format .. image:: https://ci.appveyor.com/api/projects/status/qk0bhyhqp1ekpat8 :target: https://ci.appveyor.com/project/vitaut/cppformat -.. image:: https://webapi.biicode.com/v1/badges/vitaut/vitaut/cppformat/master?dummy - :target: https://www.biicode.com/vitaut/cppformat - .. image:: https://badges.gitter.im/Join%20Chat.svg :alt: Join the chat at https://gitter.im/cppformat/cppformat :target: https://gitter.im/cppformat/cppformat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge @@ -149,6 +146,8 @@ Projects using this library * `readpe `_: Read Portable Executable +* `redis-cerberus `_: A Redis cluster proxy + * `Saddy `_: Small crossplatform 2D graphic engine @@ -157,6 +156,10 @@ Projects using this library * `spdlog `_: Super fast C++ logging library +* `Stellar `_: Financial platform + +* `Touch Surgery `_: Surgery simulator + * `TrinityCore `_: Open-source MMORPG framework `More... `_ diff --git a/dep/cppformat/format.cc b/dep/cppformat/format.cc index 86b86c741b..1970d53c50 100644 --- a/dep/cppformat/format.cc +++ b/dep/cppformat/format.cc @@ -34,6 +34,7 @@ #include #include #include +#include // for std::ptrdiff_t #if defined(_WIN32) && defined(__MINGW32__) # include @@ -51,17 +52,6 @@ using fmt::internal::Arg; -// Check if exceptions are disabled. -#if __GNUC__ && !__EXCEPTIONS -# define FMT_EXCEPTIONS 0 -#endif -#if _MSC_VER && !_HAS_EXCEPTIONS -# define FMT_EXCEPTIONS 0 -#endif -#ifndef FMT_EXCEPTIONS -# define FMT_EXCEPTIONS 1 -#endif - #if FMT_EXCEPTIONS # define FMT_TRY try # define FMT_CATCH(x) catch (x) @@ -70,21 +60,13 @@ using fmt::internal::Arg; # define FMT_CATCH(x) if (false) #endif -#ifndef FMT_THROW -# if FMT_EXCEPTIONS -# define FMT_THROW(x) throw x -# else -# define FMT_THROW(x) assert(false) -# endif -#endif - #ifdef FMT_HEADER_ONLY # define FMT_FUNC inline #else # define FMT_FUNC #endif -#if _MSC_VER +#ifdef _MSC_VER # pragma warning(push) # pragma warning(disable: 4127) // conditional expression is constant # pragma warning(disable: 4702) // unreachable code @@ -95,11 +77,11 @@ using fmt::internal::Arg; // Dummy implementations of strerror_r and strerror_s called if corresponding // system functions are not available. -static inline fmt::internal::None<> strerror_r(int, char *, ...) { - return fmt::internal::None<>(); +static inline fmt::internal::Null<> strerror_r(int, char *, ...) { + return fmt::internal::Null<>(); } -static inline fmt::internal::None<> strerror_s(char *, std::size_t, ...) { - return fmt::internal::None<>(); +static inline fmt::internal::Null<> strerror_s(char *, std::size_t, ...) { + return fmt::internal::Null<>(); } namespace fmt { @@ -133,6 +115,7 @@ struct IntChecker { unsigned max = INT_MAX; return value <= max; } + static bool fits_in_int(bool) { return true; } }; template <> @@ -141,6 +124,7 @@ struct IntChecker { static bool fits_in_int(T value) { return value >= INT_MIN && value <= INT_MAX; } + static bool fits_in_int(int) { return true; } }; const char RESET_COLOR[] = "\x1b[0m"; @@ -185,7 +169,7 @@ int safe_strerror( } // Handle the case when strerror_r is not available. - int handle(fmt::internal::None<>) { + int handle(fmt::internal::Null<>) { return fallback(strerror_s(buffer_, buffer_size_, error_code_)); } @@ -197,15 +181,15 @@ int safe_strerror( } // Fallback to strerror if strerror_r and strerror_s are not available. - int fallback(fmt::internal::None<>) { + int fallback(fmt::internal::Null<>) { errno = 0; buffer_ = strerror(error_code_); return errno; } public: - StrError(int error_code, char *&buffer, std::size_t buffer_size) - : error_code_(error_code), buffer_(buffer), buffer_size_(buffer_size) {} + StrError(int err_code, char *&buf, std::size_t buf_size) + : error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {} int run() { strerror_r(0, 0, ""); // Suppress a warning about unused strerror_r. @@ -250,50 +234,6 @@ class IsZeroInt : public fmt::internal::ArgVisitor { bool visit_any_int(T value) { return value == 0; } }; -// Parses an unsigned integer advancing s to the end of the parsed input. -// This function assumes that the first character of s is a digit. -template -int parse_nonnegative_int(const Char *&s) { - assert('0' <= *s && *s <= '9'); - unsigned value = 0; - do { - unsigned new_value = value * 10 + (*s++ - '0'); - // Check if value wrapped around. - if (new_value < value) { - value = UINT_MAX; - break; - } - value = new_value; - } while ('0' <= *s && *s <= '9'); - if (value > INT_MAX) - FMT_THROW(fmt::FormatError("number is too big")); - return value; -} - -template -inline bool is_name_start(Char c) { - return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c; -} - -inline void require_numeric_argument(const Arg &arg, char spec) { - if (arg.type > Arg::LAST_NUMERIC_TYPE) { - std::string message = - fmt::format("format specifier '{}' requires numeric argument", spec); - FMT_THROW(fmt::FormatError(message)); - } -} - -template -void check_sign(const Char *&s, const Arg &arg) { - char sign = static_cast(*s); - require_numeric_argument(arg, sign); - if (arg.type == Arg::UINT || arg.type == Arg::ULONG_LONG) { - FMT_THROW(fmt::FormatError(fmt::format( - "format specifier '{}' requires signed argument", sign))); - } - ++s; -} - // Checks if an argument is a valid printf width specifier and sets // left alignment if it is negative. class WidthHandler : public fmt::internal::ArgVisitor { @@ -351,6 +291,11 @@ class ArgConverter : public fmt::internal::ArgVisitor, void> { ArgConverter(fmt::internal::Arg &arg, wchar_t type) : arg_(arg), type_(type) {} + void visit_bool(bool value) { + if (type_ != 's') + visit_any_int(value); + } + template void visit_any_int(U value) { bool is_signed = type_ == 'd' || type_ == 'i'; @@ -399,128 +344,72 @@ class CharConverter : public fmt::internal::ArgVisitor { namespace internal { -template -class BasicArgFormatter : public ArgVisitor { - private: - BasicWriter &writer_; - FormatSpec &spec_; +template +class PrintfArgFormatter : + public ArgFormatterBase, Char> { - FMT_DISALLOW_COPY_AND_ASSIGN(BasicArgFormatter); + void write_null_pointer() { + this->spec().type_ = 0; + this->write("(nil)"); + } - protected: - BasicWriter &writer() { return writer_; } - const FormatSpec &spec() const { return spec_; } + typedef ArgFormatterBase, Char> Base; public: - BasicArgFormatter(BasicWriter &w, FormatSpec &s) - : writer_(w), spec_(s) {} - - template - void visit_any_int(T value) { writer_.write_int(value, spec_); } - - template - void visit_any_double(T value) { writer_.write_double(value, spec_); } + PrintfArgFormatter(BasicWriter &w, FormatSpec &s) + : ArgFormatterBase, Char>(w, s) {} void visit_bool(bool value) { - if (spec_.type_) { - writer_.write_int(value, spec_); - return; - } - const char *str_value = value ? "true" : "false"; - Arg::StringValue str = { str_value, strlen(str_value) }; - writer_.write_str(str, spec_); + FormatSpec &fmt_spec = this->spec(); + if (fmt_spec.type_ != 's') + return this->visit_any_int(value); + fmt_spec.type_ = 0; + this->write(value); } void visit_char(int value) { - if (spec_.type_ && spec_.type_ != 'c') { - spec_.flags_ |= CHAR_FLAG; - writer_.write_int(value, spec_); - return; - } - if (spec_.align_ == ALIGN_NUMERIC || spec_.flags_ != 0) - FMT_THROW(FormatError("invalid format specifier for char")); + const FormatSpec &fmt_spec = this->spec(); + BasicWriter &w = this->writer(); + if (fmt_spec.type_ && fmt_spec.type_ != 'c') + w.write_int(value, fmt_spec); typedef typename BasicWriter::CharPtr CharPtr; - Char fill = internal::CharTraits::cast(spec_.fill()); CharPtr out = CharPtr(); - if (spec_.width_ > 1) { - out = writer_.grow_buffer(spec_.width_); - if (spec_.align_ == ALIGN_RIGHT) { - std::fill_n(out, spec_.width_ - 1, fill); - out += spec_.width_ - 1; - } else if (spec_.align_ == ALIGN_CENTER) { - out = writer_.fill_padding(out, spec_.width_, 1, fill); + if (fmt_spec.width_ > 1) { + Char fill = ' '; + out = w.grow_buffer(fmt_spec.width_); + if (fmt_spec.align_ != ALIGN_LEFT) { + std::fill_n(out, fmt_spec.width_ - 1, fill); + out += fmt_spec.width_ - 1; } else { - std::fill_n(out + 1, spec_.width_ - 1, fill); + std::fill_n(out + 1, fmt_spec.width_ - 1, fill); } } else { - out = writer_.grow_buffer(1); + out = w.grow_buffer(1); } - *out = internal::CharTraits::cast(value); + *out = static_cast(value); } - void visit_string(Arg::StringValue value) { - writer_.write_str(value, spec_); - } - - using ArgVisitor::visit_wstring; - - void visit_wstring(Arg::StringValue value) { - writer_.write_str(value, spec_); + void visit_cstring(const char *value) { + if (value) + Base::visit_cstring(value); + else if (this->spec().type_ == 'p') + write_null_pointer(); + else + this->write("(null)"); } void visit_pointer(const void *value) { - if (spec_.type_ && spec_.type_ != 'p') - report_unknown_type(spec_.type_, "pointer"); - spec_.flags_ = HASH_FLAG; - spec_.type_ = 'x'; - writer_.write_int(reinterpret_cast(value), spec_); + if (value) + return Base::visit_pointer(value); + this->spec().type_ = 0; + write_null_pointer(); } -}; - -// An argument formatter. -template -class ArgFormatter : public BasicArgFormatter, Char> { - private: - BasicFormatter &formatter_; - const Char *format_; - - public: - ArgFormatter(BasicFormatter &f, FormatSpec &s, const Char *fmt) - : BasicArgFormatter, Char>(f.writer(), s), - formatter_(f), format_(fmt) {} void visit_custom(Arg::CustomValue c) { - c.format(&formatter_, c.value, &format_); - } -}; - -template -class PrintfArgFormatter : - public BasicArgFormatter, Char> { - public: - PrintfArgFormatter(BasicWriter &w, FormatSpec &s) - : BasicArgFormatter, Char>(w, s) {} - - void visit_char(int value) { - const FormatSpec &spec = this->spec(); - BasicWriter &writer = this->writer(); - if (spec.type_ && spec.type_ != 'c') - writer.write_int(value, spec); - typedef typename BasicWriter::CharPtr CharPtr; - CharPtr out = CharPtr(); - if (spec.width_ > 1) { - Char fill = ' '; - out = writer.grow_buffer(spec.width_); - if (spec.align_ != ALIGN_LEFT) { - std::fill_n(out, spec.width_ - 1, fill); - out += spec.width_ - 1; - } else { - std::fill_n(out + 1, spec.width_ - 1, fill); - } - } else { - out = writer.grow_buffer(1); - } - *out = static_cast(value); + BasicFormatter formatter(ArgList(), this->writer()); + const Char format_str[] = {'}', 0}; + const Char *format = format_str; + c.format(&formatter, c.value, &format); } }; } // namespace internal @@ -611,14 +500,17 @@ FMT_FUNC void fmt::internal::report_unknown_type(char code, const char *type) { #if FMT_USE_WINDOWS_H FMT_FUNC fmt::internal::UTF8ToUTF16::UTF8ToUTF16(fmt::StringRef s) { - int length = MultiByteToWideChar( - CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s.size(), 0, 0); static const char ERROR_MSG[] = "cannot convert string from UTF-8 to UTF-16"; + if (s.size() > INT_MAX) + FMT_THROW(WindowsError(ERROR_INVALID_PARAMETER, ERROR_MSG)); + int s_size = static_cast(s.size()); + int length = MultiByteToWideChar( + CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, 0, 0); if (length == 0) FMT_THROW(WindowsError(GetLastError(), ERROR_MSG)); buffer_.resize(length + 1); length = MultiByteToWideChar( - CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s.size(), &buffer_[0], length); + CP_UTF8, MB_ERR_INVALID_CHARS, s.data(), s_size, &buffer_[0], length); if (length == 0) FMT_THROW(WindowsError(GetLastError(), ERROR_MSG)); buffer_[length] = 0; @@ -632,12 +524,15 @@ FMT_FUNC fmt::internal::UTF16ToUTF8::UTF16ToUTF8(fmt::WStringRef s) { } FMT_FUNC int fmt::internal::UTF16ToUTF8::convert(fmt::WStringRef s) { - int length = WideCharToMultiByte(CP_UTF8, 0, s.data(), s.size(), 0, 0, 0, 0); + if (s.size() > INT_MAX) + return ERROR_INVALID_PARAMETER; + int s_size = static_cast(s.size()); + int length = WideCharToMultiByte(CP_UTF8, 0, s.data(), s_size, 0, 0, 0, 0); if (length == 0) return GetLastError(); buffer_.resize(length + 1); length = WideCharToMultiByte( - CP_UTF8, 0, s.data(), s.size(), &buffer_[0], length, 0, 0); + CP_UTF8, 0, s.data(), s_size, &buffer_[0], length, 0, 0); if (length == 0) return GetLastError(); buffer_[length] = 0; @@ -679,7 +574,7 @@ FMT_FUNC void fmt::internal::format_windows_error( } } } FMT_CATCH(...) {} - format_error_code(out, error_code, message); + fmt::format_error_code(out, error_code, message); // 'fmt::' is for bcc32. } #endif // FMT_USE_WINDOWS_H @@ -702,7 +597,7 @@ FMT_FUNC void fmt::internal::format_system_error( buffer.resize(buffer.size() * 2); } } FMT_CATCH(...) {} - format_error_code(out, error_code, message); + fmt::format_error_code(out, error_code, message); // 'fmt::' is for bcc32. } template @@ -755,68 +650,6 @@ void fmt::internal::FixedBuffer::grow(std::size_t) { FMT_THROW(std::runtime_error("buffer overflow")); } -template -template -void fmt::BasicWriter::write_str( - const Arg::StringValue &s, const FormatSpec &spec) { - // Check if StrChar is convertible to Char. - internal::CharTraits::convert(StrChar()); - if (spec.type_ && spec.type_ != 's') - internal::report_unknown_type(spec.type_, "string"); - const StrChar *str_value = s.value; - std::size_t str_size = s.size; - if (str_size == 0) { - if (!str_value) - FMT_THROW(FormatError("string pointer is null")); - if (*str_value) - str_size = std::char_traits::length(str_value); - } - std::size_t precision = spec.precision_; - if (spec.precision_ >= 0 && precision < str_size) - str_size = spec.precision_; - write_str(str_value, str_size, spec); -} - -template -inline Arg fmt::BasicFormatter::get_arg( - BasicStringRef arg_name, const char *&error) { - if (check_no_auto_index(error)) { - map_.init(args()); - const Arg *arg = map_.find(arg_name); - if (arg) - return *arg; - error = "argument not found"; - } - return Arg(); -} - -template -inline Arg fmt::BasicFormatter::parse_arg_index(const Char *&s) { - const char *error = 0; - Arg arg = *s < '0' || *s > '9' ? - next_arg(error) : get_arg(parse_nonnegative_int(s), error); - if (error) { - FMT_THROW(FormatError( - *s != '}' && *s != ':' ? "invalid format string" : error)); - } - return arg; -} - -template -inline Arg fmt::BasicFormatter::parse_arg_name(const Char *&s) { - assert(is_name_start(*s)); - const Char *start = s; - Char c; - do { - c = *++s; - } while (is_name_start(c) || ('0' <= c && c <= '9')); - const char *error = 0; - Arg arg = get_arg(fmt::BasicStringRef(start, s - start), error); - if (error) - FMT_THROW(fmt::FormatError(error)); - return arg; -} - FMT_FUNC Arg fmt::internal::FormatterBase::do_get_arg( unsigned arg_index, const char *&error) { Arg arg = args_[arg_index]; @@ -832,28 +665,6 @@ FMT_FUNC Arg fmt::internal::FormatterBase::do_get_arg( return arg; } -inline Arg fmt::internal::FormatterBase::next_arg(const char *&error) { - if (next_arg_index_ >= 0) - return do_get_arg(next_arg_index_++, error); - error = "cannot switch from manual to automatic argument indexing"; - return Arg(); -} - -inline bool fmt::internal::FormatterBase::check_no_auto_index( - const char *&error) { - if (next_arg_index_ > 0) { - error = "cannot switch from automatic to manual argument indexing"; - return false; - } - next_arg_index_ = -1; - return true; -} - -inline Arg fmt::internal::FormatterBase::get_arg( - unsigned arg_index, const char *&error) { - return check_no_auto_index(error) ? do_get_arg(arg_index, error) : Arg(); -} - template void fmt::internal::PrintfFormatter::parse_flags( FormatSpec &spec, const Char *&s) { @@ -929,10 +740,8 @@ unsigned fmt::internal::PrintfFormatter::parse_header( template void fmt::internal::PrintfFormatter::format( - BasicWriter &writer, BasicCStringRef format_str, - const ArgList &args) { + BasicWriter &writer, BasicCStringRef format_str) { const Char *start = format_str.c_str(); - set_args(args); const Char *s = start; while (*s) { Char c = *s++; @@ -989,10 +798,10 @@ void fmt::internal::PrintfFormatter::format( ArgConverter(arg, *s).visit(arg); break; case 'z': - ArgConverter(arg, *s).visit(arg); + ArgConverter(arg, *s).visit(arg); break; case 't': - ArgConverter(arg, *s).visit(arg); + ArgConverter(arg, *s).visit(arg); break; case 'L': // printf produces garbage when 'L' is omitted for long double, no @@ -1028,207 +837,17 @@ void fmt::internal::PrintfFormatter::format( write(writer, start, s); } -template -const Char *fmt::BasicFormatter::format( - const Char *&format_str, const Arg &arg) { - const Char *s = format_str; - FormatSpec spec; - if (*s == ':') { - if (arg.type == Arg::CUSTOM) { - arg.custom.format(this, arg.custom.value, &s); - return s; - } - ++s; - // Parse fill and alignment. - if (Char c = *s) { - const Char *p = s + 1; - spec.align_ = ALIGN_DEFAULT; - do { - switch (*p) { - case '<': - spec.align_ = ALIGN_LEFT; - break; - case '>': - spec.align_ = ALIGN_RIGHT; - break; - case '=': - spec.align_ = ALIGN_NUMERIC; - break; - case '^': - spec.align_ = ALIGN_CENTER; - break; - } - if (spec.align_ != ALIGN_DEFAULT) { - if (p != s) { - if (c == '}') break; - if (c == '{') - FMT_THROW(FormatError("invalid fill character '{'")); - s += 2; - spec.fill_ = c; - } else ++s; - if (spec.align_ == ALIGN_NUMERIC) - require_numeric_argument(arg, '='); - break; - } - } while (--p >= s); - } - - // Parse sign. - switch (*s) { - case '+': - check_sign(s, arg); - spec.flags_ |= SIGN_FLAG | PLUS_FLAG; - break; - case '-': - check_sign(s, arg); - spec.flags_ |= MINUS_FLAG; - break; - case ' ': - check_sign(s, arg); - spec.flags_ |= SIGN_FLAG; - break; - } - - if (*s == '#') { - require_numeric_argument(arg, '#'); - spec.flags_ |= HASH_FLAG; - ++s; - } - - // Parse zero flag. - if (*s == '0') { - require_numeric_argument(arg, '0'); - spec.align_ = ALIGN_NUMERIC; - spec.fill_ = '0'; - ++s; - } - - // Parse width. - if ('0' <= *s && *s <= '9') { - spec.width_ = parse_nonnegative_int(s); - } else if (*s == '{') { - ++s; - Arg width_arg = is_name_start(*s) ? - parse_arg_name(s) : parse_arg_index(s); - if (*s++ != '}') - FMT_THROW(FormatError("invalid format string")); - ULongLong value = 0; - switch (width_arg.type) { - case Arg::INT: - if (width_arg.int_value < 0) - FMT_THROW(FormatError("negative width")); - value = width_arg.int_value; - break; - case Arg::UINT: - value = width_arg.uint_value; - break; - case Arg::LONG_LONG: - if (width_arg.long_long_value < 0) - FMT_THROW(FormatError("negative width")); - value = width_arg.long_long_value; - break; - case Arg::ULONG_LONG: - value = width_arg.ulong_long_value; - break; - default: - FMT_THROW(FormatError("width is not integer")); - } - if (value > INT_MAX) - FMT_THROW(FormatError("number is too big")); - spec.width_ = static_cast(value); - } - - // Parse precision. - if (*s == '.') { - ++s; - spec.precision_ = 0; - if ('0' <= *s && *s <= '9') { - spec.precision_ = parse_nonnegative_int(s); - } else if (*s == '{') { - ++s; - Arg precision_arg = - is_name_start(*s) ? parse_arg_name(s) : parse_arg_index(s); - if (*s++ != '}') - FMT_THROW(FormatError("invalid format string")); - ULongLong value = 0; - switch (precision_arg.type) { - case Arg::INT: - if (precision_arg.int_value < 0) - FMT_THROW(FormatError("negative precision")); - value = precision_arg.int_value; - break; - case Arg::UINT: - value = precision_arg.uint_value; - break; - case Arg::LONG_LONG: - if (precision_arg.long_long_value < 0) - FMT_THROW(FormatError("negative precision")); - value = precision_arg.long_long_value; - break; - case Arg::ULONG_LONG: - value = precision_arg.ulong_long_value; - break; - default: - FMT_THROW(FormatError("precision is not integer")); - } - if (value > INT_MAX) - FMT_THROW(FormatError("number is too big")); - spec.precision_ = static_cast(value); - } else { - FMT_THROW(FormatError("missing precision specifier")); - } - if (arg.type <= Arg::LAST_INTEGER_TYPE || arg.type == Arg::POINTER) { - FMT_THROW(FormatError( - fmt::format("precision not allowed in {} format specifier", - arg.type == Arg::POINTER ? "pointer" : "integer"))); - } - } - - // Parse type. - if (*s != '}' && *s) - spec.type_ = static_cast(*s++); - } - - if (*s++ != '}') - FMT_THROW(FormatError("missing '}' in format string")); - start_ = s; - - // Format argument. - internal::ArgFormatter(*this, spec, s - 1).visit(arg); - return s; -} - -template -void fmt::BasicFormatter::format( - BasicCStringRef format_str, const ArgList &args) { - const Char *s = start_ = format_str.c_str(); - set_args(args); - while (*s) { - Char c = *s++; - if (c != '{' && c != '}') continue; - if (*s == c) { - write(writer_, start_, s); - start_ = ++s; - continue; - } - if (c == '}') - FMT_THROW(FormatError("unmatched '}' in format string")); - write(writer_, start_, s - 1); - Arg arg = is_name_start(*s) ? parse_arg_name(s) : parse_arg_index(s); - s = format(s, arg); - } - write(writer_, start_, s); -} - FMT_FUNC void fmt::report_system_error( int error_code, fmt::StringRef message) FMT_NOEXCEPT { - report_error(internal::format_system_error, error_code, message); + // 'fmt::' is for bcc32. + fmt::report_error(internal::format_system_error, error_code, message); } #if FMT_USE_WINDOWS_H FMT_FUNC void fmt::report_windows_error( int error_code, fmt::StringRef message) FMT_NOEXCEPT { - report_error(internal::format_windows_error, error_code, message); + // 'fmt::' is for bcc32. + fmt::report_error(internal::format_windows_error, error_code, message); } #endif @@ -1250,7 +869,7 @@ FMT_FUNC void fmt::print(std::ostream &os, CStringRef format_str, ArgList args) FMT_FUNC void fmt::print_colored(Color c, CStringRef format, ArgList args) { char escape[] = "\x1b[30m"; - escape[3] = '0' + static_cast(c); + escape[3] = static_cast('0' + c); std::fputs(escape, stdout); print(format, args); std::fputs(RESET_COLOR, stdout); @@ -1271,14 +890,10 @@ template struct fmt::internal::BasicData; template void fmt::internal::FixedBuffer::grow(std::size_t); -template const char *fmt::BasicFormatter::format( - const char *&format_str, const fmt::internal::Arg &arg); - -template void fmt::BasicFormatter::format( - CStringRef format, const ArgList &args); +template void fmt::internal::ArgMap::init(const fmt::ArgList &args); template void fmt::internal::PrintfFormatter::format( - BasicWriter &writer, CStringRef format, const ArgList &args); + BasicWriter &writer, CStringRef format); template int fmt::internal::CharTraits::format_float( char *buffer, std::size_t size, const char *format, @@ -1292,15 +907,10 @@ template int fmt::internal::CharTraits::format_float( template void fmt::internal::FixedBuffer::grow(std::size_t); -template const wchar_t *fmt::BasicFormatter::format( - const wchar_t *&format_str, const fmt::internal::Arg &arg); - -template void fmt::BasicFormatter::format( - BasicCStringRef format, const ArgList &args); +template void fmt::internal::ArgMap::init(const fmt::ArgList &args); template void fmt::internal::PrintfFormatter::format( - BasicWriter &writer, WCStringRef format, - const ArgList &args); + BasicWriter &writer, WCStringRef format); template int fmt::internal::CharTraits::format_float( wchar_t *buffer, std::size_t size, const wchar_t *format, @@ -1312,6 +922,6 @@ template int fmt::internal::CharTraits::format_float( #endif // FMT_HEADER_ONLY -#if _MSC_VER +#ifdef _MSC_VER # pragma warning(pop) #endif diff --git a/dep/cppformat/format.h b/dep/cppformat/format.h index dfe95a7793..a98a166091 100644 --- a/dep/cppformat/format.h +++ b/dep/cppformat/format.h @@ -28,20 +28,39 @@ #ifndef FMT_FORMAT_H_ #define FMT_FORMAT_H_ +#if defined _MSC_VER && _MSC_VER <= 1500 +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +typedef long long intmax_t; +#else #include +#endif #include #include -#include // for std::ptrdiff_t #include -#include +#include #include +#include #include #include -#include #include -#if _SECURE_SCL +#ifndef FMT_USE_IOSTREAMS +# define FMT_USE_IOSTREAMS 1 +#endif + +#if FMT_USE_IOSTREAMS +# include +#endif + +#ifdef _SECURE_SCL +# define FMT_SECURE_SCL _SECURE_SCL +#else +# define FMT_SECURE_SCL 0 +#endif + +#if FMT_SECURE_SCL # include #endif @@ -92,6 +111,9 @@ inline uint32_t clzll(uint64_t x) { // Disable the warning about declaration shadowing because it affects too // many valid cases. # pragma GCC diagnostic ignored "-Wshadow" +// Disable the warning about implicit conversions that may change the sign of +// an integer; silencing it otherwise would require many explicit casts. +# pragma GCC diagnostic ignored "-Wsign-conversion" # endif # if __cplusplus >= 201103L || defined __GXX_EXPERIMENTAL_CXX0X__ # define FMT_HAS_GXX_CXX11 1 @@ -100,7 +122,7 @@ inline uint32_t clzll(uint64_t x) { # define FMT_GCC_EXTENSION #endif -#ifdef __clang__ +#if defined(__clang__) && !defined(__INTEL_COMPILER) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdocumentation" #endif @@ -153,17 +175,45 @@ inline uint32_t clzll(uint64_t x) { #endif // Define FMT_USE_NOEXCEPT to make C++ Format use noexcept (C++11 feature). +#ifndef FMT_USE_NOEXCEPT +# define FMT_USE_NOEXCEPT 0 +#endif + #ifndef FMT_NOEXCEPT # if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \ - (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) + (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || \ + _MSC_VER >= 1900 # define FMT_NOEXCEPT noexcept # else # define FMT_NOEXCEPT throw() # endif #endif +// Check if exceptions are disabled. +#if defined(__GNUC__) && !defined(__EXCEPTIONS) +# define FMT_EXCEPTIONS 0 +#endif +#if defined(_MSC_VER) && !_HAS_EXCEPTIONS +# define FMT_EXCEPTIONS 0 +#endif +#ifndef FMT_EXCEPTIONS +# define FMT_EXCEPTIONS 1 +#endif + +#ifndef FMT_THROW +# if FMT_EXCEPTIONS +# define FMT_THROW(x) throw x +# else +# define FMT_THROW(x) assert(false) +# endif +#endif + // A macro to disallow the copy constructor and operator= functions // This should be used in the private: declarations for a class +#ifndef FMT_USE_DELETED_FUNCTIONS +# define FMT_USE_DELETED_FUNCTIONS 0 +#endif + #if FMT_USE_DELETED_FUNCTIONS || FMT_HAS_FEATURE(cxx_deleted_functions) || \ (FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800 # define FMT_DELETED_OR_UNDEFINED = delete @@ -177,10 +227,92 @@ inline uint32_t clzll(uint64_t x) { TypeName& operator=(const TypeName&) #endif +#ifndef FMT_USE_USER_DEFINED_LITERALS +// All compilers which support UDLs also support variadic templates. This +// makes the fmt::literals implementation easier. However, an explicit check +// for variadic templates is added here just in case. +# define FMT_USE_USER_DEFINED_LITERALS \ + FMT_USE_VARIADIC_TEMPLATES && FMT_USE_RVALUE_REFERENCES && \ + (FMT_HAS_FEATURE(cxx_user_literals) || \ + (FMT_GCC_VERSION >= 407 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1900) +#endif + #ifndef FMT_ASSERT # define FMT_ASSERT(condition, message) assert((condition) && message) #endif +namespace fmt { +namespace internal { +struct DummyInt { + int data[2]; + operator int() const { return 0; } +}; +typedef std::numeric_limits FPUtil; + +// Dummy implementations of system functions such as signbit and ecvt called +// if the latter are not available. +inline DummyInt signbit(...) { return DummyInt(); } +inline DummyInt _ecvt_s(...) { return DummyInt(); } +inline DummyInt isinf(...) { return DummyInt(); } +inline DummyInt _finite(...) { return DummyInt(); } +inline DummyInt isnan(...) { return DummyInt(); } +inline DummyInt _isnan(...) { return DummyInt(); } + +// A helper function to suppress bogus "conditional expression is constant" +// warnings. +template +inline T check(T value) { return value; } +} +} // namespace fmt + +namespace std { +// Standard permits specialization of std::numeric_limits. This specialization +// is used to resolve ambiguity between isinf and std::isinf in glibc: +// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48891 +// and the same for isnan and signbit. +template <> +class numeric_limits : + public std::numeric_limits { + public: + // Portable version of isinf. + template + static bool isinfinity(T x) { + using namespace fmt::internal; + // The resolution "priority" is: + // isinf macro > std::isinf > ::isinf > fmt::internal::isinf + if (check(sizeof(isinf(x)) == sizeof(bool) || + sizeof(isinf(x)) == sizeof(int))) { + return isinf(x) != 0; + } + return !_finite(static_cast(x)); + } + + // Portable version of isnan. + template + static bool isnotanumber(T x) { + using namespace fmt::internal; + if (check(sizeof(isnan(x)) == sizeof(bool) || + sizeof(isnan(x)) == sizeof(int))) { + return isnan(x) != 0; + } + return _isnan(static_cast(x)) != 0; + } + + // Portable version of signbit. + static bool isnegative(double x) { + using namespace fmt::internal; + if (check(sizeof(signbit(x)) == sizeof(int))) + return signbit(x) != 0; + if (x < 0) return true; + if (!isnotanumber(x)) return false; + int dec = 0, sign = 0; + char buffer[2]; // The buffer size must be >= 2 or _ecvt_s will fail. + _ecvt_s(buffer, sizeof(buffer), x, 0, &dec, &sign); + return sign != 0; + } +}; +} // namespace std + namespace fmt { // Fix the warning about long long on older versions of GCC @@ -207,7 +339,7 @@ void format(BasicFormatter &f, const Char *&format_str, const T &value); /** \rst A string reference. It can be constructed from a C string or ``std::string``. - + You can use one of the following typedefs for common character types: +------------+-------------------------+ @@ -270,22 +402,38 @@ class BasicStringRef { /** Returns the string size. */ std::size_t size() const { return size_; } + // Lexicographically compare this string reference to other. + int compare(BasicStringRef other) const { + std::size_t size = size_ < other.size_ ? size_ : other.size_; + int result = std::char_traits::compare(data_, other.data_, size); + if (result == 0) + result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1); + return result; + } + friend bool operator==(BasicStringRef lhs, BasicStringRef rhs) { - return lhs.data_ == rhs.data_; + return lhs.compare(rhs) == 0; } friend bool operator!=(BasicStringRef lhs, BasicStringRef rhs) { - return lhs.data_ != rhs.data_; + return lhs.compare(rhs) != 0; } friend bool operator<(BasicStringRef lhs, BasicStringRef rhs) { - return std::lexicographical_compare( - lhs.data_, lhs.data_ + lhs.size_, rhs.data_, rhs.data_ + rhs.size_); + return lhs.compare(rhs) < 0; + } + friend bool operator<=(BasicStringRef lhs, BasicStringRef rhs) { + return lhs.compare(rhs) <= 0; + } + friend bool operator>(BasicStringRef lhs, BasicStringRef rhs) { + return lhs.compare(rhs) > 0; + } + friend bool operator>=(BasicStringRef lhs, BasicStringRef rhs) { + return lhs.compare(rhs) >= 0; } }; typedef BasicStringRef StringRef; typedef BasicStringRef WStringRef; - /** \rst A reference to a null terminated string. It can be constructed from a C @@ -348,7 +496,7 @@ namespace internal { // to avoid dynamic memory allocation. enum { INLINE_BUFFER_SIZE = 500 }; -#if _SECURE_SCL +#if FMT_SECURE_SCL // Use checked iterator to avoid warnings on MSVC. template inline stdext::checked_array_iterator make_ptr(T *ptr, std::size_t size) { @@ -433,11 +581,13 @@ class Buffer { template template void Buffer::append(const U *begin, const U *end) { - std::ptrdiff_t num_elements = end - begin; - if (size_ + num_elements > capacity_) - grow(size_ + num_elements); - std::copy(begin, end, internal::make_ptr(ptr_, capacity_) + size_); - size_ += num_elements; + assert(begin <= end); + std::size_t new_size = size_ + (end - begin); + if (new_size > capacity_) + grow(new_size); + std::uninitialized_copy(begin, end, + internal::make_ptr(ptr_, capacity_) + size_); + size_ = new_size; } namespace internal { @@ -449,9 +599,9 @@ class MemoryBuffer : private Allocator, public Buffer { private: T data_[SIZE]; - // Free memory allocated by the buffer. - void free() { - if (this->ptr_ != data_) this->deallocate(this->ptr_, this->capacity_); + // Deallocate memory allocated by the buffer. + void deallocate() { + if (this->ptr_ != data_) Allocator::deallocate(this->ptr_, this->capacity_); } protected: @@ -460,7 +610,7 @@ class MemoryBuffer : private Allocator, public Buffer { public: explicit MemoryBuffer(const Allocator &alloc = Allocator()) : Allocator(alloc), Buffer(data_, SIZE) {} - ~MemoryBuffer() { free(); } + ~MemoryBuffer() { deallocate(); } #if FMT_USE_RVALUE_REFERENCES private: @@ -472,12 +622,12 @@ class MemoryBuffer : private Allocator, public Buffer { this->capacity_ = other.capacity_; if (other.ptr_ == other.data_) { this->ptr_ = data_; - std::copy(other.data_, - other.data_ + this->size_, make_ptr(data_, this->capacity_)); + std::uninitialized_copy(other.data_, other.data_ + this->size_, + make_ptr(data_, this->capacity_)); } else { this->ptr_ = other.ptr_; // Set pointer to the inline array so that delete is not called - // when freeing. + // when deallocating. other.ptr_ = other.data_; } } @@ -489,7 +639,7 @@ class MemoryBuffer : private Allocator, public Buffer { MemoryBuffer &operator=(MemoryBuffer &&other) { assert(this != &other); - free(); + deallocate(); move(other); return *this; } @@ -501,12 +651,13 @@ class MemoryBuffer : private Allocator, public Buffer { template void MemoryBuffer::grow(std::size_t size) { - std::size_t new_capacity = - (std::max)(size, this->capacity_ + this->capacity_ / 2); + std::size_t new_capacity = this->capacity_ + this->capacity_ / 2; + if (size > new_capacity) + new_capacity = size; T *new_ptr = this->allocate(new_capacity); // The following code doesn't throw, so the raw pointer above doesn't leak. - std::copy(this->ptr_, - this->ptr_ + this->size_, make_ptr(new_ptr, new_capacity)); + std::uninitialized_copy(this->ptr_, this->ptr_ + this->size_, + make_ptr(new_ptr, new_capacity)); std::size_t old_capacity = this->capacity_; T *old_ptr = this->ptr_; this->capacity_ = new_capacity; @@ -515,7 +666,7 @@ void MemoryBuffer::grow(std::size_t size) { // the buffer already uses the new storage and will deallocate it in case // of exception. if (old_ptr != data_) - this->deallocate(old_ptr, old_capacity); + Allocator::deallocate(old_ptr, old_capacity); } // A fixed-size buffer. @@ -528,50 +679,15 @@ class FixedBuffer : public fmt::Buffer { void grow(std::size_t size); }; -#ifndef _MSC_VER -// Portable version of signbit. -inline int getsign(double x) { - // When compiled in C++11 mode signbit is no longer a macro but a function - // defined in namespace std and the macro is undefined. -# ifdef signbit - return signbit(x); -# else - return std::signbit(x); -# endif -} - -// Portable version of isinf. -# ifdef isinf -inline int isinfinity(double x) { return isinf(x); } -inline int isinfinity(long double x) { return isinf(x); } -# else -inline int isinfinity(double x) { return std::isinf(x); } -inline int isinfinity(long double x) { return std::isinf(x); } -# endif -#else -inline int getsign(double value) { - if (value < 0) return 1; - if (value == value) return 0; - int dec = 0, sign = 0; - char buffer[2]; // The buffer size must be >= 2 or _ecvt_s will fail. - _ecvt_s(buffer, sizeof(buffer), value, 0, &dec, &sign); - return sign; -} -inline int isinfinity(double x) { return !_finite(x); } -inline int isinfinity(long double x) { - return !_finite(static_cast(x)); -} -#endif - template class BasicCharTraits { public: -#if _SECURE_SCL +#if FMT_SECURE_SCL typedef stdext::checked_array_iterator CharPtr; #else typedef Char *CharPtr; #endif - static Char cast(wchar_t value) { return static_cast(value); } + static Char cast(int value) { return static_cast(value); } }; template @@ -712,24 +828,23 @@ inline unsigned count_digits(uint32_t n) { // Formats a decimal unsigned integer value writing into buffer. template inline void format_decimal(Char *buffer, UInt value, unsigned num_digits) { - --num_digits; + buffer += num_digits; while (value >= 100) { // Integer division is slow so do it for a group of two digits instead // of for every digit. The idea comes from the talk by Alexandrescu // "Three Optimization Tips for C++". See speed-test for a comparison. - unsigned index = (value % 100) * 2; + unsigned index = static_cast((value % 100) * 2); value /= 100; - buffer[num_digits] = Data::DIGITS[index + 1]; - buffer[num_digits - 1] = Data::DIGITS[index]; - num_digits -= 2; + *--buffer = Data::DIGITS[index + 1]; + *--buffer = Data::DIGITS[index]; } if (value < 10) { - *buffer = static_cast('0' + value); + *--buffer = static_cast('0' + value); return; } unsigned index = static_cast(value * 2); - buffer[1] = Data::DIGITS[index + 1]; - buffer[0] = Data::DIGITS[index]; + *--buffer = Data::DIGITS[index + 1]; + *--buffer = Data::DIGITS[index]; } #ifndef _WIN32 @@ -833,48 +948,80 @@ template struct NamedArg; template -struct None {}; +struct Null {}; // A helper class template to enable or disable overloads taking wide // characters and strings in MakeValue. template struct WCharHelper { - typedef None Supported; + typedef Null Supported; typedef T Unsupported; }; template struct WCharHelper { typedef T Supported; - typedef None Unsupported; + typedef Null Unsupported; }; +typedef char Yes[1]; +typedef char No[2]; + +// These are non-members to workaround an overload resolution bug in bcc32. +Yes &convert(fmt::ULongLong); +Yes &convert(std::ostream &); +No &convert(...); + template -class IsConvertibleToInt { - private: - typedef char yes[1]; - typedef char no[2]; +T &get(); - static const T &get(); - - static yes &check(fmt::ULongLong); - static no &check(...); - - public: - enum { value = (sizeof(check(get())) == sizeof(yes)) }; +struct DummyStream : std::ostream { + // Hide all operator<< overloads from std::ostream. + void operator<<(Null<>); }; -#define FMT_CONVERTIBLE_TO_INT(Type) \ +No &operator<<(std::ostream &, int); + +template +struct ConvertToIntImpl { + enum { value = false }; +}; + +template +struct ConvertToIntImpl { + // Convert to int only if T doesn't have an overloaded operator<<. + enum { + value = sizeof(convert(get() << get())) == sizeof(No) + }; +}; + +template +struct ConvertToIntImpl2 { + enum { value = false }; +}; + +template +struct ConvertToIntImpl2 { + enum { + // Don't convert numeric types. + value = ConvertToIntImpl::is_specialized>::value + }; +}; + +template +struct ConvertToInt { + enum { enable_conversion = sizeof(convert(get())) == sizeof(Yes) }; + enum { value = ConvertToIntImpl2::value }; +}; + +#define FMT_DISABLE_CONVERSION_TO_INT(Type) \ template <> \ - class IsConvertibleToInt { \ - public: \ - enum { value = 1 }; \ - } + struct ConvertToInt { enum { value = 0 }; } // Silence warnings about convering float to int. -FMT_CONVERTIBLE_TO_INT(float); -FMT_CONVERTIBLE_TO_INT(double); -FMT_CONVERTIBLE_TO_INT(long double); +FMT_DISABLE_CONVERSION_TO_INT(float); +FMT_DISABLE_CONVERSION_TO_INT(double); +FMT_DISABLE_CONVERSION_TO_INT(long double); template struct EnableIf {}; @@ -888,13 +1035,19 @@ struct Conditional { typedef T type; }; template struct Conditional { typedef F type; }; -// A helper function to suppress bogus "conditional expression is constant" -// warnings. -inline bool check(bool value) { return value; } +// For bcc32 which doesn't understand ! in template arguments. +template +struct Not { enum { value = 0 }; }; + +template<> +struct Not { enum { value = 1 }; }; // Makes an Arg object from any type. -template +template class MakeValue : public Arg { + public: + typedef typename Formatter::Char Char; + private: // The following two methods are private to disallow formatting of // arbitrary pointers. If you want to output a pointer cast it to @@ -910,7 +1063,9 @@ class MakeValue : public Arg { // characters and strings into narrow strings as in // fmt::format("{}", L"test"); // To fix this, use a wide format string: fmt::format(L"{}", L"test"). +#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) MakeValue(typename WCharHelper::Unsupported); +#endif MakeValue(typename WCharHelper::Unsupported); MakeValue(typename WCharHelper::Unsupported); MakeValue(typename WCharHelper::Unsupported); @@ -930,7 +1085,7 @@ class MakeValue : public Arg { template static void format_custom_arg( void *formatter, const void *arg, void *format_str_ptr) { - format(*static_cast*>(formatter), + format(*static_cast(formatter), *static_cast(format_str_ptr), *static_cast(arg)); } @@ -979,14 +1134,16 @@ class MakeValue : public Arg { FMT_MAKE_VALUE(float, double_value, DOUBLE) FMT_MAKE_VALUE(double, double_value, DOUBLE) FMT_MAKE_VALUE(long double, long_double_value, LONG_DOUBLE) - FMT_MAKE_VALUE(signed char, int_value, CHAR) - FMT_MAKE_VALUE(unsigned char, int_value, CHAR) + FMT_MAKE_VALUE(signed char, int_value, INT) + FMT_MAKE_VALUE(unsigned char, uint_value, UINT) FMT_MAKE_VALUE(char, int_value, CHAR) +#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) MakeValue(typename WCharHelper::Supported value) { int_value = value; } static uint64_t type(wchar_t) { return Arg::CHAR; } +#endif #define FMT_MAKE_STR_VALUE(Type, TYPE) \ MakeValue(Type value) { set_string(value); } \ @@ -1016,24 +1173,25 @@ class MakeValue : public Arg { template MakeValue(const T &value, - typename EnableIf::value, int>::type = 0) { + typename EnableIf::value>::value, int>::type = 0) { custom.value = &value; custom.format = &format_custom_arg; } template MakeValue(const T &value, - typename EnableIf::value, int>::type = 0) { + typename EnableIf::value, int>::type = 0) { int_value = value; } template static uint64_t type(const T &) { - return IsConvertibleToInt::value ? Arg::INT : Arg::CUSTOM; + return ConvertToInt::value ? Arg::INT : Arg::CUSTOM; } // Additional template param `Char_` is needed here because make_type always - // uses MakeValue. + // uses char. template MakeValue(const NamedArg &value) { pointer = &value; } @@ -1045,10 +1203,12 @@ template struct NamedArg : Arg { BasicStringRef name; + typedef internal::MakeValue< BasicFormatter > MakeValue; + template - NamedArg(BasicStringRef name, const T &value) - : name(name), Arg(MakeValue(value)) { - type = static_cast(MakeValue::type(value)); + NamedArg(BasicStringRef argname, const T &value) + : Arg(MakeValue(value)), name(argname) { + type = static_cast(MakeValue::type(value)); } }; @@ -1118,6 +1278,9 @@ class ArgVisitor { return FMT_DISPATCH(visit_unhandled_arg()); } + Result visit_cstring(const char *) { + return FMT_DISPATCH(visit_unhandled_arg()); + } Result visit_string(Arg::StringValue) { return FMT_DISPATCH(visit_unhandled_arg()); } @@ -1145,18 +1308,15 @@ class ArgVisitor { case Arg::ULONG_LONG: return FMT_DISPATCH(visit_ulong_long(arg.ulong_long_value)); case Arg::BOOL: - return FMT_DISPATCH(visit_bool(arg.int_value)); + return FMT_DISPATCH(visit_bool(arg.int_value != 0)); case Arg::CHAR: return FMT_DISPATCH(visit_char(arg.int_value)); case Arg::DOUBLE: return FMT_DISPATCH(visit_double(arg.double_value)); case Arg::LONG_DOUBLE: return FMT_DISPATCH(visit_long_double(arg.long_double_value)); - case Arg::CSTRING: { - Arg::StringValue str = arg.string; - str.size = 0; - return FMT_DISPATCH(visit_string(str)); - } + case Arg::CSTRING: + return FMT_DISPATCH(visit_cstring(arg.string.value)); case Arg::STRING: return FMT_DISPATCH(visit_string(arg.string)); case Arg::WSTRING: @@ -1174,9 +1334,6 @@ class RuntimeError : public std::runtime_error { RuntimeError() : std::runtime_error("") {} }; -template -class BasicArgFormatter; - template class PrintfArgFormatter; @@ -1248,111 +1405,6 @@ class ArgList { } }; -struct FormatSpec; - -namespace internal { - -template -class ArgMap { - private: - typedef std::map, internal::Arg> MapType; - typedef typename MapType::value_type Pair; - - MapType map_; - - public: - void init(const ArgList &args); - - const internal::Arg* find(const fmt::BasicStringRef &name) const { - typename MapType::const_iterator it = map_.find(name); - return it != map_.end() ? &it->second : 0; - } -}; - -class FormatterBase { - private: - ArgList args_; - int next_arg_index_; - - // Returns the argument with specified index. - Arg do_get_arg(unsigned arg_index, const char *&error); - - protected: - const ArgList &args() const { return args_; } - - void set_args(const ArgList &args) { - args_ = args; - next_arg_index_ = 0; - } - - // Returns the next argument. - Arg next_arg(const char *&error); - - // Checks if manual indexing is used and returns the argument with - // specified index. - Arg get_arg(unsigned arg_index, const char *&error); - - bool check_no_auto_index(const char *&error); - - template - void write(BasicWriter &w, const Char *start, const Char *end) { - if (start != end) - w << BasicStringRef(start, end - start); - } -}; - -// A printf formatter. -template -class PrintfFormatter : private FormatterBase { - private: - void parse_flags(FormatSpec &spec, const Char *&s); - - // Returns the argument with specified index or, if arg_index is equal - // to the maximum unsigned value, the next argument. - Arg get_arg(const Char *s, - unsigned arg_index = (std::numeric_limits::max)()); - - // Parses argument index, flags and width and returns the argument index. - unsigned parse_header(const Char *&s, FormatSpec &spec); - - public: - void format(BasicWriter &writer, - BasicCStringRef format_str, const ArgList &args); -}; -} // namespace internal - -// A formatter. -template -class BasicFormatter : private internal::FormatterBase { - private: - BasicWriter &writer_; - const Char *start_; - internal::ArgMap map_; - - FMT_DISALLOW_COPY_AND_ASSIGN(BasicFormatter); - - using FormatterBase::get_arg; - - // Checks if manual indexing is used and returns the argument with - // specified name. - internal::Arg get_arg(BasicStringRef arg_name, const char *&error); - - // Parses argument index and returns corresponding argument. - internal::Arg parse_arg_index(const Char *&s); - - // Parses argument name and returns corresponding argument. - internal::Arg parse_arg_name(const Char *&s); - - public: - explicit BasicFormatter(BasicWriter &w) : writer_(w) {} - - BasicWriter &writer() { return writer_; } - - void format(BasicCStringRef format_str, const ArgList &args); - - const Char *format(const Char *&format_str, const internal::Arg &arg); -}; - enum Alignment { ALIGN_DEFAULT, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER, ALIGN_NUMERIC }; @@ -1574,6 +1626,242 @@ inline StrFormatSpec pad( return StrFormatSpec(str, width, fill); } +namespace internal { + +template +class ArgMap { + private: + typedef std::map, internal::Arg> MapType; + typedef typename MapType::value_type Pair; + + MapType map_; + + public: + void init(const ArgList &args); + + const internal::Arg* find(const fmt::BasicStringRef &name) const { + typename MapType::const_iterator it = map_.find(name); + return it != map_.end() ? &it->second : 0; + } +}; + +template +class ArgFormatterBase : public ArgVisitor { + private: + BasicWriter &writer_; + FormatSpec &spec_; + + FMT_DISALLOW_COPY_AND_ASSIGN(ArgFormatterBase); + + void write_pointer(const void *p) { + spec_.flags_ = HASH_FLAG; + spec_.type_ = 'x'; + writer_.write_int(reinterpret_cast(p), spec_); + } + + protected: + BasicWriter &writer() { return writer_; } + FormatSpec &spec() { return spec_; } + + void write(bool value) { + const char *str_value = value ? "true" : "false"; + Arg::StringValue str = { str_value, std::strlen(str_value) }; + writer_.write_str(str, spec_); + } + + void write(const char *value) { + Arg::StringValue str = {value, value != 0 ? std::strlen(value) : 0}; + writer_.write_str(str, spec_); + } + + public: + ArgFormatterBase(BasicWriter &w, FormatSpec &s) + : writer_(w), spec_(s) {} + + template + void visit_any_int(T value) { writer_.write_int(value, spec_); } + + template + void visit_any_double(T value) { writer_.write_double(value, spec_); } + + void visit_bool(bool value) { + if (spec_.type_) + return visit_any_int(value); + write(value); + } + + void visit_char(int value) { + if (spec_.type_ && spec_.type_ != 'c') { + spec_.flags_ |= CHAR_FLAG; + writer_.write_int(value, spec_); + return; + } + if (spec_.align_ == ALIGN_NUMERIC || spec_.flags_ != 0) + FMT_THROW(FormatError("invalid format specifier for char")); + typedef typename BasicWriter::CharPtr CharPtr; + Char fill = internal::CharTraits::cast(spec_.fill()); + CharPtr out = CharPtr(); + const unsigned CHAR_WIDTH = 1; + if (spec_.width_ > CHAR_WIDTH) { + out = writer_.grow_buffer(spec_.width_); + if (spec_.align_ == ALIGN_RIGHT) { + std::uninitialized_fill_n(out, spec_.width_ - CHAR_WIDTH, fill); + out += spec_.width_ - CHAR_WIDTH; + } else if (spec_.align_ == ALIGN_CENTER) { + out = writer_.fill_padding(out, spec_.width_, + internal::check(CHAR_WIDTH), fill); + } else { + std::uninitialized_fill_n(out + CHAR_WIDTH, + spec_.width_ - CHAR_WIDTH, fill); + } + } else { + out = writer_.grow_buffer(CHAR_WIDTH); + } + *out = internal::CharTraits::cast(value); + } + + void visit_cstring(const char *value) { + if (spec_.type_ == 'p') + return write_pointer(value); + write(value); + } + + void visit_string(Arg::StringValue value) { + writer_.write_str(value, spec_); + } + + using ArgVisitor::visit_wstring; + + void visit_wstring(Arg::StringValue value) { + writer_.write_str(value, spec_); + } + + void visit_pointer(const void *value) { + if (spec_.type_ && spec_.type_ != 'p') + report_unknown_type(spec_.type_, "pointer"); + write_pointer(value); + } +}; + +// An argument formatter. +template +class BasicArgFormatter : + public ArgFormatterBase, Char> { + private: + BasicFormatter &formatter_; + const Char *format_; + + public: + BasicArgFormatter(BasicFormatter &f, FormatSpec &s, const Char *fmt) + : ArgFormatterBase, Char>(f.writer(), s), + formatter_(f), format_(fmt) {} + + void visit_custom(Arg::CustomValue c) { + c.format(&formatter_, c.value, &format_); + } +}; + +class FormatterBase { + private: + ArgList args_; + int next_arg_index_; + + // Returns the argument with specified index. + Arg do_get_arg(unsigned arg_index, const char *&error); + + protected: + const ArgList &args() const { return args_; } + + explicit FormatterBase(const ArgList &args) { + args_ = args; + next_arg_index_ = 0; + } + + // Returns the next argument. + Arg next_arg(const char *&error) { + if (next_arg_index_ >= 0) + return do_get_arg(next_arg_index_++, error); + error = "cannot switch from manual to automatic argument indexing"; + return Arg(); + } + + // Checks if manual indexing is used and returns the argument with + // specified index. + Arg get_arg(unsigned arg_index, const char *&error) { + return check_no_auto_index(error) ? do_get_arg(arg_index, error) : Arg(); + } + + bool check_no_auto_index(const char *&error) { + if (next_arg_index_ > 0) { + error = "cannot switch from automatic to manual argument indexing"; + return false; + } + next_arg_index_ = -1; + return true; + } + + template + void write(BasicWriter &w, const Char *start, const Char *end) { + if (start != end) + w << BasicStringRef(start, end - start); + } +}; + +// A printf formatter. +template +class PrintfFormatter : private FormatterBase { + private: + void parse_flags(FormatSpec &spec, const Char *&s); + + // Returns the argument with specified index or, if arg_index is equal + // to the maximum unsigned value, the next argument. + Arg get_arg(const Char *s, + unsigned arg_index = (std::numeric_limits::max)()); + + // Parses argument index, flags and width and returns the argument index. + unsigned parse_header(const Char *&s, FormatSpec &spec); + + public: + explicit PrintfFormatter(const ArgList &args) : FormatterBase(args) {} + void format(BasicWriter &writer, BasicCStringRef format_str); +}; +} // namespace internal + +// A formatter. +template +class BasicFormatter : private internal::FormatterBase { + public: + typedef CharType Char; + + private: + BasicWriter &writer_; + internal::ArgMap map_; + + FMT_DISALLOW_COPY_AND_ASSIGN(BasicFormatter); + + using internal::FormatterBase::get_arg; + + // Checks if manual indexing is used and returns the argument with + // specified name. + internal::Arg get_arg(BasicStringRef arg_name, const char *&error); + + // Parses argument index and returns corresponding argument. + internal::Arg parse_arg_index(const Char *&s); + + // Parses argument name and returns corresponding argument. + internal::Arg parse_arg_name(const Char *&s); + + public: + BasicFormatter(const ArgList &args, BasicWriter &w) + : internal::FormatterBase(args), writer_(w) {} + + BasicWriter &writer() { return writer_; } + + void format(BasicCStringRef format_str); + + const Char *format(const Char *&format_str, const internal::Arg &arg); +}; + // Generates a comma-separated list with results of applying f to // numbers 0..n-1. # define FMT_GEN(n, f) FMT_GEN##n(f) @@ -1597,7 +1885,9 @@ namespace internal { inline uint64_t make_type() { return 0; } template -inline uint64_t make_type(const T &arg) { return MakeValue::type(arg); } +inline uint64_t make_type(const T &arg) { + return MakeValue< BasicFormatter >::type(arg); +} template struct ArgArray { @@ -1621,7 +1911,8 @@ inline void do_set_types(Arg *) {} template inline void do_set_types(Arg *args, const T &arg, const Args & ... tail) { - args->type = static_cast(MakeValue::type(arg)); + args->type = static_cast( + MakeValue< BasicFormatter >::type(arg)); do_set_types(args + 1, tail...); } @@ -1637,24 +1928,24 @@ inline void set_types(Value *, const Args & ...) { // Do nothing as types are passed separately from values. } -template +template inline void store_args(Value *) {} -template +template inline void store_args(Arg *args, const T &arg, const Args & ... tail) { // Assign only the Value subobject of Arg and don't overwrite type (if any) // that is assigned by set_types. Value &value = *args; - value = MakeValue(arg); - store_args(args + 1, tail...); + value = MakeValue(arg); + store_args(args + 1, tail...); } -template +template ArgList make_arg_list(typename ArgArray::Type array, const Args & ... args) { if (check(sizeof...(Args) >= ArgList::MAX_PACKED_ARGS)) set_types(array, args...); - store_args(array, args...); + store_args(array, args...); return ArgList(make_type(args...), array); } #else @@ -1677,13 +1968,47 @@ inline uint64_t make_type(FMT_GEN15(FMT_ARG_TYPE_DEFAULT)) { (t12.type << 48) | (t13.type << 52) | (t14.type << 56); } #endif + +template +class FormatBuf : public std::basic_streambuf { + private: + typedef typename std::basic_streambuf::int_type int_type; + typedef typename std::basic_streambuf::traits_type traits_type; + + Buffer &buffer_; + Char *start_; + + public: + FormatBuf(Buffer &buffer) : buffer_(buffer), start_(&buffer[0]) { + this->setp(start_, start_ + buffer_.capacity()); + } + + int_type overflow(int_type ch = traits_type::eof()) { + if (!traits_type::eq_int_type(ch, traits_type::eof())) { + size_t size = this->pptr() - start_; + buffer_.resize(size); + buffer_.reserve(size * 2); + + start_ = &buffer_[0]; + start_[size] = traits_type::to_char_type(ch); + this->setp(start_+ size + 1, start_ + size * 2); + } + return ch; + } + + size_t size() const { + return this->pptr() - start_; + } +}; } // namespace internal # define FMT_MAKE_TEMPLATE_ARG(n) typename T##n # define FMT_MAKE_ARG_TYPE(n) T##n # define FMT_MAKE_ARG(n) const T##n &v##n -# define FMT_MAKE_REF_char(n) fmt::internal::MakeValue(v##n) -# define FMT_MAKE_REF_wchar_t(n) fmt::internal::MakeValue(v##n) +# define FMT_ASSIGN_char(n) \ + arr[n] = fmt::internal::MakeValue< fmt::BasicFormatter >(v##n) +# define FMT_ASSIGN_wchar_t(n) \ + arr[n] = fmt::internal::MakeValue< fmt::BasicFormatter >(v##n) #if FMT_USE_VARIADIC_TEMPLATES // Defines a variadic function returning void. @@ -1691,7 +2016,8 @@ inline uint64_t make_type(FMT_GEN15(FMT_ARG_TYPE_DEFAULT)) { template \ void func(arg_type arg0, const Args & ... args) { \ typename fmt::internal::ArgArray::Type array; \ - func(arg0, fmt::internal::make_arg_list(array, args...)); \ + func(arg0, fmt::internal::make_arg_list< \ + fmt::BasicFormatter >(array, args...)); \ } // Defines a variadic constructor. @@ -1699,12 +2025,14 @@ inline uint64_t make_type(FMT_GEN15(FMT_ARG_TYPE_DEFAULT)) { template \ ctor(arg0_type arg0, arg1_type arg1, const Args & ... args) { \ typename fmt::internal::ArgArray::Type array; \ - func(arg0, arg1, fmt::internal::make_arg_list(array, args...)); \ + func(arg0, arg1, fmt::internal::make_arg_list< \ + fmt::BasicFormatter >(array, args...)); \ } #else -# define FMT_MAKE_REF(n) fmt::internal::MakeValue(v##n) +# define FMT_MAKE_REF(n) \ + fmt::internal::MakeValue< fmt::BasicFormatter >(v##n) # define FMT_MAKE_REF2(n) v##n // Defines a wrapper for a function taking one argument of type arg_type @@ -1799,7 +2127,7 @@ class SystemError : public internal::RuntimeError { *error_code* is a system error code as given by ``errno``. If *error_code* is not a valid error code such as -1, the system message may look like "Unknown error -1" and is platform-dependent. - + **Example**:: // This throws a SystemError with the description @@ -1847,7 +2175,7 @@ class BasicWriter { typedef typename internal::CharTraits::CharPtr CharPtr; -#if _SECURE_SCL +#if FMT_SECURE_SCL // Returns pointer value. static Char *get(CharPtr p) { return p.base(); } #else @@ -1867,12 +2195,33 @@ class BasicWriter { return internal::make_ptr(&buffer_[size], n); } + // Writes an unsigned decimal integer. + template + Char *write_unsigned_decimal(UInt value, unsigned prefix_size = 0) { + unsigned num_digits = internal::count_digits(value); + Char *ptr = get(grow_buffer(prefix_size + num_digits)); + internal::format_decimal(ptr + prefix_size, value, num_digits); + return ptr; + } + + // Writes a decimal integer. + template + void write_decimal(Int value) { + typename internal::IntTraits::MainType abs_value = value; + if (internal::is_negative(value)) { + abs_value = 0 - abs_value; + *write_unsigned_decimal(abs_value, 1) = '-'; + } else { + write_unsigned_decimal(abs_value, 0); + } + } + // Prepare a buffer for integer formatting. CharPtr prepare_int_buffer(unsigned num_digits, const EmptySpec &, const char *prefix, unsigned prefix_size) { unsigned size = prefix_size + num_digits; CharPtr p = grow_buffer(size); - std::copy(prefix, prefix + prefix_size, p); + std::uninitialized_copy(prefix, prefix + prefix_size, p); return p + size - 1; } @@ -1890,12 +2239,11 @@ class BasicWriter { // Writes a formatted string. template - CharPtr write_str( - const StrChar *s, std::size_t size, const AlignSpec &spec); + CharPtr write_str(const StrChar *s, std::size_t size, const AlignSpec &spec); template - void write_str( - const internal::Arg::StringValue &str, const FormatSpec &spec); + void write_str(const internal::Arg::StringValue &str, + const FormatSpec &spec); // This following methods are private to disallow writing wide characters // and strings to a char stream. If you want to print a wide string as a @@ -1915,7 +2263,7 @@ class BasicWriter { void append_float_length(Char *&, T) {} template - friend class internal::BasicArgFormatter; + friend class internal::ArgFormatterBase; friend class internal::PrintfArgFormatter; @@ -1967,7 +2315,7 @@ class BasicWriter { /** \rst Writes formatted data. - + *args* is an argument list representing arbitrary arguments. **Example**:: @@ -1990,24 +2338,27 @@ class BasicWriter { \endrst */ void write(BasicCStringRef format, ArgList args) { - BasicFormatter(*this).format(format, args); + BasicFormatter(args, *this).format(format); } FMT_VARIADIC_VOID(write, BasicCStringRef) BasicWriter &operator<<(int value) { - return *this << IntFormatSpec(value); + write_decimal(value); + return *this; } BasicWriter &operator<<(unsigned value) { return *this << IntFormatSpec(value); } BasicWriter &operator<<(long value) { - return *this << IntFormatSpec(value); + write_decimal(value); + return *this; } BasicWriter &operator<<(unsigned long value) { return *this << IntFormatSpec(value); } BasicWriter &operator<<(LongLong value) { - return *this << IntFormatSpec(value); + write_decimal(value); + return *this; } /** @@ -2093,20 +2444,42 @@ typename BasicWriter::CharPtr BasicWriter::write_str( out = grow_buffer(spec.width()); Char fill = internal::CharTraits::cast(spec.fill()); if (spec.align() == ALIGN_RIGHT) { - std::fill_n(out, spec.width() - size, fill); + std::uninitialized_fill_n(out, spec.width() - size, fill); out += spec.width() - size; } else if (spec.align() == ALIGN_CENTER) { out = fill_padding(out, spec.width(), size, fill); } else { - std::fill_n(out + size, spec.width() - size, fill); + std::uninitialized_fill_n(out + size, spec.width() - size, fill); } } else { out = grow_buffer(size); } - std::copy(s, s + size, out); + std::uninitialized_copy(s, s + size, out); return out; } +template +template +void BasicWriter::write_str( + const internal::Arg::StringValue &s, const FormatSpec &spec) { + // Check if StrChar is convertible to Char. + internal::CharTraits::convert(StrChar()); + if (spec.type_ && spec.type_ != 's') + internal::report_unknown_type(spec.type_, "string"); + const StrChar *str_value = s.value; + std::size_t str_size = s.size; + if (str_size == 0) { + if (!str_value) { + FMT_THROW(FormatError("string pointer is null")); + return; + } + } + std::size_t precision = spec.precision_; + if (spec.precision_ >= 0 && precision < str_size) + str_size = spec.precision_; + write_str(str_value, str_size, spec); +} + template typename BasicWriter::CharPtr BasicWriter::fill_padding( @@ -2115,10 +2488,11 @@ typename BasicWriter::CharPtr std::size_t padding = total_size - content_size; std::size_t left_padding = padding / 2; Char fill_char = internal::CharTraits::cast(fill); - std::fill_n(buffer, left_padding, fill_char); + std::uninitialized_fill_n(buffer, left_padding, fill_char); buffer += left_padding; CharPtr content = buffer; - std::fill_n(buffer + content_size, padding - left_padding, fill_char); + std::uninitialized_fill_n(buffer + content_size, + padding - left_padding, fill_char); return content; } @@ -2144,42 +2518,42 @@ typename BasicWriter::CharPtr unsigned fill_size = width - number_size; if (align != ALIGN_LEFT) { CharPtr p = grow_buffer(fill_size); - std::fill(p, p + fill_size, fill); + std::uninitialized_fill(p, p + fill_size, fill); } CharPtr result = prepare_int_buffer( num_digits, subspec, prefix, prefix_size); if (align == ALIGN_LEFT) { CharPtr p = grow_buffer(fill_size); - std::fill(p, p + fill_size, fill); + std::uninitialized_fill(p, p + fill_size, fill); } return result; } unsigned size = prefix_size + num_digits; if (width <= size) { CharPtr p = grow_buffer(size); - std::copy(prefix, prefix + prefix_size, p); + std::uninitialized_copy(prefix, prefix + prefix_size, p); return p + size - 1; } CharPtr p = grow_buffer(width); CharPtr end = p + width; if (align == ALIGN_LEFT) { - std::copy(prefix, prefix + prefix_size, p); + std::uninitialized_copy(prefix, prefix + prefix_size, p); p += size; - std::fill(p, end, fill); + std::uninitialized_fill(p, end, fill); } else if (align == ALIGN_CENTER) { p = fill_padding(p, width, size, fill); - std::copy(prefix, prefix + prefix_size, p); + std::uninitialized_copy(prefix, prefix + prefix_size, p); p += size; } else { if (align == ALIGN_NUMERIC) { if (prefix_size != 0) { - p = std::copy(prefix, prefix + prefix_size, p); + p = std::uninitialized_copy(prefix, prefix + prefix_size, p); size -= prefix_size; } } else { - std::copy(prefix, prefix + prefix_size, end - size); + std::uninitialized_copy(prefix, prefix + prefix_size, end - size); } - std::fill(p, end - size, fill); + std::uninitialized_fill(p, end - size, fill); p = end; } return p - 1; @@ -2241,7 +2615,7 @@ void BasicWriter::write_int(T value, Spec spec) { Char *p = get(prepare_int_buffer(num_digits, spec, prefix, prefix_size)); n = abs_value; do { - *p-- = '0' + (n & 1); + *p-- = static_cast('0' + (n & 1)); } while ((n >>= 1) != 0); break; } @@ -2256,7 +2630,7 @@ void BasicWriter::write_int(T value, Spec spec) { Char *p = get(prepare_int_buffer(num_digits, spec, prefix, prefix_size)); n = abs_value; do { - *p-- = '0' + (n & 7); + *p-- = static_cast('0' + (n & 7)); } while ((n >>= 3) != 0); break; } @@ -2295,16 +2669,16 @@ void BasicWriter::write_double( } char sign = 0; - // Use getsign instead of value < 0 because the latter is always + // Use isnegative instead of value < 0 because the latter is always // false for NaN. - if (internal::getsign(static_cast(value))) { + if (internal::FPUtil::isnegative(static_cast(value))) { sign = '-'; value = -value; } else if (spec.flag(SIGN_FLAG)) { sign = spec.flag(PLUS_FLAG) ? '+' : ' '; } - if (value != value) { + if (internal::FPUtil::isnotanumber(value)) { // Format NaN ourselves because sprintf's output is not consistent // across platforms. std::size_t nan_size = 4; @@ -2319,7 +2693,7 @@ void BasicWriter::write_double( return; } - if (internal::isinfinity(value)) { + if (internal::FPUtil::isinfinity(value)) { // Format infinity ourselves because sprintf's output is not consistent // across platforms. std::size_t inf_size = 4; @@ -2337,7 +2711,7 @@ void BasicWriter::write_double( std::size_t offset = buffer_.size(); unsigned width = spec.width(); if (sign) { - buffer_.reserve(buffer_.size() + (std::max)(width, 1u)); + buffer_.reserve(buffer_.size() + (width > 1u ? width : 1u)); if (width > 0) --width; ++offset; @@ -2372,7 +2746,7 @@ void BasicWriter::write_double( Char fill = internal::CharTraits::cast(spec.fill()); for (;;) { std::size_t buffer_size = buffer_.capacity() - offset; -#if _MSC_VER +#ifdef _MSC_VER // MSVC's vsnprintf_s doesn't work with zero size, so reserve // space for at least one extra character to make the size non-zero. // Note that the buffer's capacity will increase by more than 1. @@ -2399,7 +2773,7 @@ void BasicWriter::write_double( spec.width() > static_cast(n)) { width = spec.width(); CharPtr p = grow_buffer(width); - std::copy(p, p + n, p + (width - n) / 2); + std::memmove(get(p) + (width - n) / 2, get(p), n * sizeof(Char)); fill_padding(p, spec.width(), n, fill); return; } @@ -2492,7 +2866,7 @@ typedef BasicMemoryWriter WMemoryWriter; This class template provides operations for formatting and writing data into a fixed-size array. For writing into a dynamically growing buffer use :class:`fmt::BasicMemoryWriter`. - + Any write method will throw ``std::runtime_error`` if the output doesn't fit into the array. @@ -2539,12 +2913,16 @@ typedef BasicArrayWriter WArrayWriter; // Formats a value. template void format(BasicFormatter &f, const Char *&format_str, const T &value) { - std::basic_ostringstream os; - os << value; - std::basic_string str = os.str(); - internal::Arg arg = internal::MakeValue(str); - arg.type = static_cast( - internal::MakeValue::type(str)); + internal::MemoryBuffer buffer; + + internal::FormatBuf format_buf(buffer); + std::basic_ostream output(&format_buf); + output << value; + + BasicStringRef str(&buffer[0], format_buf.size()); + typedef internal::MakeValue< BasicFormatter > MakeValue; + internal::Arg arg = MakeValue(str); + arg.type = static_cast(MakeValue::type(str)); format_str = f.format(format_str, arg); } @@ -2606,7 +2984,7 @@ enum Color { BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE }; Formats a string and prints it to stdout using ANSI escape sequences to specify color (experimental). Example: - PrintColored(fmt::RED, "Elapsed time: {0:.2f} seconds") << 1.23; + print_colored(fmt::RED, "Elapsed time: {0:.2f} seconds", 1.23); */ void print_colored(Color c, CStringRef format, ArgList args); @@ -2653,20 +3031,9 @@ void print(std::FILE *f, CStringRef format_str, ArgList args); */ void print(CStringRef format_str, ArgList args); -/** - \rst - Prints formatted data to the stream *os*. - - **Example**:: - - print(cerr, "Don't {}!", "panic"); - \endrst - */ -void print(std::ostream &os, CStringRef format_str, ArgList args); - template void printf(BasicWriter &w, BasicCStringRef format, ArgList args) { - internal::PrintfFormatter().format(w, format, args); + internal::PrintfFormatter(args).format(w, format); } /** @@ -2684,6 +3051,12 @@ inline std::string sprintf(CStringRef format, ArgList args) { return w.str(); } +inline std::wstring sprintf(WCStringRef format, ArgList args) { + WMemoryWriter w; + printf(w, format, args); + return w.str(); +} + /** \rst Prints formatted data to the file *f*. @@ -2726,7 +3099,7 @@ class FormatInt { // Integer division is slow so do it for a group of two digits instead // of for every digit. The idea comes from the talk by Alexandrescu // "Three Optimization Tips for C++". See speed-test for a comparison. - unsigned index = (value % 100) * 2; + unsigned index = static_cast((value % 100) * 2); value /= 100; *--buffer_end = internal::Data::DIGITS[index + 1]; *--buffer_end = internal::Data::DIGITS[index]; @@ -2874,7 +3247,8 @@ void arg(WStringRef, const internal::NamedArg&) FMT_DELETED_OR_UNDEFINED; const Args & ... args) { \ typename fmt::internal::ArgArray::Type array; \ call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), \ - fmt::internal::make_arg_list(array, args...)); \ + fmt::internal::make_arg_list< \ + fmt::BasicFormatter >(array, args...)); \ } #else // Defines a wrapper for a function taking __VA_ARGS__ arguments @@ -2883,7 +3257,8 @@ void arg(WStringRef, const internal::NamedArg&) FMT_DELETED_OR_UNDEFINED; template \ inline ReturnType func(FMT_FOR_EACH(FMT_ADD_ARG_NAME, __VA_ARGS__), \ FMT_GEN(n, FMT_MAKE_ARG)) { \ - fmt::internal::ArgArray::Type arr = {FMT_GEN(n, FMT_MAKE_REF_##Char)}; \ + fmt::internal::ArgArray::Type arr; \ + FMT_GEN(n, FMT_ASSIGN_##Char); \ call(FMT_FOR_EACH(FMT_GET_ARG_NAME, __VA_ARGS__), fmt::ArgList( \ fmt::internal::make_type(FMT_GEN(n, FMT_MAKE_REF2)), arr)); \ } @@ -2969,19 +3344,378 @@ FMT_VARIADIC(std::string, format, CStringRef) FMT_VARIADIC_W(std::wstring, format, WCStringRef) FMT_VARIADIC(void, print, CStringRef) FMT_VARIADIC(void, print, std::FILE *, CStringRef) -FMT_VARIADIC(void, print, std::ostream &, CStringRef) + FMT_VARIADIC(void, print_colored, Color, CStringRef) FMT_VARIADIC(std::string, sprintf, CStringRef) +FMT_VARIADIC_W(std::wstring, sprintf, WCStringRef) FMT_VARIADIC(int, printf, CStringRef) FMT_VARIADIC(int, fprintf, std::FILE *, CStringRef) + +#if FMT_USE_IOSTREAMS +/** + \rst + Prints formatted data to the stream *os*. + + **Example**:: + + print(cerr, "Don't {}!", "panic"); + \endrst + */ +void print(std::ostream &os, CStringRef format_str, ArgList args); +FMT_VARIADIC(void, print, std::ostream &, CStringRef) +#endif + +namespace internal { +template +inline bool is_name_start(Char c) { + return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c; } +// Parses an unsigned integer advancing s to the end of the parsed input. +// This function assumes that the first character of s is a digit. +template +int parse_nonnegative_int(const Char *&s) { + assert('0' <= *s && *s <= '9'); + unsigned value = 0; + do { + unsigned new_value = value * 10 + (*s++ - '0'); + // Check if value wrapped around. + if (new_value < value) { + value = (std::numeric_limits::max)(); + break; + } + value = new_value; + } while ('0' <= *s && *s <= '9'); + // Convert to unsigned to prevent a warning. + unsigned max_int = (std::numeric_limits::max)(); + if (value > max_int) + FMT_THROW(FormatError("number is too big")); + return value; +} + +inline void require_numeric_argument(const Arg &arg, char spec) { + if (arg.type > Arg::LAST_NUMERIC_TYPE) { + std::string message = + fmt::format("format specifier '{}' requires numeric argument", spec); + FMT_THROW(fmt::FormatError(message)); + } +} + +template +void check_sign(const Char *&s, const Arg &arg) { + char sign = static_cast(*s); + require_numeric_argument(arg, sign); + if (arg.type == Arg::UINT || arg.type == Arg::ULONG_LONG) { + FMT_THROW(FormatError(fmt::format( + "format specifier '{}' requires signed argument", sign))); + } + ++s; +} +} // namespace internal + +template +inline internal::Arg BasicFormatter::get_arg( + BasicStringRef arg_name, const char *&error) { + if (check_no_auto_index(error)) { + map_.init(args()); + const internal::Arg *arg = map_.find(arg_name); + if (arg) + return *arg; + error = "argument not found"; + } + return internal::Arg(); +} + +template +inline internal::Arg BasicFormatter::parse_arg_index(const Char *&s) { + const char *error = 0; + internal::Arg arg = *s < '0' || *s > '9' ? + next_arg(error) : get_arg(internal::parse_nonnegative_int(s), error); + if (error) { + FMT_THROW(FormatError( + *s != '}' && *s != ':' ? "invalid format string" : error)); + } + return arg; +} + +template +inline internal::Arg BasicFormatter::parse_arg_name(const Char *&s) { + assert(internal::is_name_start(*s)); + const Char *start = s; + Char c; + do { + c = *++s; + } while (internal::is_name_start(c) || ('0' <= c && c <= '9')); + const char *error = 0; + internal::Arg arg = get_arg(BasicStringRef(start, s - start), error); + if (error) + FMT_THROW(FormatError(error)); + return arg; +} + +// Should be after FormatSpec +template +const Char *BasicFormatter::format( + const Char *&format_str, const internal::Arg &arg) { + using internal::Arg; + const Char *s = format_str; + FormatSpec spec; + if (*s == ':') { + if (arg.type == Arg::CUSTOM) { + arg.custom.format(this, arg.custom.value, &s); + return s; + } + ++s; + // Parse fill and alignment. + if (Char c = *s) { + const Char *p = s + 1; + spec.align_ = ALIGN_DEFAULT; + do { + switch (*p) { + case '<': + spec.align_ = ALIGN_LEFT; + break; + case '>': + spec.align_ = ALIGN_RIGHT; + break; + case '=': + spec.align_ = ALIGN_NUMERIC; + break; + case '^': + spec.align_ = ALIGN_CENTER; + break; + } + if (spec.align_ != ALIGN_DEFAULT) { + if (p != s) { + if (c == '}') break; + if (c == '{') + FMT_THROW(FormatError("invalid fill character '{'")); + s += 2; + spec.fill_ = c; + } else ++s; + if (spec.align_ == ALIGN_NUMERIC) + require_numeric_argument(arg, '='); + break; + } + } while (--p >= s); + } + + // Parse sign. + switch (*s) { + case '+': + check_sign(s, arg); + spec.flags_ |= SIGN_FLAG | PLUS_FLAG; + break; + case '-': + check_sign(s, arg); + spec.flags_ |= MINUS_FLAG; + break; + case ' ': + check_sign(s, arg); + spec.flags_ |= SIGN_FLAG; + break; + } + + if (*s == '#') { + require_numeric_argument(arg, '#'); + spec.flags_ |= HASH_FLAG; + ++s; + } + + // Parse zero flag. + if (*s == '0') { + require_numeric_argument(arg, '0'); + spec.align_ = ALIGN_NUMERIC; + spec.fill_ = '0'; + ++s; + } + + // Parse width. + if ('0' <= *s && *s <= '9') { + spec.width_ = internal::parse_nonnegative_int(s); + } else if (*s == '{') { + ++s; + Arg width_arg = internal::is_name_start(*s) ? + parse_arg_name(s) : parse_arg_index(s); + if (*s++ != '}') + FMT_THROW(FormatError("invalid format string")); + ULongLong value = 0; + switch (width_arg.type) { + case Arg::INT: + if (width_arg.int_value < 0) + FMT_THROW(FormatError("negative width")); + value = width_arg.int_value; + break; + case Arg::UINT: + value = width_arg.uint_value; + break; + case Arg::LONG_LONG: + if (width_arg.long_long_value < 0) + FMT_THROW(FormatError("negative width")); + value = width_arg.long_long_value; + break; + case Arg::ULONG_LONG: + value = width_arg.ulong_long_value; + break; + default: + FMT_THROW(FormatError("width is not integer")); + } + if (value > (std::numeric_limits::max)()) + FMT_THROW(FormatError("number is too big")); + spec.width_ = static_cast(value); + } + + // Parse precision. + if (*s == '.') { + ++s; + spec.precision_ = 0; + if ('0' <= *s && *s <= '9') { + spec.precision_ = internal::parse_nonnegative_int(s); + } else if (*s == '{') { + ++s; + Arg precision_arg = internal::is_name_start(*s) ? + parse_arg_name(s) : parse_arg_index(s); + if (*s++ != '}') + FMT_THROW(FormatError("invalid format string")); + ULongLong value = 0; + switch (precision_arg.type) { + case Arg::INT: + if (precision_arg.int_value < 0) + FMT_THROW(FormatError("negative precision")); + value = precision_arg.int_value; + break; + case Arg::UINT: + value = precision_arg.uint_value; + break; + case Arg::LONG_LONG: + if (precision_arg.long_long_value < 0) + FMT_THROW(FormatError("negative precision")); + value = precision_arg.long_long_value; + break; + case Arg::ULONG_LONG: + value = precision_arg.ulong_long_value; + break; + default: + FMT_THROW(FormatError("precision is not integer")); + } + if (value > (std::numeric_limits::max)()) + FMT_THROW(FormatError("number is too big")); + spec.precision_ = static_cast(value); + } else { + FMT_THROW(FormatError("missing precision specifier")); + } + if (arg.type <= Arg::LAST_INTEGER_TYPE || arg.type == Arg::POINTER) { + FMT_THROW(FormatError( + fmt::format("precision not allowed in {} format specifier", + arg.type == Arg::POINTER ? "pointer" : "integer"))); + } + } + + // Parse type. + if (*s != '}' && *s) + spec.type_ = static_cast(*s++); + } + + if (*s++ != '}') + FMT_THROW(FormatError("missing '}' in format string")); + + // Format argument. + internal::BasicArgFormatter(*this, spec, s - 1).visit(arg); + return s; +} + +template +void BasicFormatter::format(BasicCStringRef format_str) { + const Char *s = format_str.c_str(); + const Char *start = s; + while (*s) { + Char c = *s++; + if (c != '{' && c != '}') continue; + if (*s == c) { + write(writer_, start, s); + start = ++s; + continue; + } + if (c == '}') + FMT_THROW(FormatError("unmatched '}' in format string")); + write(writer_, start, s - 1); + internal::Arg arg = internal::is_name_start(*s) ? + parse_arg_name(s) : parse_arg_index(s); + start = s = format(s, arg); + } + write(writer_, start, s); +} +} // namespace fmt + +#if FMT_USE_USER_DEFINED_LITERALS +namespace fmt { +namespace internal { + +template +struct UdlFormat { + const Char *str; + + template + auto operator()(Args && ... args) const + -> decltype(format(str, std::forward(args)...)) { + return format(str, std::forward(args)...); + } +}; + +template +struct UdlArg { + const Char *str; + + template + NamedArg operator=(T &&value) const { + return {str, std::forward(value)}; + } +}; + +} // namespace internal + +inline namespace literals { + +/** + \rst + C++11 literal equivalent of :func:`fmt::format`. + + **Example**:: + + using namespace fmt::literals; + std::string message = "The answer is {}"_format(42); + \endrst + */ +inline internal::UdlFormat +operator"" _format(const char *s, std::size_t) { return {s}; } +inline internal::UdlFormat +operator"" _format(const wchar_t *s, std::size_t) { return {s}; } + +/** + \rst + C++11 literal equivalent of :func:`fmt::arg`. + + **Example**:: + + using namespace fmt::literals; + print("Elapsed time: {s:.2f} seconds", "s"_a=1.23); + \endrst + */ +inline internal::UdlArg +operator"" _a(const char *s, std::size_t) { return {s}; } +inline internal::UdlArg +operator"" _a(const wchar_t *s, std::size_t) { return {s}; } + +} // inline namespace literals +} // namespace fmt +#endif // FMT_USE_USER_DEFINED_LITERALS + // Restore warnings. #if FMT_GCC_VERSION >= 406 # pragma GCC diagnostic pop #endif -#ifdef __clang__ +#if defined(__clang__) && !defined(__INTEL_COMPILER) # pragma clang diagnostic pop #endif diff --git a/dep/cppformat/posix.cc b/dep/cppformat/posix.cc index d36871f43a..756281a0eb 100644 --- a/dep/cppformat/posix.cc +++ b/dep/cppformat/posix.cc @@ -55,11 +55,14 @@ # ifdef __MINGW32__ # define _SH_DENYNO 0x40 -# undef fileno # endif #endif // _WIN32 +#ifdef fileno +# undef fileno +#endif + namespace { #ifdef _WIN32 // Return type of read and write functions. diff --git a/dep/cppformat/posix.h b/dep/cppformat/posix.h index 722690a8b3..88bcb4f557 100644 --- a/dep/cppformat/posix.h +++ b/dep/cppformat/posix.h @@ -69,7 +69,11 @@ # define FMT_UNUSED #endif -#if FMT_USE_STATIC_ASSERT || FMT_HAS_CPP_ATTRIBUTE(cxx_static_assert) || \ +#ifndef FMT_USE_STATIC_ASSERT +# define FMT_USE_STATIC_ASSERT 0 +#endif + +#if FMT_USE_STATIC_ASSERT || FMT_HAS_FEATURE(cxx_static_assert) || \ (FMT_GCC_VERSION >= 403 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1600 # define FMT_STATIC_ASSERT(cond, message) static_assert(cond, message) #else From cc685ac334335d9f6a25a7c1c739a905f919328f Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 8 Dec 2015 18:02:10 +0100 Subject: [PATCH 403/524] Core/Items: Fixed a possible crash with soulbound tradable items Closes #15700 (cherry picked from commit 094f505e404b5a4e4846657031f89ac44626a1f8) --- src/server/game/Entities/Player/Player.cpp | 27 +++++++--------------- src/server/game/Entities/Player/Player.h | 2 +- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index aa9cd9fa04..f4761931c4 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -13230,36 +13230,25 @@ void Player::TradeCancel(bool sendback) void Player::UpdateSoulboundTradeItems() { - if (m_itemSoulboundTradeable.empty()) - return; - // also checks for garbage data - for (ItemDurationList::iterator itr = m_itemSoulboundTradeable.begin(); itr != m_itemSoulboundTradeable.end();) + for (GuidUnorderedSet::iterator itr = m_itemSoulboundTradeable.begin(); itr != m_itemSoulboundTradeable.end();) { - ASSERT(*itr); - if ((*itr)->GetOwnerGUID() != GetGUID()) - { - m_itemSoulboundTradeable.erase(itr++); - continue; - } - if ((*itr)->CheckSoulboundTradeExpire()) - { - m_itemSoulboundTradeable.erase(itr++); - continue; - } - ++itr; + Item* item = GetItemByGuid(*itr); + if (!item || item->GetOwnerGUID() != GetGUID() || item->CheckSoulboundTradeExpire()) + itr = m_itemSoulboundTradeable.erase(itr); + else + ++itr; } } void Player::AddTradeableItem(Item* item) { - m_itemSoulboundTradeable.push_back(item); + m_itemSoulboundTradeable.insert(item->GetGUID()); } -/// @todo should never allow an item to be added to m_itemSoulboundTradeable twice void Player::RemoveTradeableItem(Item* item) { - m_itemSoulboundTradeable.remove(item); + m_itemSoulboundTradeable.erase(item->GetGUID()); } void Player::UpdateItemDuration(uint32 time, bool realtimeonly) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 8057a4ee54..7f72bff521 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2392,7 +2392,7 @@ class Player : public Unit, public GridObject EnchantDurationList m_enchantDuration; ItemDurationList m_itemDuration; - ItemDurationList m_itemSoulboundTradeable; + GuidUnorderedSet m_itemSoulboundTradeable; void ResetTimeSync(); void SendTimeSync(); From dca2c11081b0942f525bd683eb688bc4cae7d904 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 9 Dec 2015 16:51:21 +0100 Subject: [PATCH 404/524] DB/SAI: Fix Arena Treasure Chest spawning position Closes #15580 --- sql/updates/world/2015_12_09_00_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2015_12_09_00_world.sql diff --git a/sql/updates/world/2015_12_09_00_world.sql b/sql/updates/world/2015_12_09_00_world.sql new file mode 100644 index 0000000000..634530a62e --- /dev/null +++ b/sql/updates/world/2015_12_09_00_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `smart_scripts` SET `event_param1`=15, `comment`="Short John Mithril - On Waypoint 15 Reached - Say Line 1" WHERE `entryorguid`=14508 AND `source_Type`=0 AND `id` IN (2); +UPDATE `smart_scripts` SET `event_param1`=15, `comment`="Short John Mithril - On Waypoint 15 Reached - Cast 'Summon Pirate Booty (DND)'" WHERE `entryorguid`=14508 AND `source_Type`=0 AND `id` IN (3); \ No newline at end of file From 49e70f8eb4f3956b5261702a98a810a79af1d825 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 9 Dec 2015 16:53:04 +0100 Subject: [PATCH 405/524] DB: New line --- sql/updates/world/2015_12_09_00_world.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/updates/world/2015_12_09_00_world.sql b/sql/updates/world/2015_12_09_00_world.sql index 634530a62e..6ac4da3140 100644 --- a/sql/updates/world/2015_12_09_00_world.sql +++ b/sql/updates/world/2015_12_09_00_world.sql @@ -1,3 +1,3 @@ -- UPDATE `smart_scripts` SET `event_param1`=15, `comment`="Short John Mithril - On Waypoint 15 Reached - Say Line 1" WHERE `entryorguid`=14508 AND `source_Type`=0 AND `id` IN (2); -UPDATE `smart_scripts` SET `event_param1`=15, `comment`="Short John Mithril - On Waypoint 15 Reached - Cast 'Summon Pirate Booty (DND)'" WHERE `entryorguid`=14508 AND `source_Type`=0 AND `id` IN (3); \ No newline at end of file +UPDATE `smart_scripts` SET `event_param1`=15, `comment`="Short John Mithril - On Waypoint 15 Reached - Cast 'Summon Pirate Booty (DND)'" WHERE `entryorguid`=14508 AND `source_Type`=0 AND `id` IN (3); From c182ea010c090c8695afbda690b8f4db48c356a7 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 9 Dec 2015 17:12:49 +0100 Subject: [PATCH 406/524] DB/Creature: Grizzly Bear Closes #15965 --- sql/updates/world/2015_12_09_01_world.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 sql/updates/world/2015_12_09_01_world.sql diff --git a/sql/updates/world/2015_12_09_01_world.sql b/sql/updates/world/2015_12_09_01_world.sql new file mode 100644 index 0000000000..d27bc7ff49 --- /dev/null +++ b/sql/updates/world/2015_12_09_01_world.sql @@ -0,0 +1,13 @@ +-- +SET @ENTRY := 27131; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,1,0,100,0,10000,15000,10000,15000,5,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Grizzly Bear - Out of Combat - Play Emote 7"); + +SET @ENTRY := 2713100; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9; + +DELETE FROM `vehicle_template_accessory` WHERE `entry`=27131; +INSERT INTO `vehicle_template_accessory` (`entry`,`accessory_entry`,`seat_id`,`minion`,`description`) VALUES +(27131,27438,0,1, 'Grizzly Bear - Rainbow Trout'); From 4a532a71b655945f394fecfe4a2177b2618a6d59 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Mon, 7 Dec 2015 23:50:27 +0100 Subject: [PATCH 407/524] Core/Quest: code style: - Removed 11 useless for iterations (for each quest loaded) --- src/server/game/Quests/QuestDef.cpp | 78 ++++++++++++----------------- 1 file changed, 33 insertions(+), 45 deletions(-) diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index a3f662f2ad..1e4bb96303 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -22,6 +22,13 @@ Quest::Quest(Field* questRecord) { + EmoteOnIncomplete = 0; + EmoteOnComplete = 0; + _reqItemsCount = 0; + _reqCreatureOrGOcount = 0; + _rewItemsCount = 0; + _rewChoiceItemsCount = 0; + Id = questRecord[0].GetUInt32(); Method = questRecord[1].GetUInt8(); Level = questRecord[2].GetInt16(); @@ -54,12 +61,18 @@ Quest::Quest(Field* questRecord) { RewardItemId[i] = questRecord[27+i*2].GetUInt32(); RewardItemIdCount[i] = questRecord[28+i*2].GetUInt16(); + + if (RewardItemId[i]) + ++_rewItemsCount; } for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { RewardChoiceItemId[i] = questRecord[35+i*2].GetUInt32(); RewardChoiceItemCount[i] = questRecord[36+i*2].GetUInt16(); + + if (RewardChoiceItemId[i]) + ++_rewChoiceItemsCount; } for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i) @@ -80,65 +93,40 @@ Quest::Quest(Field* questRecord) CompletedText = questRecord[70].GetString(); for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) + { RequiredNpcOrGo[i] = questRecord[71+i].GetInt32(); - - for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) RequiredNpcOrGoCount[i] = questRecord[75+i].GetUInt16(); - - for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) - ItemDrop[i] = questRecord[79+i].GetUInt32(); - - for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) - ItemDropQuantity[i] = questRecord[83+i].GetUInt16(); - - for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) - RequiredItemId[i] = questRecord[87+i].GetUInt32(); - - for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) - RequiredItemCount[i] = questRecord[93+i].GetUInt16(); - - // int8 Unknown0 = questRecord[99].GetUInt8(); - - for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) ObjectiveText[i] = questRecord[100+i].GetString(); - EmoteOnIncomplete = 0; - EmoteOnComplete = 0; - - //int32 VerifiedBuild = questRecord[104].GetInt32(); - - _reqItemsCount = 0; - _reqCreatureOrGOcount = 0; - _rewItemsCount = 0; - _rewChoiceItemsCount = 0; - - for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) - if (RequiredItemId[i]) - ++_reqItemsCount; - - for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) if (RequiredNpcOrGo[i]) ++_reqCreatureOrGOcount; + } - for (int i = 0; i < QUEST_REWARDS_COUNT; ++i) - if (RewardItemId[i]) - ++_rewItemsCount; + for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) + { + ItemDrop[i] = questRecord[79+i].GetUInt32(); + ItemDropQuantity[i] = questRecord[83+i].GetUInt16(); + } - for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) - if (RewardChoiceItemId[i]) - ++_rewChoiceItemsCount; + for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i) + { + RequiredItemId[i] = questRecord[87+i].GetUInt32(); + RequiredItemCount[i] = questRecord[93+i].GetUInt16(); + + if (RequiredItemId[i]) + ++_reqItemsCount; + } + + // int8 Unknown0 = questRecord[99].GetUInt8(); + // int32 VerifiedBuild = questRecord[104].GetInt32(); for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) + { DetailsEmote[i] = 0; - - for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) DetailsEmoteDelay[i] = 0; - - for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) OfferRewardEmote[i] = 0; - - for (int i = 0; i < QUEST_EMOTE_COUNT; ++i) OfferRewardEmoteDelay[i] = 0; + } } void Quest::LoadQuestDetails(Field* fields) From e66eaddc24b51545715f3c2b324ff0eaae8a4b59 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 11 Dec 2015 19:19:22 +0100 Subject: [PATCH 408/524] DB/Quest: Return to the Earth Add a despawn action when the item is used Fix some creature_addon Add some missing spawns Add unit_flags immune to npc for dead drakes Closes #15984 --- sql/updates/world/2015_12_11_00_world.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 sql/updates/world/2015_12_11_00_world.sql diff --git a/sql/updates/world/2015_12_11_00_world.sql b/sql/updates/world/2015_12_11_00_world.sql new file mode 100644 index 0000000000..f1cdb12de0 --- /dev/null +++ b/sql/updates/world/2015_12_11_00_world.sql @@ -0,0 +1,19 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=27530 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 +(27530,0,1,0,8,0,100,1,49349,0,0,0,41,5000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Ruby Keeper - On Spellhit - Despawn'); + +DELETE FROM `creature_addon` WHERE `guid` IN (108202,108203,108328,108329, 108330); +INSERT INTO `creature_addon` (`guid`, `bytes1`, `auras`) VALUES +(108202,33554432 ,""),(108203,33554432 ,""),(108328,33554432 ,""),(108329,33554432 ,""),(108330,33554432 ,""); +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=27530; +UPDATE `creature` SET `MovementType`=1, `spawndist`=10 WHERE `guid` IN (108202,108203,108328,108329, 108330); + +SET @GUID := 48254; +DELETE FROM `creature` WHERE `guid` IN (@GUID,@GUID+1,@GUID+2,@GUID+3); +INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`, `unit_flags`, `dynamicflags`) VALUES +(@GUID,27530,530,1,1,24137,0,3690.58, 1034.33, 55.7121, 1.43117,300,0,0,102820,0,0,537133568,32), +(@GUID+1,27530,530,1,1,24137,0,3690.58, 1034.33, 55.7121, 1.43117,300,0,0,102820,0,0,537133568,32), +(@GUID+2,27530,530,1,1,24137,0,3722.78, 872.282, 56.4471, 3.56587,300,0,0,102820,0,0,537133568,32), +(@GUID+3,27530,530,1,1,24137,0,3678.09, 938.621, 57.2201, 1.50971,300,0,0,102820,0,0,537133568,32); +UPDATE `creature` SET `unit_flags`=537133568 WHERE `id`=27530 AND `dynamicflags`=32; From 0170b79ae9690bd7c853dc78224f887efe16fc19 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 11 Dec 2015 19:32:26 +0100 Subject: [PATCH 409/524] DB: Fix a Typo --- sql/updates/world/2015_12_11_00_world.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sql/updates/world/2015_12_11_00_world.sql b/sql/updates/world/2015_12_11_00_world.sql index f1cdb12de0..dc5fd8c40b 100644 --- a/sql/updates/world/2015_12_11_00_world.sql +++ b/sql/updates/world/2015_12_11_00_world.sql @@ -12,8 +12,8 @@ UPDATE `creature` SET `MovementType`=1, `spawndist`=10 WHERE `guid` IN (108202,1 SET @GUID := 48254; DELETE FROM `creature` WHERE `guid` IN (@GUID,@GUID+1,@GUID+2,@GUID+3); INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`, `unit_flags`, `dynamicflags`) VALUES -(@GUID,27530,530,1,1,24137,0,3690.58, 1034.33, 55.7121, 1.43117,300,0,0,102820,0,0,537133568,32), -(@GUID+1,27530,530,1,1,24137,0,3690.58, 1034.33, 55.7121, 1.43117,300,0,0,102820,0,0,537133568,32), -(@GUID+2,27530,530,1,1,24137,0,3722.78, 872.282, 56.4471, 3.56587,300,0,0,102820,0,0,537133568,32), -(@GUID+3,27530,530,1,1,24137,0,3678.09, 938.621, 57.2201, 1.50971,300,0,0,102820,0,0,537133568,32); +(@GUID,27530,571,1,1,24137,0,3690.58, 1034.33, 55.7121, 1.43117,300,0,0,102820,0,0,537133568,32), +(@GUID+1,27530,571,1,1,24137,0,3690.58, 1034.33, 55.7121, 1.43117,300,0,0,102820,0,0,537133568,32), +(@GUID+2,27530,571,1,1,24137,0,3722.78, 872.282, 56.4471, 3.56587,300,0,0,102820,0,0,537133568,32), +(@GUID+3,27530,571,1,1,24137,0,3678.09, 938.621, 57.2201, 1.50971,300,0,0,102820,0,0,537133568,32); UPDATE `creature` SET `unit_flags`=537133568 WHERE `id`=27530 AND `dynamicflags`=32; From f72795240aacc184a327c865c11ff23d8147b3a7 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 5 Dec 2015 18:47:35 +0100 Subject: [PATCH 410/524] Core/Creatures: Implemented automatic detection of trigger models, their order in creature_template no longer matters (cherry picked from commit c488fb219ab080031488593a0b86ac785a7d2cae) --- src/server/game/DataStores/DBCStructure.h | 2 +- src/server/game/DataStores/DBCfmt.h | 2 +- .../game/Entities/Creature/Creature.cpp | 42 +++++++++++++++++++ src/server/game/Entities/Creature/Creature.h | 3 ++ src/server/game/Entities/Unit/Unit.cpp | 16 +------ src/server/game/Globals/ObjectMgr.cpp | 28 +++++++++++-- 6 files changed, 72 insertions(+), 21 deletions(-) diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index dc4ad55d9c..a419864a19 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -809,7 +809,7 @@ struct CreatureModelDataEntry { uint32 Id; uint32 Flags; - //char* ModelPath[16] + char* ModelPath; //uint32 Unk1; float Scale; // Used in calculation of unit collision data //int32 Unk2 diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index c75c0fff62..e81db5924f 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -42,7 +42,7 @@ char const CinematicSequencesEntryfmt[] = "nxxxxxxxxx"; char const CreatureDisplayInfofmt[] = "nixifxxxxxxxxxxx"; char const CreatureDisplayInfoExtrafmt[] = "diixxxxxxxxxxxxxxxxxx"; char const CreatureFamilyfmt[] = "nfifiiiiixssssssssssssssssxx"; -char const CreatureModelDatafmt[] = "nixxfxxxxxxxxxxffxxxxxxxxxxx"; +char const CreatureModelDatafmt[] = "nisxfxxxxxxxxxxffxxxxxxxxxxx"; char const CreatureSpellDatafmt[] = "niiiixxxx"; char const CreatureTypefmt[] = "nxxxxxxxxxxxxxxxxxx"; char const CurrencyTypesfmt[] = "xnxi"; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index ea10ce7988..6ba8fb44e0 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -103,6 +103,48 @@ uint32 CreatureTemplate::GetFirstValidModelId() const return 0; } +uint32 CreatureTemplate::GetFirstInvisibleModel() const +{ + CreatureModelInfo const* modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid1); + if (modelInfo && modelInfo->is_trigger) + return Modelid1; + + modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid2); + if (modelInfo && modelInfo->is_trigger) + return Modelid2; + + modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid3); + if (modelInfo && modelInfo->is_trigger) + return Modelid3; + + modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid4); + if (modelInfo && modelInfo->is_trigger) + return Modelid4; + + return 11686; +} + +uint32 CreatureTemplate::GetFirstVisibleModel() const +{ + CreatureModelInfo const* modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid1); + if (modelInfo && !modelInfo->is_trigger) + return Modelid1; + + modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid2); + if (modelInfo && !modelInfo->is_trigger) + return Modelid2; + + modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid3); + if (modelInfo && !modelInfo->is_trigger) + return Modelid3; + + modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid4); + if (modelInfo && !modelInfo->is_trigger) + return Modelid4; + + return 17519; +} + bool AssistDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) { if (Unit* victim = ObjectAccessor::GetUnit(m_owner, m_victim)) diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 9a41c8570e..966944e099 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -137,6 +137,8 @@ struct CreatureTemplate uint32 ScriptID; uint32 GetRandomValidModelId() const; uint32 GetFirstValidModelId() const; + uint32 GetFirstInvisibleModel() const; + uint32 GetFirstVisibleModel() const; // helpers SkillType GetRequiredLootSkill() const @@ -278,6 +280,7 @@ struct CreatureModelInfo float combat_reach; uint8 gender; uint32 modelid_other_gender; + bool is_trigger; }; // Benchmarked: Faster than std::map (insert/find) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 277ead92df..27f6d5f614 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -17791,22 +17791,8 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) } if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) - { if (target->IsGameMaster()) - { - if (cinfo->Modelid1) - displayId = cinfo->Modelid1; // Modelid1 is a visible model for gms - else - displayId = 17519; // world visible trigger's model - } - else - { - if (cinfo->Modelid2) - displayId = cinfo->Modelid2; // Modelid2 is an invisible model for players - else - displayId = 11686; // world invisible trigger's model - } - } + displayId = cinfo->GetFirstVisibleModel(); } fieldBuffer << uint32(displayId); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index b2be5c49b9..d8e5852b85 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1236,7 +1236,11 @@ uint32 ObjectMgr::ChooseDisplayId(CreatureTemplate const* cinfo, CreatureData co if (data && data->displayid) return data->displayid; - return cinfo->GetRandomValidModelId(); + if (!(cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER)) + return cinfo->GetRandomValidModelId(); + + // Triggers by default receive the invisible model + return cinfo->GetFirstInvisibleModel(); } void ObjectMgr::ChooseCreatureFlags(const CreatureTemplate* cinfo, uint32& npcflag, uint32& unit_flags, uint32& dynamicflags, const CreatureData* data /*= NULL*/) @@ -1301,6 +1305,12 @@ void ObjectMgr::LoadCreatureModelInfo() Field* fields = result->Fetch(); uint32 modelId = fields[0].GetUInt32(); + CreatureDisplayInfoEntry const* creatureDisplay = sCreatureDisplayInfoStore.LookupEntry(modelId); + if (!creatureDisplay) + { + TC_LOG_ERROR("sql.sql", "Table `creature_model_info` has model for nonexistent display id (%u).", modelId); + continue; + } CreatureModelInfo& modelInfo = _creatureModelStore[modelId]; @@ -1308,12 +1318,10 @@ void ObjectMgr::LoadCreatureModelInfo() modelInfo.combat_reach = fields[2].GetFloat(); modelInfo.gender = fields[3].GetUInt8(); modelInfo.modelid_other_gender = fields[4].GetUInt32(); + modelInfo.is_trigger = false; // Checks - if (!sCreatureDisplayInfoStore.LookupEntry(modelId)) - TC_LOG_ERROR("sql.sql", "Table `creature_model_info` has model for nonexistent display id (%u).", modelId); - if (modelInfo.gender > GENDER_NONE) { TC_LOG_ERROR("sql.sql", "Table `creature_model_info` has wrong gender (%u) for display id (%u).", uint32(modelInfo.gender), modelId); @@ -1329,6 +1337,18 @@ void ObjectMgr::LoadCreatureModelInfo() if (modelInfo.combat_reach < 0.1f) modelInfo.combat_reach = DEFAULT_COMBAT_REACH; + if (CreatureModelDataEntry const* modelData = sCreatureModelDataStore.LookupEntry(creatureDisplay->ModelId)) + { + for (uint32 i = 0; i < 5; ++i) + { + if (strstr(modelData->ModelPath, "InvisibleStalker")) + { + modelInfo.is_trigger = true; + break; + } + } + } + ++count; } while (result->NextRow()); From b3e718dccac3f716f3b57c44e9e11ba886b1208f Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 12 Dec 2015 00:06:59 +0100 Subject: [PATCH 411/524] Removed unneeded loop from previous commit, copypaste fail from 6.x --- src/server/game/Globals/ObjectMgr.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index d8e5852b85..6f5368ed15 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1338,16 +1338,7 @@ void ObjectMgr::LoadCreatureModelInfo() modelInfo.combat_reach = DEFAULT_COMBAT_REACH; if (CreatureModelDataEntry const* modelData = sCreatureModelDataStore.LookupEntry(creatureDisplay->ModelId)) - { - for (uint32 i = 0; i < 5; ++i) - { - if (strstr(modelData->ModelPath, "InvisibleStalker")) - { - modelInfo.is_trigger = true; - break; - } - } - } + modelInfo.is_trigger = strstr(modelData->ModelPath, "InvisibleStalker") != nullptr; ++count; } From 677f281b9a81d7a511896bf201e32f4b7131567b Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 12 Dec 2015 17:52:16 +0100 Subject: [PATCH 412/524] Scripts/Pets: Fixed non pch build --- src/server/scripts/Pet/pet_mage.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 7e64fbfd27..4890e4b47f 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -25,6 +25,7 @@ #include "CombatAI.h" #include "Pet.h" #include "PetAI.h" +#include "GridNotifiers.h" enum MageSpells { From 47d54ce8594bec7ff01bf0d746bc7975924ee471 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 12 Dec 2015 17:56:03 +0100 Subject: [PATCH 413/524] Scripts/Pets: Fixed non pch build part 2 --- src/server/scripts/Pet/pet_mage.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 4890e4b47f..42f0caec97 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -25,6 +25,7 @@ #include "CombatAI.h" #include "Pet.h" #include "PetAI.h" +#include "Cell.h" #include "GridNotifiers.h" enum MageSpells @@ -107,10 +108,10 @@ class npc_pet_mage_mirror_image : public CreatureScript } // Prioritize units with threat referenced to owner if (highestThreat > 0.0f && highestThreatUnit) - me->Attack(highestThreatUnit, false); + me->Attack(highestThreatUnit, false); // If there is no such target, try to attack nearest hostile unit if such exists else if (nearestPlayer) - me->Attack(nearestPlayer, false); + me->Attack(nearestPlayer, false); } bool IsInThreatList(Unit* target) From 54424aff3051bdc2a05d44cbd56adf6f47b98229 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 12 Dec 2015 18:00:22 +0100 Subject: [PATCH 414/524] Scripts/Pets: Fixed non pch build part 3 ... --- src/server/scripts/Pet/pet_mage.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 42f0caec97..14d2687c29 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -26,7 +26,9 @@ #include "Pet.h" #include "PetAI.h" #include "Cell.h" +#include "CellImpl.h" #include "GridNotifiers.h" +#include "GridNotifiersImpl.h" enum MageSpells { @@ -108,10 +110,10 @@ class npc_pet_mage_mirror_image : public CreatureScript } // Prioritize units with threat referenced to owner if (highestThreat > 0.0f && highestThreatUnit) - me->Attack(highestThreatUnit, false); + me->Attack(highestThreatUnit, false); // If there is no such target, try to attack nearest hostile unit if such exists else if (nearestPlayer) - me->Attack(nearestPlayer, false); + me->Attack(nearestPlayer, false); } bool IsInThreatList(Unit* target) From 0ac442f19fcfa8c39775c5ae06bba8f3bcbd0407 Mon Sep 17 00:00:00 2001 From: pete318 Date: Fri, 2 Oct 2015 03:20:42 +0100 Subject: [PATCH 415/524] Improved Auction house deposit handling. Including the weird quirks. Changes: * Deposit caculated according to same rule as client. (detailed below). Should always match client deposit now * Deposit for multiple auctions now only collected once. Deferred calculation of deposit until all auctions listed. Deposit calculation is as follows: Base deposit calculation = MSV x 15/75% (depending on AH). However this is not rounded. Case to int is used (so always round down) The remainder is held in a float. The base is then multiplied by number of items, and the time multiplier (x2 for 24 hour, x4 for 48 hour) The nearest (no of items or lower) no of items when multiplied by the remainder that creates a whole number is then multiplied by the time multiplier (x1/x2/x4) and then added to deposit. Example: Item sell price 1s25. Deposit 18.75c (15% of 1s25). So base deposit = 18, remainder 0.75. Time 24h (x2) Item count 1 = 36c. Remainder = 0.75 (n) Min = 1s. Deposit 1s Item sell price 1s25. Deposit 18.75c (15% of 1s25). So base deposit = 18, remainder 0.75. Time 24h (x2) Item count 2 = 72c. Remainder = 1.50 (n) Min = 1s. Deposit 1s Item sell price 1s25. Deposit 18.75c (15% of 1s25). So base deposit = 18, remainder 0.75. Time 24h (x2) Item count 3 = 108c. Remainder = 2.25 (n) Min = 1s. Deposit 1s08c Item sell price 1s25. Deposit 18.75c (15% of 1s25). So base deposit = 18, remainder 0.75. Time 24h (x2) Item count 4 = 144c. Remainder = 3.00 (n) Min = 1s. Deposit 1s50c (144c + (3c * 2)) Horrible kludge, to re-create a very weird deposit method. Closes #15674 (PR) Closes #15643 (Issue) --- .../game/AuctionHouse/AuctionHouseMgr.cpp | 123 +++++++++++++++++- .../game/AuctionHouse/AuctionHouseMgr.h | 11 +- src/server/game/Entities/Player/Player.cpp | 1 + .../game/Handlers/AuctionHouseHandler.cpp | 7 +- src/server/game/World/World.cpp | 8 ++ src/server/game/World/World.h | 1 + 6 files changed, 147 insertions(+), 4 deletions(-) diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 768def2ff4..20d30704c1 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -83,12 +83,23 @@ uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 float multiplier = CalculatePct(float(entry->depositPercent), 3); uint32 timeHr = (((time / 60) / 60) / 12); - uint32 deposit = uint32(((multiplier * MSV * count / 3) * timeHr * 3) * sWorld->getRate(RATE_AUCTION_DEPOSIT)); + uint32 deposit = uint32(MSV * multiplier * sWorld->getRate(RATE_AUCTION_DEPOSIT)); + float remainderbase = float(MSV * multiplier * sWorld->getRate(RATE_AUCTION_DEPOSIT)) - deposit; + + deposit *= timeHr * count; + + int i = count; + while (i > 0 && (remainderbase * i) != uint32(remainderbase * i)) + i--; + + if (i) + deposit += remainderbase * i * timeHr; TC_LOG_DEBUG("auctionHouse", "MSV: %u", MSV); TC_LOG_DEBUG("auctionHouse", "Items: %u", count); TC_LOG_DEBUG("auctionHouse", "Multiplier: %f", multiplier); TC_LOG_DEBUG("auctionHouse", "Deposit: %u", deposit); + TC_LOG_DEBUG("auctionHouse", "Deposit rm: %f", remainderbase * count); if (deposit < AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT)) return AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT); @@ -389,6 +400,116 @@ bool AuctionHouseMgr::RemoveAItem(ObjectGuid::LowType id, bool deleteItem) return true; } +void AuctionHouseMgr::PendingAuctionAdd(Player* player, AuctionEntry* aEntry) +{ + PlayerAuctions* thisAH; + auto itr = pendingAuctionMap.find(player->GetGUID()); + if (itr != pendingAuctionMap.end()) + thisAH = itr->second.first; + else + { + thisAH = new PlayerAuctions; + pendingAuctionMap[player->GetGUID()] = AuctionPair(thisAH, 0); + } + thisAH->push_back(aEntry); +} + +uint32 AuctionHouseMgr::PendingAuctionCount(const Player* player) const +{ + auto const itr = pendingAuctionMap.find(player->GetGUID()); + if (itr != pendingAuctionMap.end()) + return itr->second.first->size(); + + return 0; +} + +void AuctionHouseMgr::PendingAuctionProcess(Player* player) +{ + auto iterMap = pendingAuctionMap.find(player->GetGUID()); + if (iterMap == pendingAuctionMap.end()) + return; + + PlayerAuctions* thisAH = iterMap->second.first; + + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + uint32 totalItems = 0; + for (auto itrAH = thisAH->begin(); itrAH != thisAH->end(); ++itrAH) + { + AuctionEntry* AH = (*itrAH); + totalItems += AH->itemCount; + } + + uint32 totaldeposit = 0; + auto itr = (*thisAH->begin()); + + if (Item* item = GetAItem(itr->itemGUIDLow)) + totaldeposit = GetAuctionDeposit(itr->auctionHouseEntry, itr->etime, item, totalItems); + + uint32 depositremain = totaldeposit; + for (auto itr = thisAH->begin(); itr != thisAH->end(); ++itr) + { + AuctionEntry* AH = (*itr); + + if (next(itr) == thisAH->end()) + AH->deposit = depositremain; + else + { + AH->deposit = totaldeposit / thisAH->size(); + depositremain -= AH->deposit; + } + + AH->DeleteFromDB(trans); + AH->SaveToDB(trans); + } + + CharacterDatabase.CommitTransaction(trans); + pendingAuctionMap.erase(player->GetGUID()); + delete thisAH; + player->ModifyMoney(-int32(totaldeposit)); +} + +void AuctionHouseMgr::UpdatePendingAuctions() +{ + for (auto itr = pendingAuctionMap.begin(); itr != pendingAuctionMap.end();) + { + ObjectGuid playerGUID = itr->first; + if (Player* player = ObjectAccessor::FindConnectedPlayer(playerGUID)) + { + // Check if there were auctions since last update process if not + if (PendingAuctionCount(player) == itr->second.second) + { + ++itr; + PendingAuctionProcess(player); + } + else + { + ++itr; + pendingAuctionMap[playerGUID].second = PendingAuctionCount(player); + } + } + else + { + // Expire any auctions that we couldn't get a deposit for + TC_LOG_WARN("auctionHouse", "Player %s was offline, unable to retrieve deposit!", playerGUID.ToString().c_str()); + PlayerAuctions* thisAH = itr->second.first; + ++itr; + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + for (auto AHitr = thisAH->begin(); AHitr != thisAH->end();) + { + AuctionEntry* AH = (*AHitr); + ++AHitr; + AH->expire_time = time(NULL); + AH->DeleteFromDB(trans); + AH->SaveToDB(trans); + } + CharacterDatabase.CommitTransaction(trans); + pendingAuctionMap.erase(playerGUID); + delete thisAH; + } + } +} + void AuctionHouseMgr::Update() { mHordeAuctions.Update(); diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index 45cdba361f..1f885837a4 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -22,6 +22,7 @@ #include "Common.h" #include "DatabaseEnv.h" #include "DBCStructure.h" +#include class Item; class Player; @@ -82,6 +83,7 @@ struct AuctionEntry time_t expire_time; ObjectGuid::LowType bidder; uint32 deposit; //deposit can be calculated only when creating auction + uint32 etime; AuctionHouseEntry const* auctionHouseEntry; // in AuctionHouse.dbc // helpers @@ -151,6 +153,8 @@ class AuctionHouseMgr } typedef std::unordered_map ItemMap; + typedef std::vector PlayerAuctions; + typedef std::pair AuctionPair; AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId); AuctionHouseObject* GetAuctionsMapByHouseId(uint8 auctionHouseId); @@ -184,7 +188,10 @@ class AuctionHouseMgr void AddAItem(Item* it); bool RemoveAItem(ObjectGuid::LowType id, bool deleteItem = false); - + void PendingAuctionAdd(Player* player, AuctionEntry* aEntry); + uint32 PendingAuctionCount(const Player* player) const; + void PendingAuctionProcess(Player* player); + void UpdatePendingAuctions(); void Update(); private: @@ -193,6 +200,8 @@ class AuctionHouseMgr AuctionHouseObject mAllianceAuctions; AuctionHouseObject mNeutralAuctions; + std::map pendingAuctionMap; + ItemMap mAitems; }; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a8f015a874..4804aece41 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1535,6 +1535,7 @@ void Player::Update(uint32 p_time) //because we don't want player's ghost teleported from graveyard if (IsHasDelayedTeleport() && IsAlive()) TeleportTo(m_teleport_dest, m_teleport_options); + } void Player::setDeathState(DeathState s) diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 8ecf86680c..a9680ff69b 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -303,18 +303,21 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) AH->buyout = buyout; AH->expire_time = time(NULL) + auctionTime; AH->deposit = deposit; + AH->etime = etime; AH->auctionHouseEntry = auctionHouseEntry; TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", _player->GetName().c_str(), _player->GetGUID().GetCounter(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUID().GetCounter(), item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); sAuctionMgr->AddAItem(item); auctionHouse->AddAuction(AH); + sAuctionMgr->PendingAuctionAdd(_player, AH); _player->MoveItemFromInventory(item->GetBagSlot(), item->GetSlot(), true); SQLTransaction trans = CharacterDatabase.BeginTransaction(); item->DeleteFromInventoryDB(trans); item->SaveToDB(trans); + AH->SaveToDB(trans); _player->SaveInventoryAndGoldToDB(trans); CharacterDatabase.CommitTransaction(trans); @@ -351,12 +354,14 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) AH->buyout = buyout; AH->expire_time = time(NULL) + auctionTime; AH->deposit = deposit; + AH->etime = etime; AH->auctionHouseEntry = auctionHouseEntry; TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", _player->GetName().c_str(), _player->GetGUID().GetCounter(), newItem->GetTemplate()->Name1.c_str(), newItem->GetEntry(), newItem->GetGUID().GetCounter(), newItem->GetCount(), bid, buyout, auctionTime, AH->GetHouseId()); sAuctionMgr->AddAItem(newItem); auctionHouse->AddAuction(AH); + sAuctionMgr->PendingAuctionAdd(_player, AH); for (uint32 j = 0; j < itemsCount; ++j) { @@ -396,8 +401,6 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData) GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION, 1); } - - _player->ModifyMoney(-int32(deposit)); } //this function is called when client bids or buys out auction diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index c41caa8f95..bcfd105f3c 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1782,6 +1782,7 @@ void World::SetInitialWorldSettings() m_timers[WUPDATE_WEATHERS].SetInterval(1*IN_MILLISECONDS); m_timers[WUPDATE_AUCTIONS].SetInterval(MINUTE*IN_MILLISECONDS); + m_timers[WUPDATE_AUCTIONS_PENDING].SetInterval(250); m_timers[WUPDATE_UPTIME].SetInterval(m_int_configs[CONFIG_UPTIME_UPDATE]*MINUTE*IN_MILLISECONDS); //Update "uptime" table based on configuration entry in minutes. m_timers[WUPDATE_CORPSES].SetInterval(20 * MINUTE * IN_MILLISECONDS); @@ -2052,6 +2053,13 @@ void World::Update(uint32 diff) sAuctionMgr->Update(); } + if (m_timers[WUPDATE_AUCTIONS_PENDING].Passed()) + { + m_timers[WUPDATE_AUCTIONS_PENDING].Reset(); + + sAuctionMgr->UpdatePendingAuctions(); + } + ///
  • Handle AHBot operations if (m_timers[WUPDATE_AHBOT].Passed()) { diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 133ac3f238..c76b11276c 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -69,6 +69,7 @@ enum ShutdownExitCode enum WorldTimers { WUPDATE_AUCTIONS, + WUPDATE_AUCTIONS_PENDING, WUPDATE_WEATHERS, WUPDATE_UPTIME, WUPDATE_CORPSES, From 3d1614b622a6b7b0a827b5fad45516f31cb605cd Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Mon, 14 Dec 2015 01:54:40 +0100 Subject: [PATCH 416/524] Core/Arena: create more arena configs - made rating modifiers configurable - made arena points rate configurable --- src/server/game/Battlegrounds/ArenaTeam.cpp | 22 +++++++---- src/server/game/World/World.cpp | 5 +++ src/server/game/World/World.h | 5 +++ src/server/worldserver/worldserver.conf.dist | 40 ++++++++++++++++++++ 4 files changed, 65 insertions(+), 7 deletions(-) diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 7806e0b343..423273c990 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -612,6 +612,8 @@ uint32 ArenaTeam::GetPoints(uint32 memberRating) else if (Type == ARENA_TEAM_3v3) points *= 0.88f; + points *= sWorld->getRate(RATE_ARENA_POINTS); + return (uint32) points; } @@ -673,7 +675,7 @@ int32 ArenaTeam::GetMatchmakerRatingMod(uint32 ownRating, uint32 opponentRating, */ // Real rating modification - mod *= 24.0f; + mod *= sWorld->getFloatConfig(CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER); return (int32)ceil(mod); } @@ -683,21 +685,27 @@ int32 ArenaTeam::GetRatingMod(uint32 ownRating, uint32 opponentRating, bool won // 'Chance' calculation - to beat the opponent // This is a simulation. Not much info on how it really works float chance = GetChanceAgainst(ownRating, opponentRating); - float won_mod = (won) ? 1.0f : 0.0f; // Calculate the rating modification float mod; /// @todo Replace this hack with using the confidence factor (limiting the factor to 2.0f) - if (won && ownRating < 1300) + if (won) { - if (ownRating < 1000) - mod = 48.0f * (won_mod - chance); + if (ownRating < 1300) + { + float win_rating_modifier1 = sWorld->getFloatConfig(CONFIG_ARENA_WIN_RATING_MODIFIER_1); + + if (ownRating < 1000) + mod = win_rating_modifier1 * (1.0f - chance); + else + mod = ((win_rating_modifier1 / 2.0f) + ((win_rating_modifier1 / 2.0f) * (1300.0f - float(ownRating)) / 300.0f)) * (1.0f - chance); + } else - mod = (24.0f + (24.0f * (1300.0f - float(ownRating)) / 300.0f)) * (won_mod - chance); + mod = sWorld->getFloatConfig(CONFIG_ARENA_WIN_RATING_MODIFIER_2) * (1.0f - chance); } else - mod = 24.0f * (won_mod - chance); + mod = sWorld->getFloatConfig(CONFIG_ARENA_LOSE_RATING_MODIFIER) * (-chance); return (int32)ceil(mod); } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index c41caa8f95..93adc30f9c 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -483,6 +483,7 @@ void World::LoadConfigSettings(bool reload) rate_values[RATE_AUCTION_DEPOSIT] = sConfigMgr->GetFloatDefault("Rate.Auction.Deposit", 1.0f); rate_values[RATE_AUCTION_CUT] = sConfigMgr->GetFloatDefault("Rate.Auction.Cut", 1.0f); rate_values[RATE_HONOR] = sConfigMgr->GetFloatDefault("Rate.Honor", 1.0f); + rate_values[RATE_ARENA_POINTS] = sConfigMgr->GetFloatDefault("Rate.ArenaPoints", 1.0f); rate_values[RATE_INSTANCE_RESET_TIME] = sConfigMgr->GetFloatDefault("Rate.InstanceResetTime", 1.0f); rate_values[RATE_TALENT] = sConfigMgr->GetFloatDefault("Rate.Talent", 1.0f); if (rate_values[RATE_TALENT] < 0.0f) @@ -1046,6 +1047,10 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_ARENA_START_MATCHMAKER_RATING] = sConfigMgr->GetIntDefault ("Arena.ArenaStartMatchmakerRating", 1500); m_bool_configs[CONFIG_ARENA_SEASON_IN_PROGRESS] = sConfigMgr->GetBoolDefault("Arena.ArenaSeason.InProgress", true); m_bool_configs[CONFIG_ARENA_LOG_EXTENDED_INFO] = sConfigMgr->GetBoolDefault("ArenaLog.ExtendedInfo", false); + m_float_configs[CONFIG_ARENA_WIN_RATING_MODIFIER_1] = sConfigMgr->GetFloatDefault("Arena.ArenaWinRatingModifier1", 48.0f); + m_float_configs[CONFIG_ARENA_WIN_RATING_MODIFIER_2] = sConfigMgr->GetFloatDefault("Arena.ArenaWinRatingModifier2", 24.0f); + m_float_configs[CONFIG_ARENA_LOSE_RATING_MODIFIER] = sConfigMgr->GetFloatDefault("Arena.ArenaLoseRatingModifier", 24.0f); + m_float_configs[CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER] = sConfigMgr->GetFloatDefault("Arena.ArenaMatchmakerRatingModifier", 24.0f); m_bool_configs[CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN] = sConfigMgr->GetBoolDefault("OffhandCheckAtSpellUnlearn", true); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 133ac3f238..ed5e218b08 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -185,6 +185,10 @@ enum WorldFloatConfigs CONFIG_STATS_LIMITS_PARRY, CONFIG_STATS_LIMITS_BLOCK, CONFIG_STATS_LIMITS_CRIT, + CONFIG_ARENA_WIN_RATING_MODIFIER_1, + CONFIG_ARENA_WIN_RATING_MODIFIER_2, + CONFIG_ARENA_LOSE_RATING_MODIFIER, + CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER, FLOAT_CONFIG_VALUE_COUNT }; @@ -409,6 +413,7 @@ enum Rates RATE_AUCTION_DEPOSIT, RATE_AUCTION_CUT, RATE_HONOR, + RATE_ARENA_POINTS, RATE_TALENT, RATE_CORPSE_DECAY_LOOTED, RATE_INSTANCE_RESET_TIME, diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 8619a86499..840b819fe9 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1938,6 +1938,13 @@ Rate.Auction.Cut = 1 Rate.Honor = 1 +# +# Rate.ArenaPoints +# Description: Arena points gain rate. +# Default: 1 + +Rate.ArenaPoints = 1 + # # Rate.Talent # Description: Talent point rate. @@ -2430,6 +2437,39 @@ Arena.ArenaStartPersonalRating = 0 Arena.ArenaStartMatchmakerRating = 1500 +# +# Arena.ArenaWinRatingModifier1 +# Description: Modifier of rating addition when winner team rating is less than 1300 +# be aware that from 1000 to 1300 it gradually decreases automatically down to the half of it +# (increasing this value will give more rating) +# Default: 48 + +Arena.ArenaWinRatingModifier1 = 48 + +# +# Arena.ArenaWinRatingModifier2 +# Description: Modifier of rating addition when winner team rating is equal or more than 1300 +# (increasing this value will give more rating) +# Default: 24 + +Arena.ArenaWinRatingModifier2 = 24 + + +# +# Arena.ArenaLoseRatingModifier +# Description: Modifier of rating subtraction for loser team +# (increasing this value will subtract more rating) +# Default: 24 + +Arena.ArenaLoseRatingModifier = 24 + +# +# Arena.ArenaMatchmakerRatingModifier +# Description: Modifier of matchmaker rating +# Default: 24 + +Arena.ArenaMatchmakerRatingModifier = 24 + # # ArenaLog.ExtendedInfo # Description: Include extended info to ArenaLogFile for each player after rated arena From 54d583b0fbb7ecfb97a731be21218bbb72d80b4d Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 29 Nov 2015 17:19:51 +0100 Subject: [PATCH 417/524] Scripts/Naxxramas: Instructor Razuvious rework: - Fix missing yells - Rearrange existing yells to match live - Sniffed positions for adds - Improve add respawn handling - Make adds not fight the player for control (don't use their spells on their own etc.) - Update adds' hotbar keys to match live (this will affect other creatures with nonsequential possess keys as well) - Fix adds' movement when mind controlled, they no longer move automatically when right-clicking (this affects all mind-controlled creatures) - Blizzlike timers --- .../world/2015_11_29_razuvious_world.sql | 32 +++ src/server/game/Spells/SpellMgr.cpp | 1 + .../Northrend/Naxxramas/boss_razuvious.cpp | 196 +++++++++++++----- .../Naxxramas/instance_naxxramas.cpp | 8 +- .../scripts/Northrend/Naxxramas/naxxramas.h | 2 + 5 files changed, 190 insertions(+), 49 deletions(-) create mode 100644 sql/updates/world/2015_11_29_razuvious_world.sql diff --git a/sql/updates/world/2015_11_29_razuvious_world.sql b/sql/updates/world/2015_11_29_razuvious_world.sql new file mode 100644 index 0000000000..85faf4448e --- /dev/null +++ b/sql/updates/world/2015_11_29_razuvious_world.sql @@ -0,0 +1,32 @@ +-- instructor razuvious cleanup +DELETE FROM `creature_text` WHERE `entry`=16061; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(16061,0,0,"Do as I taught you!",14,100,8855,13075,3,"Razuvious SAY_AGGRO #1"), +(16061,0,1,"The time for practice is over! Show me what you have learned!",14,100,8859,13078,3,"Razuvious SAY_AGGRO #2"), +(16061,0,2,"Show them no mercy!",14,100,8856,13076,3,"Razuvious SAY_AGGRO #3"), +(16061,1,0,"%s lets loose a triumphant shout.",41,30,0,13082,3,"Razuvious SAY_SLAY"), +(16061,2,0,"You should have stayed home.",14,50,8861,13081,3,"Razuvious SAY_TAUNTED #1"), +(16061,2,1,"You disappoint me, students!",14,50,8858,13077,3,"Razuvious SAY_TAUNTED #2"), +(16061,2,2,"I'm just getting warmed up!",14,50,8852,13072,3,"Razuvious SAY_TAUNTED #3"), +(16061,2,3,"Stand and fight!",14,50,8853,13073,3,"Razuvious SAY_TAUNTED #4"), +(16061,2,4,"Sweep the leg... Do you have a problem with that?",14,50,8861,13080,3,"Razuvious SAY_TAUNTED #5"), +(16061,3,0,"An honorable... death.",14,100,8860,13079,3,"Razuvious SAY_DEATH"); + +-- move understudies to summon groups for proper reset behavior +DELETE FROM `creature` WHERE `guid` IN (128184,128185); +DELETE FROM `linked_respawn` WHERE `guid` IN (128184,128185); +DELETE FROM `creature_summon_groups` WHERE `summonerId`=16061 AND `summonerType`=0; +INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`) VALUES +(16061,0,1,16803,2757.476,-3111.519,267.7678,3.926991,8), +(16061,0,1,16803,2762.049,-3084.467,267.7678,2.129302,8), +(16061,0,2,16803,2778.911,-3114.142,267.7678,5.288348,8), +(16061,0,2,16803,2781.866,-3088.187,267.7678,0.9075712,8); + +-- "Hopeless" debuff on death may only target understudies +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=29125; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`NegativeCondition`,`Comment`) VALUES +(13,1,29125,31,0,3,16803,0,"Instructor Razuvious - Hopeless debuff - only target Death Knight Understudy"); + +-- transition understudies to scripted AI to prevent them overriding player control +UPDATE `creature_template` SET `AIName`="",`ScriptName`="npc_dk_understudy" WHERE `entry`=16803; +DELETE FROM `smart_scripts` WHERE `entryorguid`=16803 AND `source_type`=0; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 2d990ad3ed..debe4ac3cb 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3053,6 +3053,7 @@ void SpellMgr::LoadSpellInfoCorrections() case 52479: // Gift of the Harvester case 48246: // Ball of Flame case 36327: // Shoot Arcane Explosion Arrow + case 55479: // Force Obedience spellInfo->MaxAffectedTargets = 1; break; case 36384: // Skartax Purple Beam diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 1683667a02..f94f7b227b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -17,43 +17,40 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellInfo.h" #include "naxxramas.h" -//Razuvious - NO TEXT sound only -//8852 aggro01 - Hah hah, I'm just getting warmed up! -//8853 aggro02 Stand and fight! -//8854 aggro03 Show me what you've got! -//8861 slay1 - You should've stayed home! -//8863 slay2- -//8858 cmmnd3 - You disappoint me, students! -//8855 cmmnd1 - Do as I taught you! -//8856 cmmnd2 - Show them no mercy! -//8859 cmmnd4 - The time for practice is over! Show me what you've learned! -//8861 Sweep the leg! Do you have a problem with that? -//8860 death - An honorable... death... -//8947 - Aggro Mixed? - ? - -#define SOUND_AGGRO RAND(8852, 8853, 8854) -#define SOUND_SLAY RAND(8861, 8863) -#define SOUND_COMMND RAND(8855, 8856, 8858, 8859, 8861) -#define SOUND_DEATH 8860 -#define SOUND_AGGROMIX 8847 +enum Yells +{ + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_TAUNTED = 2, + SAY_DEATH = 3 +}; enum Spells { - SPELL_UNBALANCING_STRIKE = 26613, - SPELL_DISRUPTING_SHOUT = 29107, - SPELL_JAGGED_KNIFE = 55550, - SPELL_HOPELESS = 29125 + SPELL_UNBALANCING_STRIKE = 26613, + SPELL_DISRUPTING_SHOUT = 29107, + SPELL_JAGGED_KNIFE = 55550, + SPELL_HOPELESS = 29125, + SPELL_UNDERSTUDY_TAUNT = 29060, + SPELL_UNDERSTUDY_BLOOD_STRIKE = 61696, + SPELL_FORCE_OBEDIENCE = 55479 }; enum Events { - EVENT_NONE, + EVENT_ATTACK = 1, EVENT_STRIKE, EVENT_SHOUT, - EVENT_KNIFE, - EVENT_COMMAND, + EVENT_KNIFE +}; + +enum SummonGroups +{ + SUMMON_GROUP_10MAN = 1, + SUMMON_GROUP_25MAN = 2 }; class boss_razuvious : public CreatureScript @@ -70,36 +67,60 @@ public: { boss_razuviousAI(Creature* creature) : BossAI(creature, BOSS_RAZUVIOUS) { } - void KilledUnit(Unit* /*victim*/) override + void SummonAdds() { - if (!(rand32() % 3)) - DoPlaySoundToSet(me, SOUND_SLAY); + me->SummonCreatureGroup(SUMMON_GROUP_10MAN); + if (Is25ManRaid()) + me->SummonCreatureGroup(SUMMON_GROUP_25MAN); } - void DamageTaken(Unit* pDone_by, uint32& uiDamage) override + void InitializeAI() override { - // Damage done by the controlled Death Knight understudies should also count toward damage done by players - if (pDone_by->GetTypeId() == TYPEID_UNIT && (pDone_by->GetEntry() == 16803 || pDone_by->GetEntry() == 29941)) + if (!me->isDead()) { - me->LowerPlayerDamageReq(uiDamage); + Reset(); + SummonAdds(); } } + void JustReachedHome() override + { + _JustReachedHome(); + SummonAdds(); + me->GetMotionMaster()->Initialize(); + } + + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER || (victim->GetTypeId() == TYPEID_UNIT && victim->GetEntry() == NPC_DK_UNDERSTUDY)) + Talk(SAY_SLAY); + } + + void SpellHit(Unit* caster, SpellInfo const* spell) override + { + if (spell->Id == SPELL_UNDERSTUDY_TAUNT) + Talk(SAY_TAUNTED, caster); + } + void JustDied(Unit* /*killer*/) override { - _JustDied(); - DoPlaySoundToSet(me, SOUND_DEATH); - me->CastSpell(me, SPELL_HOPELESS, true); /// @todo this may affect other creatures + Talk(SAY_DEATH); + DoCastAOE(SPELL_HOPELESS, true); + + events.Reset(); + instance->SetBossState(BOSS_RAZUVIOUS, DONE); } void EnterCombat(Unit* /*who*/) override { _EnterCombat(); - DoPlaySoundToSet(me, SOUND_AGGRO); - events.ScheduleEvent(EVENT_STRIKE, 30000); - events.ScheduleEvent(EVENT_SHOUT, 25000); - events.ScheduleEvent(EVENT_COMMAND, 40000); - events.ScheduleEvent(EVENT_KNIFE, 10000); + me->StopMoving(); + summons.DoZoneInCombat(); + Talk(SAY_AGGRO); + events.ScheduleEvent(EVENT_ATTACK, 7 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_STRIKE, 21 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_SHOUT, 16 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_KNIFE, 10 * IN_MILLISECONDS); } void UpdateAI(uint32 diff) override @@ -113,33 +134,112 @@ public: { switch (eventId) { + case EVENT_ATTACK: + SetCombatMovement(true); + if (Unit* victim = me->GetVictim()) + me->GetMotionMaster()->MoveChase(victim); + break; case EVENT_STRIKE: DoCastVictim(SPELL_UNBALANCING_STRIKE); - events.ScheduleEvent(EVENT_STRIKE, 30000); + events.ScheduleEvent(EVENT_STRIKE, 6 * IN_MILLISECONDS); return; case EVENT_SHOUT: DoCastAOE(SPELL_DISRUPTING_SHOUT); - events.ScheduleEvent(EVENT_SHOUT, 25000); + events.ScheduleEvent(EVENT_SHOUT, 16 * IN_MILLISECONDS); return; case EVENT_KNIFE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f)) DoCast(target, SPELL_JAGGED_KNIFE); - events.ScheduleEvent(EVENT_KNIFE, 10000); - return; - case EVENT_COMMAND: - DoPlaySoundToSet(me, SOUND_COMMND); - events.ScheduleEvent(EVENT_COMMAND, 40000); + events.ScheduleEvent(EVENT_KNIFE, urandms(10,15)); return; } } DoMeleeAttackIfReady(); } + + void Reset() override + { + SetCombatMovement(false); + _Reset(); + } }; }; +class npc_dk_understudy : public CreatureScript +{ + public: + npc_dk_understudy() : CreatureScript("npc_dk_understudy") { } + + struct npc_dk_understudyAI : public ScriptedAI + { + npc_dk_understudyAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()), bloodStrikeTimer(0) { } + + void EnterCombat(Unit* /*who*/) override + { + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + if (Creature* razuvious = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_RAZUVIOUS))) + razuvious->AI()->DoZoneInCombat(nullptr, 250.0f); + } + + void JustReachedHome() override + { + if (_instance->GetBossState(BOSS_RAZUVIOUS) == DONE) + me->DespawnOrUnsummon(); + else + ScriptedAI::JustReachedHome(); + } + + void UpdateAI(uint32 diff) override + { + if (!me->isPossessedByPlayer() && !UpdateVictim()) + return; + + if (!me->isPossessedByPlayer()) + { + if (diff < bloodStrikeTimer) + bloodStrikeTimer -= diff; + else + DoCastVictim(SPELL_UNDERSTUDY_BLOOD_STRIKE); + } + + DoMeleeAttackIfReady(); + } + + void OnCharmed(bool apply) override + { + ScriptedAI::OnCharmed(apply); + if (apply) + { + if (!me->IsInCombat()) + EnterCombat(nullptr); + me->StopMoving(); + me->SetReactState(REACT_PASSIVE); + _charmer = me->GetCharmerGUID(); + } + else + { + me->SetReactState(REACT_AGGRESSIVE); + if (Unit* charmer = ObjectAccessor::GetUnit(*me, _charmer)) + me->AddThreat(charmer, 100000.0f); + DoZoneInCombat(nullptr, 250.0f); + } + } + private: + InstanceScript* const _instance; + ObjectGuid _charmer; + uint32 bloodStrikeTimer; + }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetInstanceAI(creature); + } +}; + void AddSC_boss_razuvious() { new boss_razuvious(); + new npc_dk_understudy(); } diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 53ce68d3ef..0e572835a5 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -60,7 +60,6 @@ DoorData const doorData[] = MinionData const minionData[] = { - { NPC_DK_UNDERSTUDY, BOSS_RAZUVIOUS }, { NPC_SIR, BOSS_HORSEMEN }, { NPC_THANE, BOSS_HORSEMEN }, { NPC_LADY, BOSS_HORSEMEN }, @@ -143,6 +142,9 @@ class instance_naxxramas : public InstanceMapScript case NPC_FAERLINA: FaerlinaGUID = creature->GetGUID(); break; + case NPC_RAZUVIOUS: + RazuviousGUID = creature->GetGUID(); + break; case NPC_THANE: ThaneGUID = creature->GetGUID(); break; @@ -378,6 +380,8 @@ class instance_naxxramas : public InstanceMapScript return AnubRekhanGUID; case DATA_FAERLINA: return FaerlinaGUID; + case DATA_RAZUVIOUS: + return RazuviousGUID; case DATA_THANE: return ThaneGUID; case DATA_LADY: @@ -652,6 +656,8 @@ class instance_naxxramas : public InstanceMapScript ObjectGuid HeiganGUID; /* The Military Quarter */ + // Instructor Razuvious + ObjectGuid RazuviousGUID; // Gothik the Harvester ObjectGuid GothikGateGUID; // The Four Horsemen diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index d2b9978495..e4d15cf84b 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -66,6 +66,7 @@ enum Data64 { DATA_ANUBREKHAN, DATA_FAERLINA, + DATA_RAZUVIOUS, DATA_THANE, DATA_LADY, DATA_BARON, @@ -87,6 +88,7 @@ enum CreaturesIds { NPC_ANUBREKHAN = 15956, NPC_FAERLINA = 15953, + NPC_RAZUVIOUS = 16061, NPC_THANE = 16064, NPC_LADY = 16065, NPC_BARON = 30549, From 4fbffab5f8a43410c4e4487e15f22a5173b9bc9e Mon Sep 17 00:00:00 2001 From: tkrokli Date: Tue, 8 Dec 2015 15:58:27 +0100 Subject: [PATCH 418/524] Scripts/Spells: Mine Sweeper achievement Enable achievement 1428, "Mine Sweeper" in SpellScript by @Re3os / @ccrs / @sirikfoll . based on original script from @Vincent-Michael Closes #15938 --- sql/updates/world/2015_12_13_14_world.sql | 16 +++++++++ src/server/scripts/Spells/spell_generic.cpp | 39 +++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 sql/updates/world/2015_12_13_14_world.sql diff --git a/sql/updates/world/2015_12_13_14_world.sql b/sql/updates/world/2015_12_13_14_world.sql new file mode 100644 index 0000000000..534e17ccb0 --- /dev/null +++ b/sql/updates/world/2015_12_13_14_world.sql @@ -0,0 +1,16 @@ +-- +-- Enable Landmine Knockback Achievement by removing it from disables +DELETE FROM `disables` WHERE `sourceType`= 4 AND `entry`= 5258; + +-- Insert missing Landmine Knockback Achievement criteria data +DELETE FROM `achievement_criteria_data` WHERE `criteria_id`= 5258; +INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES +(5258,0,57064,0,''); + +-- Update description for the linked spells 54355 and 54402 +UPDATE `spell_linked_spell` SET `comment`= 'Trigger Detonation with Land Mine Knockback' WHERE `spell_trigger` = 54355; + +-- Insert spell script name for spell 57099 +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_gen_landmine_knockback_achievement'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(57099,'spell_gen_landmine_knockback_achievement'); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index ca8c9a9ef9..b11dcbd85a 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4120,6 +4120,44 @@ public: } }; +enum LandmineKnockbackAchievement +{ + SPELL_LANDMINE_KNOCKBACK_ACHIEVEMENT = 57064 +}; + +class spell_gen_landmine_knockback_achievement : public SpellScriptLoader +{ +public: + spell_gen_landmine_knockback_achievement() : SpellScriptLoader("spell_gen_landmine_knockback_achievement") { } + + class spell_gen_landmine_knockback_achievement_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_landmine_knockback_achievement_SpellScript); + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Player* target = GetHitPlayer()) + { + Aura const* aura = GetHitAura(); + if (!aura || aura->GetStackAmount() < 10) + return; + + target->CastSpell(target, SPELL_LANDMINE_KNOCKBACK_ACHIEVEMENT, true); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_gen_landmine_knockback_achievement_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_gen_landmine_knockback_achievement_SpellScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -4205,4 +4243,5 @@ void AddSC_generic_spell_scripts() new spell_gen_gm_freeze(); new spell_gen_stand(); new spell_gen_mixology_bonus(); + new spell_gen_landmine_knockback_achievement(); } From 6e2fcf365d39742662b44bd20c6bef8bd8717d83 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 15 Dec 2015 17:51:01 +0100 Subject: [PATCH 419/524] DB/Creature: Remove wrong spawns --- sql/updates/world/2015_12_15_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_12_15_00_world.sql diff --git a/sql/updates/world/2015_12_15_00_world.sql b/sql/updates/world/2015_12_15_00_world.sql new file mode 100644 index 0000000000..f27bb448bb --- /dev/null +++ b/sql/updates/world/2015_12_15_00_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature` WHERE `guid` IN (111277, 111300); From 179f756866e780411949d817e76801c87e858d30 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Tue, 15 Dec 2015 20:22:38 +0100 Subject: [PATCH 420/524] DB/String: improved output of .ticket view command --- sql/updates/world/2015_12_15_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_12_15_01_world.sql diff --git a/sql/updates/world/2015_12_15_01_world.sql b/sql/updates/world/2015_12_15_01_world.sql new file mode 100644 index 0000000000..86fbec83c3 --- /dev/null +++ b/sql/updates/world/2015_12_15_01_world.sql @@ -0,0 +1,2 @@ +-- trinity_string 2022 (ticket message) +UPDATE `trinity_string` SET `content_default`='|cff00ff00Ticket Message|r: [%s]|r ' WHERE `entry`=2022; From 39001aab1690333a60c660d6a4d1e041fda89c26 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 15 Dec 2015 20:29:29 +0100 Subject: [PATCH 421/524] DB/creature_text: Add sounds for the quest Last Rites Texts need synchronization and some issues must be fixed. --- sql/updates/world/2015_12_15_02_world.sql | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 sql/updates/world/2015_12_15_02_world.sql diff --git a/sql/updates/world/2015_12_15_02_world.sql b/sql/updates/world/2015_12_15_02_world.sql new file mode 100644 index 0000000000..eda5c26550 --- /dev/null +++ b/sql/updates/world/2015_12_15_02_world.sql @@ -0,0 +1,22 @@ +-- +UPDATE `creature_text` SET `sound`=14211 WHERE `BroadcastTextID`=25357; +UPDATE `creature_text` SET `sound`=14212 WHERE `BroadcastTextID`=25358; +UPDATE `creature_text` SET `sound`=14756 WHERE `BroadcastTextID`=25362; +UPDATE `creature_text` SET `sound`=14212 WHERE `BroadcastTextID`=28189; +UPDATE `creature_text` SET `sound`=14664 WHERE `BroadcastTextID`=25359; +UPDATE `creature_text` SET `sound`=14665 WHERE `BroadcastTextID`=25360; +UPDATE `creature_text` SET `sound`=14757 WHERE `BroadcastTextID`=25363; +UPDATE `creature_text` SET `sound`=14666 WHERE `BroadcastTextID`=25366; +UPDATE `creature_text` SET `sound`=14213 WHERE `BroadcastTextID`=25361; +UPDATE `creature_text` SET `sound`=14758 WHERE `BroadcastTextID`=25364; +UPDATE `creature_text` SET `sound`=14214 WHERE `BroadcastTextID`=25365; +UPDATE `creature_text` SET `sound`=14196 WHERE `BroadcastTextID`=25841; +UPDATE `creature_text` SET `sound`=14489 WHERE `BroadcastTextID`=25842; +UPDATE `creature_text` SET `sound`=14197 WHERE `BroadcastTextID`=25847; +UPDATE `creature_text` SET `sound`=14667 WHERE `BroadcastTextID`=25844; +UPDATE `creature_text` SET `sound`=14490 WHERE `BroadcastTextID`=25843; +UPDATE `creature_text` SET `sound`=14668 WHERE `BroadcastTextID`=25845; +UPDATE `creature_text` SET `sound`=14491 WHERE `BroadcastTextID`=25848; +UPDATE `creature_text` SET `sound`=14669 WHERE `BroadcastTextID`=25846; +UPDATE `creature_text` SET `sound`=14492 WHERE `BroadcastTextID`=25849; +UPDATE `creature_text` SET `sound`=14670 WHERE `BroadcastTextID`=25850; From 60311e0aae2ccf8b45db6c7d12c6337a3006198a Mon Sep 17 00:00:00 2001 From: rockz1152 Date: Tue, 15 Dec 2015 14:47:59 -0500 Subject: [PATCH 422/524] Core/Player: Fixed Weapon Skillup on low level mobs Closes #15998 Removed block for skill up on grey level mobs. --- src/server/game/Entities/Player/Player.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4804aece41..ceab7d06c9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5837,8 +5837,6 @@ void Player::UpdateCombatSkills(Unit* victim, WeaponAttackType attType, bool def uint8 plevel = getLevel(); // if defense than victim == attacker uint8 greylevel = Trinity::XP::GetGrayLevel(plevel); uint8 moblevel = victim->getLevelForTarget(this); - if (moblevel < greylevel) - return; if (moblevel > plevel + 5) moblevel = plevel + 5; From b013eb1925276cde36dbcd765ee89aeecdcd21de Mon Sep 17 00:00:00 2001 From: Rushor Date: Wed, 16 Dec 2015 14:09:40 +0100 Subject: [PATCH 423/524] DB/Creature: Sulaa Waypointscript closes #16009 --- sql/updates/world/2015_12_16_00_world.sql | 91 +++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 sql/updates/world/2015_12_16_00_world.sql diff --git a/sql/updates/world/2015_12_16_00_world.sql b/sql/updates/world/2015_12_16_00_world.sql new file mode 100644 index 0000000000..62d640117f --- /dev/null +++ b/sql/updates/world/2015_12_16_00_world.sql @@ -0,0 +1,91 @@ +-- +-- Sulaa Waypointscript +UPDATE `creature` SET spawndist = 0, MovementType = 0 WHERE guid = 61958; +UPDATE `creature_template_addon` SET bytes1 = 0 WHERE Entry = 17219; + +-- Sulaa SAI +SET @ENTRY := 17219; +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,0,0,0,25,0,100,0,0,0,0,0,53,0,17219,1,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Reset - Start Waypoint"), +(@ENTRY,0,1,0,64,0,100,0,0,0,0,0,54,20000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Gossip Hello - Pause Waypoint"), +(@ENTRY,0,2,0,40,0,100,0,1,17219,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Waypoint 1 Reached - Run Script"), +(@ENTRY,0,3,0,40,0,100,0,4,17219,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Waypoint 4 Reached - Run Script"), +(@ENTRY,0,4,0,40,0,100,0,8,17219,0,0,80,@ENTRY*100+02,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Waypoint 8 Reached - Pause Waypoint"), +(@ENTRY,0,5,0,40,0,100,0,12,17219,0,0,80,@ENTRY*100+03,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Waypoint 12 Reached - Run Script"); + +-- Actionlist SAI +SET @ENTRY := 1721900; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,300000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,11,32992,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Cast 'Ice Cast Visual'"), +(@ENTRY,9,2,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,10,67179,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"), +(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67176,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"), +(@ENTRY,9,4,0,0,0,100,0,2000,2000,0,0,5,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Play Emote 4"), +(@ENTRY,9,5,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67175,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"), +(@ENTRY,9,6,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67180,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"), +(@ENTRY,9,7,0,0,0,100,0,2000,2000,0,0,45,1,1,0,0,0,0,10,67173,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"), +(@ENTRY,9,8,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67178,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"); + +-- Actionlist SAI +SET @ENTRY := 1721901; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,8000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,11,32992,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Cast 'Ice Cast Visual'"), +(@ENTRY,9,2,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,10,67179,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"), +(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67181,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"), +(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67182,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"); + +-- Actionlist SAI +SET @ENTRY := 1721902; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,8000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,11,32992,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Ice Cast Visual'"), +(@ENTRY,9,2,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,10,67176,18814,0,0,0,0,0,"On Script - Set Data 1 1"), +(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67171,18814,0,0,0,0,0,"On Script - Set Data 1 1"), +(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67172,18814,0,0,0,0,0,"On Script - Set Data 1 1"); + +-- Actionlist SAI +SET @ENTRY := 1721903; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY 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 +(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,12000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Pause Waypoint"), +(@ENTRY,9,1,0,0,0,100,0,3000,3000,0,0,90,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Set Flag Standstate Kneel"), +(@ENTRY,9,2,0,0,0,100,0,7000,7000,0,0,91,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Remove Flag Standstate Kneel"); + + +DELETE FROM `waypoints` WHERE `entry`=17219; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(17219,1,-3778.78,-11409.2,-137.952, 'Sulaa'), +(17219,2,-3778.9,-11411.9,-137.96, 'Sulaa'), +(17219,3,-3779.4,-11415.4,-137.982, 'Sulaa'), +(17219,4,-3775.53,-11420.1,-137.955, 'Sulaa'), +(17219,5,-3777.94,-11421.6,-137.988, 'Sulaa'), +(17219,6,-3781.69,-11422.3,-138.036, 'Sulaa'), +(17219,7,-3788.19,-11418.6,-138.097, 'Sulaa'), +(17219,8,-3789.85,-11414.1,-138.101, 'Sulaa'), +(17219,9,-3788.37,-11413.7,-138.081, 'Sulaa'), +(17219,10,-3783.87,-11414.4,-138.031, 'Sulaa'), +(17219,11,-3779.87,-11410.7,-137.97, 'Sulaa'), +(17219,12,-3777.9,-11407.2,-137.934, 'Sulaa'); + +-- Exodar Invisible Stalker SAI +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=18814; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-67179, -67176, -67175, -67180, -67173, -67178, -67181, -67182, -67171, -67172) 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 +(-67179,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67176,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67175,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67180,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67173,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67178,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67181,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67182,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67171,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"), +(-67172,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"); + +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=17436; From 3685be2fb67cf9a6903b4f3aa55c20527330cce0 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Wed, 16 Dec 2015 21:49:52 +0000 Subject: [PATCH 424/524] DB/Misc: Completion script for Delivery to Krenna Closes #15982 --- sql/updates/world/2015_12_16_01_world.sql | 53 +++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 sql/updates/world/2015_12_16_01_world.sql diff --git a/sql/updates/world/2015_12_16_01_world.sql b/sql/updates/world/2015_12_16_01_world.sql new file mode 100644 index 0000000000..73c9675e5b --- /dev/null +++ b/sql/updates/world/2015_12_16_01_world.sql @@ -0,0 +1,53 @@ +DELETE FROM `creature_text` WHERE `entry` IN(26860,26862,27102,27037); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(26860, 0, 0, 'I''ve never seen you so eager to cause harm to someone, sister. Such a pleasant development... very well, go!', 12, 0, 100, 25, 0, 0, 26229, 'Conqueror Krenna to Player'), +(26860, 1, 0, 'That spineless troll has failed me for the last time. Anthis! Break his legs!', 12, 0, 100, 53, 0, 0, 26227, 'Conqueror Krenna to Player'), +(26862, 0, 0, 'At once, my lady!', 12, 0, 100, 0, 0, 0, 26228, 'Anthis to Player'), +(27102, 0, 0, 'Let me take care of it, sister.', 12, 0, 100, 0, 0, 0, 27108, 'Gorgonna to Player'), +(27102, 1, 0, 'What were you thinking, provoking her like that?', 15, 0, 100, 0, 0, 0, 27109, 'Gorgonna to Player'), +(27102, 2, 0, 'I used good judgment when you showed none. I don''t want to see you lead us into ruin, Krenna!', 12, 0, 100, 0, 0, 0, 27027, 'Gorgonna to Player'), +(27102, 3, 0, 'We''ll see about that.', 12, 0, 100, 0, 0, 0, 27028, 'Gorgonna to Player'), +(27102, 4, 0, 'You... half-idiot! You really did it this time. I''m going to have to make it look like your leg''s broken.', 12, 0, 100, 0, 0, 0, 27110, 'Gorgonna to Player'), +(27102, 5, 0, 'Now don''t move if you ever want to walk again!', 12, 0, 100, 0, 0, 0, 27111, 'Gorgonna to Player'), +(27037, 0, 0, 'No, please! Don''t!', 12, 0, 100, 430, 0, 0, 27112, 'Hidetrader Jun''ik to Player'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=26860 AND `source_type`=0 AND `id`>0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=27102 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(2686000,2710200) AND `source_type`=9; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN(27102); + +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 +(26860, 0, 1, 2, 20, 0, 100, 0, 12178, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - On Quest return (12178) - Store Targetlist'), +(26860, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2686000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - On Quest return (12178) - Run Script'), + +(27102, 0, 0, 5, 38, 0, 100, 0, 2, 2, 0, 0, 53, 1, 27102, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - On Data Set 2 2 - Start WP'), +(27102, 0, 1, 2, 40, 0, 100, 0, 3, 27102, 0, 0, 54, 9000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Reached WP3 - Pause WP'), +(27102, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2710200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Reached WP3 - Run Script'), +(27102, 0, 3, 0, 40, 0, 100, 0, 4, 27102, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2.80998, 'Gorgonna - Reached WP4 - Set Orientation'), +(27102, 0, 4, 0, 38, 0, 100, 0, 1, 1, 0, 0, 5, 66, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - On Data Set 1 1 - Play Emote OneShotSalute'), +(27102, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Gorgonna - On Data Set 2 2 - Say Line 1'), + +(2710200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Say Line 4 '), +(2710200, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 27037, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Say Line 0 (Hidetrader Jun''ik)'), +(2710200, 9, 2, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Say Line 5 '), +(2710200, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 11, 42908, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Cast Cosmetic - Combat Kick'), +(2710200, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 21, 50, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Turn Run Off'), + +(2686000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Say Line 1'), +(2686000, 9, 1, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 26862, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Say Line 0 (Anthis)'), +(2686000, 9, 2, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Say Line 0 (Gorgonna)'), +(2686000, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Say Line 0'), -- 15:45:27.765 +(2686000, 9, 4, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Set Data (Gorgonna)'), +(2686000, 9, 5, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Set Data (Gorgonna)'), +(2686000, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Send Targetlist (Gorgonna)'), +(2686000, 9, 7, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Set Data (Gorgonna)'); + + +DELETE FROM `waypoints` WHERE `entry`=27102; + +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(27102, 1, 3257.147, -2228.854, 116.0879, 'Gorgonna'), +(27102, 2, 3244.31, -2251.519, 114.7344, 'Gorgonna'), +(27102, 3, 3237.79, -2265.45, 114.2664, 'Gorgonna'), +(27102, 4, 3275.846, -2208.026, 117.0294, 'Gorgonna'); + From 7f404f00e7ed8e7edaef3f5858d16b7aa1ea5267 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Wed, 16 Dec 2015 21:57:52 +0000 Subject: [PATCH 425/524] DB/Conditions: Fix a levelling Exploit (3.3.5 only) Fix a levelling exploit with http://www.wowhead.com/quest=254/digging-through-the-dirt and http://www.wowhead.com/quest=253/deprecated-bride-of-the-embalmer where multiple http://www.wowhead.com/npc=45801/eliza could be summoned and aoed down. --- sql/updates/world/2015_12_16_02_world335.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2015_12_16_02_world335.sql diff --git a/sql/updates/world/2015_12_16_02_world335.sql b/sql/updates/world/2015_12_16_02_world335.sql new file mode 100644 index 0000000000..20c1ac94a3 --- /dev/null +++ b/sql/updates/world/2015_12_16_02_world335.sql @@ -0,0 +1,7 @@ + DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` in(19,20) AND `SourceEntry`=254; + + INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES + (19, 0, 254, 0, 0, 29, 0, 314, 200, 0, 1, 0, 0, '', 'Show quest \'Digging Through the Dirt\' only if no Eliza nearby'), + (20, 0, 254, 0, 0, 29, 0, 314, 200, 0, 1, 0, 0, '', 'Show quest \'Digging Through the Dirt\' only if no Eliza nearby'), + (19, 0, 254, 0, 0, 8, 0, 253, 0, 0, 1, 0, 0, '', 'Show quest \'Digging Through the Dirt\' only if quest \'Bride of the Embalmer\' is not rewarded'), + (19, 0, 254, 0, 0, 28, 0, 253, 0, 0, 1, 0, 0, '', 'Show quest \'Digging Through the Dirt\' only if quest \'Bride of the Embalmer\' is not completed'); From e1bcd10c9bc2ccfacb5edd80bd4212f28cf8fc30 Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 17 Dec 2015 02:06:21 +0100 Subject: [PATCH 426/524] DB/SAI: Fix a target typo in a previous commit --- sql/updates/world/2015_12_17_00_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2015_12_17_00_world.sql diff --git a/sql/updates/world/2015_12_17_00_world.sql b/sql/updates/world/2015_12_17_00_world.sql new file mode 100644 index 0000000000..8419473b20 --- /dev/null +++ b/sql/updates/world/2015_12_17_00_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `smart_scripts` SET `target_type`=1, `target_param1`=0 WHERE `entryorguid`=2710200 AND `source_type`=9 AND `id`=4; +UPDATE `smart_scripts` SET `target_type`=21, `target_param1`=50 WHERE `entryorguid`=2710200 AND `source_type`=9 AND `id`=3; From 7cbb13c3cb47a053304b3913b5e963da9b3b8b1f Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 18 Dec 2015 15:49:01 +0100 Subject: [PATCH 427/524] DB/Creature: Remove Hover mode for Agent Kearnen Closes #16057 --- sql/updates/world/2015_12_18_00_world_335.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_12_18_00_world_335.sql diff --git a/sql/updates/world/2015_12_18_00_world_335.sql b/sql/updates/world/2015_12_18_00_world_335.sql new file mode 100644 index 0000000000..3fb3e5a6e1 --- /dev/null +++ b/sql/updates/world/2015_12_18_00_world_335.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_addon` SET `bytes1`=8 WHERE `guid`=4216; From c282e9ae35e269505a73fcae38f2050bfb82cc03 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 18 Dec 2015 15:56:23 +0100 Subject: [PATCH 428/524] DB/Creature: Add Magic immunity to Mana Feeders Closes #16050 --- sql/updates/world/2015_12_18_01_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2015_12_18_01_world.sql diff --git a/sql/updates/world/2015_12_18_01_world.sql b/sql/updates/world/2015_12_18_01_world.sql new file mode 100644 index 0000000000..2ccc93def2 --- /dev/null +++ b/sql/updates/world/2015_12_18_01_world.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `creature_template_addon` WHERE `entry` = 16491; +INSERT INTO `creature_template_addon` (`entry`,`auras`) VALUES (16491, '39804'); From ba72fd863cef7bee88b077c8f62f299f7e836ce1 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 18 Dec 2015 16:02:52 +0100 Subject: [PATCH 429/524] DB/Creature: Remove a duplicate spawn for Lovely Liddia Closes #16036 --- sql/updates/world/2015_12_18_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_12_18_02_world.sql diff --git a/sql/updates/world/2015_12_18_02_world.sql b/sql/updates/world/2015_12_18_02_world.sql new file mode 100644 index 0000000000..f590d18a8a --- /dev/null +++ b/sql/updates/world/2015_12_18_02_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature` WHERE `id`= 27032 AND `guid`= 110149; From 6ff9512940231dd0e3e327cf808b3ce40f3a482a Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 18 Dec 2015 16:14:56 +0100 Subject: [PATCH 430/524] DB/SAI: Fix some Spamming spells on health pct By: @Treeston Closes #16034 --- sql/updates/world/2015_12_18_03_world_335.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2015_12_18_03_world_335.sql diff --git a/sql/updates/world/2015_12_18_03_world_335.sql b/sql/updates/world/2015_12_18_03_world_335.sql new file mode 100644 index 0000000000..de778343a0 --- /dev/null +++ b/sql/updates/world/2015_12_18_03_world_335.sql @@ -0,0 +1,5 @@ +-- +UPDATE `smart_scripts` SET `event_flags`=(`event_flags`|1) WHERE `entryorguid`=702 AND `source_type`=0 AND `id`=2; +UPDATE `smart_scripts` SET `event_flags`=(`event_flags`|1) WHERE `entryorguid`=1393 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `event_param3`=15000 AND `event_param4`=15000 WHERE `entryorguid`=26073 AND `source_type`=0 AND `id`=9; +UPDATE `smart_scripts` SET `event_param3`=4000 AND `event_param4`=7000 WHERE`entryorguid`=11353 AND `source_type`=0 AND `id`=0; From 0f8743a5415d67cdf46228ca5d5b91123668b009 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 18 Dec 2015 17:02:41 +0100 Subject: [PATCH 431/524] DB/Quest: Quest: The Air Stands Still Closes #16032 --- sql/updates/world/2015_12_18_04_world.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 sql/updates/world/2015_12_18_04_world.sql diff --git a/sql/updates/world/2015_12_18_04_world.sql b/sql/updates/world/2015_12_18_04_world.sql new file mode 100644 index 0000000000..c8c3352319 --- /dev/null +++ b/sql/updates/world/2015_12_18_04_world.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid` = 30838 AND `source_type` = 0 AND `id`=8; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 30839 AND `source_type` = 0 AND `id`=8; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 30840 AND `source_type` = 0 AND `id`=10; +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 +(30839,0,8,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,19,30831,30,0,0,0,0,0,'Jayde - In Just summoned - Start attack'), +(30840,0,10,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,19,30829,30,0,0,0,0,0,'Munch - In Just summoned - Start attack'), +(30838,0,8,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,19,30830,30,0,0,0,0,0,'Highlord Darion Mograine - In Just summoned - Start attack'); From 403ff2132490c7e785bb0ae5373d2c7a34d73e14 Mon Sep 17 00:00:00 2001 From: treeston Date: Sat, 19 Dec 2015 11:32:25 +0100 Subject: [PATCH 432/524] Spells/Penance: If hostile target is not in front, now fails in the initial cast rather than the triggered cast, thus not erroneously causing a cooldown. --- src/server/scripts/Spells/spell_priest.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 0914089f1c..b5c3b26f1b 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -617,8 +617,13 @@ class spell_pri_penance : public SpellScriptLoader { Player* caster = GetCaster()->ToPlayer(); if (Unit* target = GetExplTargetUnit()) - if (!caster->IsFriendlyTo(target) && !caster->IsValidAttackTarget(target)) - return SPELL_FAILED_BAD_TARGETS; + if (!caster->IsFriendlyTo(target)) + { + if (!caster->IsValidAttackTarget(target)) + return SPELL_FAILED_BAD_TARGETS; + if (!caster->isInFront(target)) + return SPELL_FAILED_UNIT_NOT_INFRONT; + } return SPELL_CAST_OK; } From 193dd505fadfeae6a4ebe06967b8754f07200025 Mon Sep 17 00:00:00 2001 From: Gacko Date: Sat, 19 Dec 2015 13:42:11 +0100 Subject: [PATCH 433/524] Config/AuthServer: Rename Wrong.Password.Login.Logging to WronPass.Logging and move to correct section. --- src/server/authserver/authserver.conf.dist | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist index 1b10fa4e31..604988d62e 100644 --- a/src/server/authserver/authserver.conf.dist +++ b/src/server/authserver/authserver.conf.dist @@ -122,6 +122,14 @@ WrongPass.BanTime = 600 WrongPass.BanType = 0 +# +# WrongPass.Logging +# Description: Additionally log attempted wrong password logging +# Default: 0 - (Disabled) +# 1 - (Enabled) + +WrongPass.Logging = 0 + # ################################################################################################### @@ -148,14 +156,6 @@ LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth" LoginDatabase.WorkerThreads = 1 -# -# Wrong.Password.Login.Logging -# Description: Additionally log attempted wrong password logging -# Default: 0 - (Disabled) -# 1 - (Enabled) - -Wrong.Password.Login.Logging = 0 - # ################################################################################################### From 1f839b24340fd392091e175e4c8102d2bda33be7 Mon Sep 17 00:00:00 2001 From: Gacko Date: Sat, 19 Dec 2015 14:34:05 +0100 Subject: [PATCH 434/524] Auth/Login: Rename config key usage Related: 193dd505 --- src/server/authserver/Server/AuthSession.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp index 28819b89ad..8b0d86603a 100644 --- a/src/server/authserver/Server/AuthSession.cpp +++ b/src/server/authserver/Server/AuthSession.cpp @@ -588,7 +588,7 @@ bool AuthSession::HandleLogonProof() uint32 MaxWrongPassCount = sConfigMgr->GetIntDefault("WrongPass.MaxCount", 0); // We can not include the failed account login hook. However, this is a workaround to still log this. - if (sConfigMgr->GetBoolDefault("Wrong.Password.Login.Logging", false)) + if (sConfigMgr->GetBoolDefault("WrongPass.Logging", false)) { PreparedStatement* logstmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_FALP_IP_LOGGING); logstmt->setString(0, _login); From 68033fa4679bb275fb8ce8bde8e30c0be9a6c5bc Mon Sep 17 00:00:00 2001 From: Kittnz Date: Sun, 20 Dec 2015 16:42:51 +0100 Subject: [PATCH 435/524] DB/Event: Add all remaining Feast of Winter Veil spawns in whole Outland and Dalaran --- sql/updates/world/2015_12_20_00_world.sql | 568 ++++++++++++++++++++++ 1 file changed, 568 insertions(+) create mode 100644 sql/updates/world/2015_12_20_00_world.sql diff --git a/sql/updates/world/2015_12_20_00_world.sql b/sql/updates/world/2015_12_20_00_world.sql new file mode 100644 index 0000000000..51f762c5fd --- /dev/null +++ b/sql/updates/world/2015_12_20_00_world.sql @@ -0,0 +1,568 @@ +SET @OGUID:=78976; +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+543; +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 , 187567, 530, 1, 1, -2972.565, 2562.675, 83.66947, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3744) +(@OGUID+1 , 187567, 530, 1, 1, -2955.605, 2554.495, 110.3285, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3744) +(@OGUID+2 , 187567, 530, 1, 1, -3022.694, 2624.565, 85.78185, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3744) +(@OGUID+3 , 187567, 530, 1, 1, -2927.35, 2650.861, 100.1286, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3744) +(@OGUID+4 , 187567, 530, 1, 1, -4010.367, 2155.552, 109.9921, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3745) +(@OGUID+5 , 187567, 530, 1, 1, -4058.762, 2175.685, 117.8552, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3745) +(@OGUID+6 , 187567, 530, 1, 1, -2982.132, 3981.363, 8.745137, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3691) +(@OGUID+7 , 187567, 530, 1, 1, -2931.291, 3931.274, 8.816035, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3684) +(@OGUID+8 , 187567, 530, 1, 1, -2923.89, 4017.942, 8.344274, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3684) +(@OGUID+9 , 187567, 530, 1, 1, -2967.964, 4020.805, 7.264894, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3684) +(@OGUID+10 , 187567, 530, 1, 1, -2987.704, 4030.75, 7.28573, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3684) +(@OGUID+11 , 187567, 530, 1, 1, -2659.457, 4386.914, 39.52228, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+12 , 187567, 530, 1, 1, -2671.876, 4457.92, 42.83185, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3683) +(@OGUID+13 , 187567, 530, 1, 1, -2648.931, 4478.227, 39.93041, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3683) +(@OGUID+14 , 187567, 530, 1, 1, -2587.3, 4469.175, 40.08729, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3683) +(@OGUID+15 , 187567, 530, 1, 1, -2677.658, 7203.919, 32.99669, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3626) +(@OGUID+16 , 187567, 530, 1, 1, -2698.241, 7291.552, 49.91637, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3626) +(@OGUID+17 , 187567, 530, 1, 1, -2730.689, 7306.021, 51.7765, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3626) +(@OGUID+18 , 187567, 530, 1, 1, -2713.36, 7298.445, 51.91501, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3626) +(@OGUID+19 , 187567, 530, 1, 1, -2775.226, 7326.033, 51.77103, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3626) +(@OGUID+20 , 187567, 530, 1, 1, 195.0323, 8490.546, 35.5514, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+21 , 187567, 530, 1, 1, 219.5999, 8569.107, 33.13798, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+22 , 187567, 530, 1, 1, 272.1655, 8509.436, 32.72204, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+23 , 187567, 530, 1, 1, 264.8356, 8492.754, 34.60779, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+24 , 187567, 530, 1, 1, 223.4775, 7943.311, 30.76142, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3645) +(@OGUID+25 , 187567, 530, 1, 1, 236.9491, 7913.625, 30.50175, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3645) +(@OGUID+26 , 187567, 530, 1, 1, 214.1629, 7927.679, 30.72031, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3645) +(@OGUID+27 , 187567, 530, 1, 1, 237.8501, 7911.491, 30.4785, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3645) +(@OGUID+28 , 187567, 530, 1, 1, 244.0695, 7939.386, 30.92426, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3645) +(@OGUID+29 , 187567, 530, 1, 1, 282.6363, 6085.975, 137.649, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+30 , 187567, 530, 1, 1, -249.9205, 5495.466, 36.7147, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+31 , 187567, 530, 1, 1, 1955.625, 6885.821, 167.1296, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3771) +(@OGUID+32 , 187567, 530, 1, 1, 2038.027, 6826.094, 181.4816, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+33 , 187567, 530, 1, 1, 2032.214, 6819.37, 181.5125, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+34 , 187567, 530, 1, 1, 2009.813, 6871.413, 188.1808, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+35 , 187567, 530, 1, 1, 2038.565, 6819.838, 181.4885, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+36 , 187567, 530, 1, 1, 2031.963, 6825.553, 181.5333, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+37 , 187567, 530, 1, 1, 2062.016, 6825.854, 184.7832, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+38 , 187567, 530, 1, 1, 2063.305, 6759.898, 173.2681, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+39 , 187567, 530, 1, 1, 2162.737, 6751.214, 172.4385, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+40 , 187567, 530, 1, 1, 2163.694, 6745.077, 172.4085, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+41 , 187567, 530, 1, 1, 2168.956, 6752.182, 172.4387, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+42 , 187567, 530, 1, 1, 2169.925, 6745.97, 172.4366, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3772) +(@OGUID+43 , 187567, 530, 1, 1, 3026.51, 5497.439, 151.5307, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3951) +(@OGUID+44 , 187567, 530, 1, 1, 3016.612, 5445.069, 151.877, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3951) +(@OGUID+45 , 187567, 530, 1, 1, 2154.756, 4716.656, 160.9547, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3844) +(@OGUID+46 , 187567, 530, 1, 1, 2155.25, 4720.381, 160.9449, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3844) +(@OGUID+47 , 187567, 530, 1, 1, 2035.05, 4693.116, 154.7217, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3844) +(@OGUID+48 , 187567, 530, 1, 1, 2031.468, 4692.11, 154.7591, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3844) +(@OGUID+49 , 187567, 530, 1, 1, 2962.525, 3697.009, 150.2677, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+50 , 187567, 530, 1, 1, 3061.875, 3647.259, 149.6342, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3712) +(@OGUID+51 , 187567, 530, 1, 1, 4103.79, 3058.691, 345.6179, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3738) +(@OGUID+52 , 187567, 530, 1, 1, 4125.446, 3068.064, 345.6248, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3738) +(@OGUID+53 , 187567, 530, 1, 1, -586.8221, 4153.644, 78.09076, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+54 , 187567, 530, 1, 1, -595.9395, 4082.912, 100.9252, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+55 , 187567, 530, 1, 1, 181.4262, 2624.335, 98.51126, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3536) +(@OGUID+56 , 187567, 530, 1, 1, -717.0001, 2714.823, 100.4722, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3538) +(@OGUID+57 , 187567, 530, 1, 1, -716.9244, 2718.473, 100.4844, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3538) +(@OGUID+58 , 187567, 530, 1, 1, -716.8802, 2742.702, 100.7903, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3538) +(@OGUID+59 , 187567, 530, 1, 1, -709.4097, 2704.609, 99.62894, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 3538) +(@OGUID+60 , 187194, 530, 1, 1, -4114.495, 1119.618, 52.38124, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3938) +(@OGUID+61 , 187194, 530, 1, 1, -3006.023, 795.2581, -1.891022, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3754) +(@OGUID+62 , 187194, 530, 1, 1, -3092.005, 2502.068, 76.35168, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+63 , 187194, 530, 1, 1, -3081.95, 2509.127, 75.9601, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+64 , 187194, 530, 1, 1, -3099.529, 2512.387, 75.96468, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+65 , 187194, 530, 1, 1, -3097.624, 2522.847, 75.95374, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+66 , 187194, 530, 1, 1, -3080.017, 2519.666, 75.95196, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+67 , 187194, 530, 1, 1, -3088.047, 2526.28, 75.9549, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+68 , 187194, 530, 1, 1, -2978.653, 2545.87, 97.51945, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+69 , 187194, 530, 1, 1, -2960.054, 2536.851, 96.74974, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+70 , 187194, 530, 1, 1, -2963.106, 2578.467, 97.77729, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+71 , 187194, 530, 1, 1, -2980.738, 2565.908, 97.9761, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+72 , 187194, 530, 1, 1, -2944.712, 2569.651, 97.11517, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+73 , 187194, 530, 1, 1, -2943.146, 2549.089, 96.68553, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3744) +(@OGUID+74 , 187194, 530, 1, 1, -3956.793, 2241.567, 107.9687, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+75 , 187194, 530, 1, 1, -4044.765, 2237.184, 118.0772, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3745) +(@OGUID+76 , 187194, 530, 1, 1, -4063.29, 2183.958, 117.962, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3745) +(@OGUID+77 , 187194, 530, 1, 1, -4053.135, 2167.243, 117.8958, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3745) +(@OGUID+78 , 187194, 530, 1, 1, -4063.405, 2159.092, 117.9386, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3745) +(@OGUID+79 , 187194, 530, 1, 1, -2625.937, 4419.99, 42.99473, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3683) +(@OGUID+80 , 187194, 530, 1, 1, -1260.943, 7180.634, 63.39374, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3613) +(@OGUID+81 , 187194, 530, 1, 1, -222.4095, 5391.945, 40.32674, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+82 , 187194, 530, 1, 1, -223.1397, 5396.124, 40.32872, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+83 , 187194, 530, 1, 1, -175.3683, 5512.138, 33.37462, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+84 , 187194, 530, 1, 1, -186.2492, 5519.735, 33.73346, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+85 , 187194, 530, 1, 1, -159.9268, 5517.314, 33.24236, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+86 , 187194, 530, 1, 1, -166.1566, 5537.293, 33.22692, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3565) +(@OGUID+87 , 187194, 530, 1, 1, -181.5449, 5532.257, 33.22929, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3565) +(@OGUID+88 , 187194, 530, 1, 1, -155.342, 5529.741, 33.96249, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3565) +(@OGUID+89 , 187194, 530, 1, 1, -96.04215, 5545.813, 45.60166, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3565) +(@OGUID+90 , 187194, 530, 1, 1, -91.70524, 5545.659, 45.61694, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3565) +(@OGUID+91 , 187194, 530, 1, 1, -337.4103, 5481.802, 37.91649, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3565) +(@OGUID+92 , 187194, 530, 1, 1, -341.6888, 5481.863, 37.94325, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3565) +(@OGUID+93 , 187194, 530, 1, 1, 1937.434, 6838.64, 177.4422, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3772) +(@OGUID+94 , 187194, 530, 1, 1, 1941.395, 6838.657, 177.4772, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3772) +(@OGUID+95 , 187194, 530, 1, 1, 2055.827, 6759.792, 173.2742, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3772) +(@OGUID+96 , 187194, 530, 1, 1, 2066.148, 6726.275, 181.5531, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3772) +(@OGUID+97 , 187194, 530, 1, 1, 2070.803, 6759.671, 173.2742, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3772) +(@OGUID+98 , 187194, 530, 1, 1, 2066.258, 6730.639, 181.5167, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3772) +(@OGUID+99 , 187194, 530, 1, 1, 2095.052, 6899.62, 190.4382, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3772) +(@OGUID+100, 187194, 530, 1, 1, 2085.431, 6890.104, 190.4657, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3772) +(@OGUID+101, 187194, 530, 1, 1, 2944.296, 5533.428, 163.821, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3828) +(@OGUID+102, 187194, 530, 1, 1, 2940.299, 5415.802, 165.9382, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3951) +(@OGUID+103, 187194, 530, 1, 1, 3085.633, 5473.628, 162.5824, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3951) +(@OGUID+104, 187194, 530, 1, 1, 2092.127, 4792.164, 175.6362, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3844) +(@OGUID+105, 187194, 530, 1, 1, 2078.747, 4789.831, 175.6968, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3844) +(@OGUID+106, 187194, 530, 1, 1, 2098.946, 4779.432, 175.5325, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3844) +(@OGUID+107, 187194, 530, 1, 1, 2090.407, 4769.771, 175.6497, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3844) +(@OGUID+108, 187194, 530, 1, 1, 2948.536, 3719.698, 150.2694, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+109, 187194, 530, 1, 1, 3018.137, 3748.76, 151.2779, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+110, 187194, 530, 1, 1, 3044.282, 3608.729, 150.461, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3712) +(@OGUID+111, 187194, 530, 1, 1, 3116.458, 3688.845, 150.6044, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3712) +(@OGUID+112, 187194, 530, 1, 1, 4116.873, 3058.359, 349.9748, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3738) +(@OGUID+113, 187194, 530, 1, 1, 4118.572, 2954.05, 360.3641, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3738) +(@OGUID+114, 187194, 530, 1, 1, 4184.254, 3009.556, 349.8448, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3738) +(@OGUID+115, 187194, 530, 1, 1, 2969.402, 1791.448, 145.6347, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3731) +(@OGUID+116, 187194, 530, 1, 1, 2984.813, 1803.785, 146.0861, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3731) +(@OGUID+117, 187194, 530, 1, 1, 203.049, 4333.749, 125.1613, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3552) +(@OGUID+118, 187194, 530, 1, 1, 175.2291, 2619.424, 98.45457, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3536) +(@OGUID+119, 187194, 530, 1, 1, 187.7007, 2628.467, 98.74133, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3536) +(@OGUID+120, 187194, 530, 1, 1, -717.3152, 2750.212, 100.8153, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3538) +(@OGUID+121, 187194, 530, 1, 1, -716.8414, 2735.047, 100.798, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3538) +(@OGUID+122, 187194, 530, 1, 1, -690.6761, 2732.448, 100.9171, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3538) +(@OGUID+123, 187194, 530, 1, 1, -690.3901, 2717.364, 101.012, 0, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3538) +(@OGUID+124, 187194, 530, 1, 1, -699.2603, 2709.337, 101.0987, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3538) +(@OGUID+125, 187235, 530, 1, 1, -4084.195, 1138.926, 44.43298, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3938) +(@OGUID+126, 187235, 530, 1, 1, -4088.488, 1139.846, 44.42666, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3938) +(@OGUID+127, 187235, 530, 1, 1, -4112.096, 1121.578, 44.54679, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3938) +(@OGUID+128, 187235, 530, 1, 1, -4114.819, 1116.677, 44.53127, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3938) +(@OGUID+129, 187235, 530, 1, 1, -4062.444, 1135.474, 43.18277, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3938) +(@OGUID+130, 187235, 530, 1, 1, -4135.374, 1128.675, 54.58289, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3938) +(@OGUID+131, 187235, 530, 1, 1, -4065.08, 1138.295, 43.1756, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3938) +(@OGUID+132, 187235, 530, 1, 1, -4130.572, 1173.389, 49.58154, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3938) +(@OGUID+133, 187235, 530, 1, 1, -3089.802, 837.7723, -19.92381, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+134, 187235, 530, 1, 1, -3080.772, 825.7006, -11.35703, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+135, 187235, 530, 1, 1, -3075.424, 858.7751, -20.02081, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+136, 187235, 530, 1, 1, -3079.415, 748.1234, -10.33996, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+137, 187235, 530, 1, 1, -3055.614, 812.4755, -9.506436, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+138, 187235, 530, 1, 1, -3016.658, 795.0476, -9.916844, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+139, 187235, 530, 1, 1, -3041.075, 832.1203, -9.484895, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+140, 187235, 530, 1, 1, -3010.563, 770.086, -6.933084, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+141, 187235, 530, 1, 1, -3040.775, 806.6836, -9.706291, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+142, 187235, 530, 1, 1, -3028.215, 823.3273, -9.546359, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+143, 187235, 530, 1, 1, -3061.827, 853.1981, -11.37245, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+144, 187235, 530, 1, 1, -3009.987, 803.8392, -10.3957, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+145, 187235, 530, 1, 1, -2983.705, 809.1548, -6.9079, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+146, 187235, 530, 1, 1, -3007.626, 853.5888, -10.48604, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+147, 187235, 530, 1, 1, -2983.507, 869.4686, -7.479865, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+148, 187235, 530, 1, 1, -3012.275, 861.4301, -10.48986, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3754) +(@OGUID+149, 187235, 530, 1, 1, -3052.811, 2481.651, 66.65688, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+150, 187235, 530, 1, 1, -3065.579, 2555.547, 65.75816, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+151, 187235, 530, 1, 1, -3107.003, 2545.114, 62.05597, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+152, 187235, 530, 1, 1, -3006.598, 2549.313, 78.11643, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+153, 187235, 530, 1, 1, -2979.335, 2554.049, 76.54335, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+154, 187235, 530, 1, 1, -2970.731, 2573.003, 76.54335, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+155, 187235, 530, 1, 1, -2986.574, 2565.178, 76.54335, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+156, 187235, 530, 1, 1, -3031.269, 2631.006, 76.54335, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+157, 187235, 530, 1, 1, -2956.544, 2554.592, 126.6191, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+158, 187235, 530, 1, 1, -3081.042, 2598.579, 61.74963, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+159, 187235, 530, 1, 1, -2932.842, 2657.233, 94.24632, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+160, 187235, 530, 1, 1, -2921.617, 2644.625, 94.40192, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+161, 187235, 530, 1, 1, -3104.677, 2582.695, 61.977, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3744) +(@OGUID+162, 187235, 530, 1, 1, -3948.719, 2165.375, 100.8409, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+163, 187235, 530, 1, 1, -4035.944, 2238.973, 112.2723, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+164, 187235, 530, 1, 1, -3984.704, 2162.162, 105.4418, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+165, 187235, 530, 1, 1, -3966.465, 2185.426, 101.8951, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+166, 187235, 530, 1, 1, -4008.345, 2172.325, 105.0965, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+167, 187235, 530, 1, 1, -3981.395, 2150.587, 105.0282, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+168, 187235, 530, 1, 1, -4026.63, 2188.58, 109.1173, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+169, 187235, 530, 1, 1, -4047.156, 2228.053, 112.0462, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+170, 187235, 530, 1, 1, -4062.359, 2190.83, 109.8543, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+171, 187235, 530, 1, 1, -3930.809, 2115.148, 96.81004, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3745) +(@OGUID+172, 187235, 530, 1, 1, -2975.988, 3877.033, 9.545059, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3691) +(@OGUID+173, 187235, 530, 1, 1, -2987.699, 3860.738, 8.660349, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3691) +(@OGUID+174, 187235, 530, 1, 1, -2942.975, 3949.947, 0.906697, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3691) +(@OGUID+175, 187235, 530, 1, 1, -2943.432, 3903.176, 3.423485, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3691) +(@OGUID+176, 187235, 530, 1, 1, -2956.34, 3907.056, 3.423482, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3691) +(@OGUID+177, 187235, 530, 1, 1, -2926.811, 4019.083, 0.413682, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3684) +(@OGUID+178, 187235, 530, 1, 1, -2904.558, 4017.979, 0.378337, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3684) +(@OGUID+179, 187235, 530, 1, 1, -2924.175, 4014.802, 0.424108, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3684) +(@OGUID+180, 187235, 530, 1, 1, -2966.667, 4073.203, 2.960989, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3684) +(@OGUID+181, 187235, 530, 1, 1, -2667.306, 4424.93, 37.06041, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+182, 187235, 530, 1, 1, -2623.644, 4378.721, 35.27359, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+183, 187235, 530, 1, 1, -2611.685, 4383.334, 32.93204, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+184, 187235, 530, 1, 1, -2631.962, 4428.709, 36.10242, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3683) +(@OGUID+185, 187235, 530, 1, 1, -2666.818, 4443.57, 36.34382, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3683) +(@OGUID+186, 187235, 530, 1, 1, -2617.922, 4427.623, 36.09334, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3683) +(@OGUID+187, 187235, 530, 1, 1, -2614.487, 4456.502, 36.09352, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3683) +(@OGUID+188, 187235, 530, 1, 1, -2624.518, 4467.333, 36.14123, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3683) +(@OGUID+189, 187235, 530, 1, 1, -2569.438, 4420.438, 39.15441, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3683) +(@OGUID+190, 187235, 530, 1, 1, -2545.219, 4312.679, 20.62585, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3683) +(@OGUID+191, 187235, 530, 1, 1, -2558.318, 4305.626, 20.76239, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3683) +(@OGUID+192, 187235, 530, 1, 1, -2600.806, 7237.711, 12.91722, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+193, 187235, 530, 1, 1, -2626.202, 7216.55, 20.35766, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+194, 187235, 530, 1, 1, -2630.099, 7224.425, 19.74051, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+195, 187235, 530, 1, 1, -2534.468, 7256.75, 16.26636, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+196, 187235, 530, 1, 1, -2596.802, 7228.939, 13.47051, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+197, 187235, 530, 1, 1, -2570.705, 7291.29, 14.81433, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+198, 187235, 530, 1, 1, -2528.435, 7266.286, 16.27025, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+199, 187235, 530, 1, 1, -2602.271, 7282.346, 19.39945, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+200, 187235, 530, 1, 1, -2670.031, 7211.863, 23.66941, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+201, 187235, 530, 1, 1, -2573.72, 7300.305, 13.90452, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+202, 187235, 530, 1, 1, -2605.266, 7291.263, 19.8158, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+203, 187235, 530, 1, 1, -2614.92, 7297.726, 20.7448, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+204, 187235, 530, 1, 1, -2625.71, 7298.209, 21.14083, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+205, 187235, 530, 1, 1, -2614.572, 7330.876, 24.21089, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+206, 187235, 530, 1, 1, -2678.989, 7214.03, 23.95701, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+207, 187235, 530, 1, 1, -2624.408, 7331.686, 24.46344, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+208, 187235, 530, 1, 1, -2618.061, 7338.908, 23.65936, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+209, 187235, 530, 1, 1, -2697.95, 7284.061, 42.72089, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+210, 187235, 530, 1, 1, -2702.841, 7293.721, 88.63655, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+211, 187235, 530, 1, 1, -2692.656, 7296.979, 42.78501, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+212, 187235, 530, 1, 1, -2762.166, 7267.401, 40.26734, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+213, 187235, 530, 1, 1, -2755.534, 7275.691, 40.27126, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+214, 187235, 530, 1, 1, -2752.121, 7315.08, 43.48479, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+215, 187235, 530, 1, 1, -2755.324, 7317.081, 56.35859, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+216, 187235, 530, 1, 1, -2721.762, 7343.454, 39.44633, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+217, 187235, 530, 1, 1, -2720.994, 7355.896, 39.75894, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+218, 187235, 530, 1, 1, -2611.334, 7343.457, 23.60636, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+219, 187235, 530, 1, 1, -2571.461, 7378.03, 11.05957, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+220, 187235, 530, 1, 1, -2561.666, 7378.96, 10.5709, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3626) +(@OGUID+221, 187235, 530, 1, 1, -1454.16, 7165.046, 44.56573, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+222, 187235, 530, 1, 1, -1387.221, 7134.828, 34.03579, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+223, 187235, 530, 1, 1, -1392.476, 7140.168, 33.73893, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+224, 187235, 530, 1, 1, -1364.813, 7156.565, 34.00505, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+225, 187235, 530, 1, 1, -1371.671, 7162.804, 33.254, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+226, 187235, 530, 1, 1, -1296.558, 6953.973, 33.24513, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+227, 187235, 530, 1, 1, -1254.381, 7007.266, 36.623, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+228, 187235, 530, 1, 1, -1307.797, 6960.474, 32.26982, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+229, 187235, 530, 1, 1, -1241.754, 7003.594, 36.79386, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+230, 187235, 530, 1, 1, -1194.752, 7110.279, 58.0645, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+231, 187235, 530, 1, 1, -1209.608, 7103.708, 57.44921, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+232, 187235, 530, 1, 1, -1262.076, 7107.592, 58.88747, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+233, 187235, 530, 1, 1, -1247.801, 7101.981, 58.06834, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+234, 187235, 530, 1, 1, -1283.426, 7130.822, 59.73568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+235, 187235, 530, 1, 1, -1173.556, 7134.231, 58.11499, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+236, 187235, 530, 1, 1, -1176.216, 7200.084, 58.21382, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+237, 187235, 530, 1, 1, -1184.833, 7207.807, 57.92133, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+238, 187235, 530, 1, 1, -1201.722, 7206.649, 58.55188, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+239, 187235, 530, 1, 1, -1221.305, 7222.463, 59.25886, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+240, 187235, 530, 1, 1, -1184.679, 7246.92, 35.14313, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+241, 187235, 530, 1, 1, -1249.806, 7217.763, 58.32962, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+242, 187235, 530, 1, 1, -1198.807, 7250.11, 35.15434, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+243, 187235, 530, 1, 1, -1271.883, 7197.997, 57.89819, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+244, 187235, 530, 1, 1, -1282.837, 7187.43, 58.00641, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+245, 187235, 530, 1, 1, -1296.44, 7267.444, 34.61653, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+246, 187235, 530, 1, 1, -1302.753, 7271.99, 34.41439, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+247, 187235, 530, 1, 1, -1265.508, 7313.129, 34.21532, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+248, 187235, 530, 1, 1, -1273.831, 7316.673, 33.7791, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+249, 187235, 530, 1, 1, -1220.264, 7388.16, 30.78928, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+250, 187235, 530, 1, 1, -1207.967, 7386.663, 31.42567, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3613) +(@OGUID+251, 187235, 530, 1, 1, 201.9845, 8489.734, 24.44587, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+252, 187235, 530, 1, 1, 223.5183, 8562.453, 23.26412, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+253, 187235, 530, 1, 1, 253.3038, 8489.067, 23.37944, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+254, 187235, 530, 1, 1, 265.287, 8514.346, 23.52993, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+255, 187235, 530, 1, 1, 276.1272, 7957.609, 21.57661, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+256, 187235, 530, 1, 1, 247.4571, 7941.143, 25.69258, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+257, 187235, 530, 1, 1, 285.1593, 7952.144, 21.52511, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+258, 187235, 530, 1, 1, 210.8226, 7926.406, 25.6933, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+259, 187235, 530, 1, 1, 250.3989, 7896.925, 21.68546, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+260, 187235, 530, 1, 1, 261.7739, 7872.234, 23.73318, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+261, 187235, 530, 1, 1, 238.5979, 7893.07, 21.80824, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+262, 187235, 530, 1, 1, 253.7596, 7836.7, 22.96672, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+263, 187235, 530, 1, 1, 287.7669, 7842.643, 22.58914, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+264, 187235, 530, 1, 1, 293.3064, 7831.16, 24.93296, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+265, 187235, 530, 1, 1, 229.981, 7821.426, 21.9932, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+266, 187235, 530, 1, 1, 210.443, 7810.77, 23.8272, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+267, 187235, 530, 1, 1, 334.9908, 7839.56, 22.29418, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3645) +(@OGUID+268, 187235, 530, 1, 1, 276.2028, 6122.649, 142.509, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+269, 187235, 530, 1, 1, 275.337, 6082.517, 131.545, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+270, 187235, 530, 1, 1, 307.1656, 6055.835, 131.5718, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+271, 187235, 530, 1, 1, 290.4184, 6083.181, 131.5468, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+272, 187235, 530, 1, 1, 227.5588, 6070.599, 148.3118, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+273, 187235, 530, 1, 1, 222.1361, 6049.518, 148.3132, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+274, 187235, 530, 1, 1, 217.2829, 6078.526, 148.3125, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+275, 187235, 530, 1, 1, 280.785, 6008.137, 144.7295, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+276, 187235, 530, 1, 1, 278.5881, 5966.778, 150.1677, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+277, 187235, 530, 1, 1, 208.3886, 6049.729, 148.32, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+278, 187235, 530, 1, 1, 301.7136, 5979.073, 132.4598, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+279, 187235, 530, 1, 1, 261.4174, 5980.111, 132.9563, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+280, 187235, 530, 1, 1, 269.9623, 5956.735, 26.43292, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+281, 187235, 530, 1, 1, 296.5285, 5941.624, 26.55748, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+282, 187235, 530, 1, 1, 272.3167, 5944.75, 26.52184, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+283, 187235, 530, 1, 1, 298.2953, 5957.52, 26.42815, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3644) +(@OGUID+284, 187235, 530, 1, 1, -208.6328, 5388.645, 22.92735, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+285, 187235, 530, 1, 1, -210.9873, 5433.489, 21.37882, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+286, 187235, 530, 1, 1, -192.4105, 5510.174, 22.67085, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+287, 187235, 530, 1, 1, -236.2242, 5387.014, 24.6395, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+288, 187235, 530, 1, 1, -212.93, 5473.045, 22.87997, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+289, 187235, 530, 1, 1, -184.6291, 5506.406, 29.47097, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+290, 187235, 530, 1, 1, -253.026, 5481.032, 24.94352, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+291, 187235, 530, 1, 1, -196.088, 5525.092, 22.81344, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+292, 187235, 530, 1, 1, -192.6228, 5531.502, 29.45192, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+293, 187235, 530, 1, 1, -213.9051, 5547.442, 24.07233, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+294, 187235, 530, 1, 1, -145.6747, 5545.872, 22.66767, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+295, 187235, 530, 1, 1, -306.1548, 5479.317, 22.28877, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+296, 187235, 530, 1, 1, -149.7903, 5567.248, 23.00511, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+297, 187235, 530, 1, 1, -87.05946, 5555.918, 22.68842, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+298, 187235, 530, 1, 1, -87.59586, 5535.549, 22.80703, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+299, 187235, 530, 1, 1, -324.4565, 5466.785, 22.66969, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+300, 187235, 530, 1, 1, -344.9888, 5492.374, 22.00702, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3565) +(@OGUID+301, 187235, 530, 1, 1, 2007.013, 6878.822, 178.9834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3772) +(@OGUID+302, 187235, 530, 1, 1, 2017.319, 6873.481, 178.983, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3772) +(@OGUID+303, 187235, 530, 1, 1, 2161.682, 6783.048, 183.4536, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3772) +(@OGUID+304, 187235, 530, 1, 1, 3011.185, 5493.75, 145.0009, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3951) +(@OGUID+305, 187235, 530, 1, 1, 2950.829, 5486.531, 144.1427, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3951) +(@OGUID+306, 187235, 530, 1, 1, 2969.01, 5459.725, 144.6972, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3951) +(@OGUID+307, 187235, 530, 1, 1, 2087.611, 4782.989, 157.7814, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3844) +(@OGUID+308, 187235, 530, 1, 1, 2019.061, 4700.482, 150.2378, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3844) +(@OGUID+309, 187235, 530, 1, 1, 2946.058, 3725.089, 143.1839, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+310, 187235, 530, 1, 1, 2945.531, 3714.857, 143.1773, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+311, 187235, 530, 1, 1, 2984.193, 3711.066, 142.8784, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+312, 187235, 530, 1, 1, 3014.989, 3753.323, 144.3842, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+313, 187235, 530, 1, 1, 3025.728, 3750.257, 144.7281, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+314, 187235, 530, 1, 1, 2972.385, 3659.229, 144.8418, 0, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+315, 187235, 530, 1, 1, 2972.166, 3648.618, 144.8469, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+316, 187235, 530, 1, 1, 2947.035, 3659.529, 132.5782, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+317, 187235, 530, 1, 1, 3003.333, 3637.782, 143.8042, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+318, 187235, 530, 1, 1, 2947.682, 3649.331, 132.5782, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+319, 187235, 530, 1, 1, 3004.393, 3656.724, 143.8046, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+320, 187235, 530, 1, 1, 3058.527, 3663.685, 143.0369, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+321, 187235, 530, 1, 1, 3037.129, 3606.581, 144.4336, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+322, 187235, 530, 1, 1, 3050.564, 3606.492, 143.6797, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+323, 187235, 530, 1, 1, 3101.883, 3664.01, 142.859, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+324, 187235, 530, 1, 1, 3120.857, 3684.906, 143.2626, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+325, 187235, 530, 1, 1, 3115.857, 3694.574, 144.0382, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3712) +(@OGUID+326, 187235, 530, 1, 1, 4092.646, 3104.921, 339.3883, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+327, 187235, 530, 1, 1, 4087.922, 3100.24, 339.3883, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+328, 187235, 530, 1, 1, 4099.208, 3107.681, 339.3884, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+329, 187235, 530, 1, 1, 4082.152, 3077.441, 339.3883, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+330, 187235, 530, 1, 1, 4083.412, 3091.455, 339.3883, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+331, 187235, 530, 1, 1, 4113.936, 3050.741, 339.3003, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+332, 187235, 530, 1, 1, 4105.933, 3108.072, 339.3884, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+333, 187235, 530, 1, 1, 4123.493, 3055.268, 339.3098, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+334, 187235, 530, 1, 1, 4114.772, 2967.272, 352.1837, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+335, 187235, 530, 1, 1, 4126.727, 3096.481, 339.3884, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+336, 187235, 530, 1, 1, 4122.787, 2967.157, 352.2287, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+337, 187235, 530, 1, 1, 4114.827, 3105.379, 339.3884, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+338, 187235, 530, 1, 1, 4177.695, 3093.462, 335.8202, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+339, 187235, 530, 1, 1, 4178.088, 3015.381, 339.1293, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+340, 187235, 530, 1, 1, 4200.194, 3075.751, 335.8202, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+341, 187235, 530, 1, 1, 4177.452, 3004.381, 339.1197, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3738) +(@OGUID+342, 187235, 530, 1, 1, -597.0756, 4097.25, 91.20135, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+343, 187235, 530, 1, 1, -614.8662, 4105.143, 90.61221, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+344, 187235, 530, 1, 1, -597.7095, 4154.32, 65.34729, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+345, 187235, 530, 1, 1, -607.19, 4092.015, 91.52787, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+346, 187235, 530, 1, 1, -594.8254, 4161.748, 65.72984, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+347, 187235, 530, 1, 1, -661.8232, 4157.855, 66.00025, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3554) +(@OGUID+348, 187235, 530, 1, 1, -646.139, 4161.18, 66.14372, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3554) +(@OGUID+349, 187235, 530, 1, 1, -685.7603, 4176.175, 57.45311, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3554) +(@OGUID+350, 187235, 530, 1, 1, -696.738, 4172.803, 58.3883, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3554) +(@OGUID+351, 187235, 530, 1, 1, 82.60951, 4318.784, 102.0311, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+352, 187235, 530, 1, 1, 80.49339, 4347.601, 102.071, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+353, 187235, 530, 1, 1, 147.9486, 4275.235, 107.2797, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+354, 187235, 530, 1, 1, 152.2135, 4318.471, 106.2541, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+355, 187235, 530, 1, 1, 181.2025, 4317.459, 119.9638, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+356, 187235, 530, 1, 1, 181.4662, 4350.056, 119.962, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+357, 187235, 530, 1, 1, 151.8665, 4348.405, 107.2158, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+358, 187235, 530, 1, 1, 140.73, 4269.448, 107.4208, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+359, 187235, 530, 1, 1, 134.9947, 4319.371, 106.7541, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+360, 187235, 530, 1, 1, 136.032, 4345.664, 106.6182, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+361, 187235, 530, 1, 1, 196.2876, 4328.141, 116.8841, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+362, 187235, 530, 1, 1, 196.4538, 4339.529, 116.9748, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3552) +(@OGUID+363, 187235, 530, 1, 1, 211.9928, 2818.017, 129.8682, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+364, 187235, 530, 1, 1, 215.5181, 2828.05, 130.0014, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+365, 187235, 530, 1, 1, 223.0891, 2810.249, 129.6152, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+366, 187235, 530, 1, 1, 123.4488, 2766.59, 102.234, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+367, 187235, 530, 1, 1, 277.2957, 2769.554, 84.67036, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+368, 187235, 530, 1, 1, 293.5556, 2757.308, 85.24716, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+369, 187235, 530, 1, 1, 182.2488, 2695.313, 88.79645, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+370, 187235, 530, 1, 1, 49.26655, 2658.362, 78.4103, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+371, 187235, 530, 1, 1, 41.7532, 2675.019, 78.98357, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+372, 187235, 530, 1, 1, 177.3938, 2641.12, 87.18604, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+373, 187235, 530, 1, 1, 168.2221, 2632.726, 86.68047, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+374, 187235, 530, 1, 1, 193.15, 2600.053, 87.28353, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+375, 187235, 530, 1, 1, 202.2809, 2606.497, 87.28353, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+376, 187235, 530, 1, 1, 184.4233, 2683.703, 88.28799, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3536) +(@OGUID+377, 187235, 530, 1, 1, -699.3879, 2717.673, 94.73693, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+378, 187235, 530, 1, 1, -714.3968, 2671.541, 93.92791, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+379, 187235, 530, 1, 1, -702.0106, 2676.552, 93.48396, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+380, 187235, 530, 1, 1, -720.9301, 2658.757, 93.7806, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+381, 187235, 530, 1, 1, -690.535, 2673.585, 92.20389, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+382, 187235, 530, 1, 1, -685.2488, 2644.338, 90.4667, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+383, 187235, 530, 1, 1, -681.7703, 2653.848, 90.5937, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+384, 187235, 530, 1, 1, -684.1902, 2664.04, 90.97864, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+385, 187235, 530, 1, 1, -717.8087, 2647.749, 93.05632, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+386, 187235, 530, 1, 1, -695.8323, 2638.751, 90.97626, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+387, 187235, 530, 1, 1, -708.6624, 2640.041, 91.84985, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3538) +(@OGUID+388, 187567, 530, 1, 1, -1892.362, 5766.126, 137.6966, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+389, 187567, 530, 1, 1, -1905.432, 5771.346, 137.7419, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+390, 187567, 530, 1, 1, -2038.49, 5581.255, 61.24476, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+391, 187567, 530, 1, 1, -2035.57, 5586.847, 61.24483, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+392, 187567, 530, 1, 1, -2036.897, 5584.012, 61.26592, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+393, 187567, 530, 1, 1, -2128.878, 5392.149, 61.94658, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+394, 187567, 530, 1, 1, -2130.479, 5385.966, 61.93264, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+395, 187567, 530, 1, 1, -2176.667, 5405.86, 58.44925, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+396, 187567, 530, 1, 1, -2129.456, 5389.029, 61.96077, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 187567 (Area: 0) +(@OGUID+397, 187194, 530, 1, 1, -1663.903, 5690.384, 136.3553, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: -1) +(@OGUID+398, 187194, 530, 1, 1, -1653.502, 5684.1, 136.7168, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: -1) +(@OGUID+399, 187194, 530, 1, 1, -1729.521, 5621.411, 133.7459, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3896) +(@OGUID+400, 187194, 530, 1, 1, -1730.328, 5649.338, 136.299, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3896) +(@OGUID+401, 187194, 530, 1, 1, -1731.906, 5520.3, -1.939075, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+402, 187194, 530, 1, 1, -1812.533, 5583.482, 120.5712, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+403, 187194, 530, 1, 1, -1813.805, 5580.227, 91.52555, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+404, 187194, 530, 1, 1, -1816.16, 5572.405, 43.60283, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+405, 187194, 530, 1, 1, -1749.124, 5825.378, 154.6613, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+406, 187194, 530, 1, 1, -1718.129, 5815.12, 154.7978, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+407, 187194, 530, 1, 1, -1934.761, 5896.532, 150.6684, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+408, 187194, 530, 1, 1, -1942.879, 5914.961, 156.5788, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+409, 187194, 530, 1, 1, -1925.782, 5878.919, 146.7551, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+410, 187194, 530, 1, 1, -1875.536, 5667.097, 136.4771, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+411, 187194, 530, 1, 1, -1879.472, 5639.645, 133.5795, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+412, 187194, 530, 1, 1, -2013.85, 5671.153, 104.9756, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+413, 187194, 530, 1, 1, -2017.71, 5378.448, -1.333304, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+414, 187194, 530, 1, 1, -1997.599, 5338.071, -1.492924, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+415, 187194, 530, 1, 1, -1944.976, 5457.333, 7.488452, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+416, 187194, 530, 1, 1, -1899.788, 5489.576, 1.694759, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+417, 187194, 530, 1, 1, -1935.765, 5455.917, 7.523492, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+418, 187194, 530, 1, 1, -1927.292, 5449.407, 7.559447, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+419, 187194, 530, 1, 1, -1891.23, 5493.697, 1.689483, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+420, 187194, 530, 1, 1, -1837.674, 5500.055, 7.758192, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+421, 187194, 530, 1, 1, -1835.983, 5512.57, 7.712725, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+422, 187194, 530, 1, 1, -1844.252, 5491.67, 7.615454, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+423, 187194, 530, 1, 1, -1803.723, 5465.471, 1.856312, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+424, 187194, 530, 1, 1, -1928.542, 5402.78, 1.636353, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+425, 187194, 530, 1, 1, -1924.202, 5394.32, 1.635512, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+426, 187194, 530, 1, 1, -1960.267, 5271.778, -26.97055, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+427, 187194, 530, 1, 1, -1890.597, 5347.037, 7.485257, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+428, 187194, 530, 1, 1, -1889.784, 5355.277, 7.540157, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+429, 187194, 530, 1, 1, -1883.602, 5366.065, 7.457774, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+430, 187194, 530, 1, 1, -2056.806, 5228.367, -27.39764, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+431, 187194, 530, 1, 1, -2138.824, 5148.72, -8.640973, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+432, 187194, 530, 1, 1, -1852.577, 5113.244, -27.45319, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3899) +(@OGUID+433, 187194, 530, 1, 1, -1759.38, 5167.662, -28.72669, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3899) +(@OGUID+434, 187194, 530, 1, 1, -1760.908, 5171.574, -17.26135, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3899) +(@OGUID+435, 187194, 530, 1, 1, -1774.86, 5267.382, -27.0181, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3899) +(@OGUID+436, 187194, 530, 1, 1, -1864.128, 4999.87, -8.724302, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+437, 187194, 530, 1, 1, -1836.34, 5366.165, 1.704274, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+438, 187194, 530, 1, 1, -1827.949, 5370.521, 1.711476, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+439, 187194, 530, 1, 1, -1801.535, 5407.848, 7.507989, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+440, 187194, 530, 1, 1, -1780.938, 5402.119, 7.497567, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+441, 187194, 530, 1, 1, -1791.009, 5407.314, 7.599545, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+442, 187194, 530, 1, 1, -1645.066, 5192.24, -27.42542, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3899) +(@OGUID+443, 187194, 530, 1, 1, -1552.944, 5125.714, -8.696525, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3899) +(@OGUID+444, 187194, 530, 1, 1, -1678.58, 5425.511, -27.12226, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3899) +(@OGUID+445, 187194, 530, 1, 1, -1712.126, 5480.591, -1.884637, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 3899) +(@OGUID+446, 187194, 530, 1, 1, -1799.061, 5457.251, 1.845763, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 187194 (Area: 0) +(@OGUID+447, 187235, 530, 1, 1, -1791.788, 5726.31, 129.1411, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: -1) +(@OGUID+448, 187235, 530, 1, 1, -1695.16, 5519.628, -39.98275, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3896) +(@OGUID+449, 187235, 530, 1, 1, -1694.055, 5524.397, -40.37257, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3896) +(@OGUID+450, 187235, 530, 1, 1, -1706.805, 5522.744, -9.799464, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3896) +(@OGUID+451, 187235, 530, 1, 1, -1743.729, 5710.51, 129.1411, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+452, 187235, 530, 1, 1, -1802.705, 5597.75, 130.8119, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+453 ,187235, 530, 1, 1, -1811.717, 5600.768, 130.8119, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+454, 187235, 530, 1, 1, -1798.486, 5585.74, 3.878141, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+455, 187235, 530, 1, 1, -1822.766, 5593.826, 3.894919, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+456, 187235, 530, 1, 1, -1745.379, 5726.958, 128.7801, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+457, 187235, 530, 1, 1, -1780.283, 5739.229, 128.7909, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+458, 187235, 530, 1, 1, -1844.504, 5746.667, 130.7976, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+459, 187235, 530, 1, 1, -1846.261, 5773.022, 131.2068, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+460, 187235, 530, 1, 1, -1864.92, 5715.607, 132.2513, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+461, 187235, 530, 1, 1, -1886.932, 5771.139, 129.5579, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+462, 187235, 530, 1, 1, -1893.715, 5757.046, 129.482, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+463, 187235, 530, 1, 1, -1904.28, 5729.601, 131.1909, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+464, 187235, 530, 1, 1, -1888.447, 5716.592, 132.1732, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+465, 187235, 530, 1, 1, -1917.616, 5746.094, 131.1787, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+466, 187235, 530, 1, 1, -1993.964, 5686.367, 117.6628, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+467, 187235, 530, 1, 1, -1990.117, 5678.112, 117.6628, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+468, 187235, 530, 1, 1, -2145.284, 5497.773, 51.2669, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+469, 187235, 530, 1, 1, -2185.163, 5454.922, 51.2669, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+470, 187235, 530, 1, 1, -2167.578, 5441.844, 51.2669, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+471, 187235, 530, 1, 1, -2176.784, 5413.221, 50.22791, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+472, 187235, 530, 1, 1, -2171.618, 5399.994, 50.22791, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+473, 187235, 530, 1, 1, -2021.757, 5336.417, -9.350949, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+474, 187235, 530, 1, 1, -2039.003, 5348.268, -39.60724, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+475, 187235, 530, 1, 1, -2035.199, 5336.296, -41.17906, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+476, 187235, 530, 1, 1, -2034.284, 5338.984, -39.56686, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+477, 187235, 530, 1, 1, -2034.004, 5359.76, -9.350951, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+478, 187235, 530, 1, 1, -2042.174, 5349.124, -41.06185, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+479, 187235, 530, 1, 1, -1994.435, 5356.163, -8.067644, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+480, 187235, 530, 1, 1, -2001.405, 5370.284, -8.034398, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+481, 187235, 530, 1, 1, -2029.916, 5490.481, 54.53994, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+482, 187235, 530, 1, 1, -2032.695, 5481.466, 54.53995, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+483, 187235, 530, 1, 1, -2016.837, 5494.008, 3.808645, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+484, 187235, 530, 1, 1, -2024.566, 5470.972, 3.928363, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+485, 187235, 530, 1, 1, -1937.382, 5462.885, -11.71269, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+486, 187235, 530, 1, 1, -1924.117, 5442.264, -12.42821, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+487, 187235, 530, 1, 1, -1917.352, 5455.052, -12.55365, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+488, 187235, 530, 1, 1, -1907.199, 5450.696, -12.42813, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+489, 187235, 530, 1, 1, -1942.517, 5448.51, -11.81798, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+490, 187235, 530, 1, 1, -1911.368, 5439.292, -12.42818, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+491, 187235, 530, 1, 1, -1965.476, 5271.957, -38.80977, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+492, 187235, 530, 1, 1, -1895.847, 5357.5, -12.42795, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+493, 187235, 530, 1, 1, -1885.166, 5386.202, -12.42817, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+494, 187235, 530, 1, 1, -1889.708, 5376.175, -12.4282, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+495, 187235, 530, 1, 1, -1882.257, 5352.341, -12.42798, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+496, 187235, 530, 1, 1, -1875.24, 5371.807, -12.56568, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+497, 187235, 530, 1, 1, -1957.021, 5267.327, -38.80976, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+498, 187235, 530, 1, 1, -1873.54, 5382.65, -12.42811, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+499, 187235, 530, 1, 1, -2043.987, 5269.151, -39.19569, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+500, 187235, 530, 1, 1, -2050.452, 5241.551, -38.85723, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 0) +(@OGUID+501, 187193, 530, 1, 1, -1770.184, 5653.325, 130.298, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 3896) +(@OGUID+502, 187193, 530, 1, 1, -1804.74, 5664.917, 130.2563, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+503, 187193, 530, 1, 1, -1726.981, 5770.609, 146.4398, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+504, 187193, 530, 1, 1, -1769.009, 5784.69, 146.4398, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+505, 187193, 530, 1, 1, -1962.946, 5684.213, 117.6628, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+506, 187193, 530, 1, 1, -1894.682, 5582.585, -12.42814, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+507, 187193, 530, 1, 1, -1854.363, 5590.511, -12.42814, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+508, 187193, 530, 1, 1, -1974.76, 5703.745, 117.6628, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+509, 187193, 530, 1, 1, -2055.186, 5638.795, 51.26693, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+510, 187193, 530, 1, 1, -2063.063, 5662.036, 51.26693, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+511, 187193, 530, 1, 1, -2148.991, 5544.24, 50.59611, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+512, 187193, 530, 1, 1, -2160.861, 5510.712, 50.61835, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+513, 187193, 530, 1, 1, -2139.512, 5380.506, 51.26692, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+514, 187193, 530, 1, 1, -2134.334, 5401.409, 51.26692, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+515, 187193, 530, 1, 1, -2090.424, 5316.59, -37.32355, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+516, 187193, 530, 1, 1, -2050.71, 5478.405, 54.06078, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+517, 187193, 530, 1, 1, -2042.596, 5503.583, 54.06772, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+518, 187193, 530, 1, 1, -1996.99, 5518.171, -12.42814, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+519, 187193, 530, 1, 1, -1971.556, 5543.559, -12.42814, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+520, 187193, 530, 1, 1, -1990.255, 5266.926, -42.22517, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+521, 187193, 530, 1, 1, -1915.555, 5296.894, 0.817524, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+522, 187193, 530, 1, 1, -1959.46, 5260.686, -38.8396, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+523, 187193, 530, 1, 1, -1970.106, 5267.567, -38.84131, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+524, 187193, 530, 1, 1, -1902.346, 5293.578, 0.857056, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+525, 187193, 530, 1, 1, -1873.236, 5269.362, -12.42814, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+526, 187193, 530, 1, 1, -1990.083, 5210.791, -44.36731, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+527, 187193, 530, 1, 1, -1982.277, 5110.882, 7.504348, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+528, 187193, 530, 1, 1, -1964.9, 5104.314, 7.514653, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+529, 187193, 530, 1, 1, -1788.93, 5253.065, -40.20916, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 3899) +(@OGUID+530, 187193, 530, 1, 1, -1832.604, 5277.454, -12.42814, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 3899) +(@OGUID+531, 187193, 530, 1, 1, -1873.795, 4977.795, -22.33295, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+532, 187193, 530, 1, 1, -1857.198, 4976.8, -22.56705, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+533, 187193, 530, 1, 1, -1755.321, 5315.891, -12.42814, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+534, 187193, 530, 1, 1, -1728.786, 5341.39, -12.42814, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+535, 187193, 530, 1, 1, -1546.829, 5108.851, -20.84263, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 3899) +(@OGUID+536, 187193, 530, 1, 1, -1535.441, 5120.412, -20.31925, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 0) +(@OGUID+537, 187193, 530, 1, 1, -1674.443, 5406.264, -40.40601, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 187193 (Area: 3899) +(@OGUID+538, 178746, 530, 1, 1, -1969.516, 5349.811, -12.42814, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 178746 (Area: 0) +(@OGUID+539, 178746, 530, 1, 1, -1732.454, 5460.457, -12.42814, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 178746 (Area: 3899) +(@OGUID+540, 180796, 530, 1, 1, -1983.031, 5089.068, 7.856039, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 180796 (Area: 0) +(@OGUID+541, 180797, 530, 1, 1, -1982.964, 5089.167, 7.85815, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 180797 (Area: 0) +(@OGUID+542, 187235, 530, 1, 1, -1735.256, 5502.995, -8.428672, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3703) +(@OGUID+543, 187235, 530, 1, 1, -1727.312, 5487.572, -8.355326, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 187235 (Area: 3703) +(@OGUID+544, 187567, 530, 1, 1, -690.7932, 2724.943, 100.9289, 6.265733, 0, 0, 0, 1, 120, 255, 1); -- 187567 (Area: 3483) + +SET @OGUID:=78976; +SET @Event:=2; +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+544 AND `eventEntry`=@Event; +INSERT INTO game_event_gameobject SELECT @Event, gameobject.guid FROM `gameobject` WHERE gameobject.guid BETWEEN @OGUID+0 AND @OGUID+544; + +-- Add spawns Pat's Snowcloud Guy & +SET @CGUID := 52265; +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+4; +INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`) VALUES +(@CGUID+0, 15730, 530, -1981.646, 5088.522, 9.341895, 2.443461, 120, 0), -- 15730 (Area: 3703) (Auras: 26000 - 26000) +(@CGUID+1, 15730, 530, -1984.66, 5088.797, 10.55692, 3.193953, 120, 0), -- 15730 (Area: 3703) (Auras: 26000 - 26000) +(@CGUID+2, 15732, 530, -1987.686, 5092.304, 7.809855, 0.7679449, 120, 0), -- 15732 (Area: 3703) +(@CGUID+3, 15730, 571, 5824.777, 642.5535, 652.6135, 2.513274, 120, 0), -- 15730 (Area: 4395) (Auras: 26000 - 26000) +(@CGUID+4, 15730, 571, 5824.46, 643.6445, 653.0524, 1.570796, 120, 0); -- 15730 (Area: 4395) (Auras: 26000 - 26000) + +-- Add aura to Pat's Snowcloud Guy & Wonderform Operator +SET @ENTRY := 15730; +DELETE FROM `creature_template_addon` WHERE `entry`=@ENTRY; +INSERT INTO `creature_template_addon` (`entry`, `bytes1`, `bytes2`, `auras`) VALUES (@ENTRY, 0, 0, 26000); From dbe854cd313ed23e86c67665228a876b7c23c7fc Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Mon, 21 Dec 2015 17:28:37 +0100 Subject: [PATCH 436/524] Core/Objects: Fix typo in 19cab2c50857045788bd80e202ed661e49ed8bba --- src/server/game/Globals/ObjectMgr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 396be44020..f557c046ee 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -57,7 +57,7 @@ struct PlayerLevelInfo; struct PageText { std::string Text; - uint16 NextPage; + uint32 NextPage; }; /// Key for storing temp summon data in TempSummonDataContainer From b5eb67571099a8f079cd64e8d17352b0dabb9882 Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 24 Dec 2015 15:52:06 +0100 Subject: [PATCH 437/524] DB/Creature_text: Fix probability inside a group Closes #16093 --- sql/updates/world/2015_12_24_00_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2015_12_24_00_world.sql diff --git a/sql/updates/world/2015_12_24_00_world.sql b/sql/updates/world/2015_12_24_00_world.sql new file mode 100644 index 0000000000..52d83bb63c --- /dev/null +++ b/sql/updates/world/2015_12_24_00_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature_text` SET `probability`=17 WHERE `Entry`=36856 AND `groupid`=6 AND `id` IN (0,1,2,3,4); +UPDATE `creature_text` SET `probability`=15 WHERE `Entry`=36856 AND `groupid`=6 AND `id`=5; From 347373264b4ca5046af5c23378117e6ddb66504d Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Tue, 22 Dec 2015 11:32:49 +0100 Subject: [PATCH 438/524] Build: Added 1.60 Boost version to FindBoost --- cmake/macros/FindBoost.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/macros/FindBoost.cmake b/cmake/macros/FindBoost.cmake index 24ed90dd36..997336261d 100644 --- a/cmake/macros/FindBoost.cmake +++ b/cmake/macros/FindBoost.cmake @@ -478,8 +478,8 @@ else() # The user has not requested an exact version. Among known # versions, find those that are acceptable to the user request. set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS} - "1.59.0" "1.59" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55" - "1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51" + "1.60.0" "1.60" "1.59.0" "1.59" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" + "1.55.0" "1.55" "1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51" "1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1" "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42" "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37" From 33a75afb60f8e9ad44c7a87f7f52dae27dab62b6 Mon Sep 17 00:00:00 2001 From: NathanHandley Date: Fri, 25 Dec 2015 18:54:15 -0600 Subject: [PATCH 439/524] Updated AuctionHouseSeller to have item class level stack control For each item class (consumable, glyph), you can now edit the worldserver.conf to configure the ratio (percent) of random compared to single stack auction postings. Example 1 AuctionHouseBot.Class.RandomStackRatio.Consumable = 0 - New consumable auctions posted by AuctionHouseSeller will always be single stack. Example 2 AuctionHouseBot.Class.RandomStackRatio.Consumable = 100 - New consumable auctions posted by AuctionHouseSeller will always be of a random stack size. Example 3 AuctionHouseBot.Class.RandomStackRatio.Consumable = 20 - New consumable auctions posted by AuctionHouseSeller have a 20% chance of being a random stack size, and an 80% chance of being single stack size. --- .../game/AuctionHouseBot/AuctionHouseBot.cpp | 16 ++++++++ .../game/AuctionHouseBot/AuctionHouseBot.h | 15 +++++++ .../AuctionHouseBot/AuctionHouseBotSeller.cpp | 38 +++++++++++++++++- .../AuctionHouseBot/AuctionHouseBotSeller.h | 4 ++ src/server/worldserver/worldserver.conf.dist | 40 +++++++++++++++++++ 5 files changed, 112 insertions(+), 1 deletion(-) diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp index c905ccedf2..9eeb6c1748 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp @@ -242,6 +242,22 @@ void AuctionBotConfig::GetConfigFromFile() SetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_MAX_ITEM_LEVEL, "AuctionHouseBot.Class.TradeGood.ItemLevel.Max", 0); SetConfig(CONFIG_AHBOT_CLASS_CONTAINER_MIN_ITEM_LEVEL, "AuctionHouseBot.Class.Container.ItemLevel.Min", 0); SetConfig(CONFIG_AHBOT_CLASS_CONTAINER_MAX_ITEM_LEVEL, "AuctionHouseBot.Class.Container.ItemLevel.Max", 0); + + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONSUMABLE, "AuctionHouseBot.Class.RandomStackRatio.Consumable", 20); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONTAINER, "AuctionHouseBot.Class.RandomStackRatio.Container", 0); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_WEAPON, "AuctionHouseBot.Class.RandomStackRatio.Weapon", 0); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GEM, "AuctionHouseBot.Class.RandomStackRatio.Gem", 20); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_ARMOR, "AuctionHouseBot.Class.RandomStackRatio.Armor", 0); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_REAGENT, "AuctionHouseBot.Class.RandomStackRatio.Reagent", 100); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_PROJECTILE, "AuctionHouseBot.Class.RandomStackRatio.Projectile", 100); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_TRADEGOOD, "AuctionHouseBot.Class.RandomStackRatio.TradeGood", 50); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC, "AuctionHouseBot.Class.RandomStackRatio.Generic", 100); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_RECIPE, "AuctionHouseBot.Class.RandomStackRatio.Recipe", 0); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUIVER, "AuctionHouseBot.Class.RandomStackRatio.Quiver", 0); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUEST, "AuctionHouseBot.Class.RandomStackRatio.Quest", 100); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_KEY, "AuctionHouseBot.Class.RandomStackRatio.Key", 100); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_MISC, "AuctionHouseBot.Class.RandomStackRatio.Misc", 100); + SetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GLYPH, "AuctionHouseBot.Class.RandomStackRatio.Glyph", 0); } char const* AuctionBotConfig::GetHouseTypeName(AuctionHouseType houseType) diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.h b/src/server/game/AuctionHouseBot/AuctionHouseBot.h index 225d3b7ee2..aacf563f0b 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBot.h +++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.h @@ -137,6 +137,21 @@ enum AuctionBotConfigUInt32Values CONFIG_AHBOT_CLASS_TRADEGOOD_MAX_ITEM_LEVEL, CONFIG_AHBOT_CLASS_CONTAINER_MIN_ITEM_LEVEL, CONFIG_AHBOT_CLASS_CONTAINER_MAX_ITEM_LEVEL, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONSUMABLE, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONTAINER, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_WEAPON, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GEM, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_ARMOR, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_REAGENT, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_PROJECTILE, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_TRADEGOOD, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_RECIPE, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUIVER, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUEST, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_KEY, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_MISC, + CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GLYPH, CONFIG_UINT32_AHBOT_UINT32_COUNT }; diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index 22dc5bb0bd..6375b9726e 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -533,6 +533,23 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config) config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_GLYPH, 0); // ============================================================================================ + // Set Stack Quantities + config.SetRandomStackRatioPerClass(ITEM_CLASS_CONSUMABLE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONSUMABLE)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_CONTAINER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_CONTAINER)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_WEAPON, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_WEAPON)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_GEM, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GEM)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_ARMOR, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_ARMOR)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_REAGENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_REAGENT)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_PROJECTILE)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_TRADEGOOD)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_GENERIC, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_RECIPE)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUIVER)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUEST)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_KEY, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_KEY)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_MISC, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_MISC)); + config.SetRandomStackRatioPerClass(ITEM_CLASS_GLYPH, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GLYPH)); + // Set the best value to get nearest amount of items wanted for (uint32 j = 0; j < MAX_AUCTION_QUALITY; ++j) { @@ -719,6 +736,24 @@ void AuctionBotSeller::SetPricesOfItem(ItemTemplate const* itemProto, SellerConf bidp = urand(basePrice - range, basePrice + range) + 1; } +// Determines the stack size to use for the item +void AuctionBotSeller::SetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& stackcnt) +{ + uint32 randomStackPercent = config.GetRandomStackRatioPerClass(ItemClass(itemProto->Class)); + if (randomStackPercent >= 100) + stackcnt = urand(1, itemProto->GetMaxStackSize()); + else if (randomStackPercent == 0) + stackcnt = 1; + else + { + uint32 randomStackRoll = urand(0, 99); + if (randomStackRoll < randomStackPercent) + stackcnt = urand(1, itemProto->GetMaxStackSize()); + else + stackcnt = 1; + } +} + // Determine the multiplier for the sell price of any weapon without a buy price. uint32 AuctionBotSeller::GetSellModifier(ItemTemplate const* prototype) { @@ -952,7 +987,8 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config) continue; } - uint32 stackCount = urand(1, prototype->GetMaxStackSize()); + uint32 stackCount = 1; + SetStackSizeForItem(prototype, config, stackCount); Item* item = Item::CreateItem(itemId, stackCount); if (!item) diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h index bccb451938..211344b532 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h @@ -39,6 +39,7 @@ struct SellerItemClassInfo uint32 MissItems; uint32 Quantity; uint32 PriceRatio; + uint32 RandomStackRatio; }; struct SellerItemInfo @@ -102,6 +103,8 @@ public: uint32 GetPriceRatioPerQuality(AuctionQuality quality) const { return _ItemInfo[quality].PriceRatio; } void SetPriceRatioPerClass(ItemClass item, uint32 value) { _ItemInfo[0].ItemClassInfos[item].PriceRatio = value; } uint32 GetPriceRatioPerClass(ItemClass item) const { return _ItemInfo[0].ItemClassInfos[item].PriceRatio; } + void SetRandomStackRatioPerClass(ItemClass item, uint32 value) { _ItemInfo[0].ItemClassInfos[item].RandomStackRatio = value; } + uint32 GetRandomStackRatioPerClass(ItemClass item) const { return _ItemInfo[0].ItemClassInfos[item].RandomStackRatio; } private: AuctionHouseType _houseType; @@ -139,6 +142,7 @@ private: uint32 SetStat(SellerConfiguration& config); bool GetItemsToSell(SellerConfiguration& config, ItemsToSellArray& itemsToSellArray, AllItemsArray const& addedItem); void SetPricesOfItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& buyp, uint32& bidp, uint32 stackcnt); + void SetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& stackcnt); void LoadItemsQuantity(SellerConfiguration& config); static uint32 GetBuyModifier(ItemTemplate const* prototype); static uint32 GetSellModifier(ItemTemplate const* itemProto); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 840b819fe9..f416e65dd9 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -3189,6 +3189,46 @@ AuctionHouseBot.forceIncludeItems = "" AuctionHouseBot.forceExcludeItems = "" +# +# AuctionHouseBot.Class.RandomStackRatio.* +# Description: Used to determine how often an item of the class will be single or randomly-size stacked +# Value needs to be between 0 and 100, no decimal. Anything higher than 100 will be treated as 100 +# Examples: 100 = stacks will always be random in size +# 50 = half the time the stacks are random, the other half being single stack +# 0 = stacks will always single size +# Default: Consumable: 20 (20% random stack size, 80% single stack size) +# Container: 0 (100% single stack size) +# Weapon: 0 (100% single stack size) +# Gem: 20 (20% random stack size, 80% single stack size) +# Armor: 0 (100% single stack size) +# Reagent: 100 (100% random stack size) +# Projectile: 100 (100% random stack size) +# TradeGood: 50 (50% random stack size, 50% single stack size) +# Generic: 100 (100% random stack size) +# Recipe: 0 (100% single stack size) +# Quiver: 0 (100% single stack size) +# Quest: 100 (100% random stack size) +# Key: 100 (100% random stack size) +# Misc: 100 (100% random stack size) +# Glyph: 0 (100% single stack size) +# + +AuctionHouseBot.Class.RandomStackRatio.Consumable = 20 +AuctionHouseBot.Class.RandomStackRatio.Container = 0 +AuctionHouseBot.Class.RandomStackRatio.Weapon = 0 +AuctionHouseBot.Class.RandomStackRatio.Gem = 20 +AuctionHouseBot.Class.RandomStackRatio.Armor = 0 +AuctionHouseBot.Class.RandomStackRatio.Reagent = 100 +AuctionHouseBot.Class.RandomStackRatio.Projectile = 100 +AuctionHouseBot.Class.RandomStackRatio.TradeGood = 50 +AuctionHouseBot.Class.RandomStackRatio.Generic = 100 +AuctionHouseBot.Class.RandomStackRatio.Recipe = 0 +AuctionHouseBot.Class.RandomStackRatio.Quiver = 0 +AuctionHouseBot.Class.RandomStackRatio.Quest = 100 +AuctionHouseBot.Class.RandomStackRatio.Key = 100 +AuctionHouseBot.Class.RandomStackRatio.Misc = 100 +AuctionHouseBot.Class.RandomStackRatio.Glyph = 0 + # ################################################################################################### From ec3a98caeb879ec295959b49f733de4f8324b354 Mon Sep 17 00:00:00 2001 From: NathanHandley Date: Fri, 25 Dec 2015 19:47:38 -0600 Subject: [PATCH 440/524] Updates in respnose to feedback from DDuarte. Including: - Changed SetStackSizeForItem to GetStackSizeForItem in AuctionHouseBotSeller - Added Initializer to SellerItemClassInfo.RandomStackRatio in AuctionHouseBotSeller - Updated verbiage around AuctionHouseBot.Class.RandomStackRatio.* to be clearer --- .../game/AuctionHouseBot/AuctionHouseBotSeller.cpp | 13 ++++++------- .../game/AuctionHouseBot/AuctionHouseBotSeller.h | 4 ++-- src/server/worldserver/worldserver.conf.dist | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index 6375b9726e..5d60b90732 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -737,20 +737,20 @@ void AuctionBotSeller::SetPricesOfItem(ItemTemplate const* itemProto, SellerConf } // Determines the stack size to use for the item -void AuctionBotSeller::SetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& stackcnt) +uint32 AuctionBotSeller::GetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config) const { uint32 randomStackPercent = config.GetRandomStackRatioPerClass(ItemClass(itemProto->Class)); if (randomStackPercent >= 100) - stackcnt = urand(1, itemProto->GetMaxStackSize()); + return urand(1, itemProto->GetMaxStackSize()); else if (randomStackPercent == 0) - stackcnt = 1; + return 1; else { uint32 randomStackRoll = urand(0, 99); if (randomStackRoll < randomStackPercent) - stackcnt = urand(1, itemProto->GetMaxStackSize()); + return urand(1, itemProto->GetMaxStackSize()); else - stackcnt = 1; + return 1; } } @@ -987,8 +987,7 @@ void AuctionBotSeller::AddNewAuctions(SellerConfiguration& config) continue; } - uint32 stackCount = 1; - SetStackSizeForItem(prototype, config, stackCount); + uint32 stackCount = GetStackSizeForItem(prototype, config); Item* item = Item::CreateItem(itemId, stackCount); if (!item) diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h index 211344b532..a6066e9fb3 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h @@ -33,7 +33,7 @@ typedef std::vector> AllItemsArray; struct SellerItemClassInfo { - SellerItemClassInfo(): AmountOfItems(0), MissItems(0), Quantity(0), PriceRatio(0) {} + SellerItemClassInfo(): AmountOfItems(0), MissItems(0), Quantity(0), PriceRatio(0), RandomStackRatio(100) {} uint32 AmountOfItems; uint32 MissItems; @@ -142,7 +142,7 @@ private: uint32 SetStat(SellerConfiguration& config); bool GetItemsToSell(SellerConfiguration& config, ItemsToSellArray& itemsToSellArray, AllItemsArray const& addedItem); void SetPricesOfItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& buyp, uint32& bidp, uint32 stackcnt); - void SetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config, uint32& stackcnt); + uint32 GetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config) const; void LoadItemsQuantity(SellerConfiguration& config); static uint32 GetBuyModifier(ItemTemplate const* prototype); static uint32 GetSellModifier(ItemTemplate const* itemProto); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index f416e65dd9..5b07dde22b 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -3191,7 +3191,7 @@ AuctionHouseBot.forceExcludeItems = "" # # AuctionHouseBot.Class.RandomStackRatio.* -# Description: Used to determine how often an item of the class will be single or randomly-size stacked +# Description: Used to determine how often a stack of the class will be single or randomly-size stacked when posted # Value needs to be between 0 and 100, no decimal. Anything higher than 100 will be treated as 100 # Examples: 100 = stacks will always be random in size # 50 = half the time the stacks are random, the other half being single stack From 315123f8738e837ef98e22db83438396c638e251 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sat, 26 Dec 2015 13:36:52 +0000 Subject: [PATCH 441/524] DB/Conditions: Judgment Day Comes! This optional breadcrumb quest should not be takable if player has already started quest chain it leads to. --- sql/updates/world/2015_12_26_00_world.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 sql/updates/world/2015_12_26_00_world.sql diff --git a/sql/updates/world/2015_12_26_00_world.sql b/sql/updates/world/2015_12_26_00_world.sql new file mode 100644 index 0000000000..02c0acbeda --- /dev/null +++ b/sql/updates/world/2015_12_26_00_world.sql @@ -0,0 +1,16 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN(19,20) AND `SourceEntry` IN(13226,13227); + +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(19, 0, 13226, 0, 0, 8, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (A) Can only be taken if Honor Above All Else is not rewarded'), +(19, 0, 13226, 0, 0, 9, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (A) Can only be taken if Honor Above All Else is not taken'), +(19, 0, 13226, 0, 0, 28, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (A) Can only be taken if Honor Above All Else is not completed'), +(20, 0, 13226, 0, 0, 8, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (A) Can only be taken if Honor Above All Else is not rewarded'), +(20, 0, 13226, 0, 0, 9, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (A) Can only be taken if Honor Above All Else is not taken'), +(20, 0, 13226, 0, 0, 28, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (A) Can only be taken if Honor Above All Else is not completed'), + +(19, 0, 13227, 0, 0, 8, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (H) Can only be taken if Honor Above All Else is not rewarded'), +(19, 0, 13227, 0, 0, 9, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (H) Can only be taken if Honor Above All Else is not taken'), +(19, 0, 13227, 0, 0, 28, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (H) Can only be taken if Honor Above All Else is not completed'), +(20, 0, 13227, 0, 0, 8, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (H) Can only be taken if Honor Above All Else is not rewarded'), +(20, 0, 13227, 0, 0, 9, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (H) Can only be taken if Honor Above All Else is not taken'), +(20, 0, 13227, 0, 0, 28, 0, 13036, 0, 0, 1, 0, 0, '', 'Judgment Day Comes! (H) Can only be taken if Honor Above All Else is not completed'); From b13c7f511ed5e21b9f5fb1efa871bc8dca315336 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 26 Dec 2015 17:48:49 +0100 Subject: [PATCH 442/524] DB/Creature: Forlorn Soul Add missing spawns --- sql/updates/world/2015_12_26_01_world.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 sql/updates/world/2015_12_26_01_world.sql diff --git a/sql/updates/world/2015_12_26_01_world.sql b/sql/updates/world/2015_12_26_01_world.sql new file mode 100644 index 0000000000..92a9d21af2 --- /dev/null +++ b/sql/updates/world/2015_12_26_01_world.sql @@ -0,0 +1,8 @@ +-- +SET @Guid=52270; +DELETE FROM `creature` WHERE `guid` BETWEEN @Guid+0 AND @Guid+3; +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES +(@Guid+0, 24789, 571, 0, 0, 1, 1, 20089, 0, 679.537, -3379.89, 67.5482, 4.74721, 300, 10, 0, 9291, 3155, 1, 0, 0, 0), +(@Guid+1, 24789, 571, 0, 0, 1, 1, 20089, 0, 721.82, -3380.29, 68.1963, 4.78832, 300, 10, 0, 9291, 3155, 1, 0, 0, 0), +(@Guid+2, 24789, 571, 0, 0, 1, 1, 20089, 0, 724.233, -3336.82, 68.0772, 1.22937, 300, 10, 0, 9291, 3155, 1, 0, 0, 0), +(@Guid+3, 24789, 571, 0, 0, 1, 1, 20089, 0, 695.932, -3417.13, 68.5955, 1.00392, 300, 10, 0, 9291, 3155, 1, 0, 0, 0); From 812809a977e2ba2a53e55c3dfc74bbed9dd59b7a Mon Sep 17 00:00:00 2001 From: Killyana Date: Sat, 26 Dec 2015 18:10:11 +0100 Subject: [PATCH 443/524] DB/Object: Add missing Dirt mound spawn --- sql/updates/world/2015_12_26_02_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2015_12_26_02_world.sql diff --git a/sql/updates/world/2015_12_26_02_world.sql b/sql/updates/world/2015_12_26_02_world.sql new file mode 100644 index 0000000000..021dec0be8 --- /dev/null +++ b/sql/updates/world/2015_12_26_02_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `gameobject` WHERE `guid`=5842 AND `id`=186944; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(5842, 186944, 571, 1, 1, 689.564, -3374.71, 67.9706, -1.79769, 0, 0, -0.782608, 0.622514, 300, 100, 1); From 1554a7dd56e1d763a9ee8fa3276da45ae5de8911 Mon Sep 17 00:00:00 2001 From: NathanHandley Date: Sun, 27 Dec 2015 10:08:15 -0600 Subject: [PATCH 444/524] Simplified stack size calculation in AuctionBotSeller --- .../game/AuctionHouseBot/AuctionHouseBotSeller.cpp | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index 5d60b90732..6c5ba25105 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -739,19 +739,10 @@ void AuctionBotSeller::SetPricesOfItem(ItemTemplate const* itemProto, SellerConf // Determines the stack size to use for the item uint32 AuctionBotSeller::GetStackSizeForItem(ItemTemplate const* itemProto, SellerConfiguration& config) const { - uint32 randomStackPercent = config.GetRandomStackRatioPerClass(ItemClass(itemProto->Class)); - if (randomStackPercent >= 100) + if (config.GetRandomStackRatioPerClass(ItemClass(itemProto->Class)) > urand(0, 99)) return urand(1, itemProto->GetMaxStackSize()); - else if (randomStackPercent == 0) - return 1; else - { - uint32 randomStackRoll = urand(0, 99); - if (randomStackRoll < randomStackPercent) - return urand(1, itemProto->GetMaxStackSize()); - else - return 1; - } + return 1; } // Determine the multiplier for the sell price of any weapon without a buy price. From bf8a3b1dfe8faed8fa47fa1ed8de313713abb8a9 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 16:13:25 +0100 Subject: [PATCH 445/524] DB/Creature: Fix Tournament Druid Spell Target visibility Closes #16119 --- sql/updates/world/2015_12_29_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_12_29_00_world.sql diff --git a/sql/updates/world/2015_12_29_00_world.sql b/sql/updates/world/2015_12_29_00_world.sql new file mode 100644 index 0000000000..da6de12319 --- /dev/null +++ b/sql/updates/world/2015_12_29_00_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature` SET `modelid`=0 WHERE `id`=33787; From b269c1f1cb92389c125a29a99c5c811dbfdd89c1 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 16:32:01 +0100 Subject: [PATCH 446/524] DB/Quest: Fix spell target for Leave Our Mark quest item Closes #16081 --- sql/updates/world/2015_12_29_01_world.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2015_12_29_01_world.sql diff --git a/sql/updates/world/2015_12_29_01_world.sql b/sql/updates/world/2015_12_29_01_world.sql new file mode 100644 index 0000000000..24b201b4d0 --- /dev/null +++ b/sql/updates/world/2015_12_29_01_world.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=23301 AND `ConditionTypeOrReference`=30; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(17,0,23301,0,0,30,1,192180,1,0,1,0,0,'','Do not cast Ebon Blade Banner if Ebon Blade Banner is planted'), +(17,0,23301,0,1,30,1,192180,1,0,1,0,0,'','Do not cast Ebon Blade Banner if Ebon Blade Banner is planted'), +(17,0,23301,0,2,30,1,192180,1,0,1,0,0,'','Do not cast Ebon Blade Banner if Ebon Blade Banner is planted'), +(17,0,23301,0,3,30,1,192180,1,0,1,0,0,'','Do not cast Ebon Blade Banner if Ebon Blade Banner is planted'); From cb6a7b7fa63a7e5a8ef54b827ab9b66784d58ac7 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 16:46:28 +0100 Subject: [PATCH 447/524] DB/Condition: Add condition to sunwell-blade spell to target only Dar'Khan Drathir Closes #16122 --- sql/updates/world/2015_12_29_02_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2015_12_29_02_world.sql diff --git a/sql/updates/world/2015_12_29_02_world.sql b/sql/updates/world/2015_12_29_02_world.sql new file mode 100644 index 0000000000..3bfd0ba2a2 --- /dev/null +++ b/sql/updates/world/2015_12_29_02_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=28516; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(17,0,28516,0,0,31,1,3,16329,0,0,0,0,'',"Only Dar'Khan Drathir can be a target for Sunwell Torrent"); From 17b57453c1082659f28f2bf3d20678f842f9c953 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 16:57:10 +0100 Subject: [PATCH 448/524] DB: Fix spawn position and equipment for Coilfang Engineers By @Saben65 Closes #16104 --- sql/updates/world/2015_12_29_03_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2015_12_29_03_world.sql diff --git a/sql/updates/world/2015_12_29_03_world.sql b/sql/updates/world/2015_12_29_03_world.sql new file mode 100644 index 0000000000..f928061c26 --- /dev/null +++ b/sql/updates/world/2015_12_29_03_world.sql @@ -0,0 +1,4 @@ +-- +UPDATE `creature` SET `position_x`=-5.298958, `position_y`=-131.3911, `position_z`=-21.17339, `orientation`=4.817109 WHERE `guid`= 12686 AND `id`=17721; +UPDATE `creature` SET `position_x`=-21.93356, `position_y`=-126.7303, `position_z`=-21.71569, `orientation`=4.939282 WHERE `guid`= 12687 AND `id`=17721; +UPDATE `creature_equip_template` SET `ItemID1`=1903 WHERE `CreatureID`=17721; From 335ec729bd0b6829f9f5bf98f63f3acc738b2a58 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 17:34:33 +0100 Subject: [PATCH 449/524] DB/Creature: Remove unneeded SAI for Water Terror and move the aura to creature addon Closes #16107 --- sql/updates/world/2015_12_29_04_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2015_12_29_04_world.sql diff --git a/sql/updates/world/2015_12_29_04_world.sql b/sql/updates/world/2015_12_29_04_world.sql new file mode 100644 index 0000000000..22a1ee3edc --- /dev/null +++ b/sql/updates/world/2015_12_29_04_world.sql @@ -0,0 +1,4 @@ +-- +UPDATE `creature_template` SET `AIName`='' WHERE `entry`=30645; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 30645 AND `source_type` = 0; +UPDATE `creature_template_addon` SET `auras`=57664 WHERE `entry`=30645; From 4292ff0b54909ee0991a4b619846f3c5123b39eb Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 18:05:43 +0100 Subject: [PATCH 450/524] DB/Creature: Fix InhabitType for Ash'ari Crystals By @Saben65 Closes #16121 --- sql/updates/world/2015_12_29_05_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_12_29_05_world.sql diff --git a/sql/updates/world/2015_12_29_05_world.sql b/sql/updates/world/2015_12_29_05_world.sql new file mode 100644 index 0000000000..056ea4fe23 --- /dev/null +++ b/sql/updates/world/2015_12_29_05_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `InhabitType`=4 WHERE `Entry`=10415; From 79c9af11b9a90b051ecc26b0a60e879e3d9c4134 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 19:23:02 +0100 Subject: [PATCH 451/524] Creature/script: William Kielar Fix Gossips used for taxi Closes #16112 --- src/server/scripts/World/npc_taxi.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 7095c0e0b8..16dc0d0296 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -162,9 +162,9 @@ public: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CRIMSONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); break; case 17209: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 28); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 29); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 30); + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 26); + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 27); + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 28); break; } From 70308e3c3316a9e0f260a3e9c808fe0d23d79d4d Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 20:03:45 +0100 Subject: [PATCH 452/524] DB/Creature: Fix Crystal Spike react state on Ormorok the Tree-Shaper encounter Closes #16097 --- sql/updates/world/2015_12_29_06_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2015_12_29_06_world.sql diff --git a/sql/updates/world/2015_12_29_06_world.sql b/sql/updates/world/2015_12_29_06_world.sql new file mode 100644 index 0000000000..167c4c2300 --- /dev/null +++ b/sql/updates/world/2015_12_29_06_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `flags_extra`=2 WHERE `entry` IN (27099, 30539); From 571578dce56b777ba0d10bbeb8573fc1b272ad1c Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 21:25:09 +0100 Subject: [PATCH 453/524] DB/SAI: Ethereal Spellfilcher and Ethereal Thief Closes #16094 --- sql/updates/world/2015_12_29_07_world.sql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 sql/updates/world/2015_12_29_07_world.sql diff --git a/sql/updates/world/2015_12_29_07_world.sql b/sql/updates/world/2015_12_29_07_world.sql new file mode 100644 index 0000000000..ec71d28c78 --- /dev/null +++ b/sql/updates/world/2015_12_29_07_world.sql @@ -0,0 +1,13 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (16544, 16545) 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 +(16545,0,0,0,0,0,100,3,0,0,0,0,11,30007,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ethereal Spellfilcher - In Combat - Cast 'Spatial Distortion' (No Repeat) (Normal Dungeon)"), +(16545,0,1,0,0,0,100,2,4000,9000,5000,10000,11,37161,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ethereal Spellfilcher - In Combat - Cast 'Arcane Volley' (Normal Dungeon)"), +(16545,0,2,0,0,0,100,2,8000,10000,10000,15000,11,30036,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ethereal Spellfilcher - In Combat - Cast 'Steal Magic' (Normal Dungeon)"), +(16545,0,3,0,0,0,100,2,6000,12000,16000,16000,11,30039,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ethereal Spellfilcher - In Combat - Cast 'Transference' (Normal Dungeon)"), +(16544,0,0,0,0,0,100,2,4000,7000,4000,8000,11,30014,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ethereal Thief - In Combat - Cast 'Cleave' (Normal Dungeon)"), +(16544,0,1,0,5,0,100,2,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ethereal Thief - On Killed Unit - Say Line 0"), +(16544,0,2,0,6,0,100,3,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ethereal Thief - On Just Died - Say Line 1"), +(16544,0,3,0,0,0,100,3,0,0,0,0,75,29982,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ethereal Thief - In Combat - Add Aura 'Spatial Distortion' (No Repeat) (Normal Dungeon)"), +(16544,0,4,0,0,0,100,2,15000,15000,20000,20000,11,30013,0,0,0,0,0,2,0,0,0,0,0,0,0,"Ethereal Thief - In Combat - Cast 'Disarm' (Normal Dungeon)"), +(16544,0,5,0,31,0,100,2,30013,0,1,1,13,0,100,0,0,0,0,2,0,0,0,0,0,0,0,"Ethereal Thief - On Target Spellhit 'Disarm' - Set Single Threat 0-100 (Normal Dungeon)"); From 99f31a2202564493751240d99e08e1044c7a9d80 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 21:41:18 +0100 Subject: [PATCH 454/524] DB/Quest: Add missing text for Horns of Nez'ra By @tkrokli Closes #16078 --- sql/updates/world/2015_12_29_08_world.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 sql/updates/world/2015_12_29_08_world.sql diff --git a/sql/updates/world/2015_12_29_08_world.sql b/sql/updates/world/2015_12_29_08_world.sql new file mode 100644 index 0000000000..ce874d7a8d --- /dev/null +++ b/sql/updates/world/2015_12_29_08_world.sql @@ -0,0 +1,8 @@ +-- +-- Update (insert) missing CompletionText for Quest 2358, Horns of Nez'ra +UPDATE `quest_request_items` SET `CompletionText`="Do you have the demon prince's horns?" WHERE `ID`= 2358; + +-- Insert completely missing `quest_offer_reward` info +DELETE FROM `quest_offer_reward` WHERE `ID`= 2358; +INSERT INTO `quest_offer_reward` (`ID`,`Emote1`,`Emote2`,`Emote3`,`Emote4`,`EmoteDelay1`,`EmoteDelay2`,`EmoteDelay3`,`EmoteDelay4`,`RewardText`,`VerifiedBuild`) VALUES +(2358, 0, 0, 0, 0, 0, 0, 0, 0, "To deny Ravenholdt the artifact, would be to deny one's own existence. Well done, $C. You may yet walk among the assassins of Ravenholdt.$B$B As a young rogue adventuring in Darkshore, I discovered a tea that replenishes energy in combat. It has served me well throughout the years and now I pass on a taste of the thistle tea to you. Drink of it when you tire, $N, and fight with vigor once more!$B$B", 0); From 394e0db6579da13ad9a75ca839ed58fefdfb8826 Mon Sep 17 00:00:00 2001 From: Killyana Date: Tue, 29 Dec 2015 23:57:25 +0100 Subject: [PATCH 455/524] DB/Creature: Remove wrong spawns for Commoners and link some other to Winter Veil Closes #16068 --- sql/updates/world/2015_12_29_09_world.sql | 49 +++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 sql/updates/world/2015_12_29_09_world.sql diff --git a/sql/updates/world/2015_12_29_09_world.sql b/sql/updates/world/2015_12_29_09_world.sql new file mode 100644 index 0000000000..d57785e8d8 --- /dev/null +++ b/sql/updates/world/2015_12_29_09_world.sql @@ -0,0 +1,49 @@ +-- +DELETE FROM `creature` WHERE `guid` IN (134960, 134962, 134968, 134969, 84418, 84423, 84402, 134976, 134977); +DELETE FROM `game_event_creature` WHERE `guid` IN (134961, 134963, 84419, 84424, 134964, 134965, 134966, 134967, 84400, 84409, 84410, 84430, 84435, 84440, 84441, 134970, 134971, 134972, 134973, 134974, 134975, 134982, 134983, 86732, 86733, 134980, 134981, 134978, 134979, 727, 726, 725, 724, 134848, 134984, 134985, 134986, 134987, 134988, 134989, 134990, 134991, 134992, 134993, 134994); +INSERT INTO `game_event_creature` (`eventEntry`, `guid`) VALUES +(2, 134961), +(2, 134963), +(2, 84419), +(2, 84424), +(2, 134964), +(2, 134965), +(2, 134966), +(2, 134967), +(2, 84400), +(2, 84409), +(2, 84410), +(2, 84430), +(2, 84435), +(2, 84440), +(2, 84441), +(2, 134970), +(2, 134971), +(2, 134972), +(2, 134973), +(2, 134974), +(2, 134975), +(2, 134982), +(2, 134983), +(2, 86732), +(2, 86733), +(2, 134980), +(2, 134981), +(2, 134978), +(2, 134979), +(2, 727), +(2, 726), +(2, 725), +(2, 724), +(2, 134848), +(2, 134984), +(2, 134985), +(2, 134986), +(2, 134987), +(2, 134988), +(2, 134989), +(2, 134990), +(2, 134991), +(2, 134992), +(2, 134993), +(2, 134994); From 91c1de2f43dff14cfb883bc725823b6186ce0f87 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 30 Dec 2015 00:21:49 +0100 Subject: [PATCH 456/524] DB/Quest: The Stories Dead Men Tell By @Rushor Closes #16055 --- sql/updates/world/2015_12_29_10_world.sql | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 sql/updates/world/2015_12_29_10_world.sql diff --git a/sql/updates/world/2015_12_29_10_world.sql b/sql/updates/world/2015_12_29_10_world.sql new file mode 100644 index 0000000000..919309dd55 --- /dev/null +++ b/sql/updates/world/2015_12_29_10_world.sql @@ -0,0 +1,22 @@ +-- +DELETE FROM `event_scripts` WHERE `id` IN (21075,21077,21076); +INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES +-- summon corpes +(21075, 0, 10, 33455, 20000, 0, 8441.057, 452.919, 596.070, 1.643), +(21077, 0, 10, 33439, 20000, 0, 8461.75, 468.926, 596.072, 4.6392), +(21076, 0, 10, 33457, 20000, 0, 8471.463,452.336,596.071,4.710), +-- respawn sword and despawn after 20s +(21076, 0, 9, 67923, 20, 0, 0, 0, 0, 0); + +-- set visual dead +UPDATE `creature_template` SET `dynamicflags`=`dynamicflags`|32, `unit_flags2`=`unit_flags2`|1 WHERE `entry` IN (33439,33455,33457); + +-- sword despawn after 20s +UPDATE `gameobject` SET `spawntimesecs`=-20 WHERE `guid`=67923 LIMIT 1; + +DELETE FROM `creature_template_addon` WHERE `entry` IN (33455,33439); +INSERT INTO `creature_template_addon` (`entry`, `auras`) VALUES +-- posion dummy +(33455, '41290'), +-- burning dummy +(33439, '59216'); From bc6c380e7d928fd193cfdf01ee178ad10774df98 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 30 Dec 2015 01:36:01 +0100 Subject: [PATCH 457/524] DB/Quest: An Undead's Best Friend Add a sleep effect on Hungering Plaguehound once they are fed to avoid spamming the credit Fix the Ethereal aura being removed and not set after evade for Eidolon Watcher Fix Assassinate Restless Lookout, it will only be used on Restless lookout Closes #16054 --- sql/updates/world/2015_12_29_11_world.sql | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 sql/updates/world/2015_12_29_11_world.sql diff --git a/sql/updates/world/2015_12_29_11_world.sql b/sql/updates/world/2015_12_29_11_world.sql new file mode 100644 index 0000000000..930baf15f7 --- /dev/null +++ b/sql/updates/world/2015_12_29_11_world.sql @@ -0,0 +1,21 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=58563; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(17,0,58563,0,0,31,1,3,30951,0,0,0,0,'',"Assassinate Restless Lookout can be used only on Restless lookout"); + +DELETE FROM `creature_template_addon` WHERE `entry`=31110; +INSERT INTO `creature_template_addon` (`entry`,`auras`) VALUES (31110,'58548'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=3095200 AND `id`>3; +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 +(3095200, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 45787, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Hungering Plaguehound - Script - Cast Sleeping Sleep'), +(3095200, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Hungering Plaguehound - Script - React passif'), +(3095200, 9, 6, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 28, 45787, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Hungering Plaguehound - Script - Remove Aura Sleeping Sleep'), +(3095200, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Hungering Plaguehound - Script - Agressif'), +(3095200, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 89, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Hungering Plaguehound - Script - Enable Random Move'); + +UPDATE `smart_scripts` SET `action_param2`=2 WHERE `entryorguid`=30952 AND `source_type`=0 AND `id`=0 AND `link`=0; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=30952; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 30952, 0, 0, 1, 1, 45787, 0, 0, 1, 0, 0, '', 'Only run SAI if unit does not have aura sleeping sleep'); From 1c877ecbd2a4c81204f932a4f249b8f9dd6f5b90 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 30 Dec 2015 01:50:27 +0100 Subject: [PATCH 458/524] DB/Creature: Franclorn Forgewright Make the npc visible only for dead players Remove the SAI and move the aura to Creature addon --- sql/updates/world/2015_12_29_12_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2015_12_29_12_world.sql diff --git a/sql/updates/world/2015_12_29_12_world.sql b/sql/updates/world/2015_12_29_12_world.sql new file mode 100644 index 0000000000..c065e1d6a1 --- /dev/null +++ b/sql/updates/world/2015_12_29_12_world.sql @@ -0,0 +1,4 @@ +-- +UPDATE `creature_template` SET `npcflag`=32771, `AIName`='' WHERE `entry`=8888; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 8888 AND `source_type` = 0; +UPDATE `creature_template_addon` SET `auras`=10848 WHERE `entry` IN (8888); From 13e509a622a6d88afe27d6cdda4cf9f402818745 Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 30 Dec 2015 02:05:24 +0100 Subject: [PATCH 459/524] Script/Creature: Imprisoned Beryl Sorcerer Add missing emote state Move the credit quest on the 5th hit instead of the 7th one --- sql/updates/world/2015_12_29_13_world.sql | 4 ++++ src/server/scripts/Northrend/zone_borean_tundra.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2015_12_29_13_world.sql diff --git a/sql/updates/world/2015_12_29_13_world.sql b/sql/updates/world/2015_12_29_13_world.sql new file mode 100644 index 0000000000..fc182ae49f --- /dev/null +++ b/sql/updates/world/2015_12_29_13_world.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `creature_template_addon` WHERE `entry`=25478; +INSERT INTO `creature_template_addon` (`entry`,`bytes1`,`bytes2`,`emote`) VALUES +(25478,0,4097,415); diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 6ef9abe226..7e56fd6ed4 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1655,13 +1655,13 @@ public: break; case 5: Talk(SAY_IMPRISIONED_BERYL_5); + caster->KilledMonsterCredit(NPC_IMPRISONED_BERYL_SORCERER); break; case 6: Talk(SAY_IMPRISIONED_BERYL_6, caster); break; case 7: Talk(SAY_IMPRISIONED_BERYL_7); - caster->KilledMonsterCredit(NPC_IMPRISONED_BERYL_SORCERER); break; } } From be382353066f3b0c580a4ca6ccadcb777e7b83e2 Mon Sep 17 00:00:00 2001 From: velinath Date: Tue, 29 Dec 2015 21:00:45 -0500 Subject: [PATCH 460/524] Adds William Kielor to SAI --- sql/updates/world/2015_12_31_XX_world.sql | 19 +++++++++++++++++++ src/server/scripts/World/npc_taxi.cpp | 20 -------------------- 2 files changed, 19 insertions(+), 20 deletions(-) create mode 100644 sql/updates/world/2015_12_31_XX_world.sql diff --git a/sql/updates/world/2015_12_31_XX_world.sql b/sql/updates/world/2015_12_31_XX_world.sql new file mode 100644 index 0000000000..3599a49ae7 --- /dev/null +++ b/sql/updates/world/2015_12_31_XX_world.sql @@ -0,0 +1,19 @@ +DELETE FROM `gossip_menu_option` WHERE menu_id = 7379; +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 +(7379, 0, 0, 'Take me to Northpass Tower.',13562,1,1,0,0,0,0,NULL,0), +(7379, 1, 0, 'Take me to Eastwall Tower.',13563,1,1,0,0,0,0,NULL,0), +(7379, 2, 0, 'Take me to Crown Guard Tower.',13564,1,1,0,0,0,0,NULL,0); + +-- Creating a new SmartAI script for [Creature] ENTRY 17209 (name: William Kielar) + +-- Table creature_template +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 17209; + +-- Table smart_scripts +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 17209); +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 +(17209, 0, 0, 3, 62, 0, 100, 0, 7379, 0, 0, 0, 52, 494, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'William Kielar - On Gossip Option 0 Selected - Activate Taxi Path 494'), +(17209, 0, 1, 3, 62, 0, 100, 0, 7379, 1, 0, 0, 52, 495, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'William Kielar - On Gossip Option 1 Selected - Activate Taxi Path 495'), +(17209, 0, 2, 3, 62, 0, 100, 0, 7379, 2, 0, 0, 52, 496, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'William Kielar - On Gossip Option 2 Selected - Activate Taxi Path 496'), +(17209, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'William Kielar - On Gossip Option 0 Selected - Close Gossip'); + diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 16dc0d0296..8e61179407 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -54,9 +54,6 @@ EndScriptData #define GOSSIP_TORASTRASZA1 "I would like to see Lord Of Afrasastrasz, in the middle of the temple." #define GOSSIP_TORASTRASZA2 "Yes, Please. I would like to return to the ground floor of the temple." #define GOSSIP_CRIMSONWING "" -#define GOSSIP_WILLIAMKEILAR1 "Take me to Northpass Tower." -#define GOSSIP_WILLIAMKEILAR2 "Take me to Eastwall Tower." -#define GOSSIP_WILLIAMKEILAR3 "Take me to Crown Guard Tower." class npc_taxi : public CreatureScript { @@ -161,11 +158,6 @@ public: if (player->GetQuestStatus(11142) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CRIMSONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); break; - case 17209: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 26); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 27); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WILLIAMKEILAR3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 28); - break; } player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); @@ -288,18 +280,6 @@ public: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 42295, true); break; - case GOSSIP_ACTION_INFO_DEF + 26: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(494); - break; - case GOSSIP_ACTION_INFO_DEF + 27: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(495); - break; - case GOSSIP_ACTION_INFO_DEF + 28: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(496); - break; } return true; From 43fa7d48a5650c71f74098f3398cf5aca89c3837 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 27 Dec 2015 18:03:03 +0100 Subject: [PATCH 461/524] Game/Maps: Clean up instance handling. - Rename Map::CanEnter to Map::CannotEnter. Return value changed from boolean (true means player can enter) to enum Map::EnterState (CAN_ENTER=0 means player can enter, any other value is a reason for deny). - Move hack-y player error messages from within Map::CanEnter to the function calling CanEnter as appropriate (primarily WorldSession::HandleAreaTriggerOpcode). - Modify WorldSession::HandleAreaTriggerOpcode to properly revive the player upon touching the portal leading to the instance they died in even if they are currently unable to zone in. Fixes and closes #15758. - Modify Player::LoadFromDB to properly spawn players in the instance they logged off in if possible. Fixes and closes #15561. - Modify permanent save behavior to be blizzlike: Players can always enter an instance they are saved to (assuming there are no map constraints against it), but get a homebind timer if the instance is already in use. --- .../world/2015_12_27_instancerevive.sql | 4 + src/server/game/Entities/Player/Player.cpp | 105 +++++++++++++----- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Handlers/MiscHandler.cpp | 71 +++++++++++- src/server/game/Handlers/MovementHandler.cpp | 19 ++-- src/server/game/Instances/InstanceScript.h | 2 +- src/server/game/Maps/Map.cpp | 60 +++------- src/server/game/Maps/Map.h | 22 +++- src/server/game/Maps/MapInstanced.cpp | 31 ++++-- src/server/game/Maps/MapInstanced.h | 6 +- src/server/game/Maps/MapManager.cpp | 65 ++++------- src/server/game/Maps/MapManager.h | 4 +- src/server/game/Miscellaneous/Language.h | 3 +- 13 files changed, 251 insertions(+), 143 deletions(-) create mode 100644 sql/updates/world/2015_12_27_instancerevive.sql diff --git a/sql/updates/world/2015_12_27_instancerevive.sql b/sql/updates/world/2015_12_27_instancerevive.sql new file mode 100644 index 0000000000..3bee62963e --- /dev/null +++ b/sql/updates/world/2015_12_27_instancerevive.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `trinity_string` WHERE `entry`=11014; +INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES +(11014,"You are already locked to %s."); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ceab7d06c9..df30a581d4 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1913,7 +1913,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati // Check enter rights before map getting to avoid creating instance copy for player // this check not dependent from map instance copy and same for all instance copies of selected map - if (!sMapMgr->CanPlayerEnter(mapid, this, false)) + if (sMapMgr->PlayerCannotEnter(mapid, this, false)) return false; //I think this always returns true. Correct me if I am wrong. @@ -17096,7 +17096,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) // NOW player must have valid map // load the player's map here if it's not already loaded - Map* map = sMapMgr->CreateMap(mapId, this); + Map* map = sMapMgr->CreateMap(mapId, this, instanceId); AreaTrigger const* areaTrigger = NULL; bool check = false; @@ -17107,8 +17107,28 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) } else if (map->IsDungeon()) // if map is dungeon... { - if (!((InstanceMap*)map)->CanEnter(this) || !CheckInstanceLoginValid(map)) // ... and can't enter map, then look for entry point. + if (Map::EnterState denyReason = ((InstanceMap*)map)->CannotEnter(this)) // ... and can't enter map, then look for entry point. { + switch (denyReason) + { + case Map::CANNOT_ENTER_DIFFICULTY_UNAVAILABLE: + SendTransferAborted(map->GetId(), TRANSFER_ABORT_DIFFICULTY, map->GetDifficulty()); + break; + case Map::CANNOT_ENTER_INSTANCE_BIND_MISMATCH: + ChatHandler(GetSession()).PSendSysMessage(GetSession()->GetTrinityString(LANG_INSTANCE_BIND_MISMATCH), map->GetMapName()); + break; + case Map::CANNOT_ENTER_TOO_MANY_INSTANCES: + SendTransferAborted(map->GetId(), TRANSFER_ABORT_TOO_MANY_INSTANCES); + break; + case Map::CANNOT_ENTER_MAX_PLAYERS: + SendTransferAborted(map->GetId(), TRANSFER_ABORT_MAX_PLAYERS); + break; + case Map::CANNOT_ENTER_ZONE_IN_COMBAT: + SendTransferAborted(map->GetId(), TRANSFER_ABORT_ZONE_IN_COMBAT); + break; + default: + break; + } areaTrigger = sObjectMgr->GetGoBackTrigger(mapId); check = true; } @@ -17155,6 +17175,10 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) SetMap(map); StoreRaidMapDifficulty(); + // now that map position is determined, check instance validity + if (!CheckInstanceValidity(true) && !IsInstanceLoginGameMasterException()) + m_InstanceValid = false; + // randomize first save time in range [CONFIG_INTERVAL_SAVE] around [CONFIG_INTERVAL_SAVE] // this must help in case next save after mass player load after server startup m_nextSave = urand(m_nextSave/2, m_nextSave*3/2); @@ -18667,28 +18691,6 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report return true; } -bool Player::CheckInstanceLoginValid(Map* map) -{ - if (!map->IsDungeon() || IsGameMaster()) - return true; - - if (map->IsRaid()) - { - // cannot be in raid instance without a group - if (!GetGroup()) - return IsInstanceLoginGameMasterException(); - } - else - { - // cannot be in normal instance without a group and more players than 1 in instance - if (!GetGroup() && map->GetPlayersCountExceptGMs() > 1) - return IsInstanceLoginGameMasterException(); - } - - // do checks for satisfy accessreqs, instance full, encounter in progress (raid), perm bind group != perm bind player - return sMapMgr->CanPlayerEnter(map->GetId(), this, true) || IsInstanceLoginGameMasterException(); -} - bool Player::IsInstanceLoginGameMasterException() const { if (CanBeGameMaster()) @@ -18700,6 +18702,59 @@ bool Player::IsInstanceLoginGameMasterException() const return false; } +bool Player::CheckInstanceValidity(bool /*isLogin*/) +{ + // game masters' instances are always valid + if (IsGameMaster()) + return true; + + // non-instances are always valid + Map* map = GetMap(); + if (!map || !map->IsDungeon()) + return true; + + // raid instances require the player to be in a raid group to be valid + if (map->IsRaid() && !sWorld->getBoolConfig(CONFIG_INSTANCE_IGNORE_RAID)) + if (!GetGroup() || !GetGroup()->isRaidGroup()) + return false; + + if (Group* group = GetGroup()) + { + // check if player's group is bound to this instance + InstanceGroupBind* bind = group->GetBoundInstance(map->GetDifficulty(), map->GetId()); + if (!bind || !bind->save || bind->save->GetInstanceId() != map->GetInstanceId()) + return false; + + Map::PlayerList const& players = map->GetPlayers(); + if (!players.isEmpty()) + for (Map::PlayerList::const_iterator it = players.begin(); it != players.end(); ++it) + { + if (Player* otherPlayer = it->GetSource()) + { + if (otherPlayer->IsGameMaster()) + continue; + if (!otherPlayer->m_InstanceValid) // ignore players that currently have a homebind timer active + continue; + if (group != otherPlayer->GetGroup()) + return false; + } + } + } + else + { + // instance is invalid if we are not grouped and there are other players + if (map->GetPlayersCountExceptGMs() > 1) + return false; + + // check if the player is bound to this instance + InstancePlayerBind* bind = GetBoundInstance(map->GetId(), map->GetDifficulty()); + if (!bind || !bind->save || bind->save->GetInstanceId() != map->GetInstanceId()) + return false; + } + + return true; +} + bool Player::CheckInstanceCount(uint32 instanceId) const { if (_instanceResetTimes.size() < sWorld->getIntConfig(CONFIG_MAX_INSTANCES_PER_HOUR)) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 26944de977..685c811507 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2118,7 +2118,7 @@ class Player : public Unit, public GridObject void SendSavedInstances(); static void ConvertInstancesToGroup(Player* player, Group* group, bool switchLeader); bool Satisfy(AccessRequirement const* ar, uint32 target_map, bool report = false); - bool CheckInstanceLoginValid(Map* map); + bool CheckInstanceValidity(bool /*isLogin*/); bool CheckInstanceCount(uint32 instanceId) const; void AddInstanceEnterTime(uint32 instanceId, time_t enterTime); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 6dcd3242a6..345202dc32 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -866,8 +866,77 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recvData) bool teleported = false; if (player->GetMapId() != at->target_mapId) { - if (!sMapMgr->CanPlayerEnter(at->target_mapId, player, false)) + if (Map::EnterState denyReason = sMapMgr->PlayerCannotEnter(at->target_mapId, player, false)) + { + bool reviveAtTrigger = false; // should we revive the player if he is trying to enter the correct instance? + switch (denyReason) + { + case Map::CANNOT_ENTER_NO_ENTRY: + TC_LOG_DEBUG("maps", "MAP: Player '%s' attempted to enter map with id %d which has no entry", player->GetName().c_str(), at->target_mapId); + break; + case Map::CANNOT_ENTER_UNINSTANCED_DUNGEON: + TC_LOG_DEBUG("maps", "MAP: Player '%s' attempted to enter dungeon map %d but no instance template was found", player->GetName().c_str(), at->target_mapId); + break; + case Map::CANNOT_ENTER_DIFFICULTY_UNAVAILABLE: + TC_LOG_DEBUG("maps", "MAP: Player '%s' attempted to enter instance map %d but the requested difficulty was not found", player->GetName().c_str(), at->target_mapId); + if (MapEntry const* entry = sMapStore.LookupEntry(at->target_mapId)) + player->SendTransferAborted(entry->MapID, TRANSFER_ABORT_DIFFICULTY, player->GetDifficulty(entry->IsRaid())); + break; + case Map::CANNOT_ENTER_NOT_IN_RAID: + if (MapEntry const* entry = sMapStore.LookupEntry(at->target_mapId)) + { + char const* mapName = entry->name[player->GetSession()->GetSessionDbcLocale()]; + TC_LOG_DEBUG("maps", "MAP: Player '%s' must be in a raid group to enter instance '%s'", player->GetName().c_str(), mapName); + // probably there must be special opcode, because client has this string constant in GlobalStrings.lua + player->GetSession()->SendAreaTriggerMessage(player->GetSession()->GetTrinityString(LANG_INSTANCE_RAID_GROUP_ONLY), mapName); + } + reviveAtTrigger = true; + break; + case Map::CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE: + { + WorldPacket data(SMSG_CORPSE_NOT_IN_INSTANCE); + player->GetSession()->SendPacket(&data); + TC_LOG_DEBUG("maps", "MAP: Player '%s' does not have a corpse in instance map %d and cannot enter", player->GetName().c_str(), at->target_mapId); + break; + } + case Map::CANNOT_ENTER_INSTANCE_BIND_MISMATCH: + if (MapEntry const* entry = sMapStore.LookupEntry(at->target_mapId)) + { + char const* mapName = entry->name[player->GetSession()->GetSessionDbcLocale()]; + TC_LOG_DEBUG("maps", "MAP: Player '%s' cannot enter instance map '%s' because their permanent bind is incompatible with their group's", player->GetName().c_str(), mapName); + // is there a special opcode for this? + // @todo figure out how to get player localized difficulty string (e.g. "10 player", "Heroic" etc) + ChatHandler(player->GetSession()).PSendSysMessage(player->GetSession()->GetTrinityString(LANG_INSTANCE_BIND_MISMATCH), mapName); + } + reviveAtTrigger = true; + break; + case Map::CANNOT_ENTER_TOO_MANY_INSTANCES: + player->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_TOO_MANY_INSTANCES); + TC_LOG_DEBUG("maps", "MAP: Player '%s' cannot enter instance map %d because he has exceeded the maximum number of instances per hour.", player->GetName().c_str(), at->target_mapId); + reviveAtTrigger = true; + break; + case Map::CANNOT_ENTER_MAX_PLAYERS: + player->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_MAX_PLAYERS); + reviveAtTrigger = true; + break; + case Map::CANNOT_ENTER_ZONE_IN_COMBAT: + player->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_ZONE_IN_COMBAT); + reviveAtTrigger = true; + break; + default: + break; + } + + if (reviveAtTrigger) // check if the player is touching the areatrigger leading to the map his corpse is on + if (!player->IsAlive() && player->HasCorpse()) + if (player->GetCorpseLocation().GetMapId() == at->target_mapId) + { + player->ResurrectPlayer(0.5f); + player->SpawnCorpseBones(); + } + return; + } if (Group* group = player->GetGroup()) if (group->isLFGGroup() && player->GetMap()->IsDungeon()) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 84816bf3f3..33a50fad1f 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -75,9 +75,9 @@ void WorldSession::HandleMoveWorldportAckOpcode() } // relocate the player to the teleport destination - // the CanEnter checks are done in TeleporTo but conditions may change + // the CannotEnter checks are done in TeleporTo but conditions may change // while the player is in transit, for example the map may get full - if (!newMap || !newMap->CanEnter(GetPlayer())) + if (!newMap || newMap->CannotEnter(GetPlayer())) { TC_LOG_ERROR("network", "Map %d (%s) could not be created for player %d (%s), porting player to homebind", loc.GetMapId(), newMap ? newMap->GetMapName() : "Unknown", GetPlayer()->GetGUID().GetCounter(), GetPlayer()->GetName().c_str()); GetPlayer()->TeleportTo(GetPlayer()->m_homebindMapId, GetPlayer()->m_homebindX, GetPlayer()->m_homebindY, GetPlayer()->m_homebindZ, GetPlayer()->GetOrientation()); @@ -142,19 +142,18 @@ void WorldSession::HandleMoveWorldportAckOpcode() } // resurrect character at enter into instance where his corpse exist after add to map - Corpse* corpse = GetPlayer()->GetMap()->GetCorpseByPlayer(GetPlayer()->GetGUID()); - if (corpse && corpse->GetType() != CORPSE_BONES) - { - if (mEntry->IsDungeon()) + + if (mEntry->IsDungeon() && !GetPlayer()->IsAlive()) + if (GetPlayer()->GetCorpseLocation().GetMapId() == mEntry->MapID) { GetPlayer()->ResurrectPlayer(0.5f, false); GetPlayer()->SpawnCorpseBones(); } - } bool allowMount = !mEntry->IsDungeon() || mEntry->IsBattlegroundOrArena(); if (mInstance) { + // check if this instance has a reset time and send it to player if so Difficulty diff = GetPlayer()->GetDifficulty(mEntry->IsRaid()); if (MapDifficulty const* mapDiff = GetMapDifficultyData(mEntry->MapID, diff)) { @@ -167,6 +166,12 @@ void WorldSession::HandleMoveWorldportAckOpcode() } } } + + // check if instance is valid + if (!GetPlayer()->CheckInstanceValidity(false)) + GetPlayer()->m_InstanceValid = false; + + // instance mounting is handled in InstanceTemplate allowMount = mInstance->AllowMount; } diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 93dafea041..220a0950b2 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -157,7 +157,7 @@ class InstanceScript : public ZoneScript virtual void Update(uint32 /*diff*/) { } - // Used by the map's CanEnter function. + // Used by the map's CannotEnter function. // This is to prevent players from entering during boss encounters. virtual bool IsEncounterInProgress() const; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 6fbef75222..67abf4af68 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2947,62 +2947,38 @@ void InstanceMap::InitVisibilityDistance() /* Do map specific checks to see if the player can enter */ -bool InstanceMap::CanEnter(Player* player) +Map::EnterState InstanceMap::CannotEnter(Player* player) { if (player->GetMapRef().getTarget() == this) { - TC_LOG_ERROR("maps", "InstanceMap::CanEnter - player %s(%u) already in map %d, %d, %d!", player->GetName().c_str(), player->GetGUID().GetCounter(), GetId(), GetInstanceId(), GetSpawnMode()); + TC_LOG_ERROR("maps", "InstanceMap::CannotEnter - player %s(%u) already in map %d, %d, %d!", player->GetName().c_str(), player->GetGUID().GetCounter(), GetId(), GetInstanceId(), GetSpawnMode()); ABORT(); - return false; + return CANNOT_ENTER_ALREADY_IN_MAP; } // allow GM's to enter if (player->IsGameMaster()) - return Map::CanEnter(player); + return Map::CannotEnter(player); // cannot enter if the instance is full (player cap), GMs don't count uint32 maxPlayers = GetMaxPlayers(); if (GetPlayersCountExceptGMs() >= maxPlayers) { TC_LOG_WARN("maps", "MAP: Instance '%u' of map '%s' cannot have more than '%u' players. Player '%s' rejected", GetInstanceId(), GetMapName(), maxPlayers, player->GetName().c_str()); - player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAX_PLAYERS); - return false; + return CANNOT_ENTER_MAX_PLAYERS; } - // cannot enter while an encounter is in progress - // allow if just loading + // cannot enter while an encounter is in progress (unless this is a relog, in which case it is permitted) if (!player->IsLoading() && IsRaid() && GetInstanceScript() && GetInstanceScript()->IsEncounterInProgress()) - { - player->SendTransferAborted(GetId(), TRANSFER_ABORT_ZONE_IN_COMBAT); - return false; - } + return CANNOT_ENTER_ZONE_IN_COMBAT; - // cannot enter if instance is in use by another party/soloer that have a - // permanent save in the same instance id + // cannot enter if player is permanent saved to a different instance id + if (InstancePlayerBind* playerBind = player->GetBoundInstance(GetId(), GetDifficulty())) + if (playerBind->perm && playerBind->save) + if (playerBind->save->GetInstanceId() != GetInstanceId()) + return CANNOT_ENTER_INSTANCE_BIND_MISMATCH; - PlayerList const &playerList = GetPlayers(); - - if (!playerList.isEmpty()) - for (PlayerList::const_iterator i = playerList.begin(); i != playerList.end(); ++i) - if (Player* iPlayer = i->GetSource()) - { - if (iPlayer->IsGameMaster()) // bypass GMs - continue; - if (!player->GetGroup()) // player has not group and there is someone inside, deny entry - { - player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAX_PLAYERS); - return false; - } - // player inside instance has no group or his groups is different to entering player's one, deny entry - if (!iPlayer->GetGroup() || iPlayer->GetGroup() != player->GetGroup()) - { - player->SendTransferAborted(GetId(), TRANSFER_ABORT_MAX_PLAYERS); - return false; - } - break; - } - - return Map::CanEnter(player); + return Map::CannotEnter(player); } /* @@ -3339,21 +3315,21 @@ void BattlegroundMap::InitVisibilityDistance() m_VisibilityNotifyPeriod = World::GetVisibilityNotifyPeriodInBGArenas(); } -bool BattlegroundMap::CanEnter(Player* player) +Map::EnterState BattlegroundMap::CannotEnter(Player* player) { if (player->GetMapRef().getTarget() == this) { - TC_LOG_ERROR("maps", "BGMap::CanEnter - player %u is already in map!", player->GetGUID().GetCounter()); + TC_LOG_ERROR("maps", "BGMap::CannotEnter - player %u is already in map!", player->GetGUID().GetCounter()); ABORT(); - return false; + return CANNOT_ENTER_ALREADY_IN_MAP; } if (player->GetBattlegroundId() != GetInstanceId()) - return false; + return CANNOT_ENTER_INSTANCE_BIND_MISMATCH; // player number limit is checked in bgmgr, no need to do it here - return Map::CanEnter(player); + return Map::CannotEnter(player); } bool BattlegroundMap::AddPlayerToMap(Player* player) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 0962bcc9d6..3af3bc6cc9 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -373,7 +373,23 @@ class Map : public GridRefManager uint32 GetInstanceId() const { return i_InstanceId; } uint8 GetSpawnMode() const { return (i_spawnMode); } - virtual bool CanEnter(Player* /*player*/) { return true; } + + enum EnterState + { + CAN_ENTER = 0, + CANNOT_ENTER_ALREADY_IN_MAP = 1, // Player is already in the map + CANNOT_ENTER_NO_ENTRY, // No map entry was found for the target map ID + CANNOT_ENTER_UNINSTANCED_DUNGEON, // No instance template was found for dungeon map + CANNOT_ENTER_DIFFICULTY_UNAVAILABLE, // Requested instance difficulty is not available for target map + CANNOT_ENTER_NOT_IN_RAID, // Target instance is a raid instance and the player is not in a raid group + CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE, // Player is dead and their corpse is not in target instance + CANNOT_ENTER_INSTANCE_BIND_MISMATCH, // Player's permanent instance save is not compatible with their group's current instance bind + CANNOT_ENTER_TOO_MANY_INSTANCES, // Player has entered too many instances recently + CANNOT_ENTER_MAX_PLAYERS, // Target map already has the maximum number of players allowed + CANNOT_ENTER_ZONE_IN_COMBAT, // A boss encounter is currently in progress on the target map + CANNOT_ENTER_UNSPECIFIED_REASON + }; + virtual EnterState CannotEnter(Player* /*player*/) { return CAN_ENTER; } const char* GetMapName() const; // have meaning only for instanced map (that have set real difficulty) @@ -762,7 +778,7 @@ class InstanceMap : public Map InstanceScript* GetInstanceScript() { return i_data; } void PermBindAllPlayers(Player* source); void UnloadAll() override; - bool CanEnter(Player* player) override; + EnterState CannotEnter(Player* player) override; void SendResetWarnings(uint32 timeLeft) const; void SetResetSchedule(bool on); @@ -785,7 +801,7 @@ class BattlegroundMap : public Map bool AddPlayerToMap(Player*) override; void RemovePlayerFromMap(Player*, bool) override; - bool CanEnter(Player* player) override; + EnterState CannotEnter(Player* player) override; void SetUnload(); //void UnloadAll(bool pForce); void RemoveAllPlayers() override; diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp index d1b8bd6620..7e07d00fe6 100644 --- a/src/server/game/Maps/MapInstanced.cpp +++ b/src/server/game/Maps/MapInstanced.cpp @@ -110,12 +110,12 @@ void MapInstanced::UnloadAll() - create the instance if it's not created already - the player is not actually added to the instance (only in InstanceMap::Add) */ -Map* MapInstanced::CreateInstanceForPlayer(const uint32 mapId, Player* player) +Map* MapInstanced::CreateInstanceForPlayer(const uint32 mapId, Player* player, uint32 loginInstanceId) { if (GetId() != mapId || !player) - return NULL; + return nullptr; - Map* map = NULL; + Map* map = nullptr; uint32 newInstanceId = 0; // instanceId of the resulting map if (IsBattlegroundOrArena()) @@ -124,7 +124,7 @@ Map* MapInstanced::CreateInstanceForPlayer(const uint32 mapId, Player* player) // the instance id is set in battlegroundid newInstanceId = player->GetBattlegroundId(); if (!newInstanceId) - return NULL; + return nullptr; map = sMapMgr->FindMap(mapId, newInstanceId); if (!map) @@ -134,20 +134,29 @@ Map* MapInstanced::CreateInstanceForPlayer(const uint32 mapId, Player* player) else { player->TeleportToBGEntryPoint(); - return NULL; + return nullptr; } } } else { InstancePlayerBind* pBind = player->GetBoundInstance(GetId(), player->GetDifficulty(IsRaid())); - InstanceSave* pSave = pBind ? pBind->save : NULL; + InstanceSave* pSave = pBind ? pBind->save : nullptr; - // the player's permanent player bind is taken into consideration first - // then the player's group bind and finally the solo bind. + // priority: + // 1. player's permanent bind + // 2. player's current instance id if this is at login + // 3. group's current bind + // 4. player's current bind if (!pBind || !pBind->perm) { - InstanceGroupBind* groupBind = NULL; + if (loginInstanceId) // if the player has a saved instance id on login, we either use this instance or relocate him out (return null) + { + map = FindInstanceMap(loginInstanceId); + return (map && map->GetId() == GetId()) ? map : nullptr; // is this check necessary? or does MapInstanced only find instances of itself? + } + + InstanceGroupBind* groupBind = nullptr; Group* group = player->GetGroup(); // use the player's difficulty setting (it may not be the same as the group's) if (group) @@ -278,8 +287,8 @@ bool MapInstanced::DestroyInstance(InstancedMaps::iterator &itr) return true; } -bool MapInstanced::CanEnter(Player* /*player*/) +Map::EnterState MapInstanced::CannotEnter(Player* /*player*/) { //ABORT(); - return true; + return CAN_ENTER; } diff --git a/src/server/game/Maps/MapInstanced.h b/src/server/game/Maps/MapInstanced.h index c385215ba7..d9983ffd73 100644 --- a/src/server/game/Maps/MapInstanced.h +++ b/src/server/game/Maps/MapInstanced.h @@ -37,13 +37,13 @@ class MapInstanced : public Map void DelayedUpdate(const uint32 diff) override; //void RelocationNotify(); void UnloadAll() override; - bool CanEnter(Player* player) override; + EnterState CannotEnter(Player* /*player*/) override; - Map* CreateInstanceForPlayer(const uint32 mapId, Player* player); + Map* CreateInstanceForPlayer(const uint32 mapId, Player* player, uint32 loginInstanceId=0); Map* FindInstanceMap(uint32 instanceId) const { InstancedMaps::const_iterator i = m_InstancedMaps.find(instanceId); - return(i == m_InstancedMaps.end() ? NULL : i->second); + return(i == m_InstancedMaps.end() ? nullptr : i->second); } bool DestroyInstance(InstancedMaps::iterator &itr); diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 0e7f9dbb61..5d4dd04359 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -97,12 +97,12 @@ Map* MapManager::FindBaseNonInstanceMap(uint32 mapId) const return map; } -Map* MapManager::CreateMap(uint32 id, Player* player) +Map* MapManager::CreateMap(uint32 id, Player* player, uint32 loginInstanceId) { Map* m = CreateBaseMap(id); if (m && m->Instanceable()) - m = ((MapInstanced*)m)->CreateInstanceForPlayer(id, player); + m = ((MapInstanced*)m)->CreateInstanceForPlayer(id, player, loginInstanceId); return m; } @@ -119,48 +119,36 @@ Map* MapManager::FindMap(uint32 mapid, uint32 instanceId) const return ((MapInstanced*)map)->FindInstanceMap(instanceId); } -bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) +Map::EnterState MapManager::PlayerCannotEnter(uint32 mapid, Player* player, bool loginCheck) { MapEntry const* entry = sMapStore.LookupEntry(mapid); if (!entry) - return false; + return Map::CANNOT_ENTER_NO_ENTRY; if (!entry->IsDungeon()) - return true; + return Map::CAN_ENTER; InstanceTemplate const* instance = sObjectMgr->GetInstanceTemplate(mapid); if (!instance) - return false; + return Map::CANNOT_ENTER_UNINSTANCED_DUNGEON; Difficulty targetDifficulty, requestedDifficulty; targetDifficulty = requestedDifficulty = player->GetDifficulty(entry->IsRaid()); // Get the highest available difficulty if current setting is higher than the instance allows MapDifficulty const* mapDiff = GetDownscaledMapDifficultyData(entry->MapID, targetDifficulty); if (!mapDiff) - { - player->SendTransferAborted(mapid, TRANSFER_ABORT_DIFFICULTY, requestedDifficulty); - return false; - } + return Map::CANNOT_ENTER_DIFFICULTY_UNAVAILABLE; //Bypass checks for GMs if (player->IsGameMaster()) - return true; + return Map::CAN_ENTER; char const* mapName = entry->name[player->GetSession()->GetSessionDbcLocale()]; Group* group = player->GetGroup(); - if (entry->IsRaid()) - { - // can only enter in a raid group + if (entry->IsRaid()) // can only enter in a raid group if ((!group || !group->isRaidGroup()) && !sWorld->getBoolConfig(CONFIG_INSTANCE_IGNORE_RAID)) - { - // probably there must be special opcode, because client has this string constant in GlobalStrings.lua - /// @todo this is not a good place to send the message - player->GetSession()->SendAreaTriggerMessage(player->GetSession()->GetTrinityString(LANG_INSTANCE_RAID_GROUP_ONLY), mapName); - TC_LOG_DEBUG("maps", "MAP: Player '%s' must be in a raid group to enter instance '%s'", player->GetName().c_str(), mapName); - return false; - } - } + return Map::CANNOT_ENTER_NOT_IN_RAID; if (!player->IsAlive()) { @@ -178,12 +166,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) } while (corpseMap); if (!corpseMap) - { - WorldPacket data(SMSG_CORPSE_NOT_IN_INSTANCE); - player->GetSession()->SendPacket(&data); - TC_LOG_DEBUG("maps", "MAP: Player '%s' does not have a corpse in instance '%s' and cannot enter.", player->GetName().c_str(), mapName); - return false; - } + return Map::CANNOT_ENTER_CORPSE_IN_DIFFERENT_INSTANCE; TC_LOG_DEBUG("maps", "MAP: Player '%s' has corpse in instance '%s' and can enter.", player->GetName().c_str(), mapName); } @@ -192,23 +175,13 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) } //Get instance where player's group is bound & its map - if (group) + if (!loginCheck && group) { InstanceGroupBind* boundInstance = group->GetBoundInstance(entry); if (boundInstance && boundInstance->save) if (Map* boundMap = sMapMgr->FindMap(mapid, boundInstance->save->GetInstanceId())) - if (!loginCheck && !boundMap->CanEnter(player)) - return false; - /* - This check has to be moved to InstanceMap::CanEnter() - // Player permanently bounded to different instance than groups one - InstancePlayerBind* playerBoundedInstance = player->GetBoundInstance(mapid, player->GetDifficulty(entry->IsRaid())); - if (playerBoundedInstance && playerBoundedInstance->perm && playerBoundedInstance->save && - boundedInstance->save->GetInstanceId() != playerBoundedInstance->save->GetInstanceId()) - { - /// @todo send some kind of error message to the player - return false; - }*/ + if (Map::EnterState denyReason = boundMap->CannotEnter(player)) + return denyReason; } // players are only allowed to enter 5 instances per hour @@ -220,14 +193,14 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck) // instanceId can never be 0 - will not be found if (!player->CheckInstanceCount(instanceIdToCheck) && !player->isDead()) - { - player->SendTransferAborted(mapid, TRANSFER_ABORT_TOO_MANY_INSTANCES); - return false; - } + return Map::CANNOT_ENTER_TOO_MANY_INSTANCES; } //Other requirements - return player->Satisfy(sObjectMgr->GetAccessRequirement(mapid, targetDifficulty), mapid, true); + if (player->Satisfy(sObjectMgr->GetAccessRequirement(mapid, targetDifficulty), mapid, true)) + return Map::CAN_ENTER; + else + return Map::CANNOT_ENTER_UNSPECIFIED_REASON; } void MapManager::Update(uint32 diff) diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index 5b957e0028..da785d8388 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -39,7 +39,7 @@ class MapManager Map* CreateBaseMap(uint32 mapId); Map* FindBaseNonInstanceMap(uint32 mapId) const; - Map* CreateMap(uint32 mapId, Player* player); + Map* CreateMap(uint32 mapId, Player* player, uint32 loginInstanceId=0); Map* FindMap(uint32 mapId, uint32 instanceId) const; uint16 GetAreaFlag(uint32 mapid, float x, float y, float z) const @@ -108,7 +108,7 @@ class MapManager void DoDelayedMovesAndRemoves(); - bool CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck = false); + Map::EnterState PlayerCannotEnter(uint32 mapid, Player* player, bool loginCheck = false); void InitializeVisibilityDistanceInfo(); /* statistics */ diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 8597139661..40d577adf9 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1203,7 +1203,8 @@ enum TrinityStrings LANG_NPCINFO_INHABIT_TYPE = 11008, LANG_NPCINFO_FLAGS_EXTRA = 11009, - LANG_INSTANCE_LOGIN_GAMEMASTER_EXCEPTION = 11010 + LANG_INSTANCE_LOGIN_GAMEMASTER_EXCEPTION = 11010, + LANG_INSTANCE_BIND_MISMATCH = 11014 }; #endif From 082eeda7fef26928090d42d1632e0dce1dfe5ab0 Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 31 Dec 2015 18:28:27 +0100 Subject: [PATCH 462/524] DB/Creature: Add missing spawns --- sql/updates/world/2015_12_31_00_world.sql | 55 +++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 sql/updates/world/2015_12_31_00_world.sql diff --git a/sql/updates/world/2015_12_31_00_world.sql b/sql/updates/world/2015_12_31_00_world.sql new file mode 100644 index 0000000000..b7c310323e --- /dev/null +++ b/sql/updates/world/2015_12_31_00_world.sql @@ -0,0 +1,55 @@ +-- +SET @guid=87490; +DELETE FROM `creature` WHERE `guid` BETWEEN @guid+0 AND @guid+23; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`) VALUES +(@guid+0, 32262, 571, 1, 1, 0, 0, 8210.67, 2058.87, 550.78, 1.8675, 300, 0, 0, 10080, 17272, 0), +(@guid+1, 32262, 571, 1, 1, 0, 0, 8194.63, 2063.66, 550.78, 0.698132, 300, 0, 0, 10080, 17272, 0), +(@guid+2, 32262, 571, 1, 1, 0, 0, 8200.36, 2050.99, 550.78, 1.43117, 300, 0, 0, 10080, 17272, 0), +(@guid+3, 32297, 571, 1, 1, 0, 0, 8174.97, 2127.87, 499.92, 1.6057, 300, 0, 0, 10080, 17628, 0), +(@guid+4, 32297, 571, 1, 1, 0, 0, 8204.41, 2125.31, 499.837, 4.72564, 300, 0, 0, 10080, 17628, 0), +(@guid+5, 32297, 571, 1, 1, 0, 0, 8199.44, 2123.24, 499.837, 6.07577, 300, 0, 0, 10080, 17628, 0), +(@guid+6, 32297, 571, 1, 1, 0, 0, 8151.77, 2128.06, 499.92, 1.65806, 300, 0, 0, 10080, 17628, 0), +(@guid+7, 32297, 571, 1, 1, 0, 0, 8163.05, 2127.68, 499.92, 1.65806, 300, 0, 0, 10080, 17628, 0), +(@guid+8, 32297, 571, 1, 1, 0, 0, 8144.97, 2100.36, 499.92, 4.7822, 300, 0, 0, 10080, 17628, 0), +(@guid+9, 32297, 571, 1, 1, 0, 0, 8133.19, 2100.51, 499.92, 4.66003, 300, 0, 0, 10080, 17628, 0), +(@guid+10, 32297, 571, 1, 1, 0, 0, 8157.47, 2102.37, 499.92, 3.08923, 300, 0, 0, 10080, 17628, 0), +(@guid+11, 32297, 571, 1, 1, 0, 0, 8183.99, 2100.45, 499.92, 4.59022, 300, 0, 0, 10080, 17628, 0), +(@guid+12, 32297, 571, 1, 1, 0, 0, 8172.34, 2100.43, 499.92, 4.67748, 300, 0, 0, 10080, 17628, 0), +(@guid+13, 32297, 571, 1, 1, 0, 0, 8168.38, 2100.2, 499.92, 4.72984, 300, 0, 0, 10080, 17628, 0), +(@guid+14, 32297, 571, 1, 1, 0, 0, 8202.52, 2103.62, 499.92, 0.10472, 300, 0, 0, 10080, 17628, 0), +(@guid+15, 32297, 571, 1, 1, 0, 0, 8192.9, 2100.59, 499.92, 4.81711, 300, 0, 0, 10080, 17628, 0), +(@guid+16, 32297, 571, 1, 1, 0, 0, 8214, 2126.49, 499.92, 6.26573, 300, 0, 0, 10080, 17628, 0), +(@guid+17, 32297, 571, 1, 1, 0, 0, 8132.54, 2115.139, 499.837, 1.874436, 300, 0, 0, 10080, 17628, 0), +(@guid+18, 32297, 571, 1, 1, 0, 0, 8133.218, 2119.662, 499.737, 3.914777, 300, 0, 0, 10080, 17628, 0), +(@guid+19, 32297, 571, 1, 1, 0, 0, 8129.094, 2118.386, 499.737, 5.876702, 300, 0, 0, 10080, 17628, 0), +(@guid+20, 32297, 571, 1, 1, 0, 0, 8203.914, 2120.223, 499.737, 2.054170, 300, 0, 0, 10080, 17628, 0), +(@guid+21, 32297, 571, 1, 1, 0, 0, 8158.015, 2134.9663, 499.737, 4.673187, 300, 0, 0, 10080, 17628, 0), +(@guid+22, 32297, 571, 1, 1, 0, 0, 8169.999, 2134.4260, 499.737, 4.708543, 300, 0, 0, 10080, 17628, 0), +(@guid+23, 32276, 571, 1, 1, 0, 0, 8029.4, 2172.71, 499.918, 3.01942, 300, 0, 0, 12175, 0, 0); + +DELETE FROM `creature_addon` WHERE `guid` BETWEEN @guid+0 AND @guid+23; +INSERT INTO `creature_addon` (`guid`, `bytes2`, `emote`) VALUES +(@guid+0, 1, 0), +(@guid+1, 1, 0), +(@guid+2, 1, 0), +(@guid+3, 1, 69), +(@guid+4, 1, 396), +(@guid+5, 1, 396), +(@guid+6, 1, 69), +(@guid+7, 1, 69), +(@guid+8, 1, 69), +(@guid+9, 1, 69), +(@guid+10, 1, 69), +(@guid+11, 1, 69), +(@guid+12, 1, 69), +(@guid+13, 1, 69), +(@guid+14, 1, 69), +(@guid+15, 1, 69), +(@guid+16, 1, 69), +(@guid+17, 1, 396), +(@guid+18, 1, 396), +(@guid+19, 1, 396), +(@guid+20, 1, 396), +(@guid+21, 1, 69), +(@guid+22, 1, 69), +(@guid+23, 1, 0); From fb14cb7e4fbf338a8d5cf8c3f74bb7f991105557 Mon Sep 17 00:00:00 2001 From: treeston Date: Thu, 31 Dec 2015 21:54:52 +0100 Subject: [PATCH 463/524] Rename update sql to proper name. Oops! --- .../{2015_12_27_instancerevive.sql => 2015_12_31_01_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2015_12_27_instancerevive.sql => 2015_12_31_01_world.sql} (100%) diff --git a/sql/updates/world/2015_12_27_instancerevive.sql b/sql/updates/world/2015_12_31_01_world.sql similarity index 100% rename from sql/updates/world/2015_12_27_instancerevive.sql rename to sql/updates/world/2015_12_31_01_world.sql From 923a368ac7df0998abd66cc69c458146da4098ba Mon Sep 17 00:00:00 2001 From: Rushor Date: Fri, 1 Jan 2016 12:02:33 +0100 Subject: [PATCH 464/524] Update copyright note for 2016 --- CMakeLists.txt | 2 +- PreLoad.cmake | 2 +- cmake/genrev.cmake | 2 +- cmake/macros/CheckBuildDir.cmake | 2 +- cmake/macros/FindGit.cmake | 2 +- cmake/macros/GroupSources.cmake | 2 +- cmake/options.cmake | 2 +- contrib/conf_merge/tc-conf-merger.pl | 2 +- dep/CMakeLists.txt | 2 +- dep/bzip2/CMakeLists.txt | 2 +- dep/g3dlite/CMakeLists.txt | 2 +- dep/gsoap/CMakeLists.txt | 2 +- dep/jemalloc/CMakeLists.txt | 2 +- dep/libmpq/CMakeLists.txt | 2 +- dep/recastnavigation/Detour/CMakeLists.txt | 2 +- dep/recastnavigation/Recast/CMakeLists.txt | 2 +- dep/zlib/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- src/common/CMakeLists.txt | 2 +- src/common/Collision/BoundingIntervalHierarchy.cpp | 2 +- src/common/Collision/BoundingIntervalHierarchy.h | 2 +- src/common/Collision/BoundingIntervalHierarchyWrapper.h | 2 +- src/common/Collision/DynamicTree.cpp | 2 +- src/common/Collision/DynamicTree.h | 2 +- src/common/Collision/Management/IVMapManager.h | 2 +- src/common/Collision/Management/MMapFactory.cpp | 2 +- src/common/Collision/Management/MMapFactory.h | 2 +- src/common/Collision/Management/MMapManager.cpp | 2 +- src/common/Collision/Management/MMapManager.h | 2 +- src/common/Collision/Management/VMapFactory.cpp | 2 +- src/common/Collision/Management/VMapFactory.h | 2 +- src/common/Collision/Management/VMapManager2.cpp | 2 +- src/common/Collision/Management/VMapManager2.h | 2 +- src/common/Collision/Maps/MapTree.cpp | 2 +- src/common/Collision/Maps/MapTree.h | 2 +- src/common/Collision/Maps/TileAssembler.cpp | 2 +- src/common/Collision/Maps/TileAssembler.h | 2 +- src/common/Collision/Models/GameObjectModel.cpp | 2 +- src/common/Collision/Models/GameObjectModel.h | 2 +- src/common/Collision/Models/ModelInstance.cpp | 2 +- src/common/Collision/Models/ModelInstance.h | 2 +- src/common/Collision/Models/WorldModel.cpp | 2 +- src/common/Collision/Models/WorldModel.h | 2 +- src/common/Collision/VMapDefinitions.h | 2 +- src/common/Collision/VMapTools.h | 2 +- src/common/Common.cpp | 2 +- src/common/Common.h | 2 +- src/common/CompilerDefs.h | 2 +- src/common/Configuration/Config.cpp | 2 +- src/common/Configuration/Config.h | 2 +- src/common/Cryptography/ARC4.cpp | 2 +- src/common/Cryptography/ARC4.h | 2 +- src/common/Cryptography/Authentication/AuthCrypt.cpp | 2 +- src/common/Cryptography/Authentication/AuthCrypt.h | 2 +- src/common/Cryptography/BigNumber.cpp | 2 +- src/common/Cryptography/BigNumber.h | 2 +- src/common/Cryptography/HMACSHA1.cpp | 2 +- src/common/Cryptography/HMACSHA1.h | 2 +- src/common/Cryptography/OpenSSLCrypto.cpp | 2 +- src/common/Cryptography/OpenSSLCrypto.h | 2 +- src/common/Cryptography/SHA1.cpp | 2 +- src/common/Cryptography/SHA1.h | 2 +- src/common/Cryptography/WardenKeyGeneration.h | 2 +- src/common/Debugging/Errors.cpp | 2 +- src/common/Debugging/Errors.h | 2 +- src/common/Define.h | 2 +- src/common/GitRevision.h | 2 +- src/common/Logging/Appender.cpp | 2 +- src/common/Logging/Appender.h | 2 +- src/common/Logging/AppenderConsole.cpp | 2 +- src/common/Logging/AppenderConsole.h | 2 +- src/common/Logging/AppenderFile.cpp | 2 +- src/common/Logging/AppenderFile.h | 2 +- src/common/Logging/Log.cpp | 2 +- src/common/Logging/Log.h | 2 +- src/common/Logging/LogOperation.cpp | 2 +- src/common/Logging/LogOperation.h | 2 +- src/common/Logging/Logger.cpp | 2 +- src/common/Logging/Logger.h | 2 +- src/common/Threading/Callback.h | 2 +- src/common/Threading/LockedQueue.h | 2 +- src/common/Threading/ProcessPriority.h | 2 +- src/common/Threading/ProducerConsumerQueue.h | 2 +- src/common/Utilities/ByteConverter.h | 2 +- src/common/Utilities/Duration.h | 2 +- src/common/Utilities/EventMap.cpp | 2 +- src/common/Utilities/EventMap.h | 2 +- src/common/Utilities/EventProcessor.cpp | 2 +- src/common/Utilities/EventProcessor.h | 2 +- src/common/Utilities/StringFormat.h | 2 +- src/common/Utilities/TaskScheduler.cpp | 2 +- src/common/Utilities/TaskScheduler.h | 2 +- src/common/Utilities/Timer.h | 2 +- src/common/Utilities/Util.cpp | 2 +- src/common/Utilities/Util.h | 2 +- src/genrev/CMakeLists.txt | 2 +- src/server/CMakeLists.txt | 2 +- src/server/authserver/Authentication/AuthCodes.cpp | 2 +- src/server/authserver/Authentication/AuthCodes.h | 2 +- src/server/authserver/Authentication/TOTP.cpp | 2 +- src/server/authserver/Authentication/TOTP.h | 2 +- src/server/authserver/CMakeLists.txt | 2 +- src/server/authserver/Main.cpp | 2 +- src/server/authserver/Realms/RealmList.cpp | 2 +- src/server/authserver/Realms/RealmList.h | 2 +- src/server/authserver/Server/AuthSession.cpp | 2 +- src/server/authserver/Server/AuthSession.h | 2 +- src/server/authserver/Server/AuthSocketMgr.h | 2 +- src/server/authserver/authserver.rc | 2 +- src/server/database/CMakeLists.txt | 2 +- src/server/database/Database/AdhocStatement.cpp | 2 +- src/server/database/Database/AdhocStatement.h | 2 +- src/server/database/Database/DatabaseEnv.h | 2 +- src/server/database/Database/DatabaseLoader.cpp | 2 +- src/server/database/Database/DatabaseLoader.h | 2 +- src/server/database/Database/DatabaseWorker.cpp | 2 +- src/server/database/Database/DatabaseWorker.h | 2 +- src/server/database/Database/DatabaseWorkerPool.h | 2 +- src/server/database/Database/Field.cpp | 2 +- src/server/database/Database/Field.h | 2 +- .../database/Database/Implementation/CharacterDatabase.cpp | 2 +- src/server/database/Database/Implementation/CharacterDatabase.h | 2 +- src/server/database/Database/Implementation/LoginDatabase.cpp | 2 +- src/server/database/Database/Implementation/LoginDatabase.h | 2 +- src/server/database/Database/Implementation/WorldDatabase.cpp | 2 +- src/server/database/Database/Implementation/WorldDatabase.h | 2 +- src/server/database/Database/MySQLConnection.cpp | 2 +- src/server/database/Database/MySQLConnection.h | 2 +- src/server/database/Database/MySQLThreading.h | 2 +- src/server/database/Database/PreparedStatement.cpp | 2 +- src/server/database/Database/PreparedStatement.h | 2 +- src/server/database/Database/QueryHolder.cpp | 2 +- src/server/database/Database/QueryHolder.h | 2 +- src/server/database/Database/QueryResult.cpp | 2 +- src/server/database/Database/QueryResult.h | 2 +- src/server/database/Database/SQLOperation.h | 2 +- src/server/database/Database/Transaction.cpp | 2 +- src/server/database/Database/Transaction.h | 2 +- src/server/database/Logging/AppenderDB.cpp | 2 +- src/server/database/Logging/AppenderDB.h | 2 +- src/server/database/Updater/DBUpdater.cpp | 2 +- src/server/database/Updater/DBUpdater.h | 2 +- src/server/database/Updater/UpdateFetcher.cpp | 2 +- src/server/database/Updater/UpdateFetcher.h | 2 +- src/server/game/AI/CoreAI/CombatAI.cpp | 2 +- src/server/game/AI/CoreAI/CombatAI.h | 2 +- src/server/game/AI/CoreAI/GameObjectAI.cpp | 2 +- src/server/game/AI/CoreAI/GameObjectAI.h | 2 +- src/server/game/AI/CoreAI/GuardAI.cpp | 2 +- src/server/game/AI/CoreAI/GuardAI.h | 2 +- src/server/game/AI/CoreAI/PassiveAI.cpp | 2 +- src/server/game/AI/CoreAI/PassiveAI.h | 2 +- src/server/game/AI/CoreAI/PetAI.cpp | 2 +- src/server/game/AI/CoreAI/PetAI.h | 2 +- src/server/game/AI/CoreAI/ReactorAI.cpp | 2 +- src/server/game/AI/CoreAI/ReactorAI.h | 2 +- src/server/game/AI/CoreAI/TotemAI.cpp | 2 +- src/server/game/AI/CoreAI/TotemAI.h | 2 +- src/server/game/AI/CoreAI/UnitAI.cpp | 2 +- src/server/game/AI/CoreAI/UnitAI.h | 2 +- src/server/game/AI/CreatureAI.cpp | 2 +- src/server/game/AI/CreatureAI.h | 2 +- src/server/game/AI/CreatureAIFactory.h | 2 +- src/server/game/AI/CreatureAIImpl.h | 2 +- src/server/game/AI/CreatureAIRegistry.cpp | 2 +- src/server/game/AI/CreatureAIRegistry.h | 2 +- src/server/game/AI/CreatureAISelector.cpp | 2 +- src/server/game/AI/CreatureAISelector.h | 2 +- src/server/game/AI/ScriptedAI/ScriptedCreature.cpp | 2 +- src/server/game/AI/ScriptedAI/ScriptedCreature.h | 2 +- src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp | 2 +- src/server/game/AI/ScriptedAI/ScriptedEscortAI.h | 2 +- src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp | 2 +- src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h | 2 +- src/server/game/AI/ScriptedAI/ScriptedGossip.h | 2 +- src/server/game/AI/SmartScripts/SmartAI.cpp | 2 +- src/server/game/AI/SmartScripts/SmartAI.h | 2 +- src/server/game/AI/SmartScripts/SmartScript.cpp | 2 +- src/server/game/AI/SmartScripts/SmartScript.h | 2 +- src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 +- src/server/game/AI/SmartScripts/SmartScriptMgr.h | 2 +- src/server/game/Accounts/AccountMgr.cpp | 2 +- src/server/game/Accounts/AccountMgr.h | 2 +- src/server/game/Accounts/RBAC.cpp | 2 +- src/server/game/Accounts/RBAC.h | 2 +- src/server/game/Achievements/AchievementMgr.cpp | 2 +- src/server/game/Achievements/AchievementMgr.h | 2 +- src/server/game/Addons/AddonMgr.cpp | 2 +- src/server/game/Addons/AddonMgr.h | 2 +- src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 2 +- src/server/game/AuctionHouse/AuctionHouseMgr.h | 2 +- src/server/game/AuctionHouseBot/AuctionHouseBot.cpp | 2 +- src/server/game/AuctionHouseBot/AuctionHouseBot.h | 2 +- src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp | 2 +- src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h | 2 +- src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp | 2 +- src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h | 2 +- src/server/game/Battlefield/Battlefield.cpp | 2 +- src/server/game/Battlefield/Battlefield.h | 2 +- src/server/game/Battlefield/BattlefieldMgr.cpp | 2 +- src/server/game/Battlefield/BattlefieldMgr.h | 2 +- src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 2 +- src/server/game/Battlefield/Zones/BattlefieldWG.h | 2 +- src/server/game/Battlegrounds/Arena.cpp | 2 +- src/server/game/Battlegrounds/Arena.h | 2 +- src/server/game/Battlegrounds/ArenaScore.h | 2 +- src/server/game/Battlegrounds/ArenaTeam.cpp | 2 +- src/server/game/Battlegrounds/ArenaTeam.h | 2 +- src/server/game/Battlegrounds/ArenaTeamMgr.cpp | 2 +- src/server/game/Battlegrounds/ArenaTeamMgr.h | 2 +- src/server/game/Battlegrounds/Battleground.cpp | 2 +- src/server/game/Battlegrounds/Battleground.h | 2 +- src/server/game/Battlegrounds/BattlegroundMgr.cpp | 2 +- src/server/game/Battlegrounds/BattlegroundMgr.h | 2 +- src/server/game/Battlegrounds/BattlegroundQueue.cpp | 2 +- src/server/game/Battlegrounds/BattlegroundQueue.h | 2 +- src/server/game/Battlegrounds/BattlegroundScore.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundAB.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundAV.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundBE.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundDS.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundEY.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundIC.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundNA.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundRL.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundRV.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundSA.h | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp | 2 +- src/server/game/Battlegrounds/Zones/BattlegroundWS.h | 2 +- src/server/game/CMakeLists.txt | 2 +- src/server/game/Calendar/CalendarMgr.cpp | 2 +- src/server/game/Calendar/CalendarMgr.h | 2 +- src/server/game/Chat/Channels/Channel.cpp | 2 +- src/server/game/Chat/Channels/Channel.h | 2 +- src/server/game/Chat/Channels/ChannelMgr.cpp | 2 +- src/server/game/Chat/Channels/ChannelMgr.h | 2 +- src/server/game/Chat/Chat.cpp | 2 +- src/server/game/Chat/Chat.h | 2 +- src/server/game/Chat/ChatLink.cpp | 2 +- src/server/game/Chat/ChatLink.h | 2 +- src/server/game/Combat/HostileRefManager.cpp | 2 +- src/server/game/Combat/HostileRefManager.h | 2 +- src/server/game/Combat/ThreatManager.cpp | 2 +- src/server/game/Combat/ThreatManager.h | 2 +- src/server/game/Combat/UnitEvents.h | 2 +- src/server/game/Conditions/ConditionMgr.cpp | 2 +- src/server/game/Conditions/ConditionMgr.h | 2 +- src/server/game/Conditions/DisableMgr.cpp | 2 +- src/server/game/Conditions/DisableMgr.h | 2 +- src/server/game/DataStores/DBCEnums.h | 2 +- src/server/game/DataStores/DBCStores.cpp | 2 +- src/server/game/DataStores/DBCStores.h | 2 +- src/server/game/DataStores/DBCStructure.h | 2 +- src/server/game/DataStores/DBCfmt.h | 2 +- src/server/game/DungeonFinding/LFG.cpp | 2 +- src/server/game/DungeonFinding/LFG.h | 2 +- src/server/game/DungeonFinding/LFGGroupData.cpp | 2 +- src/server/game/DungeonFinding/LFGGroupData.h | 2 +- src/server/game/DungeonFinding/LFGMgr.cpp | 2 +- src/server/game/DungeonFinding/LFGMgr.h | 2 +- src/server/game/DungeonFinding/LFGPlayerData.cpp | 2 +- src/server/game/DungeonFinding/LFGPlayerData.h | 2 +- src/server/game/DungeonFinding/LFGQueue.cpp | 2 +- src/server/game/DungeonFinding/LFGQueue.h | 2 +- src/server/game/DungeonFinding/LFGScripts.cpp | 2 +- src/server/game/DungeonFinding/LFGScripts.h | 2 +- src/server/game/Entities/Corpse/Corpse.cpp | 2 +- src/server/game/Entities/Corpse/Corpse.h | 2 +- src/server/game/Entities/Creature/Creature.cpp | 2 +- src/server/game/Entities/Creature/Creature.h | 2 +- src/server/game/Entities/Creature/CreatureGroups.cpp | 2 +- src/server/game/Entities/Creature/CreatureGroups.h | 2 +- src/server/game/Entities/Creature/GossipDef.cpp | 2 +- src/server/game/Entities/Creature/GossipDef.h | 2 +- src/server/game/Entities/Creature/TemporarySummon.cpp | 2 +- src/server/game/Entities/Creature/TemporarySummon.h | 2 +- src/server/game/Entities/DynamicObject/DynamicObject.cpp | 2 +- src/server/game/Entities/DynamicObject/DynamicObject.h | 2 +- src/server/game/Entities/GameObject/GameObject.cpp | 2 +- src/server/game/Entities/GameObject/GameObject.h | 2 +- src/server/game/Entities/Item/Container/Bag.cpp | 2 +- src/server/game/Entities/Item/Container/Bag.h | 2 +- src/server/game/Entities/Item/Item.cpp | 2 +- src/server/game/Entities/Item/Item.h | 2 +- src/server/game/Entities/Item/ItemEnchantmentMgr.cpp | 2 +- src/server/game/Entities/Item/ItemEnchantmentMgr.h | 2 +- src/server/game/Entities/Item/ItemPrototype.h | 2 +- src/server/game/Entities/Object/Object.cpp | 2 +- src/server/game/Entities/Object/Object.h | 2 +- src/server/game/Entities/Object/ObjectDefines.h | 2 +- src/server/game/Entities/Object/ObjectGuid.cpp | 2 +- src/server/game/Entities/Object/ObjectGuid.h | 2 +- src/server/game/Entities/Object/ObjectPosSelector.cpp | 2 +- src/server/game/Entities/Object/ObjectPosSelector.h | 2 +- src/server/game/Entities/Object/Position.cpp | 2 +- src/server/game/Entities/Object/Position.h | 2 +- src/server/game/Entities/Object/Updates/UpdateData.cpp | 2 +- src/server/game/Entities/Object/Updates/UpdateData.h | 2 +- src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp | 2 +- src/server/game/Entities/Object/Updates/UpdateFieldFlags.h | 2 +- src/server/game/Entities/Object/Updates/UpdateFields.h | 2 +- src/server/game/Entities/Object/Updates/UpdateMask.h | 2 +- src/server/game/Entities/Pet/Pet.cpp | 2 +- src/server/game/Entities/Pet/Pet.h | 2 +- src/server/game/Entities/Pet/PetDefines.h | 2 +- src/server/game/Entities/Player/KillRewarder.cpp | 2 +- src/server/game/Entities/Player/KillRewarder.h | 2 +- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Entities/Player/SocialMgr.cpp | 2 +- src/server/game/Entities/Player/SocialMgr.h | 2 +- src/server/game/Entities/Player/TradeData.cpp | 2 +- src/server/game/Entities/Player/TradeData.h | 2 +- src/server/game/Entities/Totem/Totem.cpp | 2 +- src/server/game/Entities/Totem/Totem.h | 2 +- src/server/game/Entities/Transport/Transport.cpp | 2 +- src/server/game/Entities/Transport/Transport.h | 2 +- src/server/game/Entities/Unit/StatSystem.cpp | 2 +- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Entities/Unit/Unit.h | 2 +- src/server/game/Entities/Vehicle/Vehicle.cpp | 2 +- src/server/game/Entities/Vehicle/Vehicle.h | 2 +- src/server/game/Entities/Vehicle/VehicleDefines.h | 2 +- src/server/game/Events/GameEventMgr.cpp | 2 +- src/server/game/Events/GameEventMgr.h | 2 +- src/server/game/Globals/ObjectAccessor.cpp | 2 +- src/server/game/Globals/ObjectAccessor.h | 2 +- src/server/game/Globals/ObjectMgr.cpp | 2 +- src/server/game/Globals/ObjectMgr.h | 2 +- src/server/game/Grids/Cells/Cell.h | 2 +- src/server/game/Grids/Cells/CellImpl.h | 2 +- src/server/game/Grids/Grid.h | 2 +- src/server/game/Grids/GridDefines.h | 2 +- src/server/game/Grids/GridLoader.h | 2 +- src/server/game/Grids/GridRefManager.h | 2 +- src/server/game/Grids/GridReference.h | 2 +- src/server/game/Grids/GridStates.cpp | 2 +- src/server/game/Grids/GridStates.h | 2 +- src/server/game/Grids/NGrid.h | 2 +- src/server/game/Grids/Notifiers/GridNotifiers.cpp | 2 +- src/server/game/Grids/Notifiers/GridNotifiers.h | 2 +- src/server/game/Grids/Notifiers/GridNotifiersImpl.h | 2 +- src/server/game/Grids/ObjectGridLoader.cpp | 2 +- src/server/game/Grids/ObjectGridLoader.h | 2 +- src/server/game/Groups/Group.cpp | 2 +- src/server/game/Groups/Group.h | 2 +- src/server/game/Groups/GroupMgr.cpp | 2 +- src/server/game/Groups/GroupMgr.h | 2 +- src/server/game/Groups/GroupRefManager.h | 2 +- src/server/game/Groups/GroupReference.cpp | 2 +- src/server/game/Groups/GroupReference.h | 2 +- src/server/game/Guilds/Guild.cpp | 2 +- src/server/game/Guilds/Guild.h | 2 +- src/server/game/Guilds/GuildMgr.cpp | 2 +- src/server/game/Guilds/GuildMgr.h | 2 +- src/server/game/Handlers/AddonHandler.cpp | 2 +- src/server/game/Handlers/AddonHandler.h | 2 +- src/server/game/Handlers/ArenaTeamHandler.cpp | 2 +- src/server/game/Handlers/AuctionHouseHandler.cpp | 2 +- src/server/game/Handlers/AuthHandler.cpp | 2 +- src/server/game/Handlers/BattleGroundHandler.cpp | 2 +- src/server/game/Handlers/BattlefieldHandler.cpp | 2 +- src/server/game/Handlers/CalendarHandler.cpp | 2 +- src/server/game/Handlers/ChannelHandler.cpp | 2 +- src/server/game/Handlers/CharacterHandler.cpp | 2 +- src/server/game/Handlers/ChatHandler.cpp | 2 +- src/server/game/Handlers/CombatHandler.cpp | 2 +- src/server/game/Handlers/DuelHandler.cpp | 2 +- src/server/game/Handlers/GroupHandler.cpp | 2 +- src/server/game/Handlers/GuildHandler.cpp | 2 +- src/server/game/Handlers/ItemHandler.cpp | 2 +- src/server/game/Handlers/LFGHandler.cpp | 2 +- src/server/game/Handlers/LootHandler.cpp | 2 +- src/server/game/Handlers/MailHandler.cpp | 2 +- src/server/game/Handlers/MiscHandler.cpp | 2 +- src/server/game/Handlers/MovementHandler.cpp | 2 +- src/server/game/Handlers/NPCHandler.cpp | 2 +- src/server/game/Handlers/NPCHandler.h | 2 +- src/server/game/Handlers/PetHandler.cpp | 2 +- src/server/game/Handlers/PetitionsHandler.cpp | 2 +- src/server/game/Handlers/QueryHandler.cpp | 2 +- src/server/game/Handlers/QuestHandler.cpp | 2 +- src/server/game/Handlers/ReferAFriendHandler.cpp | 2 +- src/server/game/Handlers/SkillHandler.cpp | 2 +- src/server/game/Handlers/SpellHandler.cpp | 2 +- src/server/game/Handlers/TaxiHandler.cpp | 2 +- src/server/game/Handlers/TicketHandler.cpp | 2 +- src/server/game/Handlers/TradeHandler.cpp | 2 +- src/server/game/Handlers/VehicleHandler.cpp | 2 +- src/server/game/Handlers/VoiceChatHandler.cpp | 2 +- src/server/game/Instances/InstanceSaveMgr.cpp | 2 +- src/server/game/Instances/InstanceSaveMgr.h | 2 +- src/server/game/Instances/InstanceScript.cpp | 2 +- src/server/game/Instances/InstanceScript.h | 2 +- src/server/game/Loot/LootMgr.cpp | 2 +- src/server/game/Loot/LootMgr.h | 2 +- src/server/game/Mails/Mail.cpp | 2 +- src/server/game/Mails/Mail.h | 2 +- src/server/game/Maps/Map.cpp | 2 +- src/server/game/Maps/Map.h | 2 +- src/server/game/Maps/MapInstanced.cpp | 2 +- src/server/game/Maps/MapInstanced.h | 2 +- src/server/game/Maps/MapManager.cpp | 2 +- src/server/game/Maps/MapManager.h | 2 +- src/server/game/Maps/MapRefManager.h | 2 +- src/server/game/Maps/MapReference.h | 2 +- src/server/game/Maps/MapUpdater.cpp | 2 +- src/server/game/Maps/MapUpdater.h | 2 +- src/server/game/Maps/TransportMgr.cpp | 2 +- src/server/game/Maps/TransportMgr.h | 2 +- src/server/game/Maps/ZoneScript.h | 2 +- src/server/game/Miscellaneous/Formulas.h | 2 +- src/server/game/Miscellaneous/Language.h | 2 +- src/server/game/Miscellaneous/SharedDefines.h | 2 +- src/server/game/Movement/FollowerRefManager.h | 2 +- src/server/game/Movement/FollowerReference.cpp | 2 +- src/server/game/Movement/FollowerReference.h | 2 +- src/server/game/Movement/MotionMaster.cpp | 2 +- src/server/game/Movement/MotionMaster.h | 2 +- src/server/game/Movement/MovementGenerator.cpp | 2 +- src/server/game/Movement/MovementGenerator.h | 2 +- src/server/game/Movement/MovementGeneratorImpl.h | 2 +- .../Movement/MovementGenerators/ConfusedMovementGenerator.cpp | 2 +- .../Movement/MovementGenerators/ConfusedMovementGenerator.h | 2 +- .../Movement/MovementGenerators/FleeingMovementGenerator.cpp | 2 +- .../game/Movement/MovementGenerators/FleeingMovementGenerator.h | 2 +- .../game/Movement/MovementGenerators/HomeMovementGenerator.cpp | 2 +- .../game/Movement/MovementGenerators/HomeMovementGenerator.h | 2 +- .../game/Movement/MovementGenerators/IdleMovementGenerator.cpp | 2 +- .../game/Movement/MovementGenerators/IdleMovementGenerator.h | 2 +- .../game/Movement/MovementGenerators/PointMovementGenerator.cpp | 2 +- .../game/Movement/MovementGenerators/PointMovementGenerator.h | 2 +- .../Movement/MovementGenerators/RandomMovementGenerator.cpp | 2 +- .../game/Movement/MovementGenerators/RandomMovementGenerator.h | 2 +- .../Movement/MovementGenerators/TargetedMovementGenerator.cpp | 2 +- .../Movement/MovementGenerators/TargetedMovementGenerator.h | 2 +- .../Movement/MovementGenerators/WaypointMovementGenerator.cpp | 2 +- .../Movement/MovementGenerators/WaypointMovementGenerator.h | 2 +- src/server/game/Movement/Spline/MovementPacketBuilder.cpp | 2 +- src/server/game/Movement/Spline/MovementPacketBuilder.h | 2 +- src/server/game/Movement/Waypoints/WaypointManager.cpp | 2 +- src/server/game/Movement/Waypoints/WaypointManager.h | 2 +- src/server/game/OutdoorPvP/OutdoorPvP.cpp | 2 +- src/server/game/OutdoorPvP/OutdoorPvP.h | 2 +- src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp | 2 +- src/server/game/OutdoorPvP/OutdoorPvPMgr.h | 2 +- src/server/game/Pools/PoolMgr.cpp | 2 +- src/server/game/Pools/PoolMgr.h | 2 +- src/server/game/Quests/QuestDef.cpp | 2 +- src/server/game/Quests/QuestDef.h | 2 +- src/server/game/Reputation/ReputationMgr.cpp | 2 +- src/server/game/Reputation/ReputationMgr.h | 2 +- src/server/game/Scripting/MapScripts.cpp | 2 +- src/server/game/Scripting/ScriptLoader.cpp | 2 +- src/server/game/Scripting/ScriptLoader.h | 2 +- src/server/game/Scripting/ScriptMgr.cpp | 2 +- src/server/game/Scripting/ScriptMgr.h | 2 +- src/server/game/Scripting/ScriptSystem.cpp | 2 +- src/server/game/Server/Protocol/Opcodes.cpp | 2 +- src/server/game/Server/Protocol/Opcodes.h | 2 +- src/server/game/Server/Protocol/PacketLog.cpp | 2 +- src/server/game/Server/Protocol/PacketLog.h | 2 +- src/server/game/Server/Protocol/ServerPktHeader.h | 2 +- src/server/game/Server/WorldSession.cpp | 2 +- src/server/game/Server/WorldSession.h | 2 +- src/server/game/Server/WorldSocket.cpp | 2 +- src/server/game/Server/WorldSocket.h | 2 +- src/server/game/Server/WorldSocketMgr.cpp | 2 +- src/server/game/Skills/SkillDiscovery.cpp | 2 +- src/server/game/Skills/SkillDiscovery.h | 2 +- src/server/game/Skills/SkillExtraItems.cpp | 2 +- src/server/game/Skills/SkillExtraItems.h | 2 +- src/server/game/Spells/Auras/SpellAuraDefines.h | 2 +- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 +- src/server/game/Spells/Auras/SpellAuraEffects.h | 2 +- src/server/game/Spells/Auras/SpellAuras.cpp | 2 +- src/server/game/Spells/Auras/SpellAuras.h | 2 +- src/server/game/Spells/Spell.cpp | 2 +- src/server/game/Spells/Spell.h | 2 +- src/server/game/Spells/SpellEffects.cpp | 2 +- src/server/game/Spells/SpellHistory.cpp | 2 +- src/server/game/Spells/SpellHistory.h | 2 +- src/server/game/Spells/SpellInfo.cpp | 2 +- src/server/game/Spells/SpellInfo.h | 2 +- src/server/game/Spells/SpellMgr.cpp | 2 +- src/server/game/Spells/SpellMgr.h | 2 +- src/server/game/Spells/SpellScript.cpp | 2 +- src/server/game/Spells/SpellScript.h | 2 +- src/server/game/Texts/ChatTextBuilder.h | 2 +- src/server/game/Texts/CreatureTextMgr.cpp | 2 +- src/server/game/Texts/CreatureTextMgr.h | 2 +- src/server/game/Tickets/TicketMgr.cpp | 2 +- src/server/game/Tickets/TicketMgr.h | 2 +- src/server/game/Tools/CharacterDatabaseCleaner.cpp | 2 +- src/server/game/Tools/CharacterDatabaseCleaner.h | 2 +- src/server/game/Tools/PlayerDump.cpp | 2 +- src/server/game/Tools/PlayerDump.h | 2 +- src/server/game/Warden/Modules/WardenModuleMac.h | 2 +- src/server/game/Warden/Modules/WardenModuleWin.h | 2 +- src/server/game/Warden/Warden.cpp | 2 +- src/server/game/Warden/Warden.h | 2 +- src/server/game/Warden/WardenCheckMgr.cpp | 2 +- src/server/game/Warden/WardenCheckMgr.h | 2 +- src/server/game/Warden/WardenMac.cpp | 2 +- src/server/game/Warden/WardenMac.h | 2 +- src/server/game/Warden/WardenWin.cpp | 2 +- src/server/game/Warden/WardenWin.h | 2 +- src/server/game/Weather/Weather.cpp | 2 +- src/server/game/Weather/Weather.h | 2 +- src/server/game/Weather/WeatherMgr.cpp | 2 +- src/server/game/Weather/WeatherMgr.h | 2 +- src/server/game/World/World.cpp | 2 +- src/server/game/World/World.h | 2 +- src/server/scripts/CMakeLists.txt | 2 +- src/server/scripts/Commands/CMakeLists.txt | 2 +- src/server/scripts/Commands/cs_account.cpp | 2 +- src/server/scripts/Commands/cs_achievement.cpp | 2 +- src/server/scripts/Commands/cs_ahbot.cpp | 2 +- src/server/scripts/Commands/cs_arena.cpp | 2 +- src/server/scripts/Commands/cs_ban.cpp | 2 +- src/server/scripts/Commands/cs_bf.cpp | 2 +- src/server/scripts/Commands/cs_cast.cpp | 2 +- src/server/scripts/Commands/cs_character.cpp | 2 +- src/server/scripts/Commands/cs_cheat.cpp | 2 +- src/server/scripts/Commands/cs_debug.cpp | 2 +- src/server/scripts/Commands/cs_deserter.cpp | 2 +- src/server/scripts/Commands/cs_disable.cpp | 2 +- src/server/scripts/Commands/cs_event.cpp | 2 +- src/server/scripts/Commands/cs_gm.cpp | 2 +- src/server/scripts/Commands/cs_go.cpp | 2 +- src/server/scripts/Commands/cs_gobject.cpp | 2 +- src/server/scripts/Commands/cs_group.cpp | 2 +- src/server/scripts/Commands/cs_guild.cpp | 2 +- src/server/scripts/Commands/cs_honor.cpp | 2 +- src/server/scripts/Commands/cs_instance.cpp | 2 +- src/server/scripts/Commands/cs_learn.cpp | 2 +- src/server/scripts/Commands/cs_lfg.cpp | 2 +- src/server/scripts/Commands/cs_list.cpp | 2 +- src/server/scripts/Commands/cs_lookup.cpp | 2 +- src/server/scripts/Commands/cs_message.cpp | 2 +- src/server/scripts/Commands/cs_misc.cpp | 2 +- src/server/scripts/Commands/cs_mmaps.cpp | 2 +- src/server/scripts/Commands/cs_modify.cpp | 2 +- src/server/scripts/Commands/cs_npc.cpp | 2 +- src/server/scripts/Commands/cs_pet.cpp | 2 +- src/server/scripts/Commands/cs_quest.cpp | 2 +- src/server/scripts/Commands/cs_rbac.cpp | 2 +- src/server/scripts/Commands/cs_reload.cpp | 2 +- src/server/scripts/Commands/cs_reset.cpp | 2 +- src/server/scripts/Commands/cs_send.cpp | 2 +- src/server/scripts/Commands/cs_server.cpp | 2 +- src/server/scripts/Commands/cs_tele.cpp | 2 +- src/server/scripts/Commands/cs_ticket.cpp | 2 +- src/server/scripts/Commands/cs_titles.cpp | 2 +- src/server/scripts/Commands/cs_wp.cpp | 2 +- src/server/scripts/Custom/CMakeLists.txt | 2 +- .../scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp | 2 +- .../scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp | 2 +- .../scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp | 2 +- .../scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp | 2 +- .../scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp | 2 +- .../BlackrockMountain/BlackrockDepths/blackrock_depths.cpp | 2 +- .../BlackrockMountain/BlackrockDepths/blackrock_depths.h | 2 +- .../BlackrockDepths/boss_ambassador_flamelash.cpp | 2 +- .../BlackrockDepths/boss_emperor_dagran_thaurissan.cpp | 2 +- .../BlackrockDepths/boss_general_angerforge.cpp | 2 +- .../BlackrockDepths/boss_high_interrogator_gerstahn.cpp | 2 +- .../BlackrockMountain/BlackrockDepths/boss_magmus.cpp | 2 +- .../BlackrockDepths/boss_moira_bronzebeard.cpp | 2 +- .../BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp | 2 +- .../BlackrockDepths/instance_blackrock_depths.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/blackrock_spire.h | 2 +- .../BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp | 2 +- .../BlackrockSpire/boss_gizrul_the_slavener.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_gyth.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_halycon.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp | 2 +- .../BlackrockSpire/boss_overlord_wyrmthalak.cpp | 2 +- .../BlackrockSpire/boss_pyroguard_emberseer.cpp | 2 +- .../BlackrockSpire/boss_quartermaster_zigris.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp | 2 +- .../BlackrockSpire/boss_shadow_hunter_voshgajin.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_the_beast.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp | 2 +- .../BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp | 2 +- .../BlackrockSpire/instance_blackrock_spire.cpp | 2 +- .../BlackrockMountain/BlackwingLair/blackwing_lair.h | 2 +- .../BlackwingLair/boss_broodlord_lashlayer.cpp | 2 +- .../BlackrockMountain/BlackwingLair/boss_chromaggus.cpp | 2 +- .../BlackrockMountain/BlackwingLair/boss_ebonroc.cpp | 2 +- .../BlackrockMountain/BlackwingLair/boss_firemaw.cpp | 2 +- .../BlackrockMountain/BlackwingLair/boss_flamegor.cpp | 2 +- .../BlackrockMountain/BlackwingLair/boss_nefarian.cpp | 2 +- .../BlackrockMountain/BlackwingLair/boss_razorgore.cpp | 2 +- .../BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp | 2 +- .../BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_baron_geddon.cpp | 2 +- .../EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_gehennas.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_golemagg.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_lucifron.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_magmadar.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_ragnaros.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_shazzrah.cpp | 2 +- .../BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp | 2 +- .../BlackrockMountain/MoltenCore/instance_molten_core.cpp | 2 +- .../EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h | 2 +- src/server/scripts/EasternKingdoms/CMakeLists.txt | 2 +- src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp | 2 +- src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp | 2 +- src/server/scripts/EasternKingdoms/Deadmines/deadmines.h | 2 +- .../scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp | 2 +- src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp | 2 +- src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h | 2 +- .../scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp | 2 +- src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp | 2 +- .../scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp | 2 +- src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp | 2 +- src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp | 2 +- .../scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp | 2 +- src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp | 2 +- .../scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp | 2 +- .../scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp | 2 +- .../scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp | 2 +- src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp | 2 +- .../scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp | 2 +- src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp | 2 +- src/server/scripts/EasternKingdoms/Karazhan/karazhan.h | 2 +- .../EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp | 2 +- .../MagistersTerrace/boss_priestess_delrissa.cpp | 2 +- .../EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp | 2 +- .../scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp | 2 +- .../MagistersTerrace/instance_magisters_terrace.cpp | 2 +- .../EasternKingdoms/MagistersTerrace/magisters_terrace.cpp | 2 +- .../EasternKingdoms/MagistersTerrace/magisters_terrace.h | 2 +- src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp | 2 +- src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp | 2 +- src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp | 2 +- .../EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp | 2 +- .../EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp | 2 +- .../ScarletMonastery/boss_azshir_the_sleepless.cpp | 2 +- .../EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp | 2 +- .../EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp | 2 +- .../scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp | 2 +- .../ScarletMonastery/boss_high_inquisitor_fairbanks.cpp | 2 +- .../ScarletMonastery/boss_houndmaster_loksey.cpp | 2 +- .../ScarletMonastery/boss_interrogator_vishas.cpp | 2 +- .../ScarletMonastery/boss_mograine_and_whitemane.cpp | 2 +- .../scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp | 2 +- .../ScarletMonastery/instance_scarlet_monastery.cpp | 2 +- .../EasternKingdoms/ScarletMonastery/scarlet_monastery.h | 2 +- .../EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp | 2 +- .../Scholomance/boss_death_knight_darkreaver.cpp | 2 +- .../Scholomance/boss_doctor_theolen_krastinov.cpp | 2 +- .../scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp | 2 +- .../EasternKingdoms/Scholomance/boss_instructor_malicia.cpp | 2 +- .../scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp | 2 +- .../EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp | 2 +- src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp | 2 +- .../EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp | 2 +- .../EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp | 2 +- .../EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp | 2 +- .../scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp | 2 +- src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp | 2 +- .../EasternKingdoms/Scholomance/instance_scholomance.cpp | 2 +- src/server/scripts/EasternKingdoms/Scholomance/scholomance.h | 2 +- .../EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp | 2 +- .../scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp | 2 +- .../scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h | 2 +- .../scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp | 2 +- .../EasternKingdoms/Stratholme/boss_baroness_anastari.cpp | 2 +- .../EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp | 2 +- .../EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp | 2 +- .../EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp | 2 +- .../EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp | 2 +- .../scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp | 2 +- .../EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp | 2 +- .../EasternKingdoms/Stratholme/boss_postmaster_malown.cpp | 2 +- .../EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp | 2 +- .../scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp | 2 +- .../scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp | 2 +- src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp | 2 +- src/server/scripts/EasternKingdoms/Stratholme/stratholme.h | 2 +- .../EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp | 2 +- .../scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp | 2 +- src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h | 2 +- .../scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp | 2 +- .../EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp | 2 +- .../scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp | 2 +- .../scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp | 2 +- .../scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp | 2 +- src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp | 2 +- .../EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp | 2 +- .../scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp | 2 +- .../scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h | 2 +- .../EasternKingdoms/TheStockade/instance_the_stockade.cpp | 2 +- src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp | 2 +- src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp | 2 +- src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp | 2 +- src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp | 2 +- src/server/scripts/EasternKingdoms/Uldaman/uldaman.h | 2 +- src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulAman/zulaman.h | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp | 2 +- .../scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp | 2 +- src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h | 2 +- src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_duskwood.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_ghostlands.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_hinterlands.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_loch_modan.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_undercity.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp | 2 +- src/server/scripts/EasternKingdoms/zone_wetlands.cpp | 2 +- src/server/scripts/Events/CMakeLists.txt | 2 +- src/server/scripts/Events/childrens_week.cpp | 2 +- .../scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp | 2 +- .../scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h | 2 +- src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp | 2 +- src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp | 2 +- src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp | 2 +- .../Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp | 2 +- src/server/scripts/Kalimdor/CMakeLists.txt | 2 +- .../CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp | 2 +- .../CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp | 2 +- .../Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp | 2 +- .../CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp | 2 +- .../CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp | 2 +- .../Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp | 2 +- .../scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h | 2 +- .../Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp | 2 +- .../Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h | 2 +- .../Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp | 2 +- .../Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h | 2 +- .../CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp | 2 +- .../CullingOfStratholme/boss_chrono_lord_epoch.cpp | 2 +- .../CullingOfStratholme/boss_infinite_corruptor.cpp | 2 +- .../CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp | 2 +- .../CavernsOfTime/CullingOfStratholme/boss_meathook.cpp | 2 +- .../CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp | 2 +- .../CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp | 2 +- .../CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h | 2 +- .../CullingOfStratholme/instance_culling_of_stratholme.cpp | 2 +- .../EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp | 2 +- .../CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp | 2 +- .../EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp | 2 +- .../EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp | 2 +- .../CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp | 2 +- .../CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h | 2 +- .../Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp | 2 +- .../CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp | 2 +- .../Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp | 2 +- .../CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp | 2 +- .../Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp | 2 +- .../Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h | 2 +- src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp | 2 +- .../scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp | 2 +- src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp | 2 +- src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp | 2 +- .../scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp | 2 +- src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp | 2 +- src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp | 2 +- .../scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp | 2 +- src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h | 2 +- .../scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp | 2 +- .../Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp | 2 +- src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp | 2 +- .../scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp | 2 +- src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp | 2 +- .../scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp | 2 +- src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp | 2 +- src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h | 2 +- .../scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp | 2 +- src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp | 2 +- src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h | 2 +- src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp | 2 +- src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp | 2 +- src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp | 2 +- src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp | 2 +- src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp | 2 +- src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp | 2 +- .../Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp | 2 +- src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h | 2 +- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp | 2 +- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp | 2 +- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp | 2 +- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp | 2 +- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp | 2 +- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp | 2 +- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp | 2 +- .../scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp | 2 +- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp | 2 +- .../Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp | 2 +- .../Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp | 2 +- .../scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h | 2 +- .../Kalimdor/WailingCaverns/instance_wailing_caverns.cpp | 2 +- src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp | 2 +- src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h | 2 +- src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp | 2 +- src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp | 2 +- src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp | 2 +- src/server/scripts/Kalimdor/boss_azuregos.cpp | 2 +- src/server/scripts/Kalimdor/zone_ashenvale.cpp | 2 +- src/server/scripts/Kalimdor/zone_azshara.cpp | 2 +- src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp | 2 +- src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp | 2 +- src/server/scripts/Kalimdor/zone_darkshore.cpp | 2 +- src/server/scripts/Kalimdor/zone_desolace.cpp | 2 +- src/server/scripts/Kalimdor/zone_durotar.cpp | 2 +- src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp | 2 +- src/server/scripts/Kalimdor/zone_felwood.cpp | 2 +- src/server/scripts/Kalimdor/zone_feralas.cpp | 2 +- src/server/scripts/Kalimdor/zone_moonglade.cpp | 2 +- src/server/scripts/Kalimdor/zone_orgrimmar.cpp | 2 +- src/server/scripts/Kalimdor/zone_silithus.cpp | 2 +- src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp | 2 +- src/server/scripts/Kalimdor/zone_tanaris.cpp | 2 +- src/server/scripts/Kalimdor/zone_the_barrens.cpp | 2 +- src/server/scripts/Kalimdor/zone_thousand_needles.cpp | 2 +- src/server/scripts/Kalimdor/zone_thunder_bluff.cpp | 2 +- src/server/scripts/Kalimdor/zone_ungoro_crater.cpp | 2 +- src/server/scripts/Kalimdor/zone_winterspring.cpp | 2 +- src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h | 2 +- .../scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp | 2 +- .../scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp | 2 +- .../Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp | 2 +- .../Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp | 2 +- .../Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp | 2 +- .../scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp | 2 +- .../scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h | 2 +- .../scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp | 2 +- .../scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp | 2 +- .../AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp | 2 +- .../Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp | 2 +- src/server/scripts/Northrend/CMakeLists.txt | 2 +- .../ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp | 2 +- .../ObsidianSanctum/instance_obsidian_sanctum.cpp | 2 +- .../ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp | 2 +- .../ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h | 2 +- .../ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp | 2 +- .../ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp | 2 +- .../Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp | 2 +- .../ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp | 2 +- .../ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp | 2 +- .../Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp | 2 +- .../Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h | 2 +- .../TrialOfTheChampion/boss_argent_challenge.cpp | 2 +- .../CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp | 2 +- .../TrialOfTheChampion/boss_grand_champions.cpp | 2 +- .../TrialOfTheChampion/instance_trial_of_the_champion.cpp | 2 +- .../TrialOfTheChampion/trial_of_the_champion.cpp | 2 +- .../TrialOfTheChampion/trial_of_the_champion.h | 2 +- .../TrialOfTheCrusader/boss_anubarak_trial.cpp | 2 +- .../TrialOfTheCrusader/boss_faction_champions.cpp | 2 +- .../CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp | 2 +- .../TrialOfTheCrusader/boss_northrend_beasts.cpp | 2 +- .../CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp | 2 +- .../TrialOfTheCrusader/instance_trial_of_the_crusader.cpp | 2 +- .../TrialOfTheCrusader/trial_of_the_crusader.cpp | 2 +- src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp | 2 +- src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp | 2 +- src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp | 2 +- src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp | 2 +- src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h | 2 +- .../Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp | 2 +- .../Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp | 2 +- .../FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp | 2 +- .../Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp | 2 +- .../scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h | 2 +- .../FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp | 2 +- .../Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp | 2 +- .../Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp | 2 +- .../FrozenHalls/HallsOfReflection/halls_of_reflection.cpp | 2 +- .../FrozenHalls/HallsOfReflection/halls_of_reflection.h | 2 +- .../HallsOfReflection/instance_halls_of_reflection.cpp | 2 +- .../FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp | 2 +- .../Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp | 2 +- .../FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp | 2 +- .../Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp | 2 +- .../scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp | 2 +- .../scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h | 2 +- src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp | 2 +- src/server/scripts/Northrend/Gundrak/boss_eck.cpp | 2 +- src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp | 2 +- src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp | 2 +- src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp | 2 +- src/server/scripts/Northrend/Gundrak/gundrak.h | 2 +- src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp | 2 +- .../Northrend/IcecrownCitadel/boss_blood_prince_council.cpp | 2 +- .../Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp | 2 +- .../Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp | 2 +- src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp | 2 +- .../Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp | 2 +- .../Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp | 2 +- .../scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp | 2 +- .../Northrend/IcecrownCitadel/boss_professor_putricide.cpp | 2 +- src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp | 2 +- .../scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp | 2 +- .../scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp | 2 +- .../Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp | 2 +- .../scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp | 2 +- src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h | 2 +- .../Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp | 2 +- .../Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_noth.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp | 2 +- src/server/scripts/Northrend/Naxxramas/naxxramas.h | 2 +- .../scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp | 2 +- .../scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h | 2 +- .../Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp | 2 +- src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp | 2 +- src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp | 2 +- .../scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp | 2 +- .../scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp | 2 +- src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp | 2 +- src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp | 2 +- src/server/scripts/Northrend/Nexus/Nexus/nexus.h | 2 +- src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp | 2 +- src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp | 2 +- src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp | 2 +- src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp | 2 +- src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp | 2 +- src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp | 2 +- src/server/scripts/Northrend/Nexus/Oculus/oculus.h | 2 +- .../Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp | 2 +- .../scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp | 2 +- .../scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp | 2 +- .../scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp | 2 +- .../Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h | 2 +- .../Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp | 2 +- .../scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp | 2 +- .../Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp | 2 +- .../scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp | 2 +- .../scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp | 2 +- .../scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h | 2 +- .../Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp | 2 +- .../scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp | 2 +- .../scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp | 2 +- .../scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp | 2 +- src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h | 2 +- .../UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp | 2 +- .../scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp | 2 +- .../Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp | 2 +- .../Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp | 2 +- .../scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp | 2 +- .../scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h | 2 +- .../Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp | 2 +- .../Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp | 2 +- .../Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp | 2 +- .../Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp | 2 +- .../UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp | 2 +- .../Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h | 2 +- src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp | 2 +- src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp | 2 +- src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp | 2 +- src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp | 2 +- .../Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp | 2 +- .../scripts/Northrend/VaultOfArchavon/vault_of_archavon.h | 2 +- src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp | 2 +- src/server/scripts/Northrend/VioletHold/boss_erekem.cpp | 2 +- src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp | 2 +- src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp | 2 +- src/server/scripts/Northrend/VioletHold/boss_moragg.cpp | 2 +- src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp | 2 +- src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp | 2 +- .../scripts/Northrend/VioletHold/instance_violet_hold.cpp | 2 +- src/server/scripts/Northrend/VioletHold/violet_hold.cpp | 2 +- src/server/scripts/Northrend/VioletHold/violet_hold.h | 2 +- src/server/scripts/Northrend/isle_of_conquest.cpp | 2 +- src/server/scripts/Northrend/zone_borean_tundra.cpp | 2 +- src/server/scripts/Northrend/zone_crystalsong_forest.cpp | 2 +- src/server/scripts/Northrend/zone_dalaran.cpp | 2 +- src/server/scripts/Northrend/zone_dragonblight.cpp | 2 +- src/server/scripts/Northrend/zone_grizzly_hills.cpp | 2 +- src/server/scripts/Northrend/zone_howling_fjord.cpp | 2 +- src/server/scripts/Northrend/zone_icecrown.cpp | 2 +- src/server/scripts/Northrend/zone_sholazar_basin.cpp | 2 +- src/server/scripts/Northrend/zone_storm_peaks.cpp | 2 +- src/server/scripts/Northrend/zone_zuldrak.cpp | 2 +- src/server/scripts/OutdoorPvP/CMakeLists.txt | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPEP.h | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPHP.h | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPNA.h | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPSI.h | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPTF.h | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp | 2 +- src/server/scripts/OutdoorPvP/OutdoorPvPZM.h | 2 +- .../scripts/Outland/Auchindoun/AuchenaiCrypts/auchenai_crypts.h | 2 +- .../Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp | 2 +- .../Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp | 2 +- .../Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp | 2 +- .../Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp | 2 +- .../scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp | 2 +- .../Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp | 2 +- src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h | 2 +- .../scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp | 2 +- .../Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp | 2 +- .../Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp | 2 +- .../Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp | 2 +- .../scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h | 2 +- .../Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp | 2 +- .../Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp | 2 +- .../Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp | 2 +- .../scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp | 2 +- .../Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp | 2 +- .../Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h | 2 +- src/server/scripts/Outland/BlackTemple/black_temple.cpp | 2 +- src/server/scripts/Outland/BlackTemple/black_temple.h | 2 +- .../scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp | 2 +- src/server/scripts/Outland/BlackTemple/boss_illidan.cpp | 2 +- src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp | 2 +- .../scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp | 2 +- src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp | 2 +- src/server/scripts/Outland/BlackTemple/boss_supremus.cpp | 2 +- src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp | 2 +- .../scripts/Outland/BlackTemple/boss_warlord_najentus.cpp | 2 +- src/server/scripts/Outland/BlackTemple/illidari_council.cpp | 2 +- .../scripts/Outland/BlackTemple/instance_black_temple.cpp | 2 +- src/server/scripts/Outland/CMakeLists.txt | 2 +- .../SerpentShrine/boss_fathomlord_karathress.cpp | 2 +- .../SerpentShrine/boss_hydross_the_unstable.cpp | 2 +- .../Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp | 2 +- .../SerpentShrine/boss_leotheras_the_blind.cpp | 2 +- .../CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp | 2 +- .../SerpentShrine/boss_morogrim_tidewalker.cpp | 2 +- .../CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp | 2 +- .../Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h | 2 +- .../CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp | 2 +- .../CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp | 2 +- .../CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp | 2 +- .../CoilfangReservoir/SteamVault/instance_steam_vault.cpp | 2 +- .../scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h | 2 +- .../CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp | 2 +- .../Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp | 2 +- .../CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp | 2 +- .../CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp | 2 +- .../Outland/CoilfangReservoir/TheSlavePens/the_slave_pens.h | 2 +- .../Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp | 2 +- .../CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp | 2 +- .../CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp | 2 +- src/server/scripts/Outland/GruulsLair/boss_gruul.cpp | 2 +- .../scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp | 2 +- src/server/scripts/Outland/GruulsLair/gruuls_lair.h | 2 +- src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp | 2 +- .../Outland/HellfireCitadel/BloodFurnace/blood_furnace.h | 2 +- .../Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp | 2 +- .../HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp | 2 +- .../Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp | 2 +- .../HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp | 2 +- .../HellfireRamparts/boss_omor_the_unscarred.cpp | 2 +- .../HellfireRamparts/boss_vazruden_the_herald.cpp | 2 +- .../HellfireRamparts/boss_watchkeeper_gargolmar.cpp | 2 +- .../HellfireCitadel/HellfireRamparts/hellfire_ramparts.h | 2 +- .../HellfireRamparts/instance_hellfire_ramparts.cpp | 2 +- .../HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp | 2 +- .../MagtheridonsLair/instance_magtheridons_lair.cpp | 2 +- .../HellfireCitadel/MagtheridonsLair/magtheridons_lair.h | 2 +- .../Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp | 2 +- .../HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp | 2 +- .../ShatteredHalls/boss_warchief_kargath_bladefist.cpp | 2 +- .../HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp | 2 +- .../Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp | 2 +- .../Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h | 2 +- src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp | 2 +- src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp | 2 +- src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp | 2 +- src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp | 2 +- src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp | 2 +- src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp | 2 +- src/server/scripts/Outland/TempestKeep/Eye/the_eye.h | 2 +- .../Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp | 2 +- .../Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp | 2 +- .../TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp | 2 +- .../TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp | 2 +- .../TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp | 2 +- .../scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp | 2 +- src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h | 2 +- src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp | 2 +- src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h | 2 +- .../Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp | 2 +- .../Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp | 2 +- .../TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp | 2 +- .../Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp | 2 +- .../scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp | 2 +- .../Outland/TempestKeep/botanica/boss_commander_sarannis.cpp | 2 +- .../TempestKeep/botanica/boss_high_botanist_freywinn.cpp | 2 +- src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp | 2 +- .../Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp | 2 +- .../scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp | 2 +- .../Outland/TempestKeep/botanica/instance_the_botanica.cpp | 2 +- src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h | 2 +- src/server/scripts/Outland/boss_doomlord_kazzak.cpp | 2 +- src/server/scripts/Outland/boss_doomwalker.cpp | 2 +- src/server/scripts/Outland/zone_blades_edge_mountains.cpp | 2 +- src/server/scripts/Outland/zone_hellfire_peninsula.cpp | 2 +- src/server/scripts/Outland/zone_nagrand.cpp | 2 +- src/server/scripts/Outland/zone_netherstorm.cpp | 2 +- src/server/scripts/Outland/zone_shadowmoon_valley.cpp | 2 +- src/server/scripts/Outland/zone_shattrath_city.cpp | 2 +- src/server/scripts/Outland/zone_terokkar_forest.cpp | 2 +- src/server/scripts/Outland/zone_zangarmarsh.cpp | 2 +- src/server/scripts/Pet/CMakeLists.txt | 2 +- src/server/scripts/Pet/pet_dk.cpp | 2 +- src/server/scripts/Pet/pet_generic.cpp | 2 +- src/server/scripts/Pet/pet_hunter.cpp | 2 +- src/server/scripts/Pet/pet_mage.cpp | 2 +- src/server/scripts/Pet/pet_priest.cpp | 2 +- src/server/scripts/Pet/pet_shaman.cpp | 2 +- src/server/scripts/Spells/CMakeLists.txt | 2 +- src/server/scripts/Spells/spell_dk.cpp | 2 +- src/server/scripts/Spells/spell_druid.cpp | 2 +- src/server/scripts/Spells/spell_generic.cpp | 2 +- src/server/scripts/Spells/spell_holiday.cpp | 2 +- src/server/scripts/Spells/spell_hunter.cpp | 2 +- src/server/scripts/Spells/spell_item.cpp | 2 +- src/server/scripts/Spells/spell_mage.cpp | 2 +- src/server/scripts/Spells/spell_paladin.cpp | 2 +- src/server/scripts/Spells/spell_pet.cpp | 2 +- src/server/scripts/Spells/spell_priest.cpp | 2 +- src/server/scripts/Spells/spell_quest.cpp | 2 +- src/server/scripts/Spells/spell_rogue.cpp | 2 +- src/server/scripts/Spells/spell_shaman.cpp | 2 +- src/server/scripts/Spells/spell_warlock.cpp | 2 +- src/server/scripts/Spells/spell_warrior.cpp | 2 +- src/server/scripts/World/CMakeLists.txt | 2 +- src/server/scripts/World/achievement_scripts.cpp | 2 +- src/server/scripts/World/action_ip_logger.cpp | 2 +- src/server/scripts/World/areatrigger_scripts.cpp | 2 +- src/server/scripts/World/boss_emerald_dragons.cpp | 2 +- src/server/scripts/World/chat_log.cpp | 2 +- src/server/scripts/World/duel_reset.cpp | 2 +- src/server/scripts/World/go_scripts.cpp | 2 +- src/server/scripts/World/guards.cpp | 2 +- src/server/scripts/World/item_scripts.cpp | 2 +- src/server/scripts/World/mob_generic_creature.cpp | 2 +- src/server/scripts/World/npc_innkeeper.cpp | 2 +- src/server/scripts/World/npc_professions.cpp | 2 +- src/server/scripts/World/npc_taxi.cpp | 2 +- src/server/scripts/World/npcs_special.cpp | 2 +- src/server/shared/CMakeLists.txt | 2 +- src/server/shared/Containers.h | 2 +- src/server/shared/DataStores/DBCFileLoader.cpp | 2 +- src/server/shared/DataStores/DBCFileLoader.h | 2 +- src/server/shared/DataStores/DBCStore.h | 2 +- src/server/shared/Dynamic/FactoryHolder.h | 2 +- src/server/shared/Dynamic/LinkedList.h | 2 +- src/server/shared/Dynamic/LinkedReference/RefManager.h | 2 +- src/server/shared/Dynamic/LinkedReference/Reference.h | 2 +- src/server/shared/Dynamic/ObjectRegistry.h | 2 +- src/server/shared/Dynamic/TypeContainer.h | 2 +- src/server/shared/Dynamic/TypeContainerFunctions.h | 2 +- src/server/shared/Dynamic/TypeContainerVisitor.h | 2 +- src/server/shared/Dynamic/TypeList.h | 2 +- src/server/shared/Networking/AsyncAcceptor.h | 2 +- src/server/shared/Networking/MessageBuffer.h | 2 +- src/server/shared/Networking/NetworkThread.h | 2 +- src/server/shared/Networking/Socket.h | 2 +- src/server/shared/Networking/SocketMgr.h | 2 +- src/server/shared/Packets/ByteBuffer.cpp | 2 +- src/server/shared/Packets/ByteBuffer.h | 2 +- src/server/shared/Packets/WorldPacket.h | 2 +- src/server/shared/Service/ServiceWin32.cpp | 2 +- src/server/shared/Service/ServiceWin32.h | 2 +- src/server/worldserver/CMakeLists.txt | 2 +- src/server/worldserver/CommandLine/CliRunnable.cpp | 2 +- src/server/worldserver/CommandLine/CliRunnable.h | 2 +- src/server/worldserver/Main.cpp | 2 +- src/server/worldserver/RemoteAccess/RASession.cpp | 2 +- src/server/worldserver/RemoteAccess/RASession.h | 2 +- src/server/worldserver/TCSoap/TCSoap.cpp | 2 +- src/server/worldserver/TCSoap/TCSoap.h | 2 +- src/server/worldserver/worldserver.rc | 2 +- src/tools/CMakeLists.txt | 2 +- src/tools/map_extractor/CMakeLists.txt | 2 +- src/tools/map_extractor/System.cpp | 2 +- src/tools/map_extractor/adt.cpp | 2 +- src/tools/map_extractor/adt.h | 2 +- src/tools/map_extractor/dbcfile.cpp | 2 +- src/tools/map_extractor/dbcfile.h | 2 +- src/tools/map_extractor/loadlib.cpp | 2 +- src/tools/map_extractor/loadlib/loadlib.h | 2 +- src/tools/map_extractor/mpq_libmpq.cpp | 2 +- src/tools/map_extractor/mpq_libmpq04.h | 2 +- src/tools/map_extractor/wdt.cpp | 2 +- src/tools/map_extractor/wdt.h | 2 +- src/tools/mmaps_generator/CMakeLists.txt | 2 +- src/tools/mmaps_generator/IntermediateValues.cpp | 2 +- src/tools/mmaps_generator/IntermediateValues.h | 2 +- src/tools/mmaps_generator/MapBuilder.cpp | 2 +- src/tools/mmaps_generator/MapBuilder.h | 2 +- src/tools/mmaps_generator/PathCommon.h | 2 +- src/tools/mmaps_generator/PathGenerator.cpp | 2 +- src/tools/mmaps_generator/TerrainBuilder.cpp | 2 +- src/tools/mmaps_generator/TerrainBuilder.h | 2 +- src/tools/vmap4_assembler/CMakeLists.txt | 2 +- src/tools/vmap4_assembler/VMapAssembler.cpp | 2 +- src/tools/vmap4_extractor/CMakeLists.txt | 2 +- src/tools/vmap4_extractor/adtfile.cpp | 2 +- src/tools/vmap4_extractor/adtfile.h | 2 +- src/tools/vmap4_extractor/dbcfile.cpp | 2 +- src/tools/vmap4_extractor/dbcfile.h | 2 +- src/tools/vmap4_extractor/gameobject_extract.cpp | 2 +- src/tools/vmap4_extractor/loadlib/loadlib.h | 2 +- src/tools/vmap4_extractor/model.cpp | 2 +- src/tools/vmap4_extractor/model.h | 2 +- src/tools/vmap4_extractor/modelheaders.h | 2 +- src/tools/vmap4_extractor/mpq_libmpq.cpp | 2 +- src/tools/vmap4_extractor/mpq_libmpq04.h | 2 +- src/tools/vmap4_extractor/vec3d.h | 2 +- src/tools/vmap4_extractor/vmapexport.cpp | 2 +- src/tools/vmap4_extractor/vmapexport.h | 2 +- src/tools/vmap4_extractor/wdtfile.cpp | 2 +- src/tools/vmap4_extractor/wdtfile.h | 2 +- src/tools/vmap4_extractor/wmo.cpp | 2 +- src/tools/vmap4_extractor/wmo.h | 2 +- 1288 files changed, 1288 insertions(+), 1288 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 816eb4e9b9..5eeb5911ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/PreLoad.cmake b/PreLoad.cmake index f7cf5a1ebe..5914118186 100644 --- a/PreLoad.cmake +++ b/PreLoad.cmake @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/cmake/genrev.cmake b/cmake/genrev.cmake index db722f9fdb..5c013756f0 100644 --- a/cmake/genrev.cmake +++ b/cmake/genrev.cmake @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/cmake/macros/CheckBuildDir.cmake b/cmake/macros/CheckBuildDir.cmake index 9a89de0b29..468253d6bd 100644 --- a/cmake/macros/CheckBuildDir.cmake +++ b/cmake/macros/CheckBuildDir.cmake @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/cmake/macros/FindGit.cmake b/cmake/macros/FindGit.cmake index f5b0c6a9a3..3577428f43 100644 --- a/cmake/macros/FindGit.cmake +++ b/cmake/macros/FindGit.cmake @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/cmake/macros/GroupSources.cmake b/cmake/macros/GroupSources.cmake index 3acb03e7b4..198d8c3e18 100644 --- a/cmake/macros/GroupSources.cmake +++ b/cmake/macros/GroupSources.cmake @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/cmake/options.cmake b/cmake/options.cmake index 486cc90960..1961500130 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/contrib/conf_merge/tc-conf-merger.pl b/contrib/conf_merge/tc-conf-merger.pl index 074689979a..23c8385f0c 100644 --- a/contrib/conf_merge/tc-conf-merger.pl +++ b/contrib/conf_merge/tc-conf-merger.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl -w -# Copyright (C) 2008-2015 TrinityCore +# Copyright (C) 2008-2016 TrinityCore # Author: leak # Date: 2010-12-06 # Note: Based on conf file format of rev 10507 diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt index f829956b7b..7f4f1cd884 100644 --- a/dep/CMakeLists.txt +++ b/dep/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/dep/bzip2/CMakeLists.txt b/dep/bzip2/CMakeLists.txt index 37f44be768..d3aadbe002 100644 --- a/dep/bzip2/CMakeLists.txt +++ b/dep/bzip2/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/dep/g3dlite/CMakeLists.txt b/dep/g3dlite/CMakeLists.txt index 67564ee699..f1166c72e6 100644 --- a/dep/g3dlite/CMakeLists.txt +++ b/dep/g3dlite/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/dep/gsoap/CMakeLists.txt b/dep/gsoap/CMakeLists.txt index e339ccb00e..b5fed7809a 100644 --- a/dep/gsoap/CMakeLists.txt +++ b/dep/gsoap/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/dep/jemalloc/CMakeLists.txt b/dep/jemalloc/CMakeLists.txt index 8f0692fc82..cf0ac435f0 100644 --- a/dep/jemalloc/CMakeLists.txt +++ b/dep/jemalloc/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/dep/libmpq/CMakeLists.txt b/dep/libmpq/CMakeLists.txt index e993d669d0..1213e6b11b 100644 --- a/dep/libmpq/CMakeLists.txt +++ b/dep/libmpq/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/dep/recastnavigation/Detour/CMakeLists.txt b/dep/recastnavigation/Detour/CMakeLists.txt index 9aebeacd89..b21e4ca627 100644 --- a/dep/recastnavigation/Detour/CMakeLists.txt +++ b/dep/recastnavigation/Detour/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/dep/recastnavigation/Recast/CMakeLists.txt b/dep/recastnavigation/Recast/CMakeLists.txt index ab6772aa03..738c010eb0 100644 --- a/dep/recastnavigation/Recast/CMakeLists.txt +++ b/dep/recastnavigation/Recast/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/dep/zlib/CMakeLists.txt b/dep/zlib/CMakeLists.txt index d91b2c202b..7feb134bcd 100644 --- a/dep/zlib/CMakeLists.txt +++ b/dep/zlib/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 914ad31ad0..619ab3300c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 7f20fe36ab..8dee99c65e 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/common/Collision/BoundingIntervalHierarchy.cpp b/src/common/Collision/BoundingIntervalHierarchy.cpp index 12af680712..bd3bebdec0 100644 --- a/src/common/Collision/BoundingIntervalHierarchy.cpp +++ b/src/common/Collision/BoundingIntervalHierarchy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/BoundingIntervalHierarchy.h b/src/common/Collision/BoundingIntervalHierarchy.h index 3a09772c41..0b15bd2d92 100644 --- a/src/common/Collision/BoundingIntervalHierarchy.h +++ b/src/common/Collision/BoundingIntervalHierarchy.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/BoundingIntervalHierarchyWrapper.h b/src/common/Collision/BoundingIntervalHierarchyWrapper.h index 60bb6a569d..222ae8b93a 100644 --- a/src/common/Collision/BoundingIntervalHierarchyWrapper.h +++ b/src/common/Collision/BoundingIntervalHierarchyWrapper.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/DynamicTree.cpp b/src/common/Collision/DynamicTree.cpp index 1de2543543..5d2e18b1a2 100644 --- a/src/common/Collision/DynamicTree.cpp +++ b/src/common/Collision/DynamicTree.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/DynamicTree.h b/src/common/Collision/DynamicTree.h index 5e90532364..0f18bb265f 100644 --- a/src/common/Collision/DynamicTree.h +++ b/src/common/Collision/DynamicTree.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/IVMapManager.h b/src/common/Collision/Management/IVMapManager.h index b890554257..1e64551956 100644 --- a/src/common/Collision/Management/IVMapManager.h +++ b/src/common/Collision/Management/IVMapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/MMapFactory.cpp b/src/common/Collision/Management/MMapFactory.cpp index 667b8378c5..c7012d1fb6 100644 --- a/src/common/Collision/Management/MMapFactory.cpp +++ b/src/common/Collision/Management/MMapFactory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/MMapFactory.h b/src/common/Collision/Management/MMapFactory.h index 773983f81e..edd074fc93 100644 --- a/src/common/Collision/Management/MMapFactory.h +++ b/src/common/Collision/Management/MMapFactory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/MMapManager.cpp b/src/common/Collision/Management/MMapManager.cpp index 00985e4fa1..04b1e62399 100644 --- a/src/common/Collision/Management/MMapManager.cpp +++ b/src/common/Collision/Management/MMapManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/MMapManager.h b/src/common/Collision/Management/MMapManager.h index 42292b7694..1a502a916d 100644 --- a/src/common/Collision/Management/MMapManager.h +++ b/src/common/Collision/Management/MMapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/VMapFactory.cpp b/src/common/Collision/Management/VMapFactory.cpp index 4c2750a9e5..9c693d5d3d 100644 --- a/src/common/Collision/Management/VMapFactory.cpp +++ b/src/common/Collision/Management/VMapFactory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/VMapFactory.h b/src/common/Collision/Management/VMapFactory.h index 3067c2919d..1a45bd5094 100644 --- a/src/common/Collision/Management/VMapFactory.h +++ b/src/common/Collision/Management/VMapFactory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/VMapManager2.cpp b/src/common/Collision/Management/VMapManager2.cpp index a63eac1b93..22a6abfa28 100644 --- a/src/common/Collision/Management/VMapManager2.cpp +++ b/src/common/Collision/Management/VMapManager2.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Management/VMapManager2.h b/src/common/Collision/Management/VMapManager2.h index c2e1aee1ff..722ac4935c 100644 --- a/src/common/Collision/Management/VMapManager2.h +++ b/src/common/Collision/Management/VMapManager2.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Maps/MapTree.cpp b/src/common/Collision/Maps/MapTree.cpp index e374da4f1b..4d0996e196 100644 --- a/src/common/Collision/Maps/MapTree.cpp +++ b/src/common/Collision/Maps/MapTree.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Maps/MapTree.h b/src/common/Collision/Maps/MapTree.h index 08bd5c3d3a..63d542754c 100644 --- a/src/common/Collision/Maps/MapTree.h +++ b/src/common/Collision/Maps/MapTree.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Maps/TileAssembler.cpp b/src/common/Collision/Maps/TileAssembler.cpp index ec7b759f97..3f58b8f351 100644 --- a/src/common/Collision/Maps/TileAssembler.cpp +++ b/src/common/Collision/Maps/TileAssembler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Maps/TileAssembler.h b/src/common/Collision/Maps/TileAssembler.h index 581622c6b7..1e2dc1924f 100644 --- a/src/common/Collision/Maps/TileAssembler.h +++ b/src/common/Collision/Maps/TileAssembler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Models/GameObjectModel.cpp b/src/common/Collision/Models/GameObjectModel.cpp index dbdc0554e0..39e8198573 100644 --- a/src/common/Collision/Models/GameObjectModel.cpp +++ b/src/common/Collision/Models/GameObjectModel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Models/GameObjectModel.h b/src/common/Collision/Models/GameObjectModel.h index 17669189af..9d8687233c 100644 --- a/src/common/Collision/Models/GameObjectModel.h +++ b/src/common/Collision/Models/GameObjectModel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Models/ModelInstance.cpp b/src/common/Collision/Models/ModelInstance.cpp index 45440a9966..54e5fe5c29 100644 --- a/src/common/Collision/Models/ModelInstance.cpp +++ b/src/common/Collision/Models/ModelInstance.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Models/ModelInstance.h b/src/common/Collision/Models/ModelInstance.h index f8bbfa4fa7..d101630d1e 100644 --- a/src/common/Collision/Models/ModelInstance.h +++ b/src/common/Collision/Models/ModelInstance.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Models/WorldModel.cpp b/src/common/Collision/Models/WorldModel.cpp index 7f4d76b244..96ee6d2d55 100644 --- a/src/common/Collision/Models/WorldModel.cpp +++ b/src/common/Collision/Models/WorldModel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/Models/WorldModel.h b/src/common/Collision/Models/WorldModel.h index afa9d15b26..39787f6c66 100644 --- a/src/common/Collision/Models/WorldModel.h +++ b/src/common/Collision/Models/WorldModel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/VMapDefinitions.h b/src/common/Collision/VMapDefinitions.h index 1035d5307c..0b0e15368e 100644 --- a/src/common/Collision/VMapDefinitions.h +++ b/src/common/Collision/VMapDefinitions.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Collision/VMapTools.h b/src/common/Collision/VMapTools.h index 662dc43e9e..a7e4149b51 100644 --- a/src/common/Collision/VMapTools.h +++ b/src/common/Collision/VMapTools.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Common.cpp b/src/common/Common.cpp index 56e3c4faaf..308da60257 100644 --- a/src/common/Common.cpp +++ b/src/common/Common.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Common.h b/src/common/Common.h index 7a1ea247a9..e8adc55d20 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/CompilerDefs.h b/src/common/CompilerDefs.h index c7867be517..3a436c9a0f 100644 --- a/src/common/CompilerDefs.h +++ b/src/common/CompilerDefs.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Configuration/Config.cpp b/src/common/Configuration/Config.cpp index ea426a5d33..6ac0461531 100644 --- a/src/common/Configuration/Config.cpp +++ b/src/common/Configuration/Config.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Configuration/Config.h b/src/common/Configuration/Config.h index 5fb7cef924..5b04212ed7 100644 --- a/src/common/Configuration/Config.h +++ b/src/common/Configuration/Config.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/ARC4.cpp b/src/common/Cryptography/ARC4.cpp index d1082b3934..eea523a209 100644 --- a/src/common/Cryptography/ARC4.cpp +++ b/src/common/Cryptography/ARC4.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/ARC4.h b/src/common/Cryptography/ARC4.h index 16a0cb92eb..f39e662e29 100644 --- a/src/common/Cryptography/ARC4.h +++ b/src/common/Cryptography/ARC4.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/Authentication/AuthCrypt.cpp b/src/common/Cryptography/Authentication/AuthCrypt.cpp index 153726e695..a6d0000207 100644 --- a/src/common/Cryptography/Authentication/AuthCrypt.cpp +++ b/src/common/Cryptography/Authentication/AuthCrypt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/Authentication/AuthCrypt.h b/src/common/Cryptography/Authentication/AuthCrypt.h index b8913c95a2..878391e3ce 100644 --- a/src/common/Cryptography/Authentication/AuthCrypt.h +++ b/src/common/Cryptography/Authentication/AuthCrypt.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/BigNumber.cpp b/src/common/Cryptography/BigNumber.cpp index 720e8e3044..3b85122eba 100644 --- a/src/common/Cryptography/BigNumber.cpp +++ b/src/common/Cryptography/BigNumber.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/BigNumber.h b/src/common/Cryptography/BigNumber.h index e6a056b5ba..a5bda50dc7 100644 --- a/src/common/Cryptography/BigNumber.h +++ b/src/common/Cryptography/BigNumber.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/HMACSHA1.cpp b/src/common/Cryptography/HMACSHA1.cpp index 304633cbc0..6109afe3f8 100644 --- a/src/common/Cryptography/HMACSHA1.cpp +++ b/src/common/Cryptography/HMACSHA1.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/HMACSHA1.h b/src/common/Cryptography/HMACSHA1.h index 66cf214d9b..29a926d5b1 100644 --- a/src/common/Cryptography/HMACSHA1.h +++ b/src/common/Cryptography/HMACSHA1.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/OpenSSLCrypto.cpp b/src/common/Cryptography/OpenSSLCrypto.cpp index f122888292..9ab03d1c61 100644 --- a/src/common/Cryptography/OpenSSLCrypto.cpp +++ b/src/common/Cryptography/OpenSSLCrypto.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Cryptography/OpenSSLCrypto.h b/src/common/Cryptography/OpenSSLCrypto.h index 0daa20c478..df1b14b5ed 100644 --- a/src/common/Cryptography/OpenSSLCrypto.h +++ b/src/common/Cryptography/OpenSSLCrypto.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Cryptography/SHA1.cpp b/src/common/Cryptography/SHA1.cpp index bd7101075d..a01bd7844e 100644 --- a/src/common/Cryptography/SHA1.cpp +++ b/src/common/Cryptography/SHA1.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/SHA1.h b/src/common/Cryptography/SHA1.h index f59bdc2555..ffa02176a2 100644 --- a/src/common/Cryptography/SHA1.h +++ b/src/common/Cryptography/SHA1.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Cryptography/WardenKeyGeneration.h b/src/common/Cryptography/WardenKeyGeneration.h index bfa0337d34..18118ece64 100644 --- a/src/common/Cryptography/WardenKeyGeneration.h +++ b/src/common/Cryptography/WardenKeyGeneration.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Debugging/Errors.cpp b/src/common/Debugging/Errors.cpp index 4c7e91a821..1ec66ff6d5 100644 --- a/src/common/Debugging/Errors.cpp +++ b/src/common/Debugging/Errors.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Debugging/Errors.h b/src/common/Debugging/Errors.h index 9e526933ac..38e311a6b1 100644 --- a/src/common/Debugging/Errors.h +++ b/src/common/Debugging/Errors.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Define.h b/src/common/Define.h index 7332bdc4cf..df3dd37b50 100644 --- a/src/common/Define.h +++ b/src/common/Define.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/GitRevision.h b/src/common/GitRevision.h index d9b292031f..8d2764ba86 100644 --- a/src/common/GitRevision.h +++ b/src/common/GitRevision.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/Appender.cpp b/src/common/Logging/Appender.cpp index d19ef8cf96..e72ea92a87 100644 --- a/src/common/Logging/Appender.cpp +++ b/src/common/Logging/Appender.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/Appender.h b/src/common/Logging/Appender.h index 6382399a0b..f0bfe423a6 100644 --- a/src/common/Logging/Appender.h +++ b/src/common/Logging/Appender.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/AppenderConsole.cpp b/src/common/Logging/AppenderConsole.cpp index 531df266aa..d856c57074 100644 --- a/src/common/Logging/AppenderConsole.cpp +++ b/src/common/Logging/AppenderConsole.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/AppenderConsole.h b/src/common/Logging/AppenderConsole.h index 6b30505c6b..5d7eae36b4 100644 --- a/src/common/Logging/AppenderConsole.h +++ b/src/common/Logging/AppenderConsole.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/AppenderFile.cpp b/src/common/Logging/AppenderFile.cpp index c90c8f6cce..20fa3dc720 100644 --- a/src/common/Logging/AppenderFile.cpp +++ b/src/common/Logging/AppenderFile.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/AppenderFile.h b/src/common/Logging/AppenderFile.h index c2781eb1ee..9ba5d59259 100644 --- a/src/common/Logging/AppenderFile.h +++ b/src/common/Logging/AppenderFile.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/Log.cpp b/src/common/Logging/Log.cpp index 57d399a9d9..4bd0487343 100644 --- a/src/common/Logging/Log.cpp +++ b/src/common/Logging/Log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2008 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Logging/Log.h b/src/common/Logging/Log.h index a15bb4ad48..a90481ad5d 100644 --- a/src/common/Logging/Log.h +++ b/src/common/Logging/Log.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Logging/LogOperation.cpp b/src/common/Logging/LogOperation.cpp index bcd923c705..83288716ef 100644 --- a/src/common/Logging/LogOperation.cpp +++ b/src/common/Logging/LogOperation.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/LogOperation.h b/src/common/Logging/LogOperation.h index ffdd35c3c0..618629b542 100644 --- a/src/common/Logging/LogOperation.h +++ b/src/common/Logging/LogOperation.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/Logger.cpp b/src/common/Logging/Logger.cpp index 3b02eb4757..75dfdcc418 100644 --- a/src/common/Logging/Logger.cpp +++ b/src/common/Logging/Logger.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Logging/Logger.h b/src/common/Logging/Logger.h index 1aee75c5d7..67eab4295a 100644 --- a/src/common/Logging/Logger.h +++ b/src/common/Logging/Logger.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Threading/Callback.h b/src/common/Threading/Callback.h index 1f4ffc97cf..f7eab57ddd 100644 --- a/src/common/Threading/Callback.h +++ b/src/common/Threading/Callback.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Threading/LockedQueue.h b/src/common/Threading/LockedQueue.h index 3abb0f4b8b..c6faaaf81c 100644 --- a/src/common/Threading/LockedQueue.h +++ b/src/common/Threading/LockedQueue.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2008 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Threading/ProcessPriority.h b/src/common/Threading/ProcessPriority.h index 2a8501a024..7119daa503 100644 --- a/src/common/Threading/ProcessPriority.h +++ b/src/common/Threading/ProcessPriority.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* 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 diff --git a/src/common/Threading/ProducerConsumerQueue.h b/src/common/Threading/ProducerConsumerQueue.h index 9654696039..bd4c8efd32 100644 --- a/src/common/Threading/ProducerConsumerQueue.h +++ b/src/common/Threading/ProducerConsumerQueue.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* 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 diff --git a/src/common/Utilities/ByteConverter.h b/src/common/Utilities/ByteConverter.h index a077de3eb0..3325a34f58 100644 --- a/src/common/Utilities/ByteConverter.h +++ b/src/common/Utilities/ByteConverter.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Utilities/Duration.h b/src/common/Utilities/Duration.h index 58a08e5842..3de142ebcb 100644 --- a/src/common/Utilities/Duration.h +++ b/src/common/Utilities/Duration.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Utilities/EventMap.cpp b/src/common/Utilities/EventMap.cpp index 8c3f60afe8..b87a3f8f00 100644 --- a/src/common/Utilities/EventMap.cpp +++ b/src/common/Utilities/EventMap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Utilities/EventMap.h b/src/common/Utilities/EventMap.h index 021dffc494..a1aaa9af26 100644 --- a/src/common/Utilities/EventMap.h +++ b/src/common/Utilities/EventMap.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Utilities/EventProcessor.cpp b/src/common/Utilities/EventProcessor.cpp index 3469566544..be74d58b79 100644 --- a/src/common/Utilities/EventProcessor.cpp +++ b/src/common/Utilities/EventProcessor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Utilities/EventProcessor.h b/src/common/Utilities/EventProcessor.h index 3d54bd6f9f..e5eafed79b 100644 --- a/src/common/Utilities/EventProcessor.h +++ b/src/common/Utilities/EventProcessor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Utilities/StringFormat.h b/src/common/Utilities/StringFormat.h index 67e0100e7c..d85523bc11 100644 --- a/src/common/Utilities/StringFormat.h +++ b/src/common/Utilities/StringFormat.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Utilities/TaskScheduler.cpp b/src/common/Utilities/TaskScheduler.cpp index 801cc96cf7..1a7d65ae96 100644 --- a/src/common/Utilities/TaskScheduler.cpp +++ b/src/common/Utilities/TaskScheduler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Utilities/TaskScheduler.h b/src/common/Utilities/TaskScheduler.h index f1fe7ea0a2..8cf5d91412 100644 --- a/src/common/Utilities/TaskScheduler.h +++ b/src/common/Utilities/TaskScheduler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/common/Utilities/Timer.h b/src/common/Utilities/Timer.h index c54903d7be..cdce08caaf 100644 --- a/src/common/Utilities/Timer.h +++ b/src/common/Utilities/Timer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index 9f61dd12e4..3eb901ca35 100644 --- a/src/common/Utilities/Util.cpp +++ b/src/common/Utilities/Util.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h index b748e83408..f72c143037 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/genrev/CMakeLists.txt b/src/genrev/CMakeLists.txt index 05db165fe0..91a1360903 100644 --- a/src/genrev/CMakeLists.txt +++ b/src/genrev/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index e89a33c437..9a454696ca 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/authserver/Authentication/AuthCodes.cpp b/src/server/authserver/Authentication/AuthCodes.cpp index 08f091d1a3..30ceaa4945 100644 --- a/src/server/authserver/Authentication/AuthCodes.cpp +++ b/src/server/authserver/Authentication/AuthCodes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/authserver/Authentication/AuthCodes.h b/src/server/authserver/Authentication/AuthCodes.h index 7a5df6d156..cd3dbe0e1e 100644 --- a/src/server/authserver/Authentication/AuthCodes.h +++ b/src/server/authserver/Authentication/AuthCodes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/authserver/Authentication/TOTP.cpp b/src/server/authserver/Authentication/TOTP.cpp index 6f9135c53a..a7f7097069 100644 --- a/src/server/authserver/Authentication/TOTP.cpp +++ b/src/server/authserver/Authentication/TOTP.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/authserver/Authentication/TOTP.h b/src/server/authserver/Authentication/TOTP.h index 7548dff99b..92b850014f 100644 --- a/src/server/authserver/Authentication/TOTP.h +++ b/src/server/authserver/Authentication/TOTP.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/authserver/CMakeLists.txt b/src/server/authserver/CMakeLists.txt index a8e35a8d9e..c11deec39b 100644 --- a/src/server/authserver/CMakeLists.txt +++ b/src/server/authserver/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp index 205053c47e..0c812ebd49 100644 --- a/src/server/authserver/Main.cpp +++ b/src/server/authserver/Main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp index f5461d5f42..53aeff6133 100644 --- a/src/server/authserver/Realms/RealmList.cpp +++ b/src/server/authserver/Realms/RealmList.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/authserver/Realms/RealmList.h b/src/server/authserver/Realms/RealmList.h index 355b92d572..cc5c88c01f 100644 --- a/src/server/authserver/Realms/RealmList.h +++ b/src/server/authserver/Realms/RealmList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp index 8b0d86603a..bcb1dd3fdd 100644 --- a/src/server/authserver/Server/AuthSession.cpp +++ b/src/server/authserver/Server/AuthSession.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/authserver/Server/AuthSession.h b/src/server/authserver/Server/AuthSession.h index 1151df7c2c..d40e0852b5 100644 --- a/src/server/authserver/Server/AuthSession.h +++ b/src/server/authserver/Server/AuthSession.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/authserver/Server/AuthSocketMgr.h b/src/server/authserver/Server/AuthSocketMgr.h index 1c93bedf1e..fa96502663 100644 --- a/src/server/authserver/Server/AuthSocketMgr.h +++ b/src/server/authserver/Server/AuthSocketMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/authserver/authserver.rc b/src/server/authserver/authserver.rc index ca8fc9f031..b8504d9228 100644 --- a/src/server/authserver/authserver.rc +++ b/src/server/authserver/authserver.rc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/database/CMakeLists.txt b/src/server/database/CMakeLists.txt index 19fa0ee0ac..5a53899f4c 100644 --- a/src/server/database/CMakeLists.txt +++ b/src/server/database/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/database/Database/AdhocStatement.cpp b/src/server/database/Database/AdhocStatement.cpp index 547ff967ef..0d34b4dcfb 100644 --- a/src/server/database/Database/AdhocStatement.cpp +++ b/src/server/database/Database/AdhocStatement.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/AdhocStatement.h b/src/server/database/Database/AdhocStatement.h index c449e0f6e5..ab85493a14 100644 --- a/src/server/database/Database/AdhocStatement.h +++ b/src/server/database/Database/AdhocStatement.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/DatabaseEnv.h b/src/server/database/Database/DatabaseEnv.h index c3e11c5b98..cc8355a130 100644 --- a/src/server/database/Database/DatabaseEnv.h +++ b/src/server/database/Database/DatabaseEnv.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/database/Database/DatabaseLoader.cpp b/src/server/database/Database/DatabaseLoader.cpp index 39719e4c6a..92d8730cd1 100644 --- a/src/server/database/Database/DatabaseLoader.cpp +++ b/src/server/database/Database/DatabaseLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/DatabaseLoader.h b/src/server/database/Database/DatabaseLoader.h index d35597ba80..da92cf85a9 100644 --- a/src/server/database/Database/DatabaseLoader.h +++ b/src/server/database/Database/DatabaseLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/DatabaseWorker.cpp b/src/server/database/Database/DatabaseWorker.cpp index 56757ce12a..cebd6d79a1 100644 --- a/src/server/database/Database/DatabaseWorker.cpp +++ b/src/server/database/Database/DatabaseWorker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/DatabaseWorker.h b/src/server/database/Database/DatabaseWorker.h index 0ca476b1e6..c21a3d2a34 100644 --- a/src/server/database/Database/DatabaseWorker.h +++ b/src/server/database/Database/DatabaseWorker.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index c7b5d8c8fe..d5a254647e 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Field.cpp b/src/server/database/Database/Field.cpp index f7794bd897..20a42871b9 100644 --- a/src/server/database/Database/Field.cpp +++ b/src/server/database/Database/Field.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Field.h b/src/server/database/Database/Field.h index 72364f2c03..ec9e626ee1 100644 --- a/src/server/database/Database/Field.h +++ b/src/server/database/Database/Field.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 45bfee5d59..140f3bf31c 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index 7a463c73df..c0ff9cbbfb 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index de003c2092..66847f0a6a 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h index 3b30105e67..69c2e75855 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.h +++ b/src/server/database/Database/Implementation/LoginDatabase.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Implementation/WorldDatabase.cpp b/src/server/database/Database/Implementation/WorldDatabase.cpp index d9aad94293..7a183d5bf7 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.cpp +++ b/src/server/database/Database/Implementation/WorldDatabase.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Implementation/WorldDatabase.h b/src/server/database/Database/Implementation/WorldDatabase.h index c5475835fb..6ac4ce589e 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.h +++ b/src/server/database/Database/Implementation/WorldDatabase.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/MySQLConnection.cpp b/src/server/database/Database/MySQLConnection.cpp index 10f4a7baa1..41dd61d3c3 100644 --- a/src/server/database/Database/MySQLConnection.cpp +++ b/src/server/database/Database/MySQLConnection.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/MySQLConnection.h b/src/server/database/Database/MySQLConnection.h index 78d8d2fb5d..a981caa607 100644 --- a/src/server/database/Database/MySQLConnection.h +++ b/src/server/database/Database/MySQLConnection.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/MySQLThreading.h b/src/server/database/Database/MySQLThreading.h index 441f30cb6e..1cfa11d7e5 100644 --- a/src/server/database/Database/MySQLThreading.h +++ b/src/server/database/Database/MySQLThreading.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/PreparedStatement.cpp b/src/server/database/Database/PreparedStatement.cpp index 1938005c71..848a923c75 100644 --- a/src/server/database/Database/PreparedStatement.cpp +++ b/src/server/database/Database/PreparedStatement.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/PreparedStatement.h b/src/server/database/Database/PreparedStatement.h index 2b8ce8aac2..7d6c98463d 100644 --- a/src/server/database/Database/PreparedStatement.h +++ b/src/server/database/Database/PreparedStatement.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/QueryHolder.cpp b/src/server/database/Database/QueryHolder.cpp index 2fdb382552..b59352c72b 100644 --- a/src/server/database/Database/QueryHolder.cpp +++ b/src/server/database/Database/QueryHolder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/QueryHolder.h b/src/server/database/Database/QueryHolder.h index b64da948a1..9a5a03fda4 100644 --- a/src/server/database/Database/QueryHolder.h +++ b/src/server/database/Database/QueryHolder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/QueryResult.cpp b/src/server/database/Database/QueryResult.cpp index 983ffee24c..f02457f67c 100644 --- a/src/server/database/Database/QueryResult.cpp +++ b/src/server/database/Database/QueryResult.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/database/Database/QueryResult.h b/src/server/database/Database/QueryResult.h index 0447ecaae5..d4d63b5ec8 100644 --- a/src/server/database/Database/QueryResult.h +++ b/src/server/database/Database/QueryResult.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/database/Database/SQLOperation.h b/src/server/database/Database/SQLOperation.h index c5667288ec..f0500d1f23 100644 --- a/src/server/database/Database/SQLOperation.h +++ b/src/server/database/Database/SQLOperation.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Transaction.cpp b/src/server/database/Database/Transaction.cpp index f657411f71..b4dcd212e0 100644 --- a/src/server/database/Database/Transaction.cpp +++ b/src/server/database/Database/Transaction.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Database/Transaction.h b/src/server/database/Database/Transaction.h index 4fbbe1ed45..5780c0363d 100644 --- a/src/server/database/Database/Transaction.h +++ b/src/server/database/Database/Transaction.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Logging/AppenderDB.cpp b/src/server/database/Logging/AppenderDB.cpp index 9e6ab1a057..5c0138e928 100644 --- a/src/server/database/Logging/AppenderDB.cpp +++ b/src/server/database/Logging/AppenderDB.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Logging/AppenderDB.h b/src/server/database/Logging/AppenderDB.h index 50607fd813..a6acc66b48 100644 --- a/src/server/database/Logging/AppenderDB.h +++ b/src/server/database/Logging/AppenderDB.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index d90d71c559..529e236d1e 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Updater/DBUpdater.h b/src/server/database/Updater/DBUpdater.h index c8aa5d69fb..c9792ffe06 100644 --- a/src/server/database/Updater/DBUpdater.h +++ b/src/server/database/Updater/DBUpdater.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Updater/UpdateFetcher.cpp b/src/server/database/Updater/UpdateFetcher.cpp index ec023928b9..fd0dbdd4b5 100644 --- a/src/server/database/Updater/UpdateFetcher.cpp +++ b/src/server/database/Updater/UpdateFetcher.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/database/Updater/UpdateFetcher.h b/src/server/database/Updater/UpdateFetcher.h index 4ff8c93bc7..22a0d08c7f 100644 --- a/src/server/database/Updater/UpdateFetcher.h +++ b/src/server/database/Updater/UpdateFetcher.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp index 9d76ee5573..716ac13c66 100644 --- a/src/server/game/AI/CoreAI/CombatAI.cpp +++ b/src/server/game/AI/CoreAI/CombatAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/CombatAI.h b/src/server/game/AI/CoreAI/CombatAI.h index 26b5db3e7c..55b91b6969 100644 --- a/src/server/game/AI/CoreAI/CombatAI.h +++ b/src/server/game/AI/CoreAI/CombatAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/GameObjectAI.cpp b/src/server/game/AI/CoreAI/GameObjectAI.cpp index 5ff53e4819..8d2de7bc92 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.cpp +++ b/src/server/game/AI/CoreAI/GameObjectAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index bd588cd457..4f256a5de3 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/GuardAI.cpp b/src/server/game/AI/CoreAI/GuardAI.cpp index 7fd1493cbd..176dd41fda 100644 --- a/src/server/game/AI/CoreAI/GuardAI.cpp +++ b/src/server/game/AI/CoreAI/GuardAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/GuardAI.h b/src/server/game/AI/CoreAI/GuardAI.h index f782064006..01d54e47b9 100644 --- a/src/server/game/AI/CoreAI/GuardAI.h +++ b/src/server/game/AI/CoreAI/GuardAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp index 5c482120b2..5f2c1ba5c5 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.cpp +++ b/src/server/game/AI/CoreAI/PassiveAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/PassiveAI.h b/src/server/game/AI/CoreAI/PassiveAI.h index 4004632396..28a73cff5d 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.h +++ b/src/server/game/AI/CoreAI/PassiveAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index c870f786af..8acf6b9c9d 100644 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h index 89db5945c8..9f220e64bf 100644 --- a/src/server/game/AI/CoreAI/PetAI.h +++ b/src/server/game/AI/CoreAI/PetAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/ReactorAI.cpp b/src/server/game/AI/CoreAI/ReactorAI.cpp index 9ab86047dc..722be99499 100644 --- a/src/server/game/AI/CoreAI/ReactorAI.cpp +++ b/src/server/game/AI/CoreAI/ReactorAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/ReactorAI.h b/src/server/game/AI/CoreAI/ReactorAI.h index 6791e147a1..e5abaac2f0 100644 --- a/src/server/game/AI/CoreAI/ReactorAI.h +++ b/src/server/game/AI/CoreAI/ReactorAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp index 57e926744e..efcfab51ba 100644 --- a/src/server/game/AI/CoreAI/TotemAI.cpp +++ b/src/server/game/AI/CoreAI/TotemAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/TotemAI.h b/src/server/game/AI/CoreAI/TotemAI.h index 7776db3709..fdde303c7b 100644 --- a/src/server/game/AI/CoreAI/TotemAI.h +++ b/src/server/game/AI/CoreAI/TotemAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index f0d9d34db6..a3a5e7f766 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index c93ed0db00..5dc5946b22 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index d76d106e81..e94f5a037a 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index a205ef1683..0a2cce723d 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CreatureAIFactory.h b/src/server/game/AI/CreatureAIFactory.h index 4e11630259..f83bdc9a8b 100644 --- a/src/server/game/AI/CreatureAIFactory.h +++ b/src/server/game/AI/CreatureAIFactory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h index 529f742002..a45283b3d3 100644 --- a/src/server/game/AI/CreatureAIImpl.h +++ b/src/server/game/AI/CreatureAIImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AI/CreatureAIRegistry.cpp b/src/server/game/AI/CreatureAIRegistry.cpp index 933c20c9ee..3189cbb6d8 100644 --- a/src/server/game/AI/CreatureAIRegistry.cpp +++ b/src/server/game/AI/CreatureAIRegistry.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CreatureAIRegistry.h b/src/server/game/AI/CreatureAIRegistry.h index 461d4d7bcb..e17c7501bc 100644 --- a/src/server/game/AI/CreatureAIRegistry.h +++ b/src/server/game/AI/CreatureAIRegistry.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp index 4cab7d5c09..c8c7838bee 100644 --- a/src/server/game/AI/CreatureAISelector.cpp +++ b/src/server/game/AI/CreatureAISelector.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/CreatureAISelector.h b/src/server/game/AI/CreatureAISelector.h index 0a2cec77da..7c7bc705ad 100644 --- a/src/server/game/AI/CreatureAISelector.h +++ b/src/server/game/AI/CreatureAISelector.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 9a6742b5eb..f6022adf6b 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index 242acbcd44..fec1dcb43c 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index f1c53e2f9e..70c44f6fe9 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h index deabd1dc48..3b7428e2b9 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp index 8985f722cf..40c404933a 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h index 4afe762217..f3919ea63b 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/ScriptedAI/ScriptedGossip.h b/src/server/game/AI/ScriptedAI/ScriptedGossip.h index 5ef5038059..e5e69d9723 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedGossip.h +++ b/src/server/game/AI/ScriptedAI/ScriptedGossip.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 46cf934356..30e6ae2f9e 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index ea03a82184..cfc8fbe785 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 7ca4274bc4..69a0f684a8 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 1c4b9a51ec..11fbc2f77b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index f0e3c3caff..d56983924b 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 2f9b032c14..91ee0a1d1e 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 7ec1665bff..737e9f3719 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Accounts/AccountMgr.h b/src/server/game/Accounts/AccountMgr.h index 3b09e51107..40ccba1f8e 100644 --- a/src/server/game/Accounts/AccountMgr.h +++ b/src/server/game/Accounts/AccountMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Accounts/RBAC.cpp b/src/server/game/Accounts/RBAC.cpp index c520564f0f..a8720b66df 100644 --- a/src/server/game/Accounts/RBAC.cpp +++ b/src/server/game/Accounts/RBAC.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 4acadd7f2b..1627b91d80 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index a6359a353e..90e61826e3 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index 078229ea4c..cc3fd55bc3 100644 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Addons/AddonMgr.cpp b/src/server/game/Addons/AddonMgr.cpp index 460311061a..0f8d4eb907 100644 --- a/src/server/game/Addons/AddonMgr.cpp +++ b/src/server/game/Addons/AddonMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Addons/AddonMgr.h b/src/server/game/Addons/AddonMgr.h index 3727882ecd..996ddf79f8 100644 --- a/src/server/game/Addons/AddonMgr.h +++ b/src/server/game/Addons/AddonMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 20d30704c1..f3c2075006 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index 1f885837a4..4a2b79ab17 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp index c905ccedf2..4c4a3d8028 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBot.h b/src/server/game/AuctionHouseBot/AuctionHouseBot.h index 225d3b7ee2..63641fc7da 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBot.h +++ b/src/server/game/AuctionHouseBot/AuctionHouseBot.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp index 80c32cf66e..7f05cd2efd 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h index c030731cb4..e1b6b425c4 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index 22dc5bb0bd..bcecc20c41 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h index bccb451938..4f293e03d9 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index d22ac0ea5d..34326d09e2 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index bb3ecb6083..ade3e8c969 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlefield/BattlefieldMgr.cpp b/src/server/game/Battlefield/BattlefieldMgr.cpp index 00da81fb99..e4c10d6468 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.cpp +++ b/src/server/game/Battlefield/BattlefieldMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlefield/BattlefieldMgr.h b/src/server/game/Battlefield/BattlefieldMgr.h index fcc75234bc..fabb33ae35 100644 --- a/src/server/game/Battlefield/BattlefieldMgr.h +++ b/src/server/game/Battlefield/BattlefieldMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 6e670e4d5d..3c9bf40f66 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index dcad65afa8..e5cc392cef 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlegrounds/Arena.cpp b/src/server/game/Battlegrounds/Arena.cpp index 60cc609a06..1ccf3107a0 100644 --- a/src/server/game/Battlegrounds/Arena.cpp +++ b/src/server/game/Battlegrounds/Arena.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlegrounds/Arena.h b/src/server/game/Battlegrounds/Arena.h index af43da8162..863f1fc8c6 100644 --- a/src/server/game/Battlegrounds/Arena.h +++ b/src/server/game/Battlegrounds/Arena.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlegrounds/ArenaScore.h b/src/server/game/Battlegrounds/ArenaScore.h index 742c4d0949..c2d9d18c00 100644 --- a/src/server/game/Battlegrounds/ArenaScore.h +++ b/src/server/game/Battlegrounds/ArenaScore.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 423273c990..ec007df6b6 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h index 2b08eaa667..f27c3761bd 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.h +++ b/src/server/game/Battlegrounds/ArenaTeam.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp index 4fdb34e8d2..b838131fd0 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.h b/src/server/game/Battlegrounds/ArenaTeamMgr.h index 6e7709e0ce..432a4ff598 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.h +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index d368b347a0..100e2e6c7c 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 471da9846b..03f138a5a8 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index 3aac3f080f..062d4702d4 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h index f732f430fc..595745e53f 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.h +++ b/src/server/game/Battlegrounds/BattlegroundMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index 223b71eb8c..34588c7e38 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.h b/src/server/game/Battlegrounds/BattlegroundQueue.h index 1509a60e15..31f108053d 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.h +++ b/src/server/game/Battlegrounds/BattlegroundQueue.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/BattlegroundScore.h b/src/server/game/Battlegrounds/BattlegroundScore.h index 4348eef2c8..428dece1c7 100644 --- a/src/server/game/Battlegrounds/BattlegroundScore.h +++ b/src/server/game/Battlegrounds/BattlegroundScore.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index f9d32e68e0..834151108a 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index 61b35b9232..328eb79d21 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index 4ac02bab9e..f7ee5c7f16 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index 164676151f..7967ae0671 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp index 2bf2f1d5e9..6e85e5bcfd 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h index 6dd10f11e1..224d4277a4 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp index 02f9d6a32a..22e229a161 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h index f4c88ec00e..af1c55fdf9 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index 7ab513c920..626bcacbf2 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index 50888614aa..ccd14a2f3b 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index bc2fc387e8..cff02234ab 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h index e2d511e0f1..72e9990b7c 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp index a89652a5d0..95fef00756 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h index 4b5551a7d1..c311967d8a 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp index 0c30b55745..a55f437ca6 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h index 1d15991902..0f6b79661f 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp index 316812243d..f4a03e85ca 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.h b/src/server/game/Battlegrounds/Zones/BattlegroundRV.h index 6763523063..57347ec0c7 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index bfae37c64e..9ab96383ed 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index 118cea41a7..b60e04e725 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index 69f6b012c8..bc1ee3d44e 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h index 35985e27d0..b7eb702542 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt index 6455e3a7e2..aae5b4874d 100644 --- a/src/server/game/CMakeLists.txt +++ b/src/server/game/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp index 368ebecba8..9d50b290c5 100644 --- a/src/server/game/Calendar/CalendarMgr.cpp +++ b/src/server/game/Calendar/CalendarMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Calendar/CalendarMgr.h b/src/server/game/Calendar/CalendarMgr.h index 9969c00e3a..59303a1832 100644 --- a/src/server/game/Calendar/CalendarMgr.h +++ b/src/server/game/Calendar/CalendarMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index 07ac0c4968..0875ceefff 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h index 0f2a940e3b..26bc6989d0 100644 --- a/src/server/game/Chat/Channels/Channel.h +++ b/src/server/game/Chat/Channels/Channel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp index 92832b860b..3e9a633729 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.cpp +++ b/src/server/game/Chat/Channels/ChannelMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h index 4d7f135433..2cd4edc4fb 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.h +++ b/src/server/game/Chat/Channels/ChannelMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index c99fe62f11..011b68a2bb 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 2420331e36..7ce0792cdf 100644 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp index 732a770645..3602b54bc4 100644 --- a/src/server/game/Chat/ChatLink.cpp +++ b/src/server/game/Chat/ChatLink.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h index 498412b1de..4adb61bbbf 100644 --- a/src/server/game/Chat/ChatLink.h +++ b/src/server/game/Chat/ChatLink.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Combat/HostileRefManager.cpp b/src/server/game/Combat/HostileRefManager.cpp index 245cc77eec..397fd59b7d 100644 --- a/src/server/game/Combat/HostileRefManager.cpp +++ b/src/server/game/Combat/HostileRefManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Combat/HostileRefManager.h b/src/server/game/Combat/HostileRefManager.h index 005e1bf67b..96152ed46f 100644 --- a/src/server/game/Combat/HostileRefManager.h +++ b/src/server/game/Combat/HostileRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 2ec84c946f..588e7b1a93 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Combat/ThreatManager.h b/src/server/game/Combat/ThreatManager.h index 1926651e41..7d20e99c12 100644 --- a/src/server/game/Combat/ThreatManager.h +++ b/src/server/game/Combat/ThreatManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Combat/UnitEvents.h b/src/server/game/Combat/UnitEvents.h index 4127c8b55f..e501cdaa4a 100644 --- a/src/server/game/Combat/UnitEvents.h +++ b/src/server/game/Combat/UnitEvents.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index bae400adcc..d5367e919a 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 43454aba04..35096ae18f 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp index 6f77d2af66..11c79e99b8 100644 --- a/src/server/game/Conditions/DisableMgr.cpp +++ b/src/server/game/Conditions/DisableMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h index ee223aeb05..e74b7a9c31 100644 --- a/src/server/game/Conditions/DisableMgr.h +++ b/src/server/game/Conditions/DisableMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 104c3d3e06..f0ea5b4a5f 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 806d9d4676..5f1de67329 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 2def790124..41a97382b0 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index a419864a19..d1794a0ea9 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index e81db5924f..aade6d91d6 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/DungeonFinding/LFG.cpp b/src/server/game/DungeonFinding/LFG.cpp index 8ec638128d..50343f3d91 100644 --- a/src/server/game/DungeonFinding/LFG.cpp +++ b/src/server/game/DungeonFinding/LFG.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h index 84a25ee49a..73c123723b 100644 --- a/src/server/game/DungeonFinding/LFG.h +++ b/src/server/game/DungeonFinding/LFG.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGGroupData.cpp b/src/server/game/DungeonFinding/LFGGroupData.cpp index aa6916a39a..c5d75c1b83 100644 --- a/src/server/game/DungeonFinding/LFGGroupData.cpp +++ b/src/server/game/DungeonFinding/LFGGroupData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGGroupData.h b/src/server/game/DungeonFinding/LFGGroupData.h index b573e7c309..7ae4777cd4 100644 --- a/src/server/game/DungeonFinding/LFGGroupData.h +++ b/src/server/game/DungeonFinding/LFGGroupData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 250f6e0771..b0a1777f19 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 90fbc36a11..90a8d802f9 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGPlayerData.cpp b/src/server/game/DungeonFinding/LFGPlayerData.cpp index d7f24e7232..c89bf6f135 100644 --- a/src/server/game/DungeonFinding/LFGPlayerData.cpp +++ b/src/server/game/DungeonFinding/LFGPlayerData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGPlayerData.h b/src/server/game/DungeonFinding/LFGPlayerData.h index 51437f50b2..859317ca95 100644 --- a/src/server/game/DungeonFinding/LFGPlayerData.h +++ b/src/server/game/DungeonFinding/LFGPlayerData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp index 86b010a9ac..314803d160 100644 --- a/src/server/game/DungeonFinding/LFGQueue.cpp +++ b/src/server/game/DungeonFinding/LFGQueue.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGQueue.h b/src/server/game/DungeonFinding/LFGQueue.h index f72e9b4fd6..ed8193ab60 100644 --- a/src/server/game/DungeonFinding/LFGQueue.h +++ b/src/server/game/DungeonFinding/LFGQueue.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index 2f0734ff4d..79d3605587 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/DungeonFinding/LFGScripts.h b/src/server/game/DungeonFinding/LFGScripts.h index 8860ddf83c..377614bc55 100644 --- a/src/server/game/DungeonFinding/LFGScripts.h +++ b/src/server/game/DungeonFinding/LFGScripts.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index ce4e94b8ea..8f700cc636 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index 7f2608e4bf..5062645eac 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 6ba8fb44e0..97b3a0b031 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 966944e099..371f3c9395 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index e8ce0acdc8..9f26c92737 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h index 3de1370379..7b16585a99 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.h +++ b/src/server/game/Entities/Creature/CreatureGroups.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index db67f1f74f..be8553ed47 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index 8e6ce9cd82..1e64e83c86 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 46422444bb..8bf3a1e284 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index 68c6cbb70e..afca851974 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index 3d92f9e18c..8ac0a24a08 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h index 44c771c77c..9443a5b5b8 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.h +++ b/src/server/game/Entities/DynamicObject/DynamicObject.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index c1ec2294c3..9aabed6724 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index a744efbe1e..7be78556a5 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp index 1d2fd9b280..c9702d6ccc 100644 --- a/src/server/game/Entities/Item/Container/Bag.cpp +++ b/src/server/game/Entities/Item/Container/Bag.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h index ead059030b..5bfafa4238 100644 --- a/src/server/game/Entities/Item/Container/Bag.h +++ b/src/server/game/Entities/Item/Container/Bag.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 1b7914fd85..70fa471454 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 1eb6530a99..378d7f5e2e 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp index 042d66d7f9..a7b410bc04 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.h b/src/server/game/Entities/Item/ItemEnchantmentMgr.h index 253903b625..2d5c27177b 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.h +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Item/ItemPrototype.h b/src/server/game/Entities/Item/ItemPrototype.h index 8df0551dbe..48ef9e8101 100644 --- a/src/server/game/Entities/Item/ItemPrototype.h +++ b/src/server/game/Entities/Item/ItemPrototype.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index afb987f198..253fed76fa 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index c9e3d06921..419044081e 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h index 9bf7fb0035..1873d912dc 100644 --- a/src/server/game/Entities/Object/ObjectDefines.h +++ b/src/server/game/Entities/Object/ObjectDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp index 552705d8df..3e2bd000b6 100644 --- a/src/server/game/Entities/Object/ObjectGuid.cpp +++ b/src/server/game/Entities/Object/ObjectGuid.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 74fffe0979..4464442156 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/ObjectPosSelector.cpp b/src/server/game/Entities/Object/ObjectPosSelector.cpp index 300d1a0bf4..7f17c6e03e 100644 --- a/src/server/game/Entities/Object/ObjectPosSelector.cpp +++ b/src/server/game/Entities/Object/ObjectPosSelector.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/ObjectPosSelector.h b/src/server/game/Entities/Object/ObjectPosSelector.h index 06174399a0..26a2367800 100644 --- a/src/server/game/Entities/Object/ObjectPosSelector.h +++ b/src/server/game/Entities/Object/ObjectPosSelector.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp index ae559cbac3..2412e67cf1 100644 --- a/src/server/game/Entities/Object/Position.cpp +++ b/src/server/game/Entities/Object/Position.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h index b3e474fa96..18d356c28d 100644 --- a/src/server/game/Entities/Object/Position.h +++ b/src/server/game/Entities/Object/Position.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Object/Updates/UpdateData.cpp b/src/server/game/Entities/Object/Updates/UpdateData.cpp index ce27319de7..34e9923797 100644 --- a/src/server/game/Entities/Object/Updates/UpdateData.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h index 236ee2a7de..132fda9f1d 100644 --- a/src/server/game/Entities/Object/Updates/UpdateData.h +++ b/src/server/game/Entities/Object/Updates/UpdateData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp index 9631639758..c4e45338dd 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h index 1e20f9488e..0b4e59f4f9 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h +++ b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 39c88b282c..8e7fc0d3d5 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Object/Updates/UpdateMask.h b/src/server/game/Entities/Object/Updates/UpdateMask.h index de69816a6e..7c39870cbd 100644 --- a/src/server/game/Entities/Object/Updates/UpdateMask.h +++ b/src/server/game/Entities/Object/Updates/UpdateMask.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index a399600d2f..0da63c5e50 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index c8e95a06a2..b0863a371e 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h index 5ad0e7a2fe..9b0897f826 100644 --- a/src/server/game/Entities/Pet/PetDefines.h +++ b/src/server/game/Entities/Pet/PetDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp index ad2f8f641e..7ddb8f4e59 100644 --- a/src/server/game/Entities/Player/KillRewarder.cpp +++ b/src/server/game/Entities/Player/KillRewarder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Player/KillRewarder.h b/src/server/game/Entities/Player/KillRewarder.h index 577a8ffea2..08530de900 100644 --- a/src/server/game/Entities/Player/KillRewarder.h +++ b/src/server/game/Entities/Player/KillRewarder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index df30a581d4..14b555adde 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 685c811507..0072ec4125 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp index b65584a435..ffb2d8a7dd 100644 --- a/src/server/game/Entities/Player/SocialMgr.cpp +++ b/src/server/game/Entities/Player/SocialMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h index 887b5de58d..8f8ed04b5f 100644 --- a/src/server/game/Entities/Player/SocialMgr.h +++ b/src/server/game/Entities/Player/SocialMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Player/TradeData.cpp b/src/server/game/Entities/Player/TradeData.cpp index bbbd1c8177..ef425ef025 100644 --- a/src/server/game/Entities/Player/TradeData.cpp +++ b/src/server/game/Entities/Player/TradeData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Player/TradeData.h b/src/server/game/Entities/Player/TradeData.h index cfaf066bde..276e6f3db1 100644 --- a/src/server/game/Entities/Player/TradeData.h +++ b/src/server/game/Entities/Player/TradeData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp index 85ee51aebf..169c0e422b 100644 --- a/src/server/game/Entities/Totem/Totem.cpp +++ b/src/server/game/Entities/Totem/Totem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Totem/Totem.h b/src/server/game/Entities/Totem/Totem.h index 66fda48502..bbe7943f4b 100644 --- a/src/server/game/Entities/Totem/Totem.h +++ b/src/server/game/Entities/Totem/Totem.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 99459dce81..5e5c690147 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index 3a2d0e4a7b..987fbf7073 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index fb27fea706..775a3c96c4 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 27f6d5f614..fcd2535dad 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 2ddbe398f7..8fc93f2435 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 982b931fd4..9cf485322f 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h index edec4ea161..cd28c4082d 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.h +++ b/src/server/game/Entities/Vehicle/Vehicle.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h index 3726e9ddf8..42d299ff9b 100644 --- a/src/server/game/Entities/Vehicle/VehicleDefines.h +++ b/src/server/game/Entities/Vehicle/VehicleDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 9e5e7ff999..b287178603 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Events/GameEventMgr.h b/src/server/game/Events/GameEventMgr.h index 57f30eb401..b8d281dfdd 100644 --- a/src/server/game/Events/GameEventMgr.h +++ b/src/server/game/Events/GameEventMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index ca974ba9a3..762c9b9c28 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index d5fb8564b9..d8466dbb1b 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 6f5368ed15..d2064092a6 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index f557c046ee..ae1258713f 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/Cells/Cell.h b/src/server/game/Grids/Cells/Cell.h index eb889e328c..e7f37ebeb6 100644 --- a/src/server/game/Grids/Cells/Cell.h +++ b/src/server/game/Grids/Cells/Cell.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/Cells/CellImpl.h b/src/server/game/Grids/Cells/CellImpl.h index ea5143375c..26ef5529b5 100644 --- a/src/server/game/Grids/Cells/CellImpl.h +++ b/src/server/game/Grids/Cells/CellImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/Grid.h b/src/server/game/Grids/Grid.h index 69b245e432..7503fec7a8 100644 --- a/src/server/game/Grids/Grid.h +++ b/src/server/game/Grids/Grid.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/GridDefines.h b/src/server/game/Grids/GridDefines.h index 8eae906ba8..162c39b951 100644 --- a/src/server/game/Grids/GridDefines.h +++ b/src/server/game/Grids/GridDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/GridLoader.h b/src/server/game/Grids/GridLoader.h index 153a45c8cc..b063126fd3 100644 --- a/src/server/game/Grids/GridLoader.h +++ b/src/server/game/Grids/GridLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/GridRefManager.h b/src/server/game/Grids/GridRefManager.h index b52f1052fa..755417d873 100644 --- a/src/server/game/Grids/GridRefManager.h +++ b/src/server/game/Grids/GridRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/GridReference.h b/src/server/game/Grids/GridReference.h index 946e2f8927..b1f2e92a84 100644 --- a/src/server/game/Grids/GridReference.h +++ b/src/server/game/Grids/GridReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/GridStates.cpp b/src/server/game/Grids/GridStates.cpp index 7f12c7b279..d0c01d9de6 100644 --- a/src/server/game/Grids/GridStates.cpp +++ b/src/server/game/Grids/GridStates.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/GridStates.h b/src/server/game/Grids/GridStates.h index 6f20e72037..9420bef4b9 100644 --- a/src/server/game/Grids/GridStates.h +++ b/src/server/game/Grids/GridStates.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/NGrid.h b/src/server/game/Grids/NGrid.h index b6189d22fe..b3d59da226 100644 --- a/src/server/game/Grids/NGrid.h +++ b/src/server/game/Grids/NGrid.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index 15f3c7811c..c48d1947ee 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index c2f5f75f98..6edeadf6b9 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h index 995d330035..04d68240ca 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h +++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index 2c292c4378..111bfdb6f4 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Grids/ObjectGridLoader.h b/src/server/game/Grids/ObjectGridLoader.h index 126ebd0d0a..9dc4c7e048 100644 --- a/src/server/game/Grids/ObjectGridLoader.h +++ b/src/server/game/Grids/ObjectGridLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 4f8accee69..d0e70eb3db 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index b814ab0802..4d2ee57c9b 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp index b8c8157b6d..0fd2e7c709 100644 --- a/src/server/game/Groups/GroupMgr.cpp +++ b/src/server/game/Groups/GroupMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Groups/GroupMgr.h b/src/server/game/Groups/GroupMgr.h index ec02de16bc..9afdddd0f1 100644 --- a/src/server/game/Groups/GroupMgr.h +++ b/src/server/game/Groups/GroupMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Groups/GroupRefManager.h b/src/server/game/Groups/GroupRefManager.h index afb32e1657..4cb9e60a26 100644 --- a/src/server/game/Groups/GroupRefManager.h +++ b/src/server/game/Groups/GroupRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Groups/GroupReference.cpp b/src/server/game/Groups/GroupReference.cpp index 0567ab652f..b1d9d41548 100644 --- a/src/server/game/Groups/GroupReference.cpp +++ b/src/server/game/Groups/GroupReference.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Groups/GroupReference.h b/src/server/game/Groups/GroupReference.h index 5eded9e059..4718dda183 100644 --- a/src/server/game/Groups/GroupReference.h +++ b/src/server/game/Groups/GroupReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index d2fcad512b..87494e78a2 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index ca5ea95ee2..2bc57a7067 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index 6a75761ded..2d4fb849fb 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Guilds/GuildMgr.h b/src/server/game/Guilds/GuildMgr.h index 1450769c57..a97a59cafe 100644 --- a/src/server/game/Guilds/GuildMgr.h +++ b/src/server/game/Guilds/GuildMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Handlers/AddonHandler.cpp b/src/server/game/Handlers/AddonHandler.cpp index adb7684637..ad44e0993e 100644 --- a/src/server/game/Handlers/AddonHandler.cpp +++ b/src/server/game/Handlers/AddonHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/AddonHandler.h b/src/server/game/Handlers/AddonHandler.h index 7458e00180..1e8081e091 100644 --- a/src/server/game/Handlers/AddonHandler.h +++ b/src/server/game/Handlers/AddonHandler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index 5616eb89b0..55d949c245 100644 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index a9680ff69b..f23888cab0 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index 8e87fc32f2..ad7e3c0489 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index d4291e34df..e91da35c06 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/BattlefieldHandler.cpp b/src/server/game/Handlers/BattlefieldHandler.cpp index 69e36e7328..9d5653fc24 100644 --- a/src/server/game/Handlers/BattlefieldHandler.cpp +++ b/src/server/game/Handlers/BattlefieldHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index e9b3bea599..8bd7086fc1 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp index ee1456fd4b..976860e8cc 100644 --- a/src/server/game/Handlers/ChannelHandler.cpp +++ b/src/server/game/Handlers/ChannelHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 60ec60443d..e0d790312d 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index e13b417215..346adf6f09 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/CombatHandler.cpp b/src/server/game/Handlers/CombatHandler.cpp index 78aeaa1b41..4302e6472b 100644 --- a/src/server/game/Handlers/CombatHandler.cpp +++ b/src/server/game/Handlers/CombatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp index 2f39a91afb..51a9f768d2 100644 --- a/src/server/game/Handlers/DuelHandler.cpp +++ b/src/server/game/Handlers/DuelHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 9f225df842..84cbb86345 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index ca7b4a5f8c..e8f8372d67 100644 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index b1f46c381b..7f5d882a91 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index e18e7830cf..3c89ad9d54 100644 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 9876e93939..82fdc2e54c 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 5f25f57add..aaf6ca39d0 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 345202dc32..e4ee057d6e 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 33a50fad1f..eea5c62fbd 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index f8d7f73e07..f272cd4a03 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/NPCHandler.h b/src/server/game/Handlers/NPCHandler.h index 3b96ae5f93..24c3e997bb 100644 --- a/src/server/game/Handlers/NPCHandler.h +++ b/src/server/game/Handlers/NPCHandler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 8c3c3e9082..8bfb007060 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 952659dcea..781a478d75 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 153ce73694..ebc9ebde99 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index fd7c4439c8..31ba812ab9 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/ReferAFriendHandler.cpp b/src/server/game/Handlers/ReferAFriendHandler.cpp index db5d0997ee..3e602d1c34 100644 --- a/src/server/game/Handlers/ReferAFriendHandler.cpp +++ b/src/server/game/Handlers/ReferAFriendHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index 5f50a7305e..0bc90c896a 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 0f0640e3a2..0943d9db26 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index a671250c17..122534c110 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp index cf6181f02b..a7f236890f 100644 --- a/src/server/game/Handlers/TicketHandler.cpp +++ b/src/server/game/Handlers/TicketHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 1bb2197193..e2743f8f45 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Handlers/VehicleHandler.cpp b/src/server/game/Handlers/VehicleHandler.cpp index 3bb2ca7893..b302b31852 100644 --- a/src/server/game/Handlers/VehicleHandler.cpp +++ b/src/server/game/Handlers/VehicleHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Handlers/VoiceChatHandler.cpp b/src/server/game/Handlers/VoiceChatHandler.cpp index e667eb4bfd..efd664fd1f 100644 --- a/src/server/game/Handlers/VoiceChatHandler.cpp +++ b/src/server/game/Handlers/VoiceChatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index b3dd3e9f01..9a64335e6f 100644 --- a/src/server/game/Instances/InstanceSaveMgr.cpp +++ b/src/server/game/Instances/InstanceSaveMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Instances/InstanceSaveMgr.h b/src/server/game/Instances/InstanceSaveMgr.h index 5e8292057a..e3d8175cbc 100644 --- a/src/server/game/Instances/InstanceSaveMgr.h +++ b/src/server/game/Instances/InstanceSaveMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index a8cf42ea49..e59171bc3b 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 220a0950b2..189767e54b 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index b7a19a72bf..530bcd2902 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index 08cd224cd0..af6f3e5670 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp index 78cd4d3692..b0e8a1ebe0 100644 --- a/src/server/game/Mails/Mail.cpp +++ b/src/server/game/Mails/Mail.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h index f044996bd0..407edf2bad 100644 --- a/src/server/game/Mails/Mail.h +++ b/src/server/game/Mails/Mail.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 67abf4af68..27fb55bb4d 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 3af3bc6cc9..01db38d9c3 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp index 7e07d00fe6..74d490bf94 100644 --- a/src/server/game/Maps/MapInstanced.cpp +++ b/src/server/game/Maps/MapInstanced.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/MapInstanced.h b/src/server/game/Maps/MapInstanced.h index d9983ffd73..7fa66bde06 100644 --- a/src/server/game/Maps/MapInstanced.h +++ b/src/server/game/Maps/MapInstanced.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index 5d4dd04359..e5f364e39f 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/MapManager.h b/src/server/game/Maps/MapManager.h index da785d8388..51bb418bdf 100644 --- a/src/server/game/Maps/MapManager.h +++ b/src/server/game/Maps/MapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/MapRefManager.h b/src/server/game/Maps/MapRefManager.h index 5f1e14b325..09aa67d43e 100644 --- a/src/server/game/Maps/MapRefManager.h +++ b/src/server/game/Maps/MapRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/MapReference.h b/src/server/game/Maps/MapReference.h index c479590de9..6f67bdfff9 100644 --- a/src/server/game/Maps/MapReference.h +++ b/src/server/game/Maps/MapReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/MapUpdater.cpp b/src/server/game/Maps/MapUpdater.cpp index 20b8da796a..b2e540bbbc 100644 --- a/src/server/game/Maps/MapUpdater.cpp +++ b/src/server/game/Maps/MapUpdater.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/MapUpdater.h b/src/server/game/Maps/MapUpdater.h index 16d11b2f45..3d0f0b9e7e 100644 --- a/src/server/game/Maps/MapUpdater.h +++ b/src/server/game/Maps/MapUpdater.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index 84eba74c6d..afbddc5e68 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index d100f60c60..0bfb5b7a41 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Maps/ZoneScript.h b/src/server/game/Maps/ZoneScript.h index fd52bdd4c1..e54c96dbb1 100644 --- a/src/server/game/Maps/ZoneScript.h +++ b/src/server/game/Maps/ZoneScript.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Miscellaneous/Formulas.h b/src/server/game/Miscellaneous/Formulas.h index 6edc3d74a5..52b80ce92a 100644 --- a/src/server/game/Miscellaneous/Formulas.h +++ b/src/server/game/Miscellaneous/Formulas.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 40d577adf9..e42204b3ba 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index ac16a83e6a..77d6f739da 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/FollowerRefManager.h b/src/server/game/Movement/FollowerRefManager.h index a55bdfea4b..ae7f942ca9 100644 --- a/src/server/game/Movement/FollowerRefManager.h +++ b/src/server/game/Movement/FollowerRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/FollowerReference.cpp b/src/server/game/Movement/FollowerReference.cpp index 29d1a2c35a..81a1c8464d 100644 --- a/src/server/game/Movement/FollowerReference.cpp +++ b/src/server/game/Movement/FollowerReference.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/FollowerReference.h b/src/server/game/Movement/FollowerReference.h index 16e8da107c..2922a09bde 100644 --- a/src/server/game/Movement/FollowerReference.h +++ b/src/server/game/Movement/FollowerReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index cb8cab1849..3fcae1398f 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 9a8950de9f..ce0f1f7836 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerator.cpp b/src/server/game/Movement/MovementGenerator.cpp index 8098b05f03..b0eb34d54c 100644 --- a/src/server/game/Movement/MovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h index 45fd252ddb..56e5dc7058 100755 --- a/src/server/game/Movement/MovementGenerator.h +++ b/src/server/game/Movement/MovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGeneratorImpl.h b/src/server/game/Movement/MovementGeneratorImpl.h index 1fc8c73b47..341cac5ed3 100644 --- a/src/server/game/Movement/MovementGeneratorImpl.h +++ b/src/server/game/Movement/MovementGeneratorImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index f0c0311280..108276c951 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h index 5b6d6c9648..4f8d7cbe1f 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index fa17846a1f..6cdd29986b 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h index dc42dc7499..b3e14887e2 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index 7ab7534199..77185f4f25 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h index cbb6f279c6..9e43d9a0dc 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp index 2aaaa719e9..9595777ddf 100755 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h index 30a8b9b868..9aa778c565 100755 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index e233d52ecf..38295f8385 100755 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h index 5b1155507a..f73d51db96 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index 86f0e6e20e..2e013c44ae 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h index 763e329461..0e667ad4c8 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 40bf3af519..d0340a4df5 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 77a669e073..7103eaace5 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index fe618e6ece..48d29b3259 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h index caf76b5ea1..1dd4611d53 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp index c4fe879136..40def87f6d 100644 --- a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp +++ b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.h b/src/server/game/Movement/Spline/MovementPacketBuilder.h index 059d160a51..986cda6075 100644 --- a/src/server/game/Movement/Spline/MovementPacketBuilder.h +++ b/src/server/game/Movement/Spline/MovementPacketBuilder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify diff --git a/src/server/game/Movement/Waypoints/WaypointManager.cpp b/src/server/game/Movement/Waypoints/WaypointManager.cpp index cf319321c7..e0639e38e7 100644 --- a/src/server/game/Movement/Waypoints/WaypointManager.cpp +++ b/src/server/game/Movement/Waypoints/WaypointManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Movement/Waypoints/WaypointManager.h b/src/server/game/Movement/Waypoints/WaypointManager.h index 17842484bf..d519eee479 100644 --- a/src/server/game/Movement/Waypoints/WaypointManager.h +++ b/src/server/game/Movement/Waypoints/WaypointManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index 9046d9e699..868cba9a5b 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h index 4a423a8da5..79f34ff10e 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.h +++ b/src/server/game/OutdoorPvP/OutdoorPvP.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp index 37a380bf57..8296cdfb7e 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h index 542aad0ef0..8a11398788 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.h +++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index 1e7826f280..12fb8a06b6 100644 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h index e165f9bd39..51e0bcb4ca 100644 --- a/src/server/game/Pools/PoolMgr.h +++ b/src/server/game/Pools/PoolMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 1e4bb96303..4a4ee9bff9 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 91b4a3181f..a502fef614 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp index a4065fa6f8..fb2873f80b 100644 --- a/src/server/game/Reputation/ReputationMgr.cpp +++ b/src/server/game/Reputation/ReputationMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Reputation/ReputationMgr.h b/src/server/game/Reputation/ReputationMgr.h index 7d7650b858..6f319a39b0 100644 --- a/src/server/game/Reputation/ReputationMgr.h +++ b/src/server/game/Reputation/ReputationMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index 63006bc6ed..a01c109b9c 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 47a23dedf0..0b9a53649a 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Scripting/ScriptLoader.h b/src/server/game/Scripting/ScriptLoader.h index 652ef994c7..4adb215e13 100644 --- a/src/server/game/Scripting/ScriptLoader.h +++ b/src/server/game/Scripting/ScriptLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 3cbdf93ca5..fbe5febdbb 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 046c6c1a00..5dfc0be688 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Scripting/ScriptSystem.cpp b/src/server/game/Scripting/ScriptSystem.cpp index 742e2a1e77..e828830ec0 100644 --- a/src/server/game/Scripting/ScriptSystem.cpp +++ b/src/server/game/Scripting/ScriptSystem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 4f7b8f510b..6c9fce2680 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 4b47e51fde..0d30134aa9 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Server/Protocol/PacketLog.cpp b/src/server/game/Server/Protocol/PacketLog.cpp index 717192b42f..57b76304a7 100644 --- a/src/server/game/Server/Protocol/PacketLog.cpp +++ b/src/server/game/Server/Protocol/PacketLog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Server/Protocol/PacketLog.h b/src/server/game/Server/Protocol/PacketLog.h index e23a22fe8c..45a3f0a465 100644 --- a/src/server/game/Server/Protocol/PacketLog.h +++ b/src/server/game/Server/Protocol/PacketLog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Server/Protocol/ServerPktHeader.h b/src/server/game/Server/Protocol/ServerPktHeader.h index 0fd1f85f96..3f21a51e0f 100644 --- a/src/server/game/Server/Protocol/ServerPktHeader.h +++ b/src/server/game/Server/Protocol/ServerPktHeader.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 6ae63f2efa..c380c1a562 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index af2d2d22c5..2253b6bc68 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 1dc470744a..a2d357cbc4 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index f0da520cf4..9e5b35992a 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp index da35017cc2..529396b396 100644 --- a/src/server/game/Server/WorldSocketMgr.cpp +++ b/src/server/game/Server/WorldSocketMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2008 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Skills/SkillDiscovery.cpp b/src/server/game/Skills/SkillDiscovery.cpp index 2cb556a82a..36a7d14719 100644 --- a/src/server/game/Skills/SkillDiscovery.cpp +++ b/src/server/game/Skills/SkillDiscovery.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Skills/SkillDiscovery.h b/src/server/game/Skills/SkillDiscovery.h index 2126445a1c..b7fe1cdc8b 100644 --- a/src/server/game/Skills/SkillDiscovery.h +++ b/src/server/game/Skills/SkillDiscovery.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Skills/SkillExtraItems.cpp b/src/server/game/Skills/SkillExtraItems.cpp index 50e00b2413..5213944cc9 100644 --- a/src/server/game/Skills/SkillExtraItems.cpp +++ b/src/server/game/Skills/SkillExtraItems.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Skills/SkillExtraItems.h b/src/server/game/Skills/SkillExtraItems.h index 118c49ed00..2889b22160 100644 --- a/src/server/game/Skills/SkillExtraItems.h +++ b/src/server/game/Skills/SkillExtraItems.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 9cbd280f9d..e0daf59fcc 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 01f27a38e9..a4e7f61d83 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index 753d16a97e..b400520a08 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 93b8c3eb36..648bc5d691 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index 6abcd57841..2180f52419 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 4f3b60d6f3..cb573f4ec3 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 6b96f56c53..e9fde23488 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index b3ab72dcbf..40bd4e3c26 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index faad54d0af..ac08f68193 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h index db65cd50c3..00c790a670 100644 --- a/src/server/game/Spells/SpellHistory.h +++ b/src/server/game/Spells/SpellHistory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 6486a7eada..699e4857ee 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index d042f926d0..dbbab5fb30 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index debe4ac3cb..e96ed8c679 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index ee732033eb..651a8cde93 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 95857be27d..6876f8fa7e 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index 0916a43498..77a993fffa 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Texts/ChatTextBuilder.h b/src/server/game/Texts/ChatTextBuilder.h index c61b283500..8ea5563fd1 100644 --- a/src/server/game/Texts/ChatTextBuilder.h +++ b/src/server/game/Texts/ChatTextBuilder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index 034fe96306..8d3ee939e2 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 237aedd49d..28fd98f21a 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index b4b3b8267c..1cf68eec9c 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index a90a1ec020..9cc1d20b12 100644 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/game/Tools/CharacterDatabaseCleaner.cpp b/src/server/game/Tools/CharacterDatabaseCleaner.cpp index 815212aa53..5c35e78278 100644 --- a/src/server/game/Tools/CharacterDatabaseCleaner.cpp +++ b/src/server/game/Tools/CharacterDatabaseCleaner.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Tools/CharacterDatabaseCleaner.h b/src/server/game/Tools/CharacterDatabaseCleaner.h index f5be291c10..ecbd6d0a79 100644 --- a/src/server/game/Tools/CharacterDatabaseCleaner.h +++ b/src/server/game/Tools/CharacterDatabaseCleaner.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 0a47da1c78..113fea2ea3 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Tools/PlayerDump.h b/src/server/game/Tools/PlayerDump.h index 5cdcc4b6bb..95d6ed2d04 100644 --- a/src/server/game/Tools/PlayerDump.h +++ b/src/server/game/Tools/PlayerDump.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/Modules/WardenModuleMac.h b/src/server/game/Warden/Modules/WardenModuleMac.h index 145d61fd6f..bbe93e1765 100644 --- a/src/server/game/Warden/Modules/WardenModuleMac.h +++ b/src/server/game/Warden/Modules/WardenModuleMac.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/Modules/WardenModuleWin.h b/src/server/game/Warden/Modules/WardenModuleWin.h index 6b27fbfa7e..26cae43117 100644 --- a/src/server/game/Warden/Modules/WardenModuleWin.h +++ b/src/server/game/Warden/Modules/WardenModuleWin.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp index 69facc6895..73d6a9ca5d 100644 --- a/src/server/game/Warden/Warden.cpp +++ b/src/server/game/Warden/Warden.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/Warden.h b/src/server/game/Warden/Warden.h index 695c6730b2..35ee18d4c0 100644 --- a/src/server/game/Warden/Warden.h +++ b/src/server/game/Warden/Warden.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/WardenCheckMgr.cpp b/src/server/game/Warden/WardenCheckMgr.cpp index df9cd4786a..5c4b0fc05b 100644 --- a/src/server/game/Warden/WardenCheckMgr.cpp +++ b/src/server/game/Warden/WardenCheckMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/WardenCheckMgr.h b/src/server/game/Warden/WardenCheckMgr.h index d01fc80a1f..4107ccc3af 100644 --- a/src/server/game/Warden/WardenCheckMgr.h +++ b/src/server/game/Warden/WardenCheckMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/WardenMac.cpp b/src/server/game/Warden/WardenMac.cpp index 8abd48bd3f..6df1dc7561 100644 --- a/src/server/game/Warden/WardenMac.cpp +++ b/src/server/game/Warden/WardenMac.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/WardenMac.h b/src/server/game/Warden/WardenMac.h index 83f98a9e6e..26a2d86524 100644 --- a/src/server/game/Warden/WardenMac.h +++ b/src/server/game/Warden/WardenMac.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp index 2fe11a7eee..cd008a7da0 100644 --- a/src/server/game/Warden/WardenWin.cpp +++ b/src/server/game/Warden/WardenWin.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Warden/WardenWin.h b/src/server/game/Warden/WardenWin.h index ab6ef7c8c6..4bf1af77c4 100644 --- a/src/server/game/Warden/WardenWin.h +++ b/src/server/game/Warden/WardenWin.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp index 2a94cd2618..f774916f4a 100644 --- a/src/server/game/Weather/Weather.cpp +++ b/src/server/game/Weather/Weather.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Weather/Weather.h b/src/server/game/Weather/Weather.h index a1adb6b853..c1f029d626 100644 --- a/src/server/game/Weather/Weather.h +++ b/src/server/game/Weather/Weather.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index ff55d2d9a2..25adb4d361 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/Weather/WeatherMgr.h b/src/server/game/Weather/WeatherMgr.h index 61eddc0c60..97c541fd3c 100644 --- a/src/server/game/Weather/WeatherMgr.h +++ b/src/server/game/Weather/WeatherMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 2aa65324a3..09cc9180a5 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 64ebafbd6e..a624fd6e6a 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index 3668a2b0da..8b62e7d55f 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index 49d71129f9..d4d75cd175 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index 8d9a40d9d1..f25e91ee3e 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp index ea77bc1f18..ef14ca6651 100644 --- a/src/server/scripts/Commands/cs_achievement.cpp +++ b/src/server/scripts/Commands/cs_achievement.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_ahbot.cpp b/src/server/scripts/Commands/cs_ahbot.cpp index 44889fccd3..65e9039426 100644 --- a/src/server/scripts/Commands/cs_ahbot.cpp +++ b/src/server/scripts/Commands/cs_ahbot.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp index 71657d51e7..07bbe6cfa5 100644 --- a/src/server/scripts/Commands/cs_arena.cpp +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index 67015cd7d9..4a1bf71e1d 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_bf.cpp b/src/server/scripts/Commands/cs_bf.cpp index 7101b89b5f..8b0af7bddb 100644 --- a/src/server/scripts/Commands/cs_bf.cpp +++ b/src/server/scripts/Commands/cs_bf.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_cast.cpp b/src/server/scripts/Commands/cs_cast.cpp index 5252d5e368..44c606a360 100644 --- a/src/server/scripts/Commands/cs_cast.cpp +++ b/src/server/scripts/Commands/cs_cast.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 65dd44f856..e048aabd4d 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp index 2dc2c17bdc..0adff61c9e 100644 --- a/src/server/scripts/Commands/cs_cheat.cpp +++ b/src/server/scripts/Commands/cs_cheat.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 7f517d09e9..bfc0193206 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_deserter.cpp b/src/server/scripts/Commands/cs_deserter.cpp index 9f46120770..56102c99c5 100644 --- a/src/server/scripts/Commands/cs_deserter.cpp +++ b/src/server/scripts/Commands/cs_deserter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp index 8c73f3f41d..5493222837 100644 --- a/src/server/scripts/Commands/cs_disable.cpp +++ b/src/server/scripts/Commands/cs_disable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_event.cpp b/src/server/scripts/Commands/cs_event.cpp index 352bce4e7f..c3fca441eb 100644 --- a/src/server/scripts/Commands/cs_event.cpp +++ b/src/server/scripts/Commands/cs_event.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index 81b7060368..e03942bc24 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index a810106269..b7acfb85f5 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index fda9101fc3..729dac0ad6 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index 054cff996f..5e8952ce88 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index 04b633f6f4..98fc852b57 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_honor.cpp b/src/server/scripts/Commands/cs_honor.cpp index e8b41309d4..da285ee4e3 100644 --- a/src/server/scripts/Commands/cs_honor.cpp +++ b/src/server/scripts/Commands/cs_honor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_instance.cpp b/src/server/scripts/Commands/cs_instance.cpp index 5651aaa12e..a53d1f00b5 100644 --- a/src/server/scripts/Commands/cs_instance.cpp +++ b/src/server/scripts/Commands/cs_instance.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index d7fd4e6664..9098bc1309 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp index 9287d5553e..8c06377bbf 100644 --- a/src/server/scripts/Commands/cs_lfg.cpp +++ b/src/server/scripts/Commands/cs_lfg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index a1b79a6960..abb8af2443 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index ec35c5a7b6..4e749d33fc 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp index f3c1f4d7df..69ff04ffb4 100644 --- a/src/server/scripts/Commands/cs_message.cpp +++ b/src/server/scripts/Commands/cs_message.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index b81d6152c0..fd9247bd77 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index 479c34dd90..83f89b9218 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index a3eed4dfd5..761b4c9e0e 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 99c10b074a..daf4fe5866 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp index e304681782..4f0a179142 100644 --- a/src/server/scripts/Commands/cs_pet.cpp +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 442950bca9..be53304b8f 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_rbac.cpp b/src/server/scripts/Commands/cs_rbac.cpp index c28aa04175..f7c2d21c12 100644 --- a/src/server/scripts/Commands/cs_rbac.cpp +++ b/src/server/scripts/Commands/cs_rbac.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 44e34b8e2a..56b0dbf43d 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index d1c7421b76..0594112042 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_send.cpp b/src/server/scripts/Commands/cs_send.cpp index b7165ed339..672db3a3ab 100644 --- a/src/server/scripts/Commands/cs_send.cpp +++ b/src/server/scripts/Commands/cs_send.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index e41a7d161d..83bc2e4767 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp index 9ea516f097..15dbde894f 100644 --- a/src/server/scripts/Commands/cs_tele.cpp +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index a9baa45f34..c5c85f5f3c 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp index bc6027ce3c..2f5d7b8364 100644 --- a/src/server/scripts/Commands/cs_titles.cpp +++ b/src/server/scripts/Commands/cs_titles.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 30ee8254f7..ef61c23110 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Custom/CMakeLists.txt b/src/server/scripts/Custom/CMakeLists.txt index 5218f76ee6..595ff80181 100644 --- a/src/server/scripts/Custom/CMakeLists.txt +++ b/src/server/scripts/Custom/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp index 451384d18d..5864e6beb7 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp index 09c0a465c1..eb9b6587b6 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp index 59d5250bf1..269e115189 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp index 3b038a12b5..93583364ef 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp index 99d6b7c1c7..16f2c004f6 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_vanndar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 9c9dfe3834..9cd724e559 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h index 3deb2b153e..0cb25d3a2a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp index 53d490c4b6..ff949ee6d0 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp index ca9c6b27ef..964c15673a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp index 114be945bd..166ccbc6dc 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp index 99f46b4225..16f2cec207 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp index 2d70aacf2e..c154c0bd5f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp index 35f3a6d983..ced7cc203f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp index a9109c73d9..bd489d279a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp index b46dbb13f7..fa646d1d4e 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h index a2efad28fd..446cc48d2f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp index bfa4298db3..8031c2ffda 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp index ea4e4a77fa..45093ed101 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp index d8e6b838d8..244bd6e37e 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp index 2199a2d464..66369b28b7 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp index c11914f006..bcf6911bf5 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp index 7e51c96805..b2a3ac1342 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp index 86c13ef10d..71837ef12f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp index 7d64310fb7..8d06a98dd3 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp index e3c2b7a67e..33f1039424 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp index 215e8125a4..7b70e38386 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp index d5265def9e..817aaf0a25 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp index c3788b31b0..ace95b9914 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp index 439c5053cf..7e131a88d3 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp index 20a3f34ea2..a38ff824b6 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp index 1ebee9a932..1280caaa99 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp index 635333a588..bbe8fda37e 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h index 12798833a3..39c9d9a79a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp index 5ba933005e..27b3ec2232 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index 9a49b96e68..ced6ad19d1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp index 7a7e30f791..1e318ed922 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp index 3dcdbfe01d..28d6dd6225 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp index 20e69211da..d6982e98f4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index a89571e819..4a6fee1209 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp index 1d66964ce6..e58bded801 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp index 76ab473627..9088e059ef 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index 97646b774e..a3ef50c3fb 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp index 6a3c85f1f9..51bb314968 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp index 77e9b9962f..96f92ac103 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp index 5b5456f1b4..886ccaf836 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp index 04532b5454..7dc4922790 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp index 779418a7f7..0c4e28d174 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp index 532ef043d6..4d1ad7e61d 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp index 3c2836e159..9b487f7b5f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index e2202a7e52..e0cae87051 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp index 77927b339c..99ec1a2dc6 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp index d066fe980f..cea783cedc 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp index 135065e586..9811251971 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h index e4756bc7a8..de890ee3b3 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt index 76e4d36e0a..8e6616347f 100644 --- a/src/server/scripts/EasternKingdoms/CMakeLists.txt +++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp index 1191497e87..541ddc0e1c 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp index c9020e46ae..45eb7d08ad 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h index 79121f6ef0..dff4243617 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h +++ b/src/server/scripts/EasternKingdoms/Deadmines/deadmines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index 9051bf252f..80391ab287 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2008 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp index c1470d3bc4..05d964124b 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h index 760f84a69e..bbfea6a256 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp index 843b28ce43..2c418692d0 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp index e3efd804f4..55c9cf2baa 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_curator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it 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 7af7f27ec0..9f4a31fdbb 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 96c7c5d810..96e0554168 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp index ba45b41f92..79e36442f4 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2008 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp index 0a287173ad..a460477d38 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp index d8f1e2d15d..6f5f2b8f65 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index d11c4a6e58..2920f0787a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it 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 c5440848e9..450678a0f8 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 67f8144c6c..7bc835dcce 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index 5b9442a628..d4d0e6fa70 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index e3ab206ac2..b23b9e645d 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index 8aba0a1546..aa2da8cc39 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h index 83f3f38aae..db68484c4a 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index e4cc7c0e84..b809128e73 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index 2f2647f42a..6bba0d250f 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 480fd8848f..05829128c5 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp index 7d91a68e7c..4be1246405 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index 665213314b..c726461044 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp index 9c904dcada..e216a02446 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h index 2b1ed8fee4..917ad0eb50 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/magisters_terrace.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index f2d7f23bdc..c65ee5482e 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index f72180f694..cdecb65d8f 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index ce8b094bb8..4eb7bdc780 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp index bde379b1b8..53b6d2be8d 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp index 59b1b553a0..e3462242dc 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp index c2dbd0c724..0ffb555eb5 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp index 8f80344b24..4697e40702 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index bac4e450a0..dff0a66cec 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp index 911cdf90d1..c511f1cabb 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp index 7bf70c4d7f..c063204a50 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp index 4098701be7..2a96478cfa 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp index e9a7dd0ce1..aeb7592cbd 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp index 2848b19cd0..bab5a02cc9 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp index 86d2c170f2..a68d7a67ac 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp index c41b1d87d6..caab177d53 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h index cbff8d50da..aa1bcebacf 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp index 65acc2d052..7ba86d619d 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp index 85e1e33c22..49eff958d3 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp index e0da7b9a44..7cbe58ecae 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp index b073f5ade7..27da16518b 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_illucia_barov.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp index 3d7b96a9ab..6a81132eb2 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_instructor_malicia.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp index f09c896e0b..8e2d7253ef 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index 8f780d1e2c..67b1d29269 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp index 00b3beeabf..c3dda79f72 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kormok.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp index 72fd1a18b9..e3aa2cecaa 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp index 679fa0dc58..3af0fd7a2b 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp index b6a3f18626..7a0e6f5fb5 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp index 47e0bd8006..ffe50c5dae 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_the_ravenian.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp index f555554e6c..9a34c2194c 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_vectus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp index 49c3c3ba1c..854f77e1d0 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h index 0ec53105f1..1ada609a1c 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h +++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index a085463f7c..3bd5220a8e 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index f2d3a21a28..47a6c0b6a2 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h index 2f0de6de5e..88edc3f1ee 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp index f6f6dab866..f81c77838f 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baron_rivendare.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp index d8f4383f61..a454be8a2d 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_baroness_anastari.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp index 2e33865fe2..cfa830ee99 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp index 3f207ef680..161e1160b8 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp index e42662bbe0..393747072f 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp index b094eb45dc..2c7026fd0a 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp index 2dc00edac1..dbafc91d3d 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_nerubenkan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp index 9ac8d9b40f..1dca56c643 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp index 0b3fa2e7ca..ffbc597ab9 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_postmaster_malown.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp index e3ea85a1d1..b9cc7e4edd 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp index cbc9e3c375..decbf53241 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp index 1257808756..d2a5328af8 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp index 60dd27eed9..4ebefcf712 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h index 28b0a67fa7..9237149c18 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h +++ b/src/server/scripts/EasternKingdoms/Stratholme/stratholme.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp index ca944f7037..118d28e214 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp index 97be139cef..64ccdd11cc 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h index cf7924f80b..3a6d867ebe 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/sunken_temple.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index 6ca768b2de..936ae51f16 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index 77e0e680f4..e70d7834c7 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index c4598dda91..d9b481d7b6 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index c8964b2ff3..3aebbedbbf 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index e3deac506b..c792214ae4 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 421f3d771a..1b3996d1e6 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp index 9b1585ba58..3f89e80906 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp index 5be8cfab55..849710c553 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h index 92d0dc9f6c..c6b4ae753a 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp index 6df7679a40..b8c9734d96 100644 --- a/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp +++ b/src/server/scripts/EasternKingdoms/TheStockade/instance_the_stockade.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index 29002460b2..a5fed30a6c 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2007 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp index 7f0faa138e..dce92a16cf 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_ironaya.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp index 11699d4ec4..8c78fb7ff1 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2007 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp index 7cd7da771d..622c8f0de0 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h index 03d638ff5c..24fba425e4 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h +++ b/src/server/scripts/EasternKingdoms/Uldaman/uldaman.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp index 30e1f5ced2..791f68bae3 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp index 2317582af9..2842e64ca9 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_halazzi.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index a9abb2c045..cc55f758a2 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2007 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index 3228fbfde1..c6e8945900 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index a0e4d037f8..37505a8b74 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index b89c825fdb..96c0798ae0 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp index f6622ffe1f..ab182cf084 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/instance_zulaman.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 1927b0f982..972acdc3f9 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h index 74162f0859..0cd22b5a30 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 0046bc8fcd..ac4f404bfb 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp index 8ef05c3409..53d3b8e455 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp index 2469779d17..76b12dcf24 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp index 4642b0af46..58ae281a8a 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp index 500bf24f3b..12ffec3ce8 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp index 81460e1469..7c0f964540 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp index 154de685b0..364e84bce6 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index 8746a024ab..8c179af2ad 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp index 6b68d9e5fa..f00d133e4f 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp index 6219b62dcc..71dfafa339 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp index 654bfd5410..def7c7562c 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp index 95367fc55f..f9cbbeddb9 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp index 54cd1d7c60..1c4f6e298b 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index c96fbd15b3..01e314e9ed 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h index a0e579ce4c..8915144133 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h +++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp index ac261f2928..4d8396aeba 100644 --- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp index c0010991d3..9fb019d3b9 100644 --- a/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_blasted_lands.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp index f67ce07af8..df61a010f8 100644 --- a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp +++ b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp index 9bbaf616a6..667faba754 100644 --- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp +++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp index 2f10aa858f..ce0ebf4d12 100644 --- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp index 3ce8d078cb..b24c355d41 100644 --- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp index e0612a5ec7..f9b7e9b0d7 100644 --- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp index 3f72b7353d..f7d014ea7a 100644 --- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp b/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp index 56c0d99097..151f8270c4 100644 --- a/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp +++ b/src/server/scripts/EasternKingdoms/zone_loch_modan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp index 607b449552..a30d795a48 100644 --- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp +++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp index c77bf8110f..49dfda48a6 100644 --- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp index d6e8e34493..7529c86d59 100644 --- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp index 0c13aac286..ca7b656a91 100644 --- a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp b/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp index b162b4f4d7..3cf09b6661 100644 --- a/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp +++ b/src/server/scripts/EasternKingdoms/zone_swamp_of_sorrows.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp b/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp index 028eb5e8f7..438bed21b3 100644 --- a/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp +++ b/src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index d7d06a2e3a..4314374866 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp index 9af23f17dc..4ab9d87288 100644 --- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp index d41ab5776a..d97dbdb37a 100644 --- a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Events/CMakeLists.txt b/src/server/scripts/Events/CMakeLists.txt index 0fad0276a8..1c9e5cfe8e 100644 --- a/src/server/scripts/Events/CMakeLists.txt +++ b/src/server/scripts/Events/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/Events/childrens_week.cpp b/src/server/scripts/Events/childrens_week.cpp index 9333508276..4b93f5b4fb 100644 --- a/src/server/scripts/Events/childrens_week.cpp +++ b/src/server/scripts/Events/childrens_week.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp index ab7509c7a2..2b670b467e 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h index be2f526892..ac20a305f1 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp index 46008244aa..40798868ad 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp index a68558b9c2..02eed1354b 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_gelihast.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp index 4bff75d8ef..2b0e8ccc45 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/boss_kelris.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp index 458539f1da..b0d6e78205 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CMakeLists.txt b/src/server/scripts/Kalimdor/CMakeLists.txt index f74b809c81..2d1b4b4964 100644 --- a/src/server/scripts/Kalimdor/CMakeLists.txt +++ b/src/server/scripts/Kalimdor/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp index d0a9b23345..5009cce48f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index e82cadeccb..b690a0ed01 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index 8bfdee067b..5616d5fd58 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp index 12e0ae8d19..04e24d0cbc 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp index 18b4dfcc40..3fb4dc554c 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp index 9ad10bdb0f..011101ec69 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h index 123a2bec40..95ec1341d0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp index 28989a39c2..26f41e3f35 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h index c044f55b30..92507fe17b 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp index a92142467e..56894b769f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h index 963948a043..5275c07f63 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index 3c90add442..603808c4c0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp index ecda065fda..ab824a1e3e 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp index 82eed1d0b9..ae448a154f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index c39fbc9079..a902642ac1 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp index 29e2af1be9..6407640c1a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp index 9501197fa3..d891987f7c 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index a73a6b8d99..074ea78183 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h index 44d8691baf..1e10dec1ff 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp index 23259ea250..00324d5ff7 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp index b162f332e0..ff184ccf88 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp index edc1964124..d186844266 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp index 8f3c5812f7..3a041c7be4 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp index 295d6f7f93..a21fa08c63 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index 33b8516657..44cbdec2cb 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h index a6e8fc896c..f35e223045 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp index 9418e209bb..8715f3ca0f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp index 0cc1f37169..f270fd260c 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp index 2e06760444..2befdabe55 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index b8d2cbbaa8..2a22de1565 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index abccbf476e..193ee55322 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h index 1d85bf37f2..cd648e3441 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp index 4ba22f391c..00a622f131 100644 --- a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp +++ b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp index 167f823607..7569946016 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_celebras_the_cursed.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp index 45d1d00bc7..15388e4713 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_landslide.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp index 00a2c40fd3..150458aec6 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp index be610b0f20..9d2fc27f7a 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_princess_theradras.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp index f5739901a8..8b3c2857ad 100644 --- a/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/instance_maraudon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 65d6565ad9..772c77bd01 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp index eb7de8c43f..7e95af5c82 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h b/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h index 049819f9f7..a2ee396a15 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h +++ b/src/server/scripts/Kalimdor/OnyxiasLair/onyxias_lair.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp b/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp index e6974a4f2e..2352fe18cc 100644 --- a/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp +++ b/src/server/scripts/Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp index cec9a6b558..32218742ae 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp index 6fd6b115c0..66f2f342b6 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp index dfb3d1882b..0b9bdb87bc 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp index 73f93fa9ae..b68ccf9a69 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_tuten_kash.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp index 6347da4499..f8e107c0c5 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index d6908384a7..b579f9fc60 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h index cb1b56c267..6108d13569 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp index b57d1b78de..bea6555a41 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp index f4a7e1f418..ed683cc4af 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2013 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h index eb9115f19c..32f5c43ae9 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h +++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp index beada0509c..04d86a87f1 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp index 9dedd9da3b..4b6622e43c 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp index 2556530497..69ae561e74 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp index 8ae1959a0d..7748da2159 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index 8ccc5f0b4c..f118b3f985 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp index f421033419..73a6234ceb 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp index d16a86f350..106d9d0515 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h index 1d9440aadc..3455c6eaae 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp index 9673ccf516..06c4b46f38 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index 6016893a78..e024180775 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp index c086489cb1..2e67d1280f 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp index dd4be9ebc6..3dc33103e0 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp index 3bbcdfdc7a..fab2e8b7c7 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp index 2d9af5792e..cc7aca1a76 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp index 05ec05873f..abfbc8162d 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index b39ce0307a..e8bd52a809 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp index 5d9c5847cb..595eadd6d2 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp index 46036765a7..8d18a0cd43 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp index a06242b4b1..3bab621bfc 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h index 49b817a03c..fa1de26eca 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp index 49a3b70413..ddcdb4fbd5 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/instance_wailing_caverns.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp index 126f79b3b9..63c56e2941 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h index 99b108aac8..7f77e12eea 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h +++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp index a0aeed8974..cfb7b9090a 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/boss_zum_rah.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* 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 diff --git a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp index 7bd197774b..e6e5a7ce16 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/instance_zulfarrak.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp index 025ba8d6bb..440d34babb 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/boss_azuregos.cpp b/src/server/scripts/Kalimdor/boss_azuregos.cpp index b95b2fa755..6fd1929865 100644 --- a/src/server/scripts/Kalimdor/boss_azuregos.cpp +++ b/src/server/scripts/Kalimdor/boss_azuregos.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp index b8e6bfb85e..52a83c02a8 100644 --- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp +++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp index d6aa943123..1ed95c16a0 100644 --- a/src/server/scripts/Kalimdor/zone_azshara.cpp +++ b/src/server/scripts/Kalimdor/zone_azshara.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 52e32d3d37..65a2a14c52 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index 0ae870b27e..273e81d83c 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp index 4cf5cbc956..b1399fae0b 100644 --- a/src/server/scripts/Kalimdor/zone_darkshore.cpp +++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index bb17de4fd6..621e0b0a58 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_durotar.cpp b/src/server/scripts/Kalimdor/zone_durotar.cpp index 2d1a10265c..05caf9cca3 100644 --- a/src/server/scripts/Kalimdor/zone_durotar.cpp +++ b/src/server/scripts/Kalimdor/zone_durotar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index fba0956ccf..9df9f0b604 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_felwood.cpp b/src/server/scripts/Kalimdor/zone_felwood.cpp index 91b9ce0801..bce9d62105 100644 --- a/src/server/scripts/Kalimdor/zone_felwood.cpp +++ b/src/server/scripts/Kalimdor/zone_felwood.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_feralas.cpp b/src/server/scripts/Kalimdor/zone_feralas.cpp index 20cc0ef703..3e67a95b50 100644 --- a/src/server/scripts/Kalimdor/zone_feralas.cpp +++ b/src/server/scripts/Kalimdor/zone_feralas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index c7decd3e28..083662df7b 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp index bf9b736f02..ac26aa1f81 100644 --- a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp +++ b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index 34f3ff535c..cc285ab991 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp index 32b7967401..6e374fe2c5 100644 --- a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp +++ b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp index efd47bf3e4..22b4c86cbc 100644 --- a/src/server/scripts/Kalimdor/zone_tanaris.cpp +++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index bb54ae08d7..852cd62c27 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp index 984d4fbba2..85c3a62123 100644 --- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp +++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp index 7ebbb52bcd..02ea032c0c 100644 --- a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp +++ b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp index d8ead179c1..9cc7aa1752 100644 --- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp +++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index 53eadd4a38..dcbc016e18 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h index fafe363e3f..4d1be62554 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp index 0dc52c29ce..d7c5731433 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp index 61a48667c3..a1846094b4 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index d8ebfbbd74..2e9c0698a0 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp index 240e8a7b95..ab09dd4571 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp index bb190e94cc..e25f64f61a 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp index c482a156a9..01958f1529 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h index f91ad2eb27..cc45488215 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 3b6e88b7c2..16cfb30e2d 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index 13c37f02ad..ff2588d204 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index 516bf18636..8c977e892d 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp index 467c6c2c11..9c774a434a 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt index 66d9021223..1dc453ad41 100644 --- a/src/server/scripts/Northrend/CMakeLists.txt +++ b/src/server/scripts/Northrend/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 3382eec685..d2fdfee859 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp index 63969eac35..10e6770418 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index 3b12104a90..8c1e9197fe 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h index 7cb1212f75..62c1ea96d9 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp index 6ddab02487..e53c50f043 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp index eb004505ba..590c1011d5 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 6bc49de531..8b33269632 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index fdca805857..b6c6a4d96d 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index 3130bf20a0..4f8da75d7d 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp index 07f295c681..ae4a5e2a69 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h index 7daa2f68d8..69c27a22ea 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 6d70e56edb..15d1535fe9 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index e375a0acfd..c10eb0f8a8 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 512016c6ee..154f14d1fa 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index cacef991ea..00900d440c 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index 96dc3725ea..4ee8dcfb74 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h index 836743626e..980da30321 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index 05f608d28e..c89510211b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2010 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index f50a26eae2..1e860fb6ec 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index 10090cbf9a..2fba0c2af4 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2010 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index c56a49cb92..5836514dcf 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2010 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index ae5ea2c6de..774c537ca2 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2010 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index 23bfd773a9..bcfe5e29ab 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index 974bd4672f..0ffe74932e 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp index 723a54e0c5..9bd02505d8 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index 926ee6efec..ce722e391d 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp index a3dbc11e8a..4d83992be7 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index 055dffd534..395ffa8409 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h index 98d23c024a..d7409732f7 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h +++ b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp index e45882187e..c84771317a 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index 620eb54ffa..e2c038f89f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index d5f0075703..055d0a07f4 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index 96a0b856d5..322f68fa11 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h index ddbc117e7f..47a2971a69 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp index db7628ebad..cd4386a796 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index d1bc8eb25e..e50eaa2075 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index d8b09bb2f3..bf597a4493 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 12a745a34b..e595beb10c 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h index d2f9ab5d26..14cc369679 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index fabe54303b..dd48f9f015 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 141dc8415b..13ba10d354 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index c19af1cf79..a565929970 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 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 3e56f9a175..8e9acd57dd 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp index a8c77423ee..e547b84c38 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index f3b70f069c..a39c4518a4 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h index 9781bd0d12..8e2b46cba5 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 0ded2022e8..9e43228dc6 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index f6463611f3..cc68f73b63 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index c1080a9c39..ed2f15c77d 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index d5751a55ae..b76a2ca0ef 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index 1679e98955..9eaa86cc03 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h index 35535ce4b7..1999f84c44 100644 --- a/src/server/scripts/Northrend/Gundrak/gundrak.h +++ b/src/server/scripts/Northrend/Gundrak/gundrak.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index 4438c4ab19..6ec02bfbe3 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index cfeb31d552..f59701b9c2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index a7ac5d1227..bb30d90feb 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 54c2476924..98108d8fce 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index f76c415ab9..ead4467aa5 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index babd444288..917cc7d665 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 78a279b94f..7d95491b28 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 993fc75fcd..1de3884664 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 4c67c0a716..31dd7de96c 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index d03925f734..716da8f9b6 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 8917af0038..3f3fd53bad 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 4fadc0bf8f..5a78490b25 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 4a76dc667e..1dd0d1a681 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index f05fc48c07..1c06b355f9 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h index 224aa6cda4..2af8e7f364 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp index a12e2d0528..7723a37094 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 718c0ebe23..4e80605fc2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index 11fe5f4145..a76c1f722f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index dd9061603c..39c41c935b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index 3ef6a7c15e..3e7de89edd 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp index fb1378f012..9b3d0b7555 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 3778d8d25a..077d088778 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp index 563e5ca9bb..a1d8f6e5e0 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index 36e48d068b..74eacee909 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 89d0e5cfe1..47807ec28c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp index 494c173f5f..086d21120e 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index 0d938122f2..a9ff0d245f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index 7b3a9f8ac7..be41b1c69d 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index 7c85c5f73b..b8ce402a93 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index f94f7b227b..1d12f64a94 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 02a7aa570e..667258ba67 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 5d3b038d41..9c243002c4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 0e572835a5..69666563e9 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index e4d15cf84b..c14ff31bb9 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 33ffea4993..c43be98ad5 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h index d9b921b38a..68f2928afc 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/eye_of_eternity.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index d1f2be5525..6e4cd9c6a6 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index 6d4f4baeac..a61b41c5c5 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index 495cf85b75..75f6b63b9c 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index b849b095ce..ae50e854e4 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp index d40f9fecc6..6d3212e478 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_nexus_commanders.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 41645a6ebb..4ae24d61ef 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp index be9c593b31..6bcc8dc189 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h index c48c732330..db1ed78d5e 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/nexus.h +++ b/src/server/scripts/Northrend/Nexus/Nexus/nexus.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp index 512af5d61a..adc9ff2fbb 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index e67a87558f..b4dbc34006 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index e163ad5ca6..829132a80e 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index 04965bb531..af368ba1a3 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 737a5d5c98..817cf42965 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 3ab9814b5b..e1a4a6ed7b 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.h b/src/server/scripts/Northrend/Nexus/Oculus/oculus.h index 08fc15c575..9ec2dacabc 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.h +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index a1644b07db..1b93b611df 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index 51a036eb02..a98da2c6e3 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp index 453423bd28..0843455fe3 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index 3853b0aedf..f20de459b1 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h index b1b4a3c09c..f40cfc5798 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp index 62079d7a2f..33d4758f5a 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp index e4c4e14e02..7cbd942ae5 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp index dbd7f888f7..2ffe06f0d7 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp index 3bb3360433..9eff8d17ee 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp index 86dbe6c16f..9ce713dae5 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h index df56aadfe2..c016513d87 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp index 227b9c208c..63f4ed2895 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 7618a0b915..457150f881 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index 60b29a9207..833c51eee9 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index 9296097265..eda40f0298 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 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 b31436f656..a587b61cf0 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 6958b5d78a..df5877d922 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 7e005eff30..385f7d6a69 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 4b60107a18..c35a593682 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index a04b53ac49..3398d318d8 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index 92c7d18a06..470ad388ff 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 5c852cd7f2..575d0d1230 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 56628ce7b9..f5337b2dca 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 597067fd81..f898461154 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 4eb5c06b26..8f01c15721 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 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 8545d5b21e..ca8340a987 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index f2edfa816a..51e9c5adb6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index 834ab32864..f9f2f94d58 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index 483beda43e..b72bcbecda 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index ff231a0129..4be4e4919d 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index 52d5761a03..32dcda6f1b 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp index 38fee296be..556756f41a 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index 974ee5b054..6c9f7e215e 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h index b776b1a8c6..3d1b57eda8 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp index acccdb2f91..1af45f3031 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index a2b964cbe6..77b376bf7d 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 263304488b..6804717037 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index cfe8f24577..8e06c1d670 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp index c9202fd700..910ddfbc57 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h index 33fc08065a..2265bc03b0 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp index 96691a290b..b89c11147b 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp index 27345d0dc6..8a316381db 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp index 9c96d7e3f4..8b52add48e 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp index 68be133b67..06ebcbdc2f 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp index 72d5e8a038..988346a282 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h b/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h index 581f7707c8..d86fd58094 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h +++ b/src/server/scripts/Northrend/VaultOfArchavon/vault_of_archavon.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp index d3868b8df9..d247c3b04d 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp index cc27bf5211..ed58d6542b 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index 3c29cc1123..17f101b865 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp index c3b617f819..06e41c178c 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp index 4154241646..31991480d3 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 93e74aaca7..0db7cb2cf4 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index 14d7b5fcd9..2ed632ca07 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 14c3ac58b1..868415d93b 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index fdb4c4dc3f..4c8afb7288 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h index 113a3c46ea..314de0cd42 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.h +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp index fccdc8098b..14d862eca3 100644 --- a/src/server/scripts/Northrend/isle_of_conquest.cpp +++ b/src/server/scripts/Northrend/isle_of_conquest.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 7e56fd6ed4..698fd51041 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp index 2fd5e6e56f..5356276aca 100644 --- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp +++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index f1fb95a891..03af1a6417 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index dc5b75d425..2ec2af8062 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 54b06260e7..0186ff4f00 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index ba69a1385d..765490305d 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 2e426fd77c..ec7acf0d89 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 5d47e7fa4e..f2edccd99b 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index e86e907b55..d29472a308 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index e36930f574..d7eabc3408 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/CMakeLists.txt b/src/server/scripts/OutdoorPvP/CMakeLists.txt index 14f7b9d371..91ce4ce418 100644 --- a/src/server/scripts/OutdoorPvP/CMakeLists.txt +++ b/src/server/scripts/OutdoorPvP/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp index 89f35457a4..214ea537d2 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h index c174c94d0a..b605343ac0 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp index a639962efd..90435e2c0b 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h index 218e61b0c4..71dbd139ea 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPHP.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp index 8664acdfc5..c1528d782c 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h index 07bf6919b7..4ed47c4220 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index d289254137..a0b9351fb7 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h index b528dfd4da..f28fea926f 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp index 0b68a45f8a..1cdb5119fe 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h index e6421678d4..237fee3283 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPTF.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp index 54aa815617..ae75a9e528 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h index 4be0d0eedb..e71fbf7928 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/auchenai_crypts.h b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/auchenai_crypts.h index eb36310222..1f05f25cbd 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/auchenai_crypts.h +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/auchenai_crypts.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp index eba6b25e8e..77a75cd133 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp index 6e43cfa2d0..79e455500b 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp index 21b5c3958d..aded6054f7 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp index a14721fcf3..9de5ec91fe 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp index 5a7bc2f286..60c4c0dd7d 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp index c4128c0769..f072e0caaa 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h b/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h index ff54a0527a..ab31ef8868 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp index aaba6d6711..1db39b68a5 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_anzu.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp index 69ec1a15c3..f4c2de1e20 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp index cf6de2a7be..267a0007a6 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp index 76d59da32c..94cc67a517 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h index a073b71f28..6d7f7fcd09 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/sethekk_halls.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp index 80cc2028cb..2d98fb4319 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp index 594441ae4f..f6e84c01dd 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index 04d3a20d94..841565d427 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp index e1371b0756..7238ca2974 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp index f984272f4d..ac351538ee 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h index 7325ba37e9..765a344311 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.cpp b/src/server/scripts/Outland/BlackTemple/black_temple.cpp index f044fcef5c..0bbcbc7e9a 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/black_temple.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/BlackTemple/black_temple.h b/src/server/scripts/Outland/BlackTemple/black_temple.h index 3c2aa18327..0856639f4c 100644 --- a/src/server/scripts/Outland/BlackTemple/black_temple.h +++ b/src/server/scripts/Outland/BlackTemple/black_temple.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp index 04fc6a58af..9c16379c9f 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_gurtogg_bloodboil.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index f8c031f69e..8f3cbc50e6 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp index 1c9db80bba..aaf72512ae 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index b8b101944b..afc7d3d0fd 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index 25ff1bf953..7e1215488e 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index 3f421683bc..ae4d17bdad 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index f56da23bfe..72eb99bd7d 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp index 0bc6a4f49a..9b33ea88ca 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index b84d2e1f70..e074e3e840 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp index a14be54492..1521b04375 100644 --- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt index 42621b7694..55b0452fb0 100644 --- a/src/server/scripts/Outland/CMakeLists.txt +++ b/src/server/scripts/Outland/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index e56d63e85b..544842b449 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp index 9ec7c88d8f..f0f5de47cd 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index 0292ed6569..e24499c3ae 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp index 253c601e22..8d117f7c3e 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 7c4dbdeaab..ee7dca668a 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp index a8d65cc096..4c9001f66a 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp index d7ba0a3493..c7de8530d8 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h index d3d449c7e8..497f6810c6 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp index d76bd0db04..026b9a491f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp index e9cfc07de1..d29692b572 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp index 8974b560e2..934c046aef 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp index 4cc522c752..bc95813e68 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h index d3a74fc661..8c0359eaaa 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp index 46c2ef22c5..d4b5c4d080 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp index ee35ade355..0900a0ce13 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp index 0d19ffdc49..5a9d8b409a 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp index 03feba69ad..87a07cd1e5 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/the_slave_pens.h b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/the_slave_pens.h index 916ba56182..95e6e44121 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/the_slave_pens.h +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/the_slave_pens.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp index adefcc041f..3375372ab4 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp index 47e0769165..4c8eda2b1a 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp index b2c76b5b22..acf542d788 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp index 9a56b2e6e0..aa519f1a8c 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp index 88dbeff09f..9868c41469 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/GruulsLair/gruuls_lair.h b/src/server/scripts/Outland/GruulsLair/gruuls_lair.h index 40ed13ad88..dad419e10d 100644 --- a/src/server/scripts/Outland/GruulsLair/gruuls_lair.h +++ b/src/server/scripts/Outland/GruulsLair/gruuls_lair.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp index e97b004df0..9b23f45818 100644 --- a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp +++ b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h index a44854a3c7..92c8eb4ca4 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index 77fe17e483..9c277f1350 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp index 1ed81f7741..f191a0c3ad 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp index 454da98364..98f9987732 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp index 212471002b..f021a876b8 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp index 364403acaa..435c0807d3 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index 749f5cbf88..4e20e6b095 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp index 774c5fcc87..41d94b6092 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h index f41b76a1a0..5624e910b0 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp index 4d45845c64..a41eba3a77 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index d95026faa9..f18a1022f4 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp index a1bac019e7..fd591d5f88 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h index e4d9f12124..d023d5f319 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp index dfc5f5992a..499550945c 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp index a950882edd..83218e8f00 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp index 9f7592a9ee..4faab709e1 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp index 5cfae286f9..8fc6ba084b 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp index f47e191c11..a327a02e9a 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h index 894cc9c40a..b78bb868e4 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 48508aa479..7f3a908b83 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp index ff9bdf1527..9fd1c5c738 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 2d99fd9bac..e5812390bd 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index 1aa7d5298e..0c0c6e8785 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp index 173e0596be..0d54d8fc22 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp index d97ef766dd..d9f64e0ef6 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h index ca60e14e92..3df28dda89 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h +++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp index ccc8cf110a..7a18e631cf 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp index 49de90e200..9b0f154eba 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp index ec2985b705..861436ffbb 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index cca11f2a27..3aa2674aec 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp index 6bb73d6d26..03827bcbae 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp index b2d6331502..77018c6f43 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h index 6984d16af4..b48fdbd9df 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index 9ffc151b3b..cab5b9efbc 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h index 8fb286855f..720f845fe4 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp index 6eb386f8f4..354003def5 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index 03e2154792..f203780dbc 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp index a8025198ba..fd33b5c1da 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp index f4fc51a7ef..cb0126e96e 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp index 515ede7ea6..2d8654a9b4 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp index e8b9c5cc1c..d57a780e1f 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp index 4377067e56..09967c3b35 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp index 1be87c9fb1..5070d9f1de 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp index 8ed1166fbb..163ef657eb 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp index a918ff5cd0..856649c6c5 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp index 2ee65c890c..60864c012c 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h index efa27b8c66..71172eaf62 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h +++ b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp index cbef6d217c..d4f0637c0d 100644 --- a/src/server/scripts/Outland/boss_doomlord_kazzak.cpp +++ b/src/server/scripts/Outland/boss_doomlord_kazzak.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/boss_doomwalker.cpp b/src/server/scripts/Outland/boss_doomwalker.cpp index e6835c8865..56313fd58b 100644 --- a/src/server/scripts/Outland/boss_doomwalker.cpp +++ b/src/server/scripts/Outland/boss_doomwalker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index aaf006f6c5..30bf085be4 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index 0a9f8640ad..b1ac2d4334 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index 81a3169352..40cc7bafa5 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 8266e80e7b..d35dedb5d2 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 318214978a..7f5d2b95dc 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index fa3ef9e863..c734d00007 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index d948862431..06a8af947b 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp index 0dc12c8f4c..48bbb7bad4 100644 --- a/src/server/scripts/Outland/zone_zangarmarsh.cpp +++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Pet/CMakeLists.txt b/src/server/scripts/Pet/CMakeLists.txt index a0d165f5af..9ca268a9a3 100644 --- a/src/server/scripts/Pet/CMakeLists.txt +++ b/src/server/scripts/Pet/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 95364c5ae0..80b3a00774 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index f11039c60d..35455bc474 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp index 1904d7ce18..321e44c860 100644 --- a/src/server/scripts/Pet/pet_hunter.cpp +++ b/src/server/scripts/Pet/pet_hunter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 14d2687c29..8bcc1fd80d 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Pet/pet_priest.cpp b/src/server/scripts/Pet/pet_priest.cpp index a4e780349e..61ac54f8ac 100644 --- a/src/server/scripts/Pet/pet_priest.cpp +++ b/src/server/scripts/Pet/pet_priest.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Pet/pet_shaman.cpp b/src/server/scripts/Pet/pet_shaman.cpp index e80957f1aa..1feec353c2 100644 --- a/src/server/scripts/Pet/pet_shaman.cpp +++ b/src/server/scripts/Pet/pet_shaman.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/CMakeLists.txt b/src/server/scripts/Spells/CMakeLists.txt index b434c6b76c..7434d98cf4 100644 --- a/src/server/scripts/Spells/CMakeLists.txt +++ b/src/server/scripts/Spells/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 88271dc713..59caf4b7f7 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index d6e5dc1a2a..89f7d7e0d7 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index ca8c9a9ef9..c66abf7252 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index e29f87a5ff..94f12d8cda 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 0ca4112b28..abf4c6c1ad 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index f0b6c0945c..9475da91a7 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index c45442e1f8..d08968fbf5 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 197d55486a..9f6b494732 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_pet.cpp b/src/server/scripts/Spells/spell_pet.cpp index a0664a2ea0..7393a7d3bc 100644 --- a/src/server/scripts/Spells/spell_pet.cpp +++ b/src/server/scripts/Spells/spell_pet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index b5c3b26f1b..ecf5b7b5ac 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 8af97e46de..3121a18734 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 23a6cdee8a..3ca2db40d6 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 5564a8275c..c8b0264995 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index a2bbfdc246..7cc6fe888e 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index c7839a5960..d224c234cb 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/World/CMakeLists.txt b/src/server/scripts/World/CMakeLists.txt index 56b8a3209a..17b3f2d849 100644 --- a/src/server/scripts/World/CMakeLists.txt +++ b/src/server/scripts/World/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index 310284a046..a97df93bed 100644 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/World/action_ip_logger.cpp b/src/server/scripts/World/action_ip_logger.cpp index f0ffbe1c7f..f7ed11569a 100644 --- a/src/server/scripts/World/action_ip_logger.cpp +++ b/src/server/scripts/World/action_ip_logger.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/World/areatrigger_scripts.cpp b/src/server/scripts/World/areatrigger_scripts.cpp index 1ad09eb65b..1ac819cc11 100644 --- a/src/server/scripts/World/areatrigger_scripts.cpp +++ b/src/server/scripts/World/areatrigger_scripts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 40aa759caf..1f89720803 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/World/chat_log.cpp b/src/server/scripts/World/chat_log.cpp index 87dba58667..cbc7845f28 100644 --- a/src/server/scripts/World/chat_log.cpp +++ b/src/server/scripts/World/chat_log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp index 9e72045569..c5b53368bc 100644 --- a/src/server/scripts/World/duel_reset.cpp +++ b/src/server/scripts/World/duel_reset.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index f3accdf4c7..ef4a2b0e32 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/World/guards.cpp b/src/server/scripts/World/guards.cpp index ff0b13757b..e44feff10c 100644 --- a/src/server/scripts/World/guards.cpp +++ b/src/server/scripts/World/guards.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp index e8aa9cf194..f4241ba081 100644 --- a/src/server/scripts/World/item_scripts.cpp +++ b/src/server/scripts/World/item_scripts.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/World/mob_generic_creature.cpp b/src/server/scripts/World/mob_generic_creature.cpp index dfb7d62bc7..b3d751ea7c 100644 --- a/src/server/scripts/World/mob_generic_creature.cpp +++ b/src/server/scripts/World/mob_generic_creature.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/World/npc_innkeeper.cpp b/src/server/scripts/World/npc_innkeeper.cpp index 09f9acf574..d4670bd569 100644 --- a/src/server/scripts/World/npc_innkeeper.cpp +++ b/src/server/scripts/World/npc_innkeeper.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp index 9c05e4e2c0..4dca55d562 100644 --- a/src/server/scripts/World/npc_professions.cpp +++ b/src/server/scripts/World/npc_professions.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 16dc0d0296..37bd4cf9c0 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 22eabd3dd6..a9fdb0d097 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt index b43abb6048..b6e5c8b1c6 100644 --- a/src/server/shared/CMakeLists.txt +++ b/src/server/shared/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/shared/Containers.h b/src/server/shared/Containers.h index 0e5752ccd6..c2ebbf58a1 100644 --- a/src/server/shared/Containers.h +++ b/src/server/shared/Containers.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/shared/DataStores/DBCFileLoader.cpp b/src/server/shared/DataStores/DBCFileLoader.cpp index f1a93b500d..04faa320ef 100644 --- a/src/server/shared/DataStores/DBCFileLoader.cpp +++ b/src/server/shared/DataStores/DBCFileLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/DataStores/DBCFileLoader.h b/src/server/shared/DataStores/DBCFileLoader.h index 1f34f6a4bf..00b1ee54a4 100644 --- a/src/server/shared/DataStores/DBCFileLoader.h +++ b/src/server/shared/DataStores/DBCFileLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/DataStores/DBCStore.h b/src/server/shared/DataStores/DBCStore.h index 1cb67a4235..b93bbdaea1 100644 --- a/src/server/shared/DataStores/DBCStore.h +++ b/src/server/shared/DataStores/DBCStore.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/FactoryHolder.h b/src/server/shared/Dynamic/FactoryHolder.h index c218af9e94..06fd76db09 100644 --- a/src/server/shared/Dynamic/FactoryHolder.h +++ b/src/server/shared/Dynamic/FactoryHolder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/LinkedList.h b/src/server/shared/Dynamic/LinkedList.h index 1971af9141..94f67cac90 100644 --- a/src/server/shared/Dynamic/LinkedList.h +++ b/src/server/shared/Dynamic/LinkedList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/LinkedReference/RefManager.h b/src/server/shared/Dynamic/LinkedReference/RefManager.h index 81b67c6f05..9dbab4f338 100644 --- a/src/server/shared/Dynamic/LinkedReference/RefManager.h +++ b/src/server/shared/Dynamic/LinkedReference/RefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/LinkedReference/Reference.h b/src/server/shared/Dynamic/LinkedReference/Reference.h index 8e3a0854a1..4a473b0f2a 100644 --- a/src/server/shared/Dynamic/LinkedReference/Reference.h +++ b/src/server/shared/Dynamic/LinkedReference/Reference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/ObjectRegistry.h b/src/server/shared/Dynamic/ObjectRegistry.h index 1eb9368be6..9db6381c9b 100644 --- a/src/server/shared/Dynamic/ObjectRegistry.h +++ b/src/server/shared/Dynamic/ObjectRegistry.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/TypeContainer.h b/src/server/shared/Dynamic/TypeContainer.h index 7addf8028b..17ca8c24c4 100644 --- a/src/server/shared/Dynamic/TypeContainer.h +++ b/src/server/shared/Dynamic/TypeContainer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/TypeContainerFunctions.h b/src/server/shared/Dynamic/TypeContainerFunctions.h index bd6d4c348b..c4071b7659 100644 --- a/src/server/shared/Dynamic/TypeContainerFunctions.h +++ b/src/server/shared/Dynamic/TypeContainerFunctions.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/TypeContainerVisitor.h b/src/server/shared/Dynamic/TypeContainerVisitor.h index e10a2331e2..7656e0bb99 100644 --- a/src/server/shared/Dynamic/TypeContainerVisitor.h +++ b/src/server/shared/Dynamic/TypeContainerVisitor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Dynamic/TypeList.h b/src/server/shared/Dynamic/TypeList.h index f035592970..63f1d8d372 100644 --- a/src/server/shared/Dynamic/TypeList.h +++ b/src/server/shared/Dynamic/TypeList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Networking/AsyncAcceptor.h b/src/server/shared/Networking/AsyncAcceptor.h index 832e408db3..260e1c8ea1 100644 --- a/src/server/shared/Networking/AsyncAcceptor.h +++ b/src/server/shared/Networking/AsyncAcceptor.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* 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 diff --git a/src/server/shared/Networking/MessageBuffer.h b/src/server/shared/Networking/MessageBuffer.h index 5f9af33a45..189a56f18b 100644 --- a/src/server/shared/Networking/MessageBuffer.h +++ b/src/server/shared/Networking/MessageBuffer.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* 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 diff --git a/src/server/shared/Networking/NetworkThread.h b/src/server/shared/Networking/NetworkThread.h index 05ca99ea6a..ac216838bc 100644 --- a/src/server/shared/Networking/NetworkThread.h +++ b/src/server/shared/Networking/NetworkThread.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h index 3f58829861..a2f57b5029 100644 --- a/src/server/shared/Networking/Socket.h +++ b/src/server/shared/Networking/Socket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/shared/Networking/SocketMgr.h b/src/server/shared/Networking/SocketMgr.h index 2078ae90c6..ce5bc2d8fc 100644 --- a/src/server/shared/Networking/SocketMgr.h +++ b/src/server/shared/Networking/SocketMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/shared/Packets/ByteBuffer.cpp b/src/server/shared/Packets/ByteBuffer.cpp index 119aca072f..0aa94f9d06 100644 --- a/src/server/shared/Packets/ByteBuffer.cpp +++ b/src/server/shared/Packets/ByteBuffer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index 083f1d6e32..5ebe5258a4 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Packets/WorldPacket.h b/src/server/shared/Packets/WorldPacket.h index 6c31ddf8f3..191dd08476 100644 --- a/src/server/shared/Packets/WorldPacket.h +++ b/src/server/shared/Packets/WorldPacket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Service/ServiceWin32.cpp b/src/server/shared/Service/ServiceWin32.cpp index 3e5e416b1a..b6a1682993 100644 --- a/src/server/shared/Service/ServiceWin32.cpp +++ b/src/server/shared/Service/ServiceWin32.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/shared/Service/ServiceWin32.h b/src/server/shared/Service/ServiceWin32.h index 9d9c732cd2..3d67bfe544 100644 --- a/src/server/shared/Service/ServiceWin32.h +++ b/src/server/shared/Service/ServiceWin32.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt index 78f39e077a..535383ac60 100644 --- a/src/server/worldserver/CMakeLists.txt +++ b/src/server/worldserver/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp index 3901e17f9c..9936143a88 100644 --- a/src/server/worldserver/CommandLine/CliRunnable.cpp +++ b/src/server/worldserver/CommandLine/CliRunnable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/worldserver/CommandLine/CliRunnable.h b/src/server/worldserver/CommandLine/CliRunnable.h index 66617c515a..0ac91bbeb1 100644 --- a/src/server/worldserver/CommandLine/CliRunnable.h +++ b/src/server/worldserver/CommandLine/CliRunnable.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index ab13262143..53c5f25085 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/worldserver/RemoteAccess/RASession.cpp b/src/server/worldserver/RemoteAccess/RASession.cpp index 2d383d685a..59e7b138c4 100644 --- a/src/server/worldserver/RemoteAccess/RASession.cpp +++ b/src/server/worldserver/RemoteAccess/RASession.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/worldserver/RemoteAccess/RASession.h b/src/server/worldserver/RemoteAccess/RASession.h index efd2106fdd..b3271c8033 100644 --- a/src/server/worldserver/RemoteAccess/RASession.h +++ b/src/server/worldserver/RemoteAccess/RASession.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2008-2015 TrinityCore +* Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/worldserver/TCSoap/TCSoap.cpp b/src/server/worldserver/TCSoap/TCSoap.cpp index 18b9d07a8f..df0819c451 100644 --- a/src/server/worldserver/TCSoap/TCSoap.cpp +++ b/src/server/worldserver/TCSoap/TCSoap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/worldserver/TCSoap/TCSoap.h b/src/server/worldserver/TCSoap/TCSoap.h index 70d319b067..c6871f9213 100644 --- a/src/server/worldserver/TCSoap/TCSoap.h +++ b/src/server/worldserver/TCSoap/TCSoap.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * 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 diff --git a/src/server/worldserver/worldserver.rc b/src/server/worldserver/worldserver.rc index 9af2db46ce..a265b032bd 100644 --- a/src/server/worldserver/worldserver.rc +++ b/src/server/worldserver/worldserver.rc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index 350c8becb3..4e787eb3d7 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/tools/map_extractor/CMakeLists.txt b/src/tools/map_extractor/CMakeLists.txt index b10956b326..e86ef6aedc 100644 --- a/src/tools/map_extractor/CMakeLists.txt +++ b/src/tools/map_extractor/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (C) 2005-2009 MaNGOS project -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index c0497a1cef..5d1c31ba2d 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/adt.cpp b/src/tools/map_extractor/adt.cpp index 0667f8c633..f8e6e469ff 100644 --- a/src/tools/map_extractor/adt.cpp +++ b/src/tools/map_extractor/adt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/adt.h b/src/tools/map_extractor/adt.h index cad773fbee..7b3dc07ae8 100644 --- a/src/tools/map_extractor/adt.h +++ b/src/tools/map_extractor/adt.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/dbcfile.cpp b/src/tools/map_extractor/dbcfile.cpp index d481a4902e..1732c25553 100644 --- a/src/tools/map_extractor/dbcfile.cpp +++ b/src/tools/map_extractor/dbcfile.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/dbcfile.h b/src/tools/map_extractor/dbcfile.h index f23d01374c..1149c15133 100644 --- a/src/tools/map_extractor/dbcfile.h +++ b/src/tools/map_extractor/dbcfile.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/loadlib.cpp b/src/tools/map_extractor/loadlib.cpp index 2f31b472b5..9d18e3a66e 100644 --- a/src/tools/map_extractor/loadlib.cpp +++ b/src/tools/map_extractor/loadlib.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h index 6547704d88..683dc5519a 100644 --- a/src/tools/map_extractor/loadlib/loadlib.h +++ b/src/tools/map_extractor/loadlib/loadlib.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/mpq_libmpq.cpp b/src/tools/map_extractor/mpq_libmpq.cpp index 482e3a3abb..8f0da9144e 100644 --- a/src/tools/map_extractor/mpq_libmpq.cpp +++ b/src/tools/map_extractor/mpq_libmpq.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/mpq_libmpq04.h b/src/tools/map_extractor/mpq_libmpq04.h index b9b332f95b..97069177eb 100644 --- a/src/tools/map_extractor/mpq_libmpq04.h +++ b/src/tools/map_extractor/mpq_libmpq04.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/wdt.cpp b/src/tools/map_extractor/wdt.cpp index 108e083006..8e0f7a4606 100644 --- a/src/tools/map_extractor/wdt.cpp +++ b/src/tools/map_extractor/wdt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/map_extractor/wdt.h b/src/tools/map_extractor/wdt.h index 3732fe87db..9a3448fb0a 100644 --- a/src/tools/map_extractor/wdt.h +++ b/src/tools/map_extractor/wdt.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt index 52a7f5504d..4eb416a106 100644 --- a/src/tools/mmaps_generator/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/tools/mmaps_generator/IntermediateValues.cpp b/src/tools/mmaps_generator/IntermediateValues.cpp index 3a7326ec34..e7cc5cfca4 100644 --- a/src/tools/mmaps_generator/IntermediateValues.cpp +++ b/src/tools/mmaps_generator/IntermediateValues.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/IntermediateValues.h b/src/tools/mmaps_generator/IntermediateValues.h index 580e9e4313..cae5f0483c 100644 --- a/src/tools/mmaps_generator/IntermediateValues.h +++ b/src/tools/mmaps_generator/IntermediateValues.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 0c41be65cf..3a63f9718d 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index 432a0ee748..d4b1bdf00f 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h index aa9591fba2..ae87ef4b00 100644 --- a/src/tools/mmaps_generator/PathCommon.h +++ b/src/tools/mmaps_generator/PathCommon.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 992dee7d40..7bec37a64e 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index e525f24fce..02f3fb1cf4 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/TerrainBuilder.h b/src/tools/mmaps_generator/TerrainBuilder.h index f305bf0bd4..98fa691d4d 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.h +++ b/src/tools/mmaps_generator/TerrainBuilder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_assembler/CMakeLists.txt b/src/tools/vmap4_assembler/CMakeLists.txt index 4513bdaf31..c33b299668 100644 --- a/src/tools/vmap4_assembler/CMakeLists.txt +++ b/src/tools/vmap4_assembler/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (C) 2005-2009 MaNGOS project -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/tools/vmap4_assembler/VMapAssembler.cpp b/src/tools/vmap4_assembler/VMapAssembler.cpp index 20fd101c4b..efe705e8b6 100644 --- a/src/tools/vmap4_assembler/VMapAssembler.cpp +++ b/src/tools/vmap4_assembler/VMapAssembler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/CMakeLists.txt b/src/tools/vmap4_extractor/CMakeLists.txt index 6685779daf..55e66b32ea 100644 --- a/src/tools/vmap4_extractor/CMakeLists.txt +++ b/src/tools/vmap4_extractor/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (C) 2005-2009 MaNGOS project -# Copyright (C) 2008-2015 TrinityCore +# 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 diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp index 3a8b349565..3411cbec18 100644 --- a/src/tools/vmap4_extractor/adtfile.cpp +++ b/src/tools/vmap4_extractor/adtfile.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/adtfile.h b/src/tools/vmap4_extractor/adtfile.h index 2ea9b647b1..5b05a61455 100644 --- a/src/tools/vmap4_extractor/adtfile.h +++ b/src/tools/vmap4_extractor/adtfile.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/dbcfile.cpp b/src/tools/vmap4_extractor/dbcfile.cpp index 534d93e5c4..810f8f847d 100644 --- a/src/tools/vmap4_extractor/dbcfile.cpp +++ b/src/tools/vmap4_extractor/dbcfile.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/dbcfile.h b/src/tools/vmap4_extractor/dbcfile.h index 00df092f04..afdbd0107b 100644 --- a/src/tools/vmap4_extractor/dbcfile.h +++ b/src/tools/vmap4_extractor/dbcfile.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/gameobject_extract.cpp b/src/tools/vmap4_extractor/gameobject_extract.cpp index 5757f44b98..989cc0099e 100644 --- a/src/tools/vmap4_extractor/gameobject_extract.cpp +++ b/src/tools/vmap4_extractor/gameobject_extract.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/loadlib/loadlib.h b/src/tools/vmap4_extractor/loadlib/loadlib.h index bc964ab491..687f166767 100644 --- a/src/tools/vmap4_extractor/loadlib/loadlib.h +++ b/src/tools/vmap4_extractor/loadlib/loadlib.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp index 29230db16e..5ae47ff7a5 100644 --- a/src/tools/vmap4_extractor/model.cpp +++ b/src/tools/vmap4_extractor/model.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/model.h b/src/tools/vmap4_extractor/model.h index 6292bf53bf..ad6b59ced4 100644 --- a/src/tools/vmap4_extractor/model.h +++ b/src/tools/vmap4_extractor/model.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/modelheaders.h b/src/tools/vmap4_extractor/modelheaders.h index 218d07ccbb..b09851ba54 100644 --- a/src/tools/vmap4_extractor/modelheaders.h +++ b/src/tools/vmap4_extractor/modelheaders.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/mpq_libmpq.cpp b/src/tools/vmap4_extractor/mpq_libmpq.cpp index f3eb3da96b..690600867d 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq.cpp +++ b/src/tools/vmap4_extractor/mpq_libmpq.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/mpq_libmpq04.h b/src/tools/vmap4_extractor/mpq_libmpq04.h index 4c8b4d376c..97b77d4643 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq04.h +++ b/src/tools/vmap4_extractor/mpq_libmpq04.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/vec3d.h b/src/tools/vmap4_extractor/vec3d.h index 211f5f26c7..1e042cfb42 100644 --- a/src/tools/vmap4_extractor/vec3d.h +++ b/src/tools/vmap4_extractor/vec3d.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 78d6e86358..d9aa864334 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/vmapexport.h b/src/tools/vmap4_extractor/vmapexport.h index f105b3dd9d..8dcf01a1d5 100644 --- a/src/tools/vmap4_extractor/vmapexport.h +++ b/src/tools/vmap4_extractor/vmapexport.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp index 4e0b7b9770..c78ea95055 100644 --- a/src/tools/vmap4_extractor/wdtfile.cpp +++ b/src/tools/vmap4_extractor/wdtfile.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/wdtfile.h b/src/tools/vmap4_extractor/wdtfile.h index 81e84b36d1..2fab77f318 100644 --- a/src/tools/vmap4_extractor/wdtfile.h +++ b/src/tools/vmap4_extractor/wdtfile.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index 80dfbb97c5..2a8d053bbb 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/vmap4_extractor/wmo.h b/src/tools/vmap4_extractor/wmo.h index 8c91393c3a..5071228947 100644 --- a/src/tools/vmap4_extractor/wmo.h +++ b/src/tools/vmap4_extractor/wmo.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2015 TrinityCore + * Copyright (C) 2008-2016 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it From 55b3b1412556cf16762e5c3d45e78e1dabbde314 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Fri, 1 Jan 2016 13:31:35 +0100 Subject: [PATCH 465/524] Update missing copyright note for 2016 in 923a368ac7df0998abd66cc69c458146da4098ba --- doc/UnixInstall.txt | 2 +- revision_data.h.in.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/UnixInstall.txt b/doc/UnixInstall.txt index a97fdd2bd3..c11cc2b074 100644 --- a/doc/UnixInstall.txt +++ b/doc/UnixInstall.txt @@ -1,5 +1,5 @@ = TrinityCore -- Linux installation = -Copyright (C) 2008-2015 TrinityCore (http://www.trinitycore.org/) +Copyright (C) 2008-2016 TrinityCore (http://www.trinitycore.org/) ========================================================= WARNING: THIS DOCUMENTATION IS NOT ALWAYS UP TO DATE. diff --git a/revision_data.h.in.cmake b/revision_data.h.in.cmake index f21c3d26bd..64c754c700 100644 --- a/revision_data.h.in.cmake +++ b/revision_data.h.in.cmake @@ -7,7 +7,7 @@ #define _MYSQL_EXECUTABLE "@MYSQL_EXECUTABLE@" #define _FULL_DATABASE "TDB_full_world_335.60_2015_11_07.sql" #define VER_COMPANYNAME_STR "TrinityCore Developers" - #define VER_LEGALCOPYRIGHT_STR "(c)2008-2015 TrinityCore" + #define VER_LEGALCOPYRIGHT_STR "(c)2008-2016 TrinityCore" #define VER_FILEVERSION 0,0,0 #define VER_FILEVERSION_STR "@rev_hash@ @rev_date@ (@rev_branch@ branch)" #define VER_PRODUCTVERSION VER_FILEVERSION From c812b0dbf5e5f8d64bb95c5ed63e22afeb3357ef Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 1 Jan 2016 16:56:22 +0100 Subject: [PATCH 466/524] DB/Creature: Fix Wretched Captive Orientation For all branchs --- sql/updates/world/2016_01_01_00_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2016_01_01_00_world.sql diff --git a/sql/updates/world/2016_01_01_00_world.sql b/sql/updates/world/2016_01_01_00_world.sql new file mode 100644 index 0000000000..3899183711 --- /dev/null +++ b/sql/updates/world/2016_01_01_00_world.sql @@ -0,0 +1,3 @@ +-- Wretched Captive +UPDATE `waypoint_data` SET `orientation`=4.212851 WHERE `id`=586910; +UPDATE `creature` SET `orientation`=4.212851 WHERE `guid`=58691; From f4e2fb8f79e5a223506d9e514b7adf18c2198bab Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 1 Jan 2016 17:02:58 +0100 Subject: [PATCH 467/524] DB/Quest: Master and Servant Remove unneeded condition to allow quest item usage in all areas as the item can be used only in few npcs Closes #16136 --- sql/updates/world/2016_01_01_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2016_01_01_01_world.sql diff --git a/sql/updates/world/2016_01_01_01_world.sql b/sql/updates/world/2016_01_01_01_world.sql new file mode 100644 index 0000000000..025f2c07f9 --- /dev/null +++ b/sql/updates/world/2016_01_01_01_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `spell_area` WHERE `spell` IN(46023); From b0da73fc5dae5250300c116b271334237c39b531 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Wed, 9 Dec 2015 01:36:07 +0100 Subject: [PATCH 468/524] Core/Scripts/DB: move Wyrmrest Temple taxi FP to SAI Closes #15957 Move NPC gossip menu options from core script to DB SAI script for the 3 local Flight Path NPCs in Wyrmrest Temple: - 26443, Tariolstrasz (Steward of Wyrmrest Temple) - 26949, Torastrasza (Majordomo to the Ruling Council) - 27575, Lord Afrasastrasz (Commander of Wyrmrest Temple Defenses) Additional positive effect: the NPCs are now using verified Blizzlike text in their gossip. Extra credits: @velinath for relevant background information in the issue, @Helias & @ShinDarth for their excellent Keira2 web-based database editor. --- sql/updates/world/2016_01_03_16_world.sql | 37 +++++++++++++++++ src/server/scripts/World/npc_taxi.cpp | 48 ----------------------- 2 files changed, 37 insertions(+), 48 deletions(-) create mode 100644 sql/updates/world/2016_01_03_16_world.sql diff --git a/sql/updates/world/2016_01_03_16_world.sql b/sql/updates/world/2016_01_03_16_world.sql new file mode 100644 index 0000000000..b862cc0e64 --- /dev/null +++ b/sql/updates/world/2016_01_03_16_world.sql @@ -0,0 +1,37 @@ +-- +-- SAI script for Wyrmrest Temple taxi Flight Paths + +SET @Tariolstrasz := 26443; +SET @Torastrasza := 26949; +SET @Afrasastrasz := 27575; + +-- Ground ----> Top: 878 (@Tariolstrasz,9455,0) +-- Ground -> Middle: 883 (@Tariolstrasz,9455,1) +-- Top ----> Ground: 879 (@Torastrasza, 9457,0) +-- Top ----> Middle: 880 (@Torastrasza, 9457,1) +-- Middle ----> Top: 881 (@Afrasastrasz,9563,0) +-- Middle -> Ground: 882 (@Afrasastrasz,9563,1) + +-- Set AIName and remove old ScriptName in creature_template for all 3 NPCs +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName`= '' WHERE `entry` IN (@Tariolstrasz,@Torastrasza,@Afrasastrasz); + +-- Tariolstrasz (Steward of Wyrmrest Temple) +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = @Tariolstrasz); +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 +(@Tariolstrasz, 0, 0, 2, 62, 0, 100, 0, 9455, 0, 0, 0, 52, 878, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Tariolstrasz - On Gossip Option 0 Selected - Activate Taxi Path 878'), +(@Tariolstrasz, 0, 1, 2, 62, 0, 100, 0, 9455, 1, 0, 0, 52, 883, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Tariolstrasz - On Gossip Option 1 Selected - Activate Taxi Path 883'), +(@Tariolstrasz, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Tariolstrasz - On Gossip Options Selected - Close Gossip'); + +-- Torastrasza (Majordomo to the Ruling Council) +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = @Torastrasza); +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 +(@Torastrasza, 0, 0, 2, 62, 0, 100, 0, 9457, 0, 0, 0, 52, 879, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Torastrasza - On Gossip Option 0 Selected - Activate Taxi Path 879'), +(@Torastrasza, 0, 1, 2, 62, 0, 100, 0, 9457, 1, 0, 0, 52, 880, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Torastrasza - On Gossip Option 1 Selected - Activate Taxi Path 880'), +(@Torastrasza, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Torastrasza - On Gossip Options Selected - Close Gossip'); + +-- Lord Afrasastrasz (Commander of Wyrmrest Temple Defenses) +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = @Afrasastrasz); +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 +(@Afrasastrasz, 0, 0, 2, 62, 0, 100, 0, 9563, 0, 0, 0, 52, 881, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Lord Afrasastrasz - On Gossip Option 0 Selected - Activate Taxi Path 881'), +(@Afrasastrasz, 0, 1, 2, 62, 0, 100, 0, 9563, 1, 0, 0, 52, 882, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Lord Afrasastrasz - On Gossip Option 1 Selected - Activate Taxi Path 882'), +(@Afrasastrasz, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Lord Afrasastrasz - On Gossip Options Selected - Close Gossip'); diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 584df5754e..5149811cb2 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -47,12 +47,6 @@ EndScriptData #define GOSSIP_DRAGONHAWK "" #define GOSSIP_VERONIA "Fly me to Manaforge Coruu please" #define GOSSIP_DEESAK "Fly me to Ogri'la please" -#define GOSSIP_AFRASASTRASZ1 "I would like to take a flight to the ground, Lord Of Afrasastrasz." -#define GOSSIP_AFRASASTRASZ2 "My Lord, I must go to the upper floor of the temple." -#define GOSSIP_TARIOLSTRASZ1 "My Lord, I must go to the upper floor of the temple." -#define GOSSIP_TARIOLSTRASZ2 "Can you spare a drake to travel to Lord Of Afrasastrasz, in the middle of the temple?" -#define GOSSIP_TORASTRASZA1 "I would like to see Lord Of Afrasastrasz, in the middle of the temple." -#define GOSSIP_TORASTRASZA2 "Yes, Please. I would like to return to the ground floor of the temple." #define GOSSIP_CRIMSONWING "" class npc_taxi : public CreatureScript @@ -136,24 +130,6 @@ public: if (player->GetReputationRank(1031) >= REP_HONORED) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DEESAK, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 16); break; - case 27575: // Dragonblight - Lord Afrasastrasz - // middle -> ground - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_AFRASASTRASZ1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 17); - // middle -> top - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_AFRASASTRASZ2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 18); - break; - case 26443: // Dragonblight - Tariolstrasz //need to check if quests are required before gossip available (12123, 12124) - // ground -> top - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TARIOLSTRASZ1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 19); - // ground -> middle - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TARIOLSTRASZ2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 20); - break; - case 26949: // Dragonblight - Torastrasza - // top -> middle - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TORASTRASZA1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 21); - // top -> ground - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TORASTRASZA2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22); - break; case 23704: // Dustwallow Marsh - Cassa Crimsonwing if (player->GetQuestStatus(11142) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CRIMSONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); @@ -243,30 +219,6 @@ public: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 41279, true); //TaxiPath 705 (Taxi - Skettis to Skyguard Outpost) break; - case GOSSIP_ACTION_INFO_DEF + 17: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(882); - break; - case GOSSIP_ACTION_INFO_DEF + 18: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(881); - break; - case GOSSIP_ACTION_INFO_DEF + 19: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(878); - break; - case GOSSIP_ACTION_INFO_DEF + 20: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(883); - break; - case GOSSIP_ACTION_INFO_DEF + 21: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(880); - break; - case GOSSIP_ACTION_INFO_DEF + 22: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(879); - break; case GOSSIP_ACTION_INFO_DEF + 23: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 43074, true); //TaxiPath 736 From 35aed8902a8b615635bcd0b6fdfe347b804b01c3 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sat, 2 Jan 2016 23:57:56 +0100 Subject: [PATCH 469/524] Scripts/Taxi: addition to 660f7e72be17464d4874e65cdf5c55825344ddd8 --- src/server/scripts/World/npc_taxi.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 5149811cb2..c982a07f5a 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -219,15 +219,6 @@ public: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 41279, true); //TaxiPath 705 (Taxi - Skettis to Skyguard Outpost) break; - case GOSSIP_ACTION_INFO_DEF + 23: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 43074, true); //TaxiPath 736 - break; - case GOSSIP_ACTION_INFO_DEF + 24: - player->CLOSE_GOSSIP_MENU(); - //player->ActivateTaxiPathTo(738); - player->CastSpell(player, 43136, false); - break; case GOSSIP_ACTION_INFO_DEF + 25: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 42295, true); From 8a0bbc386982612077e6f83f1816b02be757e371 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sun, 3 Jan 2016 00:55:50 +0100 Subject: [PATCH 470/524] Core/Spells: Fixed Enrage armor reduce part --- sql/updates/world/2016_01_03_00_world_335.sql | 4 + src/server/game/Spells/Auras/SpellAuras.cpp | 10 -- src/server/scripts/Spells/spell_druid.cpp | 109 ++++++++++++++++-- 3 files changed, 102 insertions(+), 21 deletions(-) create mode 100644 sql/updates/world/2016_01_03_00_world_335.sql diff --git a/sql/updates/world/2016_01_03_00_world_335.sql b/sql/updates/world/2016_01_03_00_world_335.sql new file mode 100644 index 0000000000..658b180a41 --- /dev/null +++ b/sql/updates/world/2016_01_03_00_world_335.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dru_bear_form_passive'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(1178,'spell_dru_bear_form_passive'), +(9635,'spell_dru_bear_form_passive'); diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 648bc5d691..1b7e0f1ea0 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1596,16 +1596,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b // mods at aura apply or remove switch (GetSpellInfo()->SpellFamilyName) { - case SPELLFAMILY_DRUID: - // Enrage - if ((GetSpellInfo()->SpellFamilyFlags[0] & 0x80000) && GetSpellInfo()->SpellIconID == 961) - { - if (target->HasAura(70726)) // Item - Druid T10 Feral 4P Bonus - if (apply) - target->CastSpell(target, 70725, true); - break; - } - break; case SPELLFAMILY_ROGUE: // Stealth if (GetSpellInfo()->SpellFamilyFlags[0] & 0x00400000) diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 89f7d7e0d7..7b853c3607 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -29,11 +29,17 @@ enum DruidSpells { + SPELL_DRUID_BEAR_FORM_PASSIVE = 1178, + SPELL_DRUID_DIRE_BEAR_FORM_PASSIVE = 9635, + SPELL_DRUID_ENRAGE = 5229, SPELL_DRUID_ENRAGE_MOD_DAMAGE = 51185, + SPELL_DRUID_ENRAGED_DEFENSE = 70725, SPELL_DRUID_GLYPH_OF_TYPHOON = 62135, SPELL_DRUID_IDOL_OF_FERAL_SHADOWS = 34241, SPELL_DRUID_IDOL_OF_WORSHIP = 60774, SPELL_DRUID_INCREASED_MOONFIRE_DURATION = 38414, + SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950, + SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS = 70726, SPELL_DRUID_KING_OF_THE_JUNGLE = 48492, SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, @@ -42,8 +48,58 @@ enum DruidSpells SPELL_DRUID_NATURES_SPLENDOR = 57865, SPELL_DRUID_SURVIVAL_INSTINCTS = 50322, SPELL_DRUID_SAVAGE_ROAR = 62071, - SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178, - SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950, + SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178 +}; + +// 1178 - Bear Form (Passive) +// 9635 - Dire Bear Form (Passive) +class spell_dru_bear_form_passive : public SpellScriptLoader +{ + public: + spell_dru_bear_form_passive() : SpellScriptLoader("spell_dru_bear_form_passive") { } + + class spell_dru_bear_form_passive_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_bear_form_passive_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_ENRAGE) + || !sSpellMgr->GetSpellInfo(SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS)) + return false; + return true; + } + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (!GetUnitOwner()->HasAura(SPELL_DRUID_ENRAGE) || GetUnitOwner()->HasAura(SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS)) + return; + + int32 mod = 0; + switch (GetId()) + { + case SPELL_DRUID_BEAR_FORM_PASSIVE: + mod = -27; + break; + case SPELL_DRUID_DIRE_BEAR_FORM_PASSIVE: + mod = -16; + break; + default: + return; + } + amount += mod; + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_bear_form_passive_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_BASE_RESISTANCE_PCT); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_bear_form_passive_AuraScript(); + } }; // -1850 - Dash @@ -81,33 +137,63 @@ class spell_dru_enrage : public SpellScriptLoader public: spell_dru_enrage() : SpellScriptLoader("spell_dru_enrage") { } - class spell_dru_enrage_SpellScript : public SpellScript + class spell_dru_enrage_AuraScript : public AuraScript { - PrepareSpellScript(spell_dru_enrage_SpellScript); + PrepareAuraScript(spell_dru_enrage_AuraScript); bool Validate(SpellInfo const* /*spellInfo*/) override { if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_KING_OF_THE_JUNGLE) - || !sSpellMgr->GetSpellInfo(SPELL_DRUID_ENRAGE_MOD_DAMAGE)) + || !sSpellMgr->GetSpellInfo(SPELL_DRUID_ENRAGE_MOD_DAMAGE) + || !sSpellMgr->GetSpellInfo(SPELL_DRUID_ENRAGED_DEFENSE) + || !sSpellMgr->GetSpellInfo(SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS)) return false; return true; } - void OnHit() + void RecalculateBaseArmor() { - if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0)) - GetHitUnit()->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true); + Unit::AuraEffectList const& auras = GetTarget()->GetAuraEffectsByType(SPELL_AURA_MOD_BASE_RESISTANCE_PCT); + for (Unit::AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i) + { + SpellInfo const* spellInfo = (*i)->GetSpellInfo(); + // Dire- / Bear Form (Passive) + if (spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && spellInfo->SpellFamilyFlags.HasFlag(0x0, 0x0, 0x2)) + (*i)->RecalculateAmount(); + } + } + + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0)) + target->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true); + + // Item - Druid T10 Feral 4P Bonus + if (target->HasAura(SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS)) + target->CastSpell(target, SPELL_DRUID_ENRAGED_DEFENSE, true); + + RecalculateBaseArmor(); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE); + GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_ENRAGED_DEFENSE); + + RecalculateBaseArmor(); } void Register() override { - AfterHit += SpellHitFn(spell_dru_enrage_SpellScript::OnHit); + AfterEffectApply += AuraEffectApplyFn(spell_dru_enrage_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_dru_enrage_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE, AURA_EFFECT_HANDLE_REAL); } }; - SpellScript* GetSpellScript() const override + AuraScript* GetAuraScript() const override { - return new spell_dru_enrage_SpellScript(); + return new spell_dru_enrage_AuraScript(); } }; @@ -1089,6 +1175,7 @@ class spell_dru_wild_growth : public SpellScriptLoader void AddSC_druid_spell_scripts() { + new spell_dru_bear_form_passive(); new spell_dru_dash(); new spell_dru_enrage(); new spell_dru_glyph_of_starfire(); From 10757e60f1fbd6ca026c955c7cf687cac1526b8f Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 3 Jan 2016 14:10:55 +0100 Subject: [PATCH 471/524] DB/SAI: Moving some scripts from waypoint_script to SAI Closes #12727 --- sql/updates/world/2016_01_03_01_world.sql | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 sql/updates/world/2016_01_03_01_world.sql diff --git a/sql/updates/world/2016_01_03_01_world.sql b/sql/updates/world/2016_01_03_01_world.sql new file mode 100644 index 0000000000..3ddb56a9c7 --- /dev/null +++ b/sql/updates/world/2016_01_03_01_world.sql @@ -0,0 +1,26 @@ +-- +-- Sergeant Kan'ren, Wretched Captive and Novice Ranger SAI +SET @Sergeant := 16924; +SET @Captive := 16916; +SET @Ranger := 16923; + +UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry` in (@Sergeant, @Captive, @Ranger); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@Sergeant, @Ranger, @Captive) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Sergeant*100 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@Sergeant,0,0,0,1,0,100,0,60000,100000,100000,120000,80,@Sergeant*100,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sergeant Kan'ren - Out of Combat - Action list"), +(@Sergeant*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sergeant Kan'ren - Action list - Say Line 0"), +(@Sergeant*100,9,1,0,0,0,100,0,5000,5000,0,0,5,18,0,0,0,0,0,19,@Captive,10,0,0,0,0,0,"Sergeant Kan'ren - Action list - Captive Play Emote 18"), +(@Sergeant*100,9,2,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,19,@Captive,10,0,0,0,0,0,"Sergeant Kan'ren - Action list - Captive Say Line 0"), +(@Sergeant*100,9,3,0,0,0,100,0,8000,8000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sergeant Kan'ren - Action list - Say Line 1"), +(@Captive,0,0,0,1,0,100,0,14000,14000,14000,14000,5,20,0,0,0,0,0,1,0,0,0,0,0,0,0,"Wretched Captive - Out of Combat - Play Emote 20"), +(@Ranger,0,0,0,1,0,100,0,50000,70000,70000,80000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Ranger - Out of Combat - Say text"); + +UPDATE `creature` SET `movementtype`=0 WHERE `guid`=58691; +UPDATE `creature_addon` SET `path_id`=0 WHERE `guid`=58691; +DELETE FROM `waypoint_data` WHERE `id`=586910; +DELETE FROM `waypoint_scripts` WHERE `id` IN (66, 67, 68, 69, 70); + +DELETE FROM `creature_text` WHERE `entry`=@Ranger; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`,`BroadcastTextID`) VALUES +(@Ranger,0,0, 'I might just have to go hunting for that Wretched beast now that there''s a bounty on his head.',12,1,100,0,0,0, 'Ranger', 12832); From 3af1d9196784759bb69dd59ce26599afdfd277a0 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 3 Jan 2016 21:50:40 +0100 Subject: [PATCH 472/524] DB/Creature: Correct Orbaz Bloodbane creature text (#16168) --- sql/updates/world/2016_01_03_02_world.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 sql/updates/world/2016_01_03_02_world.sql diff --git a/sql/updates/world/2016_01_03_02_world.sql b/sql/updates/world/2016_01_03_02_world.sql new file mode 100644 index 0000000000..79eba012e4 --- /dev/null +++ b/sql/updates/world/2016_01_03_02_world.sql @@ -0,0 +1,9 @@ +-- Issue #16168 +-- Orbaz Bloodbane: Fix incorrect creature texts +-- By: dr-j +UPDATE `creature_text` SET `BroadcastTextId`=31961 WHERE `entry`=31283 AND `groupid`=1 AND `id`=0; +UPDATE `creature_text` SET `BroadcastTextId`=31962 WHERE `entry`=31283 AND `groupid`=2 AND `id`=0; +UPDATE `creature_text` SET `BroadcastTextId`=31963 WHERE `entry`=31283 AND `groupid`=3 AND `id`=0; +UPDATE `creature_text` SET `BroadcastTextId`=31966 WHERE `entry`=31283 AND `groupid`=4 AND `id`=0; +UPDATE `creature_text` SET `BroadcastTextId`=31967 WHERE `entry`=31283 AND `groupid`=5 AND `id`=0; +UPDATE `creature_text` SET `BroadcastTextId`=31964 WHERE `entry`=31283 AND `groupid`=6 AND `id`=0; From 19462efb4ef04d7b988ec55369dd10f00dd1e895 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 3 Jan 2016 22:19:57 +0100 Subject: [PATCH 473/524] DB/Quests: Betrayal (12713) by @dr-j: - Fix "Blight Fog" cast behavior - Fix "Throw Blight Crystal" cast timing --- sql/updates/world/2016_01_03_03_world.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sql/updates/world/2016_01_03_03_world.sql diff --git a/sql/updates/world/2016_01_03_03_world.sql b/sql/updates/world/2016_01_03_03_world.sql new file mode 100644 index 0000000000..1b1766ee55 --- /dev/null +++ b/sql/updates/world/2016_01_03_03_world.sql @@ -0,0 +1,10 @@ +-- Betrayal (Drakuru) fixes: +-- Fix "Blight Fog" cast behavior +-- Fix "Throw Blight Crystal" cast timing +-- By: dr-j +UPDATE `smart_scripts` SET `event_param2`=7500, `event_param3`=10000, `event_param4`=20000 WHERE `entryorguid`=28998 AND `source_type`=0 AND `id`=5 AND `link`=0; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=28998 AND `source_type`=0 AND `id` in(13,14); +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 +(28998, 0, 13, 0, 0, 0, 100, 0, 0, 0, 60000, 60000, 28, 54104, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overlord Drakuru - IC - Remove Aura (Blight Fog'), +(28998, 0, 14, 0, 0, 0, 100, 0, 45000, 45000, 60000, 60000, 11, 54104, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Overlord Drakuru - IC - Cast Blight Fog'); From 615906e51fc76de0a8ef1a625b50077757fbc48f Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 3 Jan 2016 23:16:00 +0000 Subject: [PATCH 474/524] DB/Misc: Victorious Challenger correct faction for http://www.wowhead.com/npc=30012/victorious-challenger This npc should not be hostile unless spoken for via gosip to fight for quest --- sql/updates/world/2016_01_03_04_world.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2016_01_03_04_world.sql diff --git a/sql/updates/world/2016_01_03_04_world.sql b/sql/updates/world/2016_01_03_04_world.sql new file mode 100644 index 0000000000..ffe8eb07fd --- /dev/null +++ b/sql/updates/world/2016_01_03_04_world.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `faction`=2109 WHERE `entry`=30012; From caff65bdb19c9da0f66c9e62abc2e8f408a0a624 Mon Sep 17 00:00:00 2001 From: velinath Date: Sun, 3 Jan 2016 10:35:36 -0500 Subject: [PATCH 475/524] Core/Scripts/DB: move Gryphoneer Windbellow to SAI --- sql/updates/world/2016_01_03_05_world.sql | 25 +++++++++++++++++++++++ src/server/scripts/World/npc_taxi.cpp | 19 ----------------- 2 files changed, 25 insertions(+), 19 deletions(-) create mode 100644 sql/updates/world/2016_01_03_05_world.sql diff --git a/sql/updates/world/2016_01_03_05_world.sql b/sql/updates/world/2016_01_03_05_world.sql new file mode 100644 index 0000000000..4c2fe0817f --- /dev/null +++ b/sql/updates/world/2016_01_03_05_world.sql @@ -0,0 +1,25 @@ +-- Add sniffed gossip texts to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (8095, 8096, 8100); +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 +(8095, 0, 2, 'Show me where I can fly.',12271,1,1,0,0,0,0,'',0), +(8096, 0, 0, 'Send me to Honor Point!',18200,1,1,0,0,0,0,'',0), +(8096, 1, 0, 'Send me to the Abyssal Shelf!',17936,1,1,0,0,0,0,'',0), +(8100, 0, 0, 'Send me to Shatter Point!',17937,1,1,0,0,0,0,'',0); + +-- Migrate NPC to use SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '', `gossip_menu_id` = 8096 WHERE `entry` = 20235; + +-- Condition: Gossip menu ID 0 needs either quest ID 10163 or quest ID 10346 to be incomplete. +-- Condition: Gossip menu ID 1 needs quest ID 10382 to be complete +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`= 15 AND `SourceGroup` = 8096 AND `SourceEntry`IN (0,1); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,8096,0,0,0,9,0,10163,0,0,0,0,'','Gryphoneer Windbellow - Show gossip option 0 if player has taken quest ID 10163'), +(15,8096,0,0,1,9,0,10346,0,0,0,0,'','Gryphoneer Windbellow - Show gossip option 0 if player has taken quest ID 10346'), +(15,8096,1,0,0,28,0,10382,0,0,0,0,'','Gryphoneer Windbellow - Show gossip option 1 if quest ID 10382 is completed'); + +-- Create SmartAI for Gryphoneer Windbellow +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 20235); +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 +(20235,0,0,2,62,0,100,0,8096,0,0,0,11,33899,0,0,0,0,0,7,0,0,0,0,0,0,0,'Gryphoneer Windbellow - On Gossip Option 0 Selected - Cast Spell 33899'), +(20235,0,1,2,62,0,100,0,8096,1,0,0,11,35065,0,0,0,0,0,7,0,0,0,0,0,0,0,'Gryphoneer Windbellow - On Gossip Option 1 Selected - Cast Spell 35065'), +(20235,0,2,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Gryphoneer Windbellow - On Linked Actions - Close Gossip'); diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index c982a07f5a..935aaced04 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -36,8 +36,6 @@ EndScriptData #define GOSSIP_IRONWING "I'd like to take a flight around Stormwind Harbor." #define GOSSIP_DABIREE1 "Fly me to Murketh and Shaadraz Gateways" #define GOSSIP_DABIREE2 "Fly me to Shatter Point" -#define GOSSIP_WINDBELLOW1 "Fly me to The Abyssal Shelf" -#define GOSSIP_WINDBELLOW2 "Fly me to Honor Point" #define GOSSIP_BRACK1 "Fly me to Murketh and Shaadraz Gateways" #define GOSSIP_BRACK2 "Fly me to The Abyssal Shelf" #define GOSSIP_BRACK3 "Fly me to Spinebreaker Post" @@ -84,15 +82,6 @@ public: if (!player->GetQuestRewardStatus(10340)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DABIREE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); break; - case 20235: // Hellfire Peninsula - Gryphoneer Windbellow - //Mission: The Abyssal Shelf || Return to the Abyssal Shelf - if (player->GetQuestStatus(10163) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10346) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WINDBELLOW1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - - //Go to the Front - if (player->GetQuestStatus(10382) != QUEST_STATUS_NONE && !player->GetQuestRewardStatus(10382)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WINDBELLOW2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - break; case 19401: // Hellfire Peninsula - Wing Commander Brack //Mission: The Murketh and Shaadraz Gateways if (player->GetQuestStatus(10129) == QUEST_STATUS_INCOMPLETE) @@ -175,14 +164,6 @@ public: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 35069, true); //TaxiPath 612 (Taxi - Hellfire Peninsula - Expedition Point to Shatter Point) break; - case GOSSIP_ACTION_INFO_DEF + 6: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 33899, true); //TaxiPath 589 (Aerial Assault Flight (Alliance)) - break; - case GOSSIP_ACTION_INFO_DEF + 7: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 35065, true); //TaxiPath 607 (Taxi - Hellfire Peninsula - Shatter Point to Beach Head) - break; case GOSSIP_ACTION_INFO_DEF + 8: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 33659, true); //TaxiPath 584 (Gateways Murket and Shaadraz) From 295f76d77c35ba7ecba067c706e5385cb18bf3e2 Mon Sep 17 00:00:00 2001 From: velinath Date: Sun, 3 Jan 2016 19:01:07 -0500 Subject: [PATCH 476/524] Core/Scripts: remove npc_taxi unused scripts --- .../scripts/Kalimdor/zone_moonglade.cpp | 1 - src/server/scripts/World/npc_taxi.cpp | 62 ------------------- 2 files changed, 63 deletions(-) diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 083662df7b..fbcea95842 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -25,7 +25,6 @@ EndScriptData */ /* ContentData npc_bunthen_plainswind -npc_great_bear_spirit npc_silva_filnaveth npc_clintar_spirit npc_clintar_dreamwalker diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 935aaced04..f107a700fe 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -33,16 +33,9 @@ EndScriptData #define GOSSIP_SUSURRUS "I am ready." #define GOSSIP_NETHER_DRAKE "I'm ready to fly! Take me up, dragon!" #define GOSSIP_BRAZEN "I am ready to go to Durnholde Keep." -#define GOSSIP_IRONWING "I'd like to take a flight around Stormwind Harbor." #define GOSSIP_DABIREE1 "Fly me to Murketh and Shaadraz Gateways" #define GOSSIP_DABIREE2 "Fly me to Shatter Point" -#define GOSSIP_BRACK1 "Fly me to Murketh and Shaadraz Gateways" -#define GOSSIP_BRACK2 "Fly me to The Abyssal Shelf" -#define GOSSIP_BRACK3 "Fly me to Spinebreaker Post" #define GOSSIP_IRENA "Fly me to Skettis please" -#define GOSSIP_CLOUDBREAKER1 "Speaking of action, I've been ordered to undertake an air strike." -#define GOSSIP_CLOUDBREAKER2 "I need to intercept the Dawnblade reinforcements." -#define GOSSIP_DRAGONHAWK "" #define GOSSIP_VERONIA "Fly me to Manaforge Coruu please" #define GOSSIP_DEESAK "Fly me to Ogri'la please" #define GOSSIP_CRIMSONWING "" @@ -70,9 +63,6 @@ public: case 18725: // Old Hillsbrad Foothills - Brazen player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BRAZEN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); break; - case 29154: // Stormwind City - Thargold Ironwing - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_IRONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - break; case 19409: // Hellfire Peninsula - Wing Commander Dabir'ee //Mission: The Murketh and Shaadraz Gateways if (player->GetQuestStatus(10146) == QUEST_STATUS_INCOMPLETE) @@ -82,34 +72,10 @@ public: if (!player->GetQuestRewardStatus(10340)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DABIREE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); break; - case 19401: // Hellfire Peninsula - Wing Commander Brack - //Mission: The Murketh and Shaadraz Gateways - if (player->GetQuestStatus(10129) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BRACK1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - - //Mission: The Abyssal Shelf || Return to the Abyssal Shelf - if (player->GetQuestStatus(10162) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10347) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BRACK2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - - //Spinebreaker Post - if (player->GetQuestStatus(10242) == QUEST_STATUS_COMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BRACK3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - break; case 23413: // Blade's Edge Mountains - Skyguard Handler Irena if (player->GetReputationRank(1031) >= REP_HONORED) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_IRENA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); break; - case 25059: // Isle of Quel'Danas - Ayren Cloudbreaker - if (player->GetQuestStatus(11532) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(11533) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CLOUDBREAKER1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - - if (player->GetQuestStatus(11542) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(11543) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CLOUDBREAKER2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); - break; - case 25236: // Isle of Quel'Danas - Unrestrained Dragonhawk - if (player->GetQuestStatus(11542) == QUEST_STATUS_COMPLETE || player->GetQuestStatus(11543) == QUEST_STATUS_COMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DRAGONHAWK, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14); - break; case 20162: // Netherstorm - Veronia //Behind Enemy Lines if (player->GetQuestStatus(10652) != QUEST_STATUS_REWARDED) @@ -152,10 +118,6 @@ public: player->ActivateTaxiPathTo(534); //TaxiPath 534 } break; - case GOSSIP_ACTION_INFO_DEF + 3: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 53335, true); //TaxiPath 1041 (Stormwind Harbor) - break; case GOSSIP_ACTION_INFO_DEF + 4: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 33768, true); //TaxiPath 585 (Gateways Murket and Shaadraz) @@ -164,34 +126,10 @@ public: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 35069, true); //TaxiPath 612 (Taxi - Hellfire Peninsula - Expedition Point to Shatter Point) break; - case GOSSIP_ACTION_INFO_DEF + 8: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 33659, true); //TaxiPath 584 (Gateways Murket and Shaadraz) - break; - case GOSSIP_ACTION_INFO_DEF + 9: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 33825, true); //TaxiPath 587 (Aerial Assault Flight (Horde)) - break; - case GOSSIP_ACTION_INFO_DEF + 10: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 34578, true); //TaxiPath 604 (Taxi - Reaver's Fall to Spinebreaker Ridge) - break; case GOSSIP_ACTION_INFO_DEF + 11: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 41278, true); //TaxiPath 706 break; - case GOSSIP_ACTION_INFO_DEF + 12: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 45071, true); //TaxiPath 779 - break; - case GOSSIP_ACTION_INFO_DEF + 13: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 45113, true); //TaxiPath 784 - break; - case GOSSIP_ACTION_INFO_DEF + 14: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 45353, true); //TaxiPath 788 - break; case GOSSIP_ACTION_INFO_DEF + 15: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 34905, true); //TaxiPath 606 From 0f0a51b87a1c8c4c0809b9328a3ddb606b138c4b Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 3 Jan 2016 14:38:36 +0100 Subject: [PATCH 477/524] Game/Maps: Instance handling follow-up: - Fix a bug where a player could maintain a conflicting non-perm solo bind if they were in the instance when invited to group. Closes #16150. - If a group is created while the leader is in an instance that nobody is bound to, the group will take over the instance and bind to it. This stops the homebind timer when reforming group after disconnects and the like. --- src/server/game/Entities/Player/Player.cpp | 25 ------------ src/server/game/Entities/Player/Player.h | 1 - src/server/game/Groups/Group.cpp | 45 +++++++++++++++++++--- src/server/game/Groups/Group.h | 1 + src/server/game/Maps/Map.cpp | 2 +- src/server/game/Maps/MapInstanced.cpp | 4 ++ 6 files changed, 45 insertions(+), 33 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 14b555adde..f9b9acea2f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -18594,31 +18594,6 @@ void Player::SendSavedInstances() } } -/// convert the player's binds to the group -void Player::ConvertInstancesToGroup(Player* player, Group* group, bool switchLeader) -{ - // copy all binds to the group, when changing leader it's assumed the character - // will not have any solo binds - - for (uint8 i = 0; i < MAX_DIFFICULTY; ++i) - { - for (BoundInstancesMap::iterator itr = player->m_boundInstances[i].begin(); itr != player->m_boundInstances[i].end();) - { - if (!switchLeader || !group->GetBoundInstance(itr->second.save->GetDifficulty(), itr->first)) - group->BindToInstance(itr->second.save, itr->second.perm, false); - - // permanent binds are not removed - if (switchLeader && !itr->second.perm) - { - // increments itr in call - player->UnbindInstance(itr, Difficulty(i), false); - } - else - ++itr; - } - } -} - bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report) { if (!IsGameMaster() && ar) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0072ec4125..32a4fec27f 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2116,7 +2116,6 @@ class Player : public Unit, public GridObject bool HasPendingBind() const { return _pendingBindId > 0; } void SendRaidInfo(); void SendSavedInstances(); - static void ConvertInstancesToGroup(Player* player, Group* group, bool switchLeader); bool Satisfy(AccessRequirement const* ar, uint32 target_map, bool report = false); bool CheckInstanceValidity(bool /*isLogin*/); bool CheckInstanceCount(uint32 instanceId) const; diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index d0e70eb3db..8ebc71b014 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -148,10 +148,9 @@ bool Group::Create(Player* leader) CharacterDatabase.Execute(stmt); + Group::ConvertLeaderInstancesToGroup(leader, this, false); ASSERT(AddMember(leader)); // If the leader can't be added to a new group because it appears full, something is clearly wrong. - - Player::ConvertInstancesToGroup(leader, this, false); } else if (!AddMember(leader)) return false; @@ -375,9 +374,7 @@ bool Group::AddMember(Player* player) player->SetGroup(this, subGroup); // if the same group invites the player back, cancel the homebind timer - InstanceGroupBind* bind = GetBoundInstance(player); - if (bind && bind->save->GetInstanceId() == player->GetInstanceId()) - player->m_InstanceValid = true; + player->m_InstanceValid = player->CheckInstanceValidity(false); if (!isRaidGroup()) // reset targetIcons for non-raid-groups { @@ -654,7 +651,7 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid) } // Copy the permanent binds from the new leader to the group - Player::ConvertInstancesToGroup(newLeader, this, true); + Group::ConvertLeaderInstancesToGroup(newLeader, this, true); // Update the group leader PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_LEADER); @@ -680,6 +677,42 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid) BroadcastPacket(&data, true); } +/// convert the player's binds to the group +void Group::ConvertLeaderInstancesToGroup(Player* player, Group* group, bool switchLeader) +{ + // copy all binds to the group, when changing leader it's assumed the character + // will not have any solo binds + for (uint8 i = 0; i < MAX_DIFFICULTY; ++i) + { + for (Player::BoundInstancesMap::iterator itr = player->m_boundInstances[i].begin(); itr != player->m_boundInstances[i].end();) + { + if (!switchLeader || !group->GetBoundInstance(itr->second.save->GetDifficulty(), itr->first)) + group->BindToInstance(itr->second.save, itr->second.perm, false); + + // permanent binds are not removed + if (switchLeader && !itr->second.perm) + { + // increments itr in call + player->UnbindInstance(itr, Difficulty(i), false); + } + else + ++itr; + } + } + + /* if group leader is in a non-raid dungeon map and nobody is actually bound to this map then the group can "take over" the instance * + * (example: two-player group disbanded by disconnect where the player reconnects within 60 seconds and the group is reformed) */ + if (Map* playerMap = player->GetMap()) + if (!switchLeader && playerMap->IsNonRaidDungeon()) + if (InstanceSave* save = sInstanceSaveMgr->GetInstanceSave(playerMap->GetInstanceId())) + if (save->GetGroupCount() == 0 && save->GetPlayerCount() == 0) + { + TC_LOG_DEBUG("maps", "Group::ConvertLeaderInstancesToGroup: Group for player %s is taking over unbound instance map %d with Id %d", player->GetName().c_str(), playerMap->GetId(), playerMap->GetInstanceId()); + // if nobody is saved to this, then the save wasn't permanent + group->BindToInstance(save, false, false); + } +} + void Group::Disband(bool hideDestroy /* = false */) { sScriptMgr->OnGroupDisband(this); diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 4d2ee57c9b..42fd9b582e 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -194,6 +194,7 @@ class Group bool AddMember(Player* player); bool RemoveMember(ObjectGuid guid, const RemoveMethod &method = GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker = ObjectGuid::Empty, const char* reason = NULL); void ChangeLeader(ObjectGuid guid); + static void ConvertLeaderInstancesToGroup(Player* player, Group* group, bool switchLeader); void SetLootMethod(LootMethod method); void SetLooterGuid(ObjectGuid guid); void SetMasterLooterGuid(ObjectGuid guid); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 27fb55bb4d..a2cb84359f 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3030,7 +3030,7 @@ bool InstanceMap::AddPlayerToMap(Player* player) { if (group) { - // solo saves should be reset when entering a group + // solo saves should have been reset when the map was loaded InstanceGroupBind* groupBind = group->GetBoundInstance(this); if (playerBind && playerBind->save != mapSave) { diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp index 74d490bf94..47b9b376b1 100644 --- a/src/server/game/Maps/MapInstanced.cpp +++ b/src/server/game/Maps/MapInstanced.cpp @@ -163,7 +163,11 @@ Map* MapInstanced::CreateInstanceForPlayer(const uint32 mapId, Player* player, u { groupBind = group->GetBoundInstance(this); if (groupBind) + { + // solo saves should be reset when entering a group's instance + player->UnbindInstance(GetId(), player->GetDifficulty(IsRaid())); pSave = groupBind->save; + } } } if (pSave) From d412f2d6d3e4a517de5cdb7ed5a7e33d0575d77f Mon Sep 17 00:00:00 2001 From: treeston Date: Mon, 4 Jan 2016 17:29:42 +0100 Subject: [PATCH 478/524] DB/Creature: Vyragosa/TLPD - Fix linked pool spawn - Fix respawn time to be 6h (instead of current 25sec) Closes #7683. --- sql/updates/world/2016_01_04_00_world.sql | 67 +++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 sql/updates/world/2016_01_04_00_world.sql diff --git a/sql/updates/world/2016_01_04_00_world.sql b/sql/updates/world/2016_01_04_00_world.sql new file mode 100644 index 0000000000..57236a6f66 --- /dev/null +++ b/sql/updates/world/2016_01_04_00_world.sql @@ -0,0 +1,67 @@ +-- Vyragosa (32630) & Time-Lost Proto-Drake (32491) band-aid fix by nelegalno +SET @POOL := 60002; +SET @VYRA := 32630; +SET @TLPD := 32491; + +-- TLPD & Vyragosa set respawn to 6h (current 25 sec) +UPDATE `creature` SET `spawntimesecs`=21600 WHERE `id` IN (@VYRA,@TLPD); + +-- Remove old pool data +DELETE FROM `pool_template` WHERE `entry` IN (@VYRA,@TLPD,@POOL); +DELETE FROM `pool_creature` WHERE `pool_entry` IN (@VYRA,@TLPD,@POOL); +DELETE FROM `pool_pool` WHERE `mother_pool`=@POOL OR `pool_id` IN (@VYRA,@TLPD); + +-- Insert new pool structure +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOL,1,"Vyragosa (32630) & Time-Lost Proto Drake (32491)"), +(@VYRA,1,"Vyragosa (32630)"), +(@TLPD,1,"Time-Lost Proto Drake (32491)"); + +INSERT INTO `pool_pool` (`pool_id`, `mother_pool`, `chance`, `description`) VALUES +(@VYRA,@POOL,80,"Vyragosa (32630)"), +(@TLPD,@POOL,20,"Time-Lost Proto Drake (32491)"); + +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +-- spawns 1-20 for both NPCs are from old pool +(202461,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 1"), +(202462,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 2"), +(202463,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 3"), +(202464,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 4"), +(202465,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 5"), +(202466,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 6"), +(202467,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 7"), +(202468,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 8"), +(202469,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 9"), +(202470,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 10"), +(202471,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 11"), +(202472,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 12"), +(202473,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 13"), +(202474,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 14"), +(202475,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 15"), +(202476,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 16"), +(202477,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 17"), +(202478,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 18"), +(202479,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 19"), +(202480,@TLPD,0,"Time-Lost Proto Drake (32491) - Spawn 20"), +(202441,@VYRA,0,"Vyragosa (32630) - Spawn 1"), +(202442,@VYRA,0,"Vyragosa (32630) - Spawn 2"), +(202443,@VYRA,0,"Vyragosa (32630) - Spawn 3"), +(202444,@VYRA,0,"Vyragosa (32630) - Spawn 4"), +(202445,@VYRA,0,"Vyragosa (32630) - Spawn 5"), +(202446,@VYRA,0,"Vyragosa (32630) - Spawn 6"), +(202447,@VYRA,0,"Vyragosa (32630) - Spawn 7"), +(202448,@VYRA,0,"Vyragosa (32630) - Spawn 8"), +(202449,@VYRA,0,"Vyragosa (32630) - Spawn 9"), +(202450,@VYRA,0,"Vyragosa (32630) - Spawn 10"), +(202451,@VYRA,0,"Vyragosa (32630) - Spawn 11"), +(202452,@VYRA,0,"Vyragosa (32630) - Spawn 12"), +(202453,@VYRA,0,"Vyragosa (32630) - Spawn 13"), +(202454,@VYRA,0,"Vyragosa (32630) - Spawn 14"), +(202455,@VYRA,0,"Vyragosa (32630) - Spawn 15"), +(202456,@VYRA,0,"Vyragosa (32630) - Spawn 16"), +(202457,@VYRA,0,"Vyragosa (32630) - Spawn 17"), +(202458,@VYRA,0,"Vyragosa (32630) - Spawn 18"), +(202459,@VYRA,0,"Vyragosa (32630) - Spawn 19"), +(202460,@VYRA,0,"Vyragosa (32630) - Spawn 20"), +-- spawned in TDB but not in the old pool +(202602,@VYRA,0,"Vyragosa (32630) - Spawn 21"); From f22b1938db5cddcb2a9988ff54dfa08d2fa1aecc Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 4 Jan 2016 22:44:19 +0100 Subject: [PATCH 479/524] Scripts/Commands: Modify ".learn" command to target current Player by default --- src/server/scripts/Commands/cs_learn.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index 9098bc1309..9b553ca479 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -72,7 +72,7 @@ public: static bool HandleLearnCommand(ChatHandler* handler, char const* args) { - Player* targetPlayer = handler->getSelectedPlayer(); + Player* targetPlayer = handler->getSelectedPlayerOrSelf(); if (!targetPlayer) { From f810db72a93e0ef6bee7be121c39440781ec916b Mon Sep 17 00:00:00 2001 From: ariel- Date: Mon, 4 Jan 2016 19:01:02 -0300 Subject: [PATCH 480/524] Fix redundant calculation of spell critical chance, fix spellmods being dropped twice. Closes #7315 --- src/server/game/Spells/Spell.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index cb573f4ec3..0cfcf05c4b 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2359,7 +2359,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) // Do healing and triggers if (m_healing > 0) { - bool crit = caster->IsSpellCrit(unitTarget, m_spellInfo, m_spellSchoolMask); + bool crit = target->crit; uint32 addhealth = m_healing; if (crit) { @@ -2384,7 +2384,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_spellSchoolMask); // Add bonuses and fill damageInfo struct - caster->CalculateSpellDamageTaken(&damageInfo, m_damage, m_spellInfo, m_attackType, target->crit); + caster->CalculateSpellDamageTaken(&damageInfo, m_damage, m_spellInfo, m_attackType, target->crit); caster->DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb); // Send log damage message to client From 841ce54a0dbc4b76ab0068ff08732a068f39f570 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 4 Jan 2016 23:30:46 +0100 Subject: [PATCH 481/524] Scripts/Commands: Fix ".help" command to show commands in alphabetical order --- src/server/game/Scripting/ScriptMgr.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index fbe5febdbb..3fa16cf451 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1042,6 +1042,12 @@ std::vector ScriptMgr::GetChatCommands() table.insert(table.end(), cmds.begin(), cmds.end()); } + // Sort commands in alphabetical order + std::sort(table.begin(), table.end(), [](const ChatCommand& a, const ChatCommand&b) + { + return strcmp(a.Name, b.Name) < 0; + }); + return table; } From 893c63f32039a9d5bf7c225ac918297d9bdc375a Mon Sep 17 00:00:00 2001 From: Duarte Duarte Date: Mon, 4 Jan 2016 22:51:48 +0000 Subject: [PATCH 482/524] Core/DBUpdater: Fix help text download link Change from forums to GH Releases (cherry picked from commit 6b529fcd43dd394a96a5441ab95523bdce3d58d3) --- src/server/database/Updater/DBUpdater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index 529e236d1e..170954a86f 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -311,7 +311,7 @@ bool DBUpdater::Populate(DatabaseWorkerPool& pool) } case LOCATION_DOWNLOAD: { - TC_LOG_ERROR("sql.updates", ">> File \"%s\" is missing, download it from \"http://www.trinitycore.org/f/files/category/1-database/\"" \ + TC_LOG_ERROR("sql.updates", ">> File \"%s\" is missing, download it from \"https://github.com/TrinityCore/TrinityCore/releases\"" \ " and place it in your server directory.", base.filename().generic_string().c_str()); break; } From d27b0ea8a86b31fbc897bf1552249c63cb5e5cd4 Mon Sep 17 00:00:00 2001 From: elecyb Date: Mon, 4 Jan 2016 22:41:28 -0200 Subject: [PATCH 483/524] Core/Player Drop deprecated code and fix bug where a player can have more than one profession specialization. --- src/server/game/Entities/Player/Player.cpp | 38 +++------------------- 1 file changed, 4 insertions(+), 34 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f9b9acea2f..52291cb6bf 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -22602,46 +22602,16 @@ void Player::LearnQuestRewardedSpells(Quest const* quest) if (!found) return; - // prevent learn non first rank unknown profession and second specialization for same profession) uint32 learned_0 = spellInfo->Effects[0].TriggerSpell; - if (sSpellMgr->GetSpellRank(learned_0) > 1 && !HasSpell(learned_0)) + if (!HasSpell(learned_0)) { SpellInfo const* learnedInfo = sSpellMgr->GetSpellInfo(learned_0); if (!learnedInfo) return; - // not have first rank learned (unlearned prof?) - if (!HasSpell(learnedInfo->GetFirstRankSpell()->Id)) - return; - - SpellsRequiringSpellMapBounds spellsRequired = sSpellMgr->GetSpellsRequiredForSpellBounds(learned_0); - for (SpellsRequiringSpellMap::const_iterator itr2 = spellsRequired.first; itr2 != spellsRequired.second; ++itr2) - { - uint32 profSpell = itr2->second; - - // specialization - if (learnedInfo->Effects[0].Effect == SPELL_EFFECT_TRADE_SKILL && learnedInfo->Effects[1].Effect == 0 && profSpell) - { - // search other specialization for same prof - for (PlayerSpellMap::const_iterator itr = m_spells.begin(); itr != m_spells.end(); ++itr) - { - if (itr->second->state == PLAYERSPELL_REMOVED || itr->first == learned_0) - continue; - - SpellInfo const* itrInfo = sSpellMgr->GetSpellInfo(itr->first); - if (!itrInfo) - return; - - // compare only specializations - if (itrInfo->Effects[0].Effect != SPELL_EFFECT_TRADE_SKILL || itrInfo->Effects[1].Effect != 0) - continue; - - // compare same chain spells - if (sSpellMgr->IsSpellRequiringSpell(itr->first, profSpell)) - return; - } - } - } + // profession specialization can be re-learned from npc + if (learnedInfo->Effects[0].Effect == SPELL_EFFECT_TRADE_SKILL && learnedInfo->Effects[1].Effect == 0 && !learnedInfo->SpellLevel) + return; } CastSpell(this, spell_id, true); From f21199dbc98983390563ab69c3900864716a8c1b Mon Sep 17 00:00:00 2001 From: velinath Date: Mon, 4 Jan 2016 19:48:44 -0500 Subject: [PATCH 484/524] Core/Scripts/DB: Migrate Skyguard Handler Irena to SAI --- .../2016_01_04_skyguard_handler_irena.sql | 24 +++++++++++++++++++ src/server/scripts/World/npc_taxi.cpp | 9 ------- 2 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 sql/updates/world/2016_01_04_skyguard_handler_irena.sql diff --git a/sql/updates/world/2016_01_04_skyguard_handler_irena.sql b/sql/updates/world/2016_01_04_skyguard_handler_irena.sql new file mode 100644 index 0000000000..dc1064a75b --- /dev/null +++ b/sql/updates/world/2016_01_04_skyguard_handler_irena.sql @@ -0,0 +1,24 @@ +-- Add gossip texts to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 8718; +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 +(8718, 0, 0, 'Yes, I''d love a ride to Blackwind Landing.',21550,1,1,0,0,0,0,'',0); + +DELETE FROM `npc_text` WHERE `ID` = 10977; +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `Probability0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`) VALUES +(10977, '', 'Hey, comrade. If you get yourself in good with the Skyguard, I can offer you a direct flight to our base, Blackwind Landing, in the Skethyl Mountains.$B$BDo you like my beautiful nether ray? It is lovely.', 21547, 0, 1, 0, 1, 0, 6, 0, 0); +-- Other npc_text (10978) is already set in DB + +-- Migrate NPC to use SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 23413; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14, 15) AND `SourceGroup` = 8718; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,8718,10977,0,0,5,0,1031,224,0,1,0,'','Skyguard Handler Irena - Show gossip menu text below Honored reputation with faction 1031'), +(14,8718,10978,0,0,5,0,1031,224,0,0,0,'','Skyguard Handler Irena - Show gossip menu text above Honored reputation with faction 1031'), +(15,8718,0,0,0,5,0,1031,224,0,0,0,'','Skyguard Handler Irena - Show gossip option 0 if player has reputation Honored or above with faction 1031'); + +-- Create SmartAI for Skyguard Handler Irena +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 23413); +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 +(23413,0,0,1,62,0,100,0,8718,0,0,0,11,41278,0,0,0,0,0,7,0,0,0,0,0,0,0,'Skyguard Handler Irena - On Gossip Option 0 Selected - Cast Spell 41278'), +(23413,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,'Skyguard Handler Irena - On Linked Actions - Close Gossip'); diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index f107a700fe..29b3aa2e4d 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -35,7 +35,6 @@ EndScriptData #define GOSSIP_BRAZEN "I am ready to go to Durnholde Keep." #define GOSSIP_DABIREE1 "Fly me to Murketh and Shaadraz Gateways" #define GOSSIP_DABIREE2 "Fly me to Shatter Point" -#define GOSSIP_IRENA "Fly me to Skettis please" #define GOSSIP_VERONIA "Fly me to Manaforge Coruu please" #define GOSSIP_DEESAK "Fly me to Ogri'la please" #define GOSSIP_CRIMSONWING "" @@ -72,10 +71,6 @@ public: if (!player->GetQuestRewardStatus(10340)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DABIREE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); break; - case 23413: // Blade's Edge Mountains - Skyguard Handler Irena - if (player->GetReputationRank(1031) >= REP_HONORED) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_IRENA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - break; case 20162: // Netherstorm - Veronia //Behind Enemy Lines if (player->GetQuestStatus(10652) != QUEST_STATUS_REWARDED) @@ -126,10 +121,6 @@ public: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 35069, true); //TaxiPath 612 (Taxi - Hellfire Peninsula - Expedition Point to Shatter Point) break; - case GOSSIP_ACTION_INFO_DEF + 11: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 41278, true); //TaxiPath 706 - break; case GOSSIP_ACTION_INFO_DEF + 15: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 34905, true); //TaxiPath 606 From 6861deaae261eba6c779be482e834b31ceda27fe Mon Sep 17 00:00:00 2001 From: Aokromes Date: Tue, 5 Jan 2016 13:11:27 +0100 Subject: [PATCH 485/524] Build/Misc: Clarify the meaning of one setting --- cmake/showoptions.cmake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmake/showoptions.cmake b/cmake/showoptions.cmake index 3136730a6b..110b2f01a6 100644 --- a/cmake/showoptions.cmake +++ b/cmake/showoptions.cmake @@ -56,6 +56,13 @@ else() endif() if( WITH_COREDEBUG ) + message("") + message(" *** WITH_COREDEBUG - WARNING!") + message(" *** additional core debug logs have been enabled!") + message(" *** this setting doesn't help to get better crash logs!") + message(" *** in case you are searching for better crash logs use") + message(" *** -DCMAKE_BUILD_TYPE=RelWithDebug") + message(" *** DO NOT ENABLE IT UNLESS YOU KNOW WHAT YOU'RE DOING!") message("* Use coreside debug : Yes") add_definitions(-DTRINITY_DEBUG) else() From 4f2cd84625e36bb300317b724489e8aa0c2a22df Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 5 Jan 2016 14:30:51 +0000 Subject: [PATCH 486/524] DB/Misc: Sholazar Guardians (Updates) 1) Move the http://www.wowhead.com/spell=52214/rainspeaker-treasures-see-invisibility and http://www.wowhead.com/spell=50735/frenzyheart-chicken-see-invisibility to spell area instead of been cast and removed by quest giver on quest accept and return - this solves the issue of Gods Like Shiny Things, Appeasing the Great Rainstone , Flown the Coop! and Chicken Party not working properly (due to player not been able to see npcs) if player relogged or left zone while had quest uncompleted in log unles quest was abandoned and retaken 2) Someone had put non repeatable flags on some of the events for Guardians since I originally scripted these npcs which resulted in that once guardian and dug up one treasure or threw net at one chicken would not work again, all events on these npcs need to repeatable --- sql/updates/world/2016_01_05_00_world.sql | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 sql/updates/world/2016_01_05_00_world.sql diff --git a/sql/updates/world/2016_01_05_00_world.sql b/sql/updates/world/2016_01_05_00_world.sql new file mode 100644 index 0000000000..3f7f01449f --- /dev/null +++ b/sql/updates/world/2016_01_05_00_world.sql @@ -0,0 +1,20 @@ +DELETE FROM `spell_area` WHERE `spell` IN(52214,50735); + +INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES +(52214, 3711, 12572, 12572, 0, 0, 2, 1, 74, 11), -- Gods Like Shiny Things +(52214, 3711, 12704, 12704, 0, 0, 2, 1, 74, 11), -- Appeasing the Great Rainstone +(50735, 3711, 12532, 12532, 0, 0, 2, 1, 74, 11), -- Flown the Coop! +(50735, 3711, 12702, 12702, 0, 0, 2, 1, 74, 11); -- Chicken Party! + +DELETE FROM `smart_scripts` WHERE `entryorguid`=28138 AND `source_type`=0 AND `id`=3 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28138 AND `source_type`=0 AND `id`=1 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28138 AND `source_type`=0 AND `id`=2 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28138 AND `source_type`=0 AND `id`=0 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28027 AND `source_type`=0 AND `id`=9 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28027 AND `source_type`=0 AND `id`=10 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28027 AND `source_type`=0 AND `id`=11 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28120 AND `source_type`=0 AND `id`=13 AND `link`=0; + +UPDATE `smart_scripts` SET `event_flags`=0 WHERE `entryorguid` IN(28214,28215,28216, 28120, 28121,28122,28362) AND `source_type`=0; +UPDATE `smart_scripts` SET `event_param3`=60000, `event_param4`=60000 WHERE `entryorguid`=28362 AND `source_type`=0 AND `id`=0 AND `link`=0; + From a3dbfa5eb66b127ff98d9752c35f70a12d06ff3b Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 5 Jan 2016 18:46:21 +0100 Subject: [PATCH 487/524] Core/Authserver: Do not close the socket immediately when user types in invalid authenticator token to allow receiving failure packet --- src/server/authserver/Server/AuthSession.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp index bcb1dd3fdd..60e9b734b1 100644 --- a/src/server/authserver/Server/AuthSession.cpp +++ b/src/server/authserver/Server/AuthSession.cpp @@ -540,7 +540,7 @@ bool AuthSession::HandleLogonProof() packet << uint8(3); packet << uint8(0); SendPacket(packet); - return false; + return true; } } From 42594c16873328e5e17121597e13f5db95ed12ab Mon Sep 17 00:00:00 2001 From: Goatform Date: Tue, 5 Jan 2016 20:00:11 +0100 Subject: [PATCH 488/524] Core/GameObjects: Fixed an issue where traps were not redirected to Grounding Totem Closes #16145 --- src/server/game/Entities/GameObject/GameObject.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 9aabed6724..6f0b9f89e4 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1803,6 +1803,8 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, bool triggered /*= true if (Unit* owner = GetOwner()) { trigger->setFaction(owner->getFaction()); + if (owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) + trigger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // needed for GO casts for proper target validation checks trigger->SetOwnerGUID(owner->GetGUID()); trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, owner->GetGUID()); From 9e366b36aee1017a2e7aa83785e0904ea7e88945 Mon Sep 17 00:00:00 2001 From: Andrew Letson Date: Tue, 5 Jan 2016 14:26:43 -0500 Subject: [PATCH 489/524] Core/Scripts/DB: Migrate Skyguard Handler Deesak to SmartAI --- .../2016_01_05_skyguard_handler_deesak.sql | 21 +++++++++++++++++++ src/server/scripts/World/npc_taxi.cpp | 9 -------- 2 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 sql/updates/world/2016_01_05_skyguard_handler_deesak.sql diff --git a/sql/updates/world/2016_01_05_skyguard_handler_deesak.sql b/sql/updates/world/2016_01_05_skyguard_handler_deesak.sql new file mode 100644 index 0000000000..64909129e6 --- /dev/null +++ b/sql/updates/world/2016_01_05_skyguard_handler_deesak.sql @@ -0,0 +1,21 @@ +-- Add gossip texts to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 8719; +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 +(8719,0,0,'Absolutely! Send me to the Skyguard Outpost.',21553,1,1,0,0,0,0,'',0); +-- This was already here but I think rather enumerate from 0 than 1 in gossip_menu_option + +-- Migrate NPC to use SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 23415; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14, 15) AND `SourceGroup` = 8719; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,8719,10980,0,0,5,0,1031,224,0,1,0,'','Skyguard Handler Deesak - Show gossip menu text below Honored reputation with faction 1031'), +(14,8719,10979,0,0,5,0,1031,224,0,0,0,'','Skyguard Handler Deesak - Show gossip menu text above Honored reputation with faction 1031'), +(15,8719,0,0,0,5,0,1031,224,0,0,0,'','Skyguard Handler Deesak - Show gossip option 0 if player has reputation Honored or above with faction 1031'); +-- Not sure if the missing condition is necessary, but it makes things a lot clearer when looking at the table. + +-- Create SmartAI for Skyguard Handler Deesak +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 23415); +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 +(23415,0,0,1,62,0,100,0,8719,0,0,0,11,41279,0,0,0,0,0,7,0,0,0,0,0,0,0,'Skyguard Handler Deesak - On Gossip Option 0 Selected - Cast Spell 41279'), +(23415,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,'Skyguard Handler Deesak - On Linked Actions - Close Gossip'); diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index f107a700fe..71c08edc04 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -37,7 +37,6 @@ EndScriptData #define GOSSIP_DABIREE2 "Fly me to Shatter Point" #define GOSSIP_IRENA "Fly me to Skettis please" #define GOSSIP_VERONIA "Fly me to Manaforge Coruu please" -#define GOSSIP_DEESAK "Fly me to Ogri'la please" #define GOSSIP_CRIMSONWING "" class npc_taxi : public CreatureScript @@ -81,10 +80,6 @@ public: if (player->GetQuestStatus(10652) != QUEST_STATUS_REWARDED) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VERONIA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15); break; - case 23415: // Terokkar Forest - Skyguard Handler Deesak - if (player->GetReputationRank(1031) >= REP_HONORED) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DEESAK, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 16); - break; case 23704: // Dustwallow Marsh - Cassa Crimsonwing if (player->GetQuestStatus(11142) == QUEST_STATUS_INCOMPLETE) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CRIMSONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); @@ -134,10 +129,6 @@ public: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 34905, true); //TaxiPath 606 break; - case GOSSIP_ACTION_INFO_DEF + 16: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 41279, true); //TaxiPath 705 (Taxi - Skettis to Skyguard Outpost) - break; case GOSSIP_ACTION_INFO_DEF + 25: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 42295, true); From 4e4ef26108614e499e26954408268ff9396a7100 Mon Sep 17 00:00:00 2001 From: velinath Date: Tue, 5 Jan 2016 18:14:16 -0500 Subject: [PATCH 490/524] Core/Scripts/DB: Migrate Wing Commander Dabir'ee to SAI --- .../2016_01_05_wing_commander_dabiree.sql | 25 +++++++++++++++++++ src/server/scripts/World/npc_taxi.cpp | 19 -------------- 2 files changed, 25 insertions(+), 19 deletions(-) create mode 100644 sql/updates/world/2016_01_05_wing_commander_dabiree.sql diff --git a/sql/updates/world/2016_01_05_wing_commander_dabiree.sql b/sql/updates/world/2016_01_05_wing_commander_dabiree.sql new file mode 100644 index 0000000000..d36dda80e5 --- /dev/null +++ b/sql/updates/world/2016_01_05_wing_commander_dabiree.sql @@ -0,0 +1,25 @@ +-- Add sniffed gossip texts to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 7970; +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 +(7970, 0, 0, 'I''m on a bombing mission for Forward Commander Kingston. I need a gryphon destroyer!',18198,1,1,0,0,0,0,'',0), +(7970, 1, 0, 'Send me to Shatter Point!',17935,1,1,0,0,0,0,'',0); + +-- Migrate NPC to use SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '', `gossip_menu_id` = 7970 WHERE `entry` = 19409; + +-- Condition: Gossip menu ID 0 needs either quest ID 10146 to be incomplete. +-- Condition: Gossip menu ID 1 needs quest ID 10340 to not be rewarded +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`= 15 AND `SourceGroup` = 7970 AND `SourceEntry`IN (0,1); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,7970,0,0,0,9,0,10146,0,0,0,0,'','Wing Commander Dabir''ee - Show gossip option 0 if player has taken quest ID 10146'), +(15,7970,1,0,0,8,0,10340,0,0,1,0,'','Wing Commander Dabir''ee - Show gossip option 1 if quest ID 10340 is not rewarded'); + +-- Create SmartAI for Wing Commander Dabir'ee +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 19409); +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 +(19409,0,0,2,62,0,100,0,7970,0,0,0,11,33768,0,0,0,0,0,7,0,0,0,0,0,0,0,'Wing Commander Dabir''ee - On Gossip Option 0 Selected - Cast Spell 33768'), +(19409,0,1,2,62,0,100,0,7970,1,0,0,11,35069,0,0,0,0,0,7,0,0,0,0,0,0,0,'Wing Commander Dabir''ee - On Gossip Option 1 Selected - Cast Spell 35069'), +(19409,0,2,0,61,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Wing Commander Dabir''ee - On Linked Actions - Close Gossip'); + +-- Misc creature fixes +UPDATE `creature` SET `MovementType` = 0 WHERE id = 22987 AND guid IN (79007, 79008, 79009); diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 32742105d1..a200ba545d 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -33,8 +33,6 @@ EndScriptData #define GOSSIP_SUSURRUS "I am ready." #define GOSSIP_NETHER_DRAKE "I'm ready to fly! Take me up, dragon!" #define GOSSIP_BRAZEN "I am ready to go to Durnholde Keep." -#define GOSSIP_DABIREE1 "Fly me to Murketh and Shaadraz Gateways" -#define GOSSIP_DABIREE2 "Fly me to Shatter Point" #define GOSSIP_VERONIA "Fly me to Manaforge Coruu please" #define GOSSIP_CRIMSONWING "" @@ -61,15 +59,6 @@ public: case 18725: // Old Hillsbrad Foothills - Brazen player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BRAZEN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); break; - case 19409: // Hellfire Peninsula - Wing Commander Dabir'ee - //Mission: The Murketh and Shaadraz Gateways - if (player->GetQuestStatus(10146) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DABIREE1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - - //Shatter Point - if (!player->GetQuestRewardStatus(10340)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DABIREE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - break; case 20162: // Netherstorm - Veronia //Behind Enemy Lines if (player->GetQuestStatus(10652) != QUEST_STATUS_REWARDED) @@ -108,14 +97,6 @@ public: player->ActivateTaxiPathTo(534); //TaxiPath 534 } break; - case GOSSIP_ACTION_INFO_DEF + 4: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 33768, true); //TaxiPath 585 (Gateways Murket and Shaadraz) - break; - case GOSSIP_ACTION_INFO_DEF + 5: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 35069, true); //TaxiPath 612 (Taxi - Hellfire Peninsula - Expedition Point to Shatter Point) - break; case GOSSIP_ACTION_INFO_DEF + 15: player->CLOSE_GOSSIP_MENU(); player->CastSpell(player, 34905, true); //TaxiPath 606 From 5d9370a0f755887d2fff13e4ce982bd52f00f77b Mon Sep 17 00:00:00 2001 From: Killyana Date: Thu, 7 Jan 2016 01:56:37 +0100 Subject: [PATCH 491/524] DB/Creature: Remove a wrong spawn --- sql/updates/world/2016_01_07_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2016_01_07_01_world.sql diff --git a/sql/updates/world/2016_01_07_01_world.sql b/sql/updates/world/2016_01_07_01_world.sql new file mode 100644 index 0000000000..4a15aa405e --- /dev/null +++ b/sql/updates/world/2016_01_07_01_world.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature` WHERE `id`=22972; From 91fa2154e892c1cc6d7769e39c50afce74c836fc Mon Sep 17 00:00:00 2001 From: treeston Date: Thu, 7 Jan 2016 21:17:32 +0100 Subject: [PATCH 492/524] Fix a spawndist start-up warning. --- sql/updates/world/2016_01_07_02_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2016_01_07_02_world.sql diff --git a/sql/updates/world/2016_01_07_02_world.sql b/sql/updates/world/2016_01_07_02_world.sql new file mode 100644 index 0000000000..7724b42ac9 --- /dev/null +++ b/sql/updates/world/2016_01_07_02_world.sql @@ -0,0 +1,2 @@ +-- fix a start-up warning +UPDATE `creature` SET `spawndist`=0 WHERE `guid` IN (79007,79008,79009); From e5d4005cc6f4450ba9cf3ab14b5b60daf3b3b889 Mon Sep 17 00:00:00 2001 From: ccrs Date: Tue, 2 Jun 2015 04:57:14 +0200 Subject: [PATCH 493/524] Core/Spells: Fixed Raise Ally thx @Nayd for sniffs :) thx @Shauren for helping to find all spell involved * There is no implementation for stats update on Puppet class (only on Guardian) so same SummonProperty as Raise Dead Ghoul (non pet) is used. (Default SummonProperties set category to SUMMON_CATEGORY_PUPPET) * Override the Summon Effect to enable charm and stats scaling. * PlayerAI is used to handle unaura on ghoul despawn or dead. It's necessary due to the fact that all script hooks on ScriptedCreature are called on an unactive CreatureAI, resulting in creature being unable to handle unaura calls. * Create UpdateAI call for Player class * Stats scaling is based on forum and wowhead comments, they recall this ghoul as a copy of the other one (same stats). * Spellscript for Ghoul spell Thrash Closes #82 Closes #14830 --- sql/updates/world/2016_01_08_00_world.sql | 18 ++ .../game/Entities/Creature/TemporarySummon.h | 5 +- src/server/game/Entities/Player/Player.cpp | 78 ++++- src/server/game/Entities/Player/Player.h | 16 +- src/server/game/Entities/Unit/StatSystem.cpp | 6 +- src/server/game/Entities/Unit/Unit.cpp | 5 +- src/server/game/Entities/Unit/Unit.h | 1 + src/server/game/Handlers/MiscHandler.cpp | 7 + src/server/game/Spells/Spell.cpp | 17 +- src/server/scripts/Spells/spell_dk.cpp | 303 +++++++++++++++++- 10 files changed, 432 insertions(+), 24 deletions(-) create mode 100644 sql/updates/world/2016_01_08_00_world.sql diff --git a/sql/updates/world/2016_01_08_00_world.sql b/sql/updates/world/2016_01_08_00_world.sql new file mode 100644 index 0000000000..55ed3ddf33 --- /dev/null +++ b/sql/updates/world/2016_01_08_00_world.sql @@ -0,0 +1,18 @@ +UPDATE `creature_template` SET +`spell1` = 62225, -- Claw +`spell2` = 47480, -- Thrash +`spell3` = 47481, -- Gnaw +`spell4` = 47482, -- Leap +`spell5` = 47484, -- Huddle +`spell6` = 47496 -- Explode +WHERE `entry` = 30230; + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dk_raise_ally_initial', 'spell_dk_raise_ally', 'spell_dk_ghoul_thrash'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(61999, 'spell_dk_raise_ally_initial'), +(46619, 'spell_dk_raise_ally'), +(47480, 'spell_dk_ghoul_thrash'); + +DELETE FROM `spell_dbc` WHERE `Id`=62214; +INSERT INTO `spell_dbc` (`Id`,`Attributes`,`AttributesEx`,`AttributesEx2`,`AttributesEx3`,`AttributesEx4`,`AttributesEx5`,`AttributesEx6`,`DurationIndex`,`RangeIndex`,`Effect1`,`EffectImplicitTargetA1`,`EffectApplyAuraName1`,`Comment`) VALUES +(62214,0xA9800100,0x10000420,0x10084005,0x00130000,0x00800080,0x00060008,0x00001404,21,13,6,25,279,'Mirror Name'); diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index afca851974..6d058f405a 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -72,9 +72,10 @@ class Minion : public TempSummon Unit* GetOwner() const { return m_owner; } float GetFollowAngle() const override { return m_followAngle; } void SetFollowAngle(float angle) { m_followAngle = angle; } - bool IsPetGhoul() const {return GetEntry() == 26125;} // Ghoul may be guardian or pet - bool IsSpiritWolf() const {return GetEntry() == 29264;} // Spirit wolf from feral spirits + bool IsPetGhoul() const { return GetEntry() == 26125; } // Ghoul may be guardian or pet + bool IsSpiritWolf() const { return GetEntry() == 29264; } // Spirit wolf from feral spirits bool IsGuardianPet() const; + bool IsRisenAlly() const { return GetEntry() == 30230; } protected: Unit* const m_owner; float m_followAngle; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 52291cb6bf..4fdf25e41c 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1242,6 +1242,9 @@ void Player::Update(uint32 p_time) if (charmer->GetTypeId() == TYPEID_UNIT && charmer->IsAlive()) UpdateCharmedAI(); + if (GetAI() && IsAIEnabled) + GetAI()->UpdateAI(p_time); + // Update items that have just a limited lifetime if (now > m_Last_tick) UpdateItemDuration(uint32(now - m_Last_tick)); @@ -1476,8 +1479,8 @@ void Player::Update(uint32 p_time) _pendingBindTimer -= p_time; } - // not auto-free ghost from body in instances - if (m_deathTimer > 0 && !GetBaseMap()->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION)) + // not auto-free ghost from body in instances or if its affected by risen ally + if (m_deathTimer > 0 && !GetBaseMap()->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION) && !IsGhouled()) { if (p_time >= m_deathTimer) { @@ -2157,7 +2160,7 @@ bool Player::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) co return true; if (spellInfo->Effects[index].IsEffect(SPELL_EFFECT_ATTACK_ME)) return true; - + return Unit::IsImmunedToSpellEffect(spellInfo, index); } @@ -4731,6 +4734,32 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) } } +void Player::SendGhoulResurrectRequest(Player* target) +{ + target->m_ghoulResurrectPlayerGUID = GetGUID(); + + WorldPacket data(SMSG_RESURRECT_REQUEST, 8 + 4 + 1 + 1); + data << uint64(GetGUID()); + data << uint32(0); + data << uint8(0); + data << uint8(0); + target->GetSession()->SendPacket(&data); +} + +void Player::GhoulResurrect() +{ + CastSpell(this, 46619 /*SPELL_DK_RAISE_ALLY*/, true, nullptr, nullptr, m_ghoulResurrectPlayerGUID); + + m_ghoulResurrectPlayerGUID = ObjectGuid::Empty; +} + +void Player::RemoveGhoul() +{ + if (IsGhouled()) + if (Creature* ghoul = ObjectAccessor::GetCreature(*this, m_ghoulResurrectGhoulGUID)) + ghoul->DespawnOrUnsummon(); // Raise Ally aura will handle unauras +} + void Player::KillPlayer() { if (IsFlying() && !GetTransport()) @@ -18682,7 +18711,7 @@ bool Player::CheckInstanceValidity(bool /*isLogin*/) // game masters' instances are always valid if (IsGameMaster()) return true; - + // non-instances are always valid Map* map = GetMap(); if (!map || !map->IsDungeon()) @@ -20156,6 +20185,12 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent) void Player::StopCastingCharm() { + if (IsGhouled()) + { + RemoveGhoul(); + return; + } + Unit* charm = GetCharm(); if (!charm) return; @@ -21508,6 +21543,14 @@ void Player::setResurrectRequestData(ObjectGuid guid, uint32 mapId, float X, flo m_resurrectHealth = health; m_resurrectMana = mana; } + +void Player::clearResurrectRequestData() +{ + setResurrectRequestData(ObjectGuid::Empty, 0, 0.0f, 0.0f, 0.0f, 0, 0); + + m_ghoulResurrectPlayerGUID = ObjectGuid::Empty; + m_ghoulResurrectGhoulGUID = ObjectGuid::Empty; +} //slot to be excluded while counting bool Player::EnchantmentFitsRequirements(uint32 enchantmentcondition, int8 slot) { @@ -23410,6 +23453,8 @@ uint32 Player::GetBaseWeaponSkillValue(WeaponAttackType attType) const void Player::ResurrectUsingRequestData() { + RemoveGhoul(); + /// Teleport before resurrecting by player, otherwise the player might get attacked from creatures near his corpse TeleportTo(m_resurrectMap, m_resurrectX, m_resurrectY, m_resurrectZ, GetOrientation()); @@ -23854,6 +23899,31 @@ void Player::SetViewpoint(WorldObject* target, bool apply) //WorldPacket data(SMSG_CLEAR_FAR_SIGHT_IMMEDIATE, 0); //GetSession()->SendPacket(&data); } + + // HACK: Make sure update for PLAYER_FARSIGHT is received before SMSG_PET_SPELLS to properly hide "Release spirit" dialog + if (target->GetTypeId() == TYPEID_UNIT && static_cast(target)->HasUnitTypeMask(UNIT_MASK_MINION) && static_cast(target)->IsRisenAlly()) + { + if (apply) + { + UpdateDataMapType update_players; + BuildUpdate(update_players); + WorldPacket packet; + for (UpdateDataMapType::iterator iter = update_players.begin(); iter != update_players.end(); ++iter) + { + iter->second.BuildPacket(&packet); + iter->first->GetSession()->SendPacket(&packet); + packet.clear(); + } + } + else + { + m_deathTimer = 6 * MINUTE * IN_MILLISECONDS; + + // Reset "Release spirit" timer clientside + WorldPacket data(SMSG_FORCED_DEATH_UPDATE); + SendDirectMessage(&data); + } + } } WorldObject* Player::GetViewpoint() const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 32a4fec27f..e7af827e9c 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1576,7 +1576,7 @@ class Player : public Unit, public GridObject void UpdatePotionCooldown(Spell* spell = NULL); void setResurrectRequestData(ObjectGuid guid, uint32 mapId, float X, float Y, float Z, uint32 health, uint32 mana); - void clearResurrectRequestData() { setResurrectRequestData(ObjectGuid::Empty, 0, 0.0f, 0.0f, 0.0f, 0, 0); } + void clearResurrectRequestData(); bool isResurrectRequestedBy(ObjectGuid guid) const { return !m_resurrectGUID.IsEmpty() && m_resurrectGUID == guid; } bool isResurrectRequested() const { return !m_resurrectGUID.IsEmpty(); } void ResurrectUsingRequestData(); @@ -1770,6 +1770,15 @@ class Player : public Unit, public GridObject void ResurrectPlayer(float restore_percent, bool applySickness = false); void BuildPlayerRepop(); void RepopAtGraveyard(); + void SendGhoulResurrectRequest(Player* target); + bool IsValidGhoulResurrectRequest(ObjectGuid guid) + { + return !m_ghoulResurrectPlayerGUID.IsEmpty() && m_ghoulResurrectPlayerGUID == guid; + } + void GhoulResurrect(); + void SetGhoulResurrectGhoulGUID(ObjectGuid guid) { m_ghoulResurrectGhoulGUID = guid; } + ObjectGuid GetGhoulResurrectGhoulGUID() { return m_ghoulResurrectGhoulGUID; } + void RemoveGhoul(); void DurabilityLossAll(double percent, bool inventory); void DurabilityLoss(Item* item, double percent); @@ -2403,6 +2412,9 @@ class Player : public Unit, public GridObject float m_resurrectX, m_resurrectY, m_resurrectZ; uint32 m_resurrectHealth, m_resurrectMana; + ObjectGuid m_ghoulResurrectPlayerGUID; + ObjectGuid m_ghoulResurrectGhoulGUID; + WorldSession* m_session; typedef std::list JoinedChannelsList; @@ -2502,7 +2514,7 @@ class Player : public Unit, public GridObject bool IsHasDelayedTeleport() const { return m_bHasDelayedTeleport; } void SetDelayedTeleportFlag(bool setting) { m_bHasDelayedTeleport = setting; } void ScheduleDelayedOperation(uint32 operation) { if (operation < DELAYED_END) m_DelayedOperations |= operation; } - + bool IsInstanceLoginGameMasterException() const; MapReference m_mapRef; diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 775a3c96c4..a8e13a9f7d 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -499,7 +499,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) if (getClass() == CLASS_SHAMAN || getClass() == CLASS_PALADIN) // mental quickness UpdateSpellDamageAndHealingBonus(); - if (pet && pet->IsPetGhoul()) // At melee attack power change for DK pet + if (pet && (pet->IsPetGhoul() || pet->IsRisenAlly())) // At melee attack power change for DK pet pet->UpdateAttackPowerAndDamage(); if (guardian && guardian->IsSpiritWolf()) // At melee attack power change for Shaman feral spirit @@ -1113,7 +1113,7 @@ bool Guardian::UpdateStats(Stats stat) Unit* owner = GetOwner(); // Handle Death Knight Glyphs and Talents float mod = 0.75f; - if (IsPetGhoul() && (stat == STAT_STAMINA || stat == STAT_STRENGTH)) + if ((IsPetGhoul() || IsRisenAlly()) && (stat == STAT_STAMINA || stat == STAT_STRENGTH)) { if (stat == STAT_STAMINA) mod = 0.3f; // Default Owner's Stamina scale @@ -1329,7 +1329,7 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) bonusAP = owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.22f * mod; SetBonusDamage(int32(owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.1287f * mod)); } - else if (IsPetGhoul()) //ghouls benefit from deathknight's attack power (may be summon pet or not) + else if (IsPetGhoul() || IsRisenAlly()) //ghouls benefit from deathknight's attack power (may be summon pet or not) { bonusAP = owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.22f; SetBonusDamage(int32(owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.1287f)); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index fcd2535dad..261f4faf1a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9395,7 +9395,7 @@ void Unit::SetMinion(Minion *minion, bool apply) minion->SetSpeed(UnitMoveType(i), m_speed_rate[i], true); // Ghoul pets have energy instead of mana (is anywhere better place for this code?) - if (minion->IsPetGhoul()) + if (minion->IsPetGhoul() || minion->IsRisenAlly()) minion->setPowerType(POWER_ENERGY); // Send infinity cooldown - client does that automatically but after relog cooldown needs to be set again @@ -13625,6 +13625,9 @@ void Unit::RemoveFromWorld() RemoveAreaAurasDueToLeaveWorld(); + if (IsCharmed()) + RemoveCharmedBy(nullptr); + if (GetCharmerGUID()) { TC_LOG_FATAL("entities.unit", "Unit %u has charmer guid when removed from world", GetEntry()); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 8fc93f2435..90d312f422 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1598,6 +1598,7 @@ class Unit : public WorldObject bool IsAlive() const { return (m_deathState == ALIVE); } bool isDying() const { return (m_deathState == JUST_DIED); } bool isDead() const { return (m_deathState == DEAD || m_deathState == CORPSE); } + bool IsGhouled() const { return HasAura(46619 /*SPELL_DK_RAISE_ALLY*/); } DeathState getDeathState() const { return m_deathState; } virtual void setDeathState(DeathState s); // overwrited in Creature/Player/Pet diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index e4ee057d6e..758d5af83f 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -71,6 +71,7 @@ void WorldSession::HandleRepopRequestOpcode(WorldPacket& recvData) } //this is spirit release confirm? + GetPlayer()->RemoveGhoul(); GetPlayer()->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT, true); GetPlayer()->BuildPlayerRepop(); GetPlayer()->RepopAtGraveyard(); @@ -776,6 +777,12 @@ void WorldSession::HandleResurrectResponseOpcode(WorldPacket& recvData) return; } + if (GetPlayer()->IsValidGhoulResurrectRequest(guid)) + { + GetPlayer()->GhoulResurrect(); + return; + } + if (!GetPlayer()->isResurrectRequestedBy(guid)) return; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index cb573f4ec3..c677187e3d 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -4207,21 +4207,16 @@ void Spell::SendResurrectRequest(Player* target) { // get resurrector name for creature resurrections, otherwise packet will be not accepted // for player resurrections the name is looked up by guid - std::string const sentName(m_caster->GetTypeId() == TYPEID_PLAYER - ? "" - : m_caster->GetNameForLocaleIdx(target->GetSession()->GetSessionDbLocaleIndex())); + std::string const sentName(m_caster->GetTypeId() == TYPEID_PLAYER ? + "" : m_caster->GetNameForLocaleIdx(target->GetSession()->GetSessionDbLocaleIndex())); - WorldPacket data(SMSG_RESURRECT_REQUEST, (8+4+sentName.size()+1+1+1+4)); + WorldPacket data(SMSG_RESURRECT_REQUEST, 8 + 4 + sentName.size() + 1 + 1 + 1); data << uint64(m_caster->GetGUID()); data << uint32(sentName.size() + 1); - data << sentName; - data << uint8(0); // null terminator - - data << uint8(m_caster->GetTypeId() == TYPEID_PLAYER ? 0 : 1); // "you'll be afflicted with resurrection sickness" + data << uint8(m_caster->IsSpiritHealer()); // "you'll be afflicted with resurrection sickness" // override delay sent with SMSG_CORPSE_RECLAIM_DELAY, set instant resurrection for spells with this attribute - if (m_spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_RESURRECTION_TIMER)) - data << uint32(0); + data << uint8(!m_spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_RESURRECTION_TIMER)); target->GetSession()->SendPacket(&data); } @@ -5512,7 +5507,7 @@ SpellCastResult Spell::CheckPetCast(Unit* target) // dead owner (pets still alive when owners ressed?) if (Unit* owner = m_caster->GetCharmerOrOwner()) - if (!owner->IsAlive()) + if (!owner->IsAlive() && !owner->IsGhouled()) return SPELL_FAILED_CASTER_DEAD; if (!target && m_targets.GetUnitTarget()) diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 59caf4b7f7..193ec7cbb0 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -22,6 +22,7 @@ */ #include "Player.h" +#include "UnitAI.h" #include "ScriptMgr.h" #include "SpellScript.h" #include "SpellAuraEffects.h" @@ -63,7 +64,10 @@ enum DeathKnightSpells SPELL_DK_UNHOLY_PRESENCE = 48265, SPELL_DK_UNHOLY_PRESENCE_TRIGGERED = 49772, SPELL_DK_WILL_OF_THE_NECROPOLIS_TALENT_R1 = 49189, - SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1 = 52284 + SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1 = 52284, + SPELL_DK_RAISE_ALLY_INITIAL = 61999, + SPELL_DK_RAISE_ALLY = 46619, + SPELL_DK_GHOUL_THRASH = 47480 }; enum DeathKnightSpellIcons @@ -1699,6 +1703,300 @@ public: } }; +enum RaiseAllyMisc +{ + TEXT_RISE_ALLY = 33055, + + SPELL_DK_RISEN_GHOUL_SELF_STUN = 47466, + SPELL_DK_RISEN_GHOUL_SPAWN__IN = 47448, + SPELL_DK_SUMMON_HEAL = 36492, + SPELL_DK_DEATH_KNIGHT_RUNE_WEAPON_SCALING_02 = 51906, + SPELL_DK_DEATH_KNIGHT_PET_SCALING_01 = 54566, + SPELL_DK_DEATH_KNIGHT_PET_SCALING_03 = 61697, + SPELL_DK_MIRROR_NAME = 62224, + SPELL_DK_MIRROR_NAME_TRIGGERED = 62214, + SPELL_DK_PET_SCALING___MASTER_SPELL_03___INTELLECT_SPIRIT_RESILIENCE = 67557, + SPELL_DK_PET_SCALING___MASTER_SPELL_06___SPELL_HIT_EXPERTISE_SPELL_PENETRATION = 67561, + + SPELL_GHOUL_FRENZY = 62218, + + NPC_RISEN_ALLY = 30230 +}; + +// 61999 - Raise Ally Initial +class spell_dk_raise_ally_initial : public SpellScriptLoader +{ +public: + spell_dk_raise_ally_initial() : SpellScriptLoader("spell_dk_raise_ally_initial") { } + + class spell_dk_raise_ally_initial_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dk_raise_ally_initial_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DK_RAISE_ALLY_INITIAL)) + return false; + return true; + } + + SpellCastResult CheckCast() + { + // Raise Ally cannot be casted on alive players + Unit* target = GetExplTargetUnit(); + if (target && target->IsAlive()) + return SPELL_FAILED_TARGET_NOT_DEAD; + else if (GetCaster()->ToPlayer()->InArena()) + return SPELL_FAILED_NOT_IN_ARENA; + else if (target->IsGhouled()) + return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; + + return SPELL_CAST_OK; + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Player* caster = GetCaster()->ToPlayer(); + Player* target = GetHitPlayer(); + if (caster && target) + caster->SendGhoulResurrectRequest(target); + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dk_raise_ally_initial_SpellScript::CheckCast); + OnEffectHitTarget += SpellEffectFn(spell_dk_raise_ally_initial_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dk_raise_ally_initial_SpellScript(); + } +}; + +class player_ghoulAI : public PlayerAI +{ + public: + player_ghoulAI(Player* player, ObjectGuid ghoulGUID) : PlayerAI(player), _ghoulGUID(ghoulGUID) { } + + void UpdateAI(uint32 /*diff*/) override + { + if (Creature* ghoul = ObjectAccessor::GetCreature(*me, _ghoulGUID)) + { + if (!ghoul->IsAlive()) + me->RemoveAura(SPELL_DK_RAISE_ALLY); + } + else + me->RemoveAura(SPELL_DK_RAISE_ALLY); + } + + private: + ObjectGuid _ghoulGUID; +}; + +// 46619 - Raise Ally +class spell_dk_raise_ally : public SpellScriptLoader +{ +public: + spell_dk_raise_ally() : SpellScriptLoader("spell_dk_raise_ally") { } + + class spell_dk_raise_ally_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dk_raise_ally_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DK_RAISE_ALLY)) + return false; + return true; + } + + void SendText() + { + Player* caster = GetCaster()->ToPlayer(); + Unit* original = GetOriginalCaster(); + if (caster && original) + original->Whisper(TEXT_RISE_ALLY, caster, true); + } + + void HandleSummon(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + Unit* caster = GetCaster(); + Unit* originalCaster = GetOriginalCaster(); + if (!originalCaster) + return; + + uint32 entry = uint32(GetSpellInfo()->Effects[effIndex].MiscValue); + + //! HACK - StatSystem needs further develop to enable update on Puppet stats + // Using same summon properties as Raise Dead 46585 (Guardian) - EffectMiscValueB = 829 + SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(829); + + uint32 duration = uint32(GetSpellInfo()->GetDuration()); + Position pos = caster->GetPosition(); + + TempSummon* summon = originalCaster->GetMap()->SummonCreature(entry, pos, properties, duration, originalCaster, GetSpellInfo()->Id); + if (!summon) + return; + + //! Leaving this here as it's necessary if statsystem problem is solved + /* + Default SUMMON_CATEGORY_PUPPET behaviour sets possesor as originalCaster, + in this case we need caster as possesor and originalCaster as owner + */ + //summon->RemoveCharmedBy(NULL); + + summon->SetCharmedBy(caster, CHARM_TYPE_POSSESS); + + summon->CastSpell(summon, SPELL_DK_RISEN_GHOUL_SELF_STUN, true); + summon->CastSpell(summon, SPELL_DK_RISEN_GHOUL_SPAWN__IN, true); + summon->CastSpell(summon, SPELL_DK_SUMMON_HEAL, true); + summon->CastSpell(caster, SPELL_DK_MIRROR_NAME, true); + caster->CastSpell(summon, SPELL_DK_MIRROR_NAME_TRIGGERED, true); + summon->CastSpell(summon, SPELL_DK_DEATH_KNIGHT_RUNE_WEAPON_SCALING_02, true); + summon->CastSpell(summon, SPELL_DK_DEATH_KNIGHT_PET_SCALING_01, true); + summon->CastSpell(summon, SPELL_DK_DEATH_KNIGHT_PET_SCALING_03, true); + summon->CastSpell(summon, SPELL_DK_PET_SCALING___MASTER_SPELL_03___INTELLECT_SPIRIT_RESILIENCE, true); + summon->CastSpell(summon, SPELL_DK_PET_SCALING___MASTER_SPELL_06___SPELL_HIT_EXPERTISE_SPELL_PENETRATION, true); + + // SMSG_POWER_UPDATE is sent + summon->SetMaxPower(POWER_ENERGY, 100); + + if (Player* player = GetCaster()->ToPlayer()) + player->SetGhoulResurrectGhoulGUID(summon->GetGUID()); + } + + void Register() override + { + AfterHit += SpellHitFn(spell_dk_raise_ally_SpellScript::SendText); + OnEffectHit += SpellEffectFn(spell_dk_raise_ally_SpellScript::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dk_raise_ally_SpellScript(); + } + + class spell_dk_raise_ally_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dk_raise_ally_AuraScript); + + public: + spell_dk_raise_ally_AuraScript() + { + oldAI = nullptr; + oldAIState = false; + } + + private: + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DK_RAISE_ALLY)) + return false; + return true; + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Player* player = GetTarget()->ToPlayer(); + if (!player || player->GetGhoulResurrectGhoulGUID().IsEmpty()) + return; + + oldAI = player->GetAI(); + oldAIState = player->IsAIEnabled; + player->SetAI(new player_ghoulAI(player, player->GetGhoulResurrectGhoulGUID())); + player->IsAIEnabled = true; + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Player* player = GetTarget()->ToPlayer(); + if (!player) + return; + + player->IsAIEnabled = oldAIState; + UnitAI* thisAI = player->GetAI(); + player->SetAI(oldAI); + delete thisAI; + + // Dismiss ghoul if necessary + if (Creature* ghoul = ObjectAccessor::GetCreature(*player, player->GetGhoulResurrectGhoulGUID())) + { + ghoul->RemoveCharmedBy(nullptr); + ghoul->DespawnOrUnsummon(1000); + } + + player->SetGhoulResurrectGhoulGUID(ObjectGuid::Empty); + player->RemoveAura(SPELL_GHOUL_FRENZY); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_dk_raise_ally_AuraScript::OnApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_dk_raise_ally_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + + UnitAI* oldAI; + bool oldAIState; + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dk_raise_ally_AuraScript(); + } +}; + +// 47480 - Thrash +class spell_dk_ghoul_thrash : public SpellScriptLoader +{ +public: + spell_dk_ghoul_thrash() : SpellScriptLoader("spell_dk_ghoul_thrash") { } + + class spell_dk_ghoul_thrash_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dk_ghoul_thrash_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DK_GHOUL_THRASH)) + return false; + return true; + } + + void CalcDamage() + { + if (Aura* aur = GetCaster()->GetAura(SPELL_GHOUL_FRENZY)) + { + int32 damage = GetHitDamage(); + damage += int32(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK) * 0.05f * aur->GetStackAmount()); + aur->Remove(); + SetHitDamage(damage); + } + + /* + Also remove aura from charmer + SPELL_GHOUL_FRENZY (62218) - Targets (1, 27) (TARGET_UNIT_CASTER, TARGET_UNIT_MASTER) + */ + if (Unit* charmer = GetCaster()->GetCharmer()) + charmer->RemoveAura(SPELL_GHOUL_FRENZY); + } + + void Register() override + { + OnHit += SpellHitFn(spell_dk_ghoul_thrash_SpellScript::CalcDamage); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dk_ghoul_thrash_SpellScript(); + } +}; + void AddSC_deathknight_spell_scripts() { new spell_dk_anti_magic_shell_raid(); @@ -1729,4 +2027,7 @@ void AddSC_deathknight_spell_scripts() new spell_dk_vampiric_blood(); new spell_dk_will_of_the_necropolis(); new spell_dk_death_grip_initial(); + new spell_dk_raise_ally_initial(); + new spell_dk_raise_ally(); + new spell_dk_ghoul_thrash(); } From b1a89943a2158415f5b3874728aaecef2e79b1b2 Mon Sep 17 00:00:00 2001 From: ShinDarth Date: Thu, 7 Jan 2016 17:52:41 +0100 Subject: [PATCH 494/524] Scripts/ICC: Fixed Professor Putricide - closes https://github.com/TrinityCore/TrinityCore/issues/16207 --- .../Northrend/IcecrownCitadel/boss_professor_putricide.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 31dd7de96c..fafe311383 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -236,6 +236,7 @@ class boss_professor_putricide : public CreatureScript summons.DespawnAll(); SetPhase(PHASE_COMBAT_1); _experimentState = EXPERIMENT_STATE_OOZE; + me->SetReactState(REACT_DEFENSIVE); me->SetWalk(false); if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); From 3ab64796ab43d866e462fe264d5c5312d8ea8abd Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 8 Jan 2016 16:30:58 +0100 Subject: [PATCH 495/524] DB/Creature: Wyrmcaller Vile Update #3541 Add missing spawns and scripts for visual stuff --- sql/updates/world/2016_01_08_01_world.sql | 52 +++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 sql/updates/world/2016_01_08_01_world.sql diff --git a/sql/updates/world/2016_01_08_01_world.sql b/sql/updates/world/2016_01_08_01_world.sql new file mode 100644 index 0000000000..9df781a078 --- /dev/null +++ b/sql/updates/world/2016_01_08_01_world.sql @@ -0,0 +1,52 @@ +-- +SET @Oguid :=6008; +DELETE FROM `gameobject` WHERE `id`=186487; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@Oguid, 186487, 571, 1, 1, 2821.75, -3603.67, 245.555, 3.49556, 0, 0, 0.984379, -0.176061, -300, 0, 1); + +SET @CGUID := 76053; +DELETE FROM `creature_template_addon` WHERE `entry` IN (24029); +INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(24029, 0, 0x0, 0x1, 12544); -- Wyrmcaller Vile - Frost Armor + +DELETE FROM `creature_addon` WHERE `guid` IN (@CGUID+5); +INSERT INTO `creature_Addon` (`guid`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +(@CGUID+5, 0, 0x0, 0x1, 43570); -- Invisible Stalker (Floating) - Frost State + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN(43568,43569); +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES +(43568, 34872, 1, 'Frost Strike'), +(43569, 34872, 1, 'Frost trigger '); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN(43568); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,1,43568,0,0,31,0,3,15214,0,0,0,0,'',"Spell 'Frost Strike' Effect 0 can hit 'Invisible Stalker'"); + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID AND @CGUID+8; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID, 15214, 571, 1, 1, 2842.762, -3599.551, 247.2563, 1.658063, 120, 0, 0), -- Invisible Stalker (Area: -Unknown-) +(@CGUID+1, 15214, 571, 1, 1, 2807.391, -3586.93, 247.6916, 3.455752, 120, 0, 0), -- Invisible Stalker (Area: -Unknown-) +(@CGUID+2, 15214, 571, 1, 1, 2833.016, -3621.016, 247.373, 1.850049, 120, 0, 0), -- Invisible Stalker (Area: -Unknown-) +(@CGUID+3, 23033, 571, 1, 1, 2831.685, -3611.948, 257.9287, 0.2479207, 120, 0, 0), -- Invisible Stalker (Floating) (Area: -Unknown-) (Auras: 43570 - Frost State) +(@CGUID+4, 23033, 571, 1, 1, 2832.849, -3638.875, 246.9362, 0.5235988, 120, 0, 0), -- Invisible Stalker (Floating) (Area: -Unknown-) +(@CGUID+5, 23033, 571, 1, 1, 2820.243, -3602.598, 261.4395, 6.161012, 120, 0, 0), -- Invisible Stalker (Floating) (Area: -Unknown-) +(@CGUID+6, 23033, 571, 1, 1, 2855.824, -3596.345, 248.4855, 5.131268, 120, 0, 0), -- Invisible Stalker (Floating) (Area: -Unknown-) +(@CGUID+7, 24029, 571, 1, 1, 2820.328, -3602.552, 247.9988, 3.665191, 120, 0, 0), -- Wyrmcaller Vile (Area: -Unknown-) (Auras: 12544 - Frost Armor) +(@CGUID+8, 23033, 571, 1, 1, 2818.341, -3604.437, 252.666, 3.845377, 120, 0, 0); -- Invisible Stalker (Floating) (Area: -Unknown-) + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=24029; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (24029,-106031,-@CGUID,-(@CGUID+1),-(@CGUID+2),-(@CGUID+5),-(@CGUID+8)) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@CGUID*100,@CGUID*100+1) 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 +(24029,0,0,0,1,0,100,1,0,0,3000,3000,11,43576,2,0,0,0,0,1,0,0,0,0,0,0,0,'Wyrmcaller Vile - OOC - Cast \'Frost Power\''), +(24029,0,1,0,0,0,100,0,0,0,4000,4000,11,9672,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wyrmcaller Vile - IC - Cast \'Frostbolt\''), +(24029,0,2,0,0,0,100,0,0,0,6000,10000,11,15532,0,0,0,0,0,2,0,0,0,0,0,0,0,'Wyrmcaller Vile - IC - Cast \'Frost Nova\''), +(24029,0,3,0,1,0,100,0,0,0,3000,3000,45,0,1,0,0,0,0,19,23033,10,0,0,0,0,0,'Wyrmcaller Vile - OOC - Cast \'Set Data\''), +(-106031,0,0,0,8,0,100,0,43568,0,0,0,80,@CGUID*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Stalker - On SpellHit \'Frost Strike\' - Call ActionList'), +(-@CGUID,0,0,0,8,0,100,0,43568,0,0,0,80,@CGUID*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Stalker - On SpellHit \'Frost Strike\' - Call ActionList'), +(-(@CGUID+1),0,0,0,8,0,100,0,43568,0,0,0,80,@CGUID*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Stalker - On SpellHit \'Frost Strike\' - Call ActionList'), +(-(@CGUID+2),0,0,0,8,0,100,0,43568,0,0,0,80,@CGUID*100+1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Stalker - On SpellHit \'Frost Strike\' - Call ActionList'), +(@CGUID*100,9,0,0,0,0,100,0,2400,2400,0,0,11,43569,2,0,0,0,0,19,23033,19,0,0,0,0,0,'Invisible Stalker - Action list - Cast \'Frost\''), +(@CGUID*100+1,9,0,0,0,0,100,0,2400,2400,0,0,11,43569,2,0,0,0,0,10,@CGUID+4,23033,0,0,0,0,0,'Invisible Stalker - Action list - Cast \'Frost\''), +(-(@CGUID+5),0,0,0,1,0,100,0,0,0,5000,7000,11,43591,2,0,0,0,0,19,24029,16,0,0,0,0,0,'Invisible Stalker - OOC - Cast \'Soul Siphon\''), +(-(@CGUID+8),0,0,0,38,0,100,0,0,1,0,0,11,43568,2,0,0,0,0,1,0,0,0,0,0,0,0,'Invisible Stalker - On data set - Cast \'Frost Strike\''); From b47381715b5b164442f9cd1260553354c3fafc9b Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 8 Jan 2016 16:37:53 +0100 Subject: [PATCH 496/524] DB: Fix a Typo --- sql/updates/world/2016_01_08_01_world.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/updates/world/2016_01_08_01_world.sql b/sql/updates/world/2016_01_08_01_world.sql index 9df781a078..ebf4560d32 100644 --- a/sql/updates/world/2016_01_08_01_world.sql +++ b/sql/updates/world/2016_01_08_01_world.sql @@ -10,7 +10,7 @@ INSERT INTO `creature_template_addon` (`entry`, `mount`, `bytes1`, `bytes2`, `au (24029, 0, 0x0, 0x1, 12544); -- Wyrmcaller Vile - Frost Armor DELETE FROM `creature_addon` WHERE `guid` IN (@CGUID+5); -INSERT INTO `creature_Addon` (`guid`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES +INSERT INTO `creature_addon` (`guid`, `mount`, `bytes1`, `bytes2`, `auras`) VALUES (@CGUID+5, 0, 0x0, 0x1, 43570); -- Invisible Stalker (Floating) - Frost State DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN(43568,43569); From fda2487270b5e1dcd4a875fbfa646430332ec7f5 Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 8 Jan 2016 18:11:27 +0100 Subject: [PATCH 497/524] DB/Creature: Skyguard Handler/Skyguard Nether Ray Waypoint Closes #16197 By @Saben65 --- sql/updates/world/2016_01_08_02_world.sql | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 sql/updates/world/2016_01_08_02_world.sql diff --git a/sql/updates/world/2016_01_08_02_world.sql b/sql/updates/world/2016_01_08_02_world.sql new file mode 100644 index 0000000000..28e55dfba3 --- /dev/null +++ b/sql/updates/world/2016_01_08_02_world.sql @@ -0,0 +1,35 @@ +-- +DELETE FROM `creature_formations` WHERE `leaderGUID`=79010; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(79010, 79010, 0, 0, 2, 0, 0), +(79010, 79012, 6, 360, 2, 0, 0); + +-- Pathing for Entry: 22987 'TDB FORMAT' +SET @NPC := 79010; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3376.641,`position_y`=3642.897,`position_z`=285.1084 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-3376.641,3642.897,285.1084,0,0,0,0,100,0), -- 00:15:15 +(@PATH,2,-3372.496,3645.907,284.7475,0,0,0,0,100,0), -- 00:15:16 +(@PATH,3,-3376.866,3642.62,285.2078,0,0,0,0,100,0), -- 00:15:22 +(@PATH,4,-3381.402,3626.403,279.4974,0,0,0,0,100,0), -- 00:15:26 +(@PATH,5,-3382.558,3624.162,278.2544,0,0,0,0,100,0), -- 00:15:31 +(@PATH,6,-3385.898,3620.779,276.7867,0,0,0,0,100,0), -- 00:15:33 +(@PATH,7,-3389.558,3619.429,276.3516,0,0,0,0,100,0), -- 00:15:35 +(@PATH,8,-3393.407,3613.085,276.4259,0,0,0,0,100,0), -- 00:15:38 +(@PATH,9,-3390.018,3604.891,276.2281,0,0,0,0,100,0), -- 00:15:41 +(@PATH,10,-3397.005,3597.193,277.0055,0,0,0,0,100,0), -- 00:15:44 +(@PATH,11,-3393.93,3598.741,276.5433,0,0,0,0,100,0), -- 00:15:48 +(@PATH,12,-3390.969,3600.254,276.3882,0,0,0,0,100,0), -- 00:15:50 +(@PATH,13,-3389.908,3605.303,276.3074,0,0,0,0,100,0), -- 00:15:51 +(@PATH,14,-3390.732,3618.796,276.4376,0,0,0,0,100,0), -- 00:15:55 +(@PATH,15,-3384.879,3620.886,277.2273,0,0,0,0,100,0), -- 00:15:58 +(@PATH,16,-3382.095,3624.67,278.3322,0,0,0,0,100,0), -- 00:16:01 +(@PATH,17,-3381.752,3635.601,284.2187,0,0,0,0,100,0), -- 00:16:03 +(@PATH,18,-3379.75,3638.496,285.585,0,0,0,0,100,0), -- 00:16:08 +(@PATH,19,-3376.617,3642.928,285.1052,0,0,0,0,100,0), -- 00:16:12 +(@PATH,20,-3372.458,3645.933,284.7447,0,0,0,0,100,0); -- 00:16:13 +-- 0x1C011842401672C000002500008BC617 .go -3376.641 3642.897 285.1084 From 6274caf6d2db82a1d99498dcaae5e437af2a211b Mon Sep 17 00:00:00 2001 From: Killyana Date: Fri, 8 Jan 2016 18:38:05 +0100 Subject: [PATCH 498/524] DB/Creature: Remove a wrong spawn and fix Lunchbox react state Closes #16198 --- sql/updates/world/2016_01_08_03_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2016_01_08_03_world.sql diff --git a/sql/updates/world/2016_01_08_03_world.sql b/sql/updates/world/2016_01_08_03_world.sql new file mode 100644 index 0000000000..2899c6e06e --- /dev/null +++ b/sql/updates/world/2016_01_08_03_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=25968; +DELETE FROM `creature` WHERE `id`=25801; From ad425f9f17502772289dd18ef6b74dc465556221 Mon Sep 17 00:00:00 2001 From: Saben65 Date: Fri, 8 Jan 2016 22:19:56 +0100 Subject: [PATCH 499/524] Scripts/Shadowmoon Valley: Dragonmaw Peon Fixes issue where NPC does not attack, even when aggro'd. Fixes #16210 Closes #16204 --- src/server/scripts/Outland/zone_shadowmoon_valley.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 7f5d2b95dc..7ea87a3c0c 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -560,6 +560,10 @@ public: me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } else PoisonTimer -= diff; } + if (!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); } }; }; From b1d0855624d1c83850fc36f5242437d7f7c1336b Mon Sep 17 00:00:00 2001 From: jackpoz Date: Fri, 8 Jan 2016 23:13:15 +0100 Subject: [PATCH 500/524] Core/Spells: Fix static analysis issues and a crash Fix confusing NULL checks in Raise Ally check cast. Fix a crash in Raise Ally triggered by executing ".cast back 61999" command targeting a pet in raid while being dead. --- src/server/scripts/Spells/spell_dk.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 193ec7cbb0..3cea620559 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -1744,11 +1744,14 @@ public: { // Raise Ally cannot be casted on alive players Unit* target = GetExplTargetUnit(); - if (target && target->IsAlive()) + if (!target) + return SPELL_FAILED_NO_VALID_TARGETS; + if (target->IsAlive()) return SPELL_FAILED_TARGET_NOT_DEAD; - else if (GetCaster()->ToPlayer()->InArena()) - return SPELL_FAILED_NOT_IN_ARENA; - else if (target->IsGhouled()) + if (Player* playerCaster = GetCaster()->ToPlayer()) + if (playerCaster->InArena()) + return SPELL_FAILED_NOT_IN_ARENA; + if (target->IsGhouled()) return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW; return SPELL_CAST_OK; From e138e094a937139aef7a2f265fff2f64b17ffa7f Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 9 Jan 2016 18:37:17 +0100 Subject: [PATCH 501/524] Scripts/Commands: Modify ".setskill" command to target current Player by default --- src/server/scripts/Commands/cs_misc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index fd9247bd77..6ae509af44 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1362,7 +1362,7 @@ public: int32 level = atol(levelStr); - Player* target = handler->getSelectedPlayer(); + Player* target = handler->getSelectedPlayerOrSelf(); if (!target) { handler->SendSysMessage(LANG_NO_CHAR_SELECTED); From d87f504b538f226c9b95f2683d8c1750bc62009e Mon Sep 17 00:00:00 2001 From: velinath Date: Thu, 7 Jan 2016 21:51:00 -0500 Subject: [PATCH 502/524] Core/Scripts/DB: Migrate specially scripted taxi NPC's to SmartAI --- sql/updates/world/2016_01_07_npc_taxi.sql | 125 +++++++++++++++++++++ src/server/game/Scripting/ScriptLoader.cpp | 2 - src/server/scripts/World/npc_taxi.cpp | 117 ------------------- 3 files changed, 125 insertions(+), 119 deletions(-) create mode 100644 sql/updates/world/2016_01_07_npc_taxi.sql delete mode 100644 src/server/scripts/World/npc_taxi.cpp diff --git a/sql/updates/world/2016_01_07_npc_taxi.sql b/sql/updates/world/2016_01_07_npc_taxi.sql new file mode 100644 index 0000000000..8ed4099450 --- /dev/null +++ b/sql/updates/world/2016_01_07_npc_taxi.sql @@ -0,0 +1,125 @@ +-- Susurrus +-- Add sniffed gossip text to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 7415; +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 +(7415, 0, 0, 'I am ready to be flown down to the Exodar.',14010,1,1,0,0,0,0,'',0); + +DELETE FROM `npc_text` WHERE `ID` = 8955; +INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `Probability0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`) VALUES +(8955, 'Are you ready, $n?', '', 14012, 0, 1, 0, 0, 0, 0, 0, 0); + +-- Set second gossip in gossip menu +DELETE FROM `gossip_menu` WHERE `entry` = 7415; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(7415, 8954), +(7415, 8955); + +-- Migrate NPC to use SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 17435; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14, 15) AND `SourceGroup` = 7415; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,7415,8954,0,0,2,0,23843,1,0,1,0,'','Susurrus - Show gossip menu text if player does not have item 23843 in inventory'), +(14,7415,8955,0,0,2,0,23843,1,0,0,0,'','Susurrus - Show gossip menu text if player has item 23843 in inventory'), +(15,7415,0,0,0,2,0,23843,1,0,0,0,'','Susurrus - Show gossip option 0 if player has item 23843 in inventory'); + +-- Create SmartAI for Susurrus +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 17435); +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 +(17435,0,0,1,62,0,100,0,7415,0,0,0,11,32474,0,0,0,0,0,7,0,0,0,0,0,0,0,'Susurrus - On Gossip Option 0 Selected - Cast Spell 32474'), +(17435,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,'Susurrus - On Linked Actions - Close Gossip'); + + +-- Protectorate Nether Drake +-- Add sniffed gossip text to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 8229; +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 +(8229, 0, 0, 'I''m ready to fly! Take me up, dragon!',18637,1,1,0,0,0,0,'',0); + +-- Migrate NPC to use SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 20903; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 8229; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,8229,0,0,0,2,0,29778,1,0,0,0,'','Protectorate Nether Drake - Show gossip option 0 if player has item 23843 in inventory'), +(15,8229,0,0,0,9,0,10438,0,0,0,0,'','Protectorate Nether Drake - Show gossip option 0 if player has quest 10438'); +-- Create SmartAI for Protectorate Nether Drake +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 20903); +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 +(20903,0,0,1,62,0,100,0,8229,0,0,0,52,627,0,0,0,0,0,7,0,0,0,0,0,0,0,'Protectorate Nether Drake - On Gossip Option 0 Selected - Init Taxi Path 627'), +(20903,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,'Protectorate Nether Drake - On Linked Actions - Close Gossip'); + + +-- Veronia +-- Add sniffed gossip text to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 8082; +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 +(8082, 0, 0, 'I''m as ready as I''ll ever be.',17761,1,1,0,0,0,0,'',0); + +DELETE FROM `gossip_menu` WHERE `entry` = 8082; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(8082, 9989), +(8082, 9990); + +-- Migrate NPC to use SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 20162; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (14,15) AND `SourceGroup` = 8082; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,8082,9989,0,0,28,0,10652,0,0,1,0,'','Veronia - Show gossip menu text if player does not have quest 10652'), +(14,8082,9990,0,0,28,0,10652,0,0,0,0,'','Veronia - Show gossip menu text if player has quest 10652'), +(15,8082,0,0,0,28,0,10652,0,0,0,0,'','Veronia - Show gossip option 0 if player has quest 10652'); +-- Create SmartAI for Veronia +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 20162); +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 +(20162,0,0,1,62,0,100,0,8082,0,0,0,85,34905,0,0,0,0,0,7,0,0,0,0,0,0,0,'Veronia - On Gossip Option 0 Selected - Invoker Cast \'Stealth Flight\''), +(20162,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,'Veronia - On Linked Actions - Close Gossip'); + + +-- Cassa Crimsonwing +-- Add sniffed gossip text to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 8782; +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 +(8782, 0, 0, 'Lady Jaina told me to speak to you about using a gryphon to survey Alcaz Island.',22176,1,1,0,0,0,0,'',0); + +-- Migrate NPC to use SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 23704; + +-- Condition: Gossip menu ID 0 needs quest ID 11142 to be incomplete. +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`= 15 AND `SourceGroup` = 8782 AND `SourceEntry` = 0; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,8782,0,0,0,9,0,11142,0,0,0,0,'','Cassa Crimsonwing - Show gossip option 0 if player has taken quest ID 11142'); + +-- Create SmartAI for Cassa Crimsonwing +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 23704); +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 +(23704,0,0,1,62,0,100,0,8782,0,0,0,11,42295,0,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'); + + +-- Brazen +-- Add sniffed gossip text to menu +DELETE FROM `gossip_menu_option` WHERE `menu_id` = 7959; +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 +(7959, 0, 0, 'I''m ready to go to Durnholde Keep.',16461,1,1,0,0,0,0,'',0); + +DELETE FROM `gossip_menu` WHERE `entry` = 7959; +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(7959, 9779), +(7959, 9780); + +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 18725; + +-- Condition: On gossip menu click, if item exists, perform linked action +-- Condition: On gossip menu click, if item exists, perform linked action +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`IN (14, 15) AND `SourceGroup` = 7959; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(14,7959,9779,0,0,2,0,25853,1,0,0,0,'','Brazen - Show gossip menu text if player has item 25853'), +(14,7959,9780,0,0,2,0,25853,1,0,1,0,'','Brazen - Show gossip menu text if player does not have item 25853'), +(15,7959,0,0,0,2,0,25853,1,0,0,0,'','Brazen - Show gossip option 0 if player has item 25853'); + +-- Create SmartAI for Brazen +DELETE FROM `smart_scripts` WHERE (source_type = 0 AND entryorguid = 18725); +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 +(18725,0,0,1,62,0,100,0,7959,0,0,0,52,534,0,0,0,0,0,7,0,0,0,0,0,0,0,'Brazen - On Gossip Option 0 Selected - Activate Taxi Path 534'), +(18725,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,'Brazen - On Linked Actions - Close Gossip'); diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 0b9a53649a..2922e4ef58 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -89,7 +89,6 @@ void AddSC_item_scripts(); void AddSC_npc_professions(); void AddSC_npc_innkeeper(); void AddSC_npcs_special(); -void AddSC_npc_taxi(); void AddSC_achievement_scripts(); void AddSC_action_ip_logger(); void AddSC_duel_reset(); @@ -781,7 +780,6 @@ void AddWorldScripts() AddSC_npc_professions(); AddSC_npc_innkeeper(); AddSC_npcs_special(); - AddSC_npc_taxi(); 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. diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp deleted file mode 100644 index a200ba545d..0000000000 --- a/src/server/scripts/World/npc_taxi.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2008-2016 TrinityCore - * Copyright (C) 2006-2009 ScriptDev2 - * - * 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 . - */ - -/* ScriptData -SDName: Npc_Taxi -SD%Complete: 0% -SDComment: To be used for taxi NPCs that are located globally. -SDCategory: NPCs -EndScriptData -*/ - -#include "ScriptMgr.h" -#include "ScriptedCreature.h" -#include "ScriptedGossip.h" -#include "Player.h" -#include "WorldSession.h" - -#define GOSSIP_SUSURRUS "I am ready." -#define GOSSIP_NETHER_DRAKE "I'm ready to fly! Take me up, dragon!" -#define GOSSIP_BRAZEN "I am ready to go to Durnholde Keep." -#define GOSSIP_VERONIA "Fly me to Manaforge Coruu please" -#define GOSSIP_CRIMSONWING "" - -class npc_taxi : public CreatureScript -{ -public: - npc_taxi() : CreatureScript("npc_taxi") { } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - switch (creature->GetEntry()) - { - case 17435: // Azuremyst Isle - Susurrus - if (player->HasItemCount(23843, 1, true)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SUSURRUS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - break; - case 20903: // Netherstorm - Protectorate Nether Drake - if (player->GetQuestStatus(10438) == QUEST_STATUS_INCOMPLETE && player->HasItemCount(29778)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_NETHER_DRAKE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - break; - case 18725: // Old Hillsbrad Foothills - Brazen - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BRAZEN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - break; - case 20162: // Netherstorm - Veronia - //Behind Enemy Lines - if (player->GetQuestStatus(10652) != QUEST_STATUS_REWARDED) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VERONIA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15); - break; - case 23704: // Dustwallow Marsh - Cassa Crimsonwing - if (player->GetQuestStatus(11142) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CRIMSONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); - break; - } - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF: - //spellId is correct, however it gives flight a somewhat funny effect //TaxiPath 506. - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 32474, true); - break; - case GOSSIP_ACTION_INFO_DEF + 1: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(627); //TaxiPath 627 (possibly 627+628(152->153->154->155)) - break; - case GOSSIP_ACTION_INFO_DEF + 2: - if (!player->HasItemCount(25853)) - player->SEND_GOSSIP_MENU(9780, creature->GetGUID()); - else - { - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(534); //TaxiPath 534 - } - break; - case GOSSIP_ACTION_INFO_DEF + 15: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 34905, true); //TaxiPath 606 - break; - case GOSSIP_ACTION_INFO_DEF + 25: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 42295, true); - break; - } - - return true; - } -}; - -void AddSC_npc_taxi() -{ - new npc_taxi; -} From 4191bb868a33288a18079494aff6b52df19dc5b4 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 9 Jan 2016 21:53:53 +0100 Subject: [PATCH 503/524] Scripts/ICC: Fix static analysis issue Fix an issue reported by static analysis --- .../scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 1de3884664..66806920e7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -135,6 +135,7 @@ class boss_lord_marrowgar : public CreatureScript _boneStormDuration = RAID_MODE(20000, 30000, 20000, 30000); _baseSpeed = creature->GetSpeedRate(MOVE_RUN); _coldflameLastPos.Relocate(creature); + _introDone = false; _boneSlice = false; } From 70868ceee781e6b73da6ec8de4e48ae8fe709242 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 10 Jan 2016 13:50:18 +0100 Subject: [PATCH 504/524] DB/SAI: Fix Windroc Matriarch script and text By @Saben65 and @velinath Closes #16215 --- sql/updates/world/2016_01_10_00_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2016_01_10_00_world.sql diff --git a/sql/updates/world/2016_01_10_00_world.sql b/sql/updates/world/2016_01_10_00_world.sql new file mode 100644 index 0000000000..83ed21c848 --- /dev/null +++ b/sql/updates/world/2016_01_10_00_world.sql @@ -0,0 +1,3 @@ +-- +UPDATE `creature_text` SET `text`='Windroc Matriarch lets loose a terrifying shriek.', `BroadcastTextId`=16149 WHERE `entry`=19055; +UPDATE `smart_scripts` SET `action_type`=49, `action_param1`=0 WHERE `entryorguid`=1905500 AND `id`=3; From 419430987335906eef344678d49a5e653631d060 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 10 Jan 2016 14:13:24 +0100 Subject: [PATCH 505/524] DB/Creature: Fix The Crippler unit_flags Closes #16148 --- sql/updates/world/2016_01_10_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2016_01_10_01_world.sql diff --git a/sql/updates/world/2016_01_10_01_world.sql b/sql/updates/world/2016_01_10_01_world.sql new file mode 100644 index 0000000000..c79c157a1a --- /dev/null +++ b/sql/updates/world/2016_01_10_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `unit_flags`=32832 WHERE `entry`= 18689; From 2668258fe227252fd337cb2d668a27b6a4a02eb8 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 10 Jan 2016 14:48:31 +0100 Subject: [PATCH 506/524] DB/SAI: Harvest Collector Closes #16158 --- sql/updates/world/2016_01_10_02_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2016_01_10_02_world.sql diff --git a/sql/updates/world/2016_01_10_02_world.sql b/sql/updates/world/2016_01_10_02_world.sql new file mode 100644 index 0000000000..eca8ef0784 --- /dev/null +++ b/sql/updates/world/2016_01_10_02_world.sql @@ -0,0 +1,6 @@ +-- +UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=25623; +DELETE FROM `smart_scripts` WHERE `entryorguid`=25623 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 +(25623, 0, 0, 0, 0, 0, 100, 0, 3000, 5000, 4000, 6000, 11, 54185, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Harvest Collector - IC - Cast Claw Slash'), +(25623, 0, 1, 0, 8, 0, 100, 0, 47166, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Harvest Collector - On spell hit - Despawn'); From 69d59885c459b6a8f12384c401784edfc18d6888 Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 10 Jan 2016 15:21:07 +0100 Subject: [PATCH 507/524] DB/SAI: Fix the react state for Darkfallen Bloodbearer Closes #16159 --- sql/updates/world/2016_01_10_03_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2016_01_10_03_world.sql diff --git a/sql/updates/world/2016_01_10_03_world.sql b/sql/updates/world/2016_01_10_03_world.sql new file mode 100644 index 0000000000..5ac352ffe1 --- /dev/null +++ b/sql/updates/world/2016_01_10_03_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `entryorguid`=-96556 AND `id`=0 AND `source_type`=0; From 614ae6cba93498bd153be6da79231c704d90b9ab Mon Sep 17 00:00:00 2001 From: Killyana Date: Sun, 10 Jan 2016 18:58:18 +0100 Subject: [PATCH 508/524] DB: Game_tele to Emerald Dream By @Helias Closes #16131 --- sql/updates/world/2016_01_10_04_world.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 sql/updates/world/2016_01_10_04_world.sql diff --git a/sql/updates/world/2016_01_10_04_world.sql b/sql/updates/world/2016_01_10_04_world.sql new file mode 100644 index 0000000000..da6eed191a --- /dev/null +++ b/sql/updates/world/2016_01_10_04_world.sql @@ -0,0 +1,11 @@ +-- +DELETE FROM `instance_template` WHERE `map` = 169; +INSERT INTO `instance_template` (`map`, `parent`, `script`, `allowMount`) VALUES +(169, 0, '', 0); + +DELETE FROM `game_tele` WHERE `id` IN (1425, 1426, 1427, 1428); +INSERT INTO `game_tele` (`id`, `position_x`, `position_y`, `position_z`, `orientation`, `map`, `name`) VALUES +(1425, -366.091, 3097.86, 92.317, 0.0487625, 169, 'EmeraldDream'), +(1426, 2781.566406, 3006.763184, 23.221882, 0.5, 169, 'EmeraldStatue'), +(1427, -2128.12, -1005.89, 132.213, 0.5, 169, 'VerdantFields'), +(1428, 2732.93, -3319.63, 101.284, 0.5, 169, 'EmeraldForest'); From a7f1df606188fc789c00efc068e8ddfe6b25d692 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 10 Jan 2016 19:24:49 +0000 Subject: [PATCH 509/524] DB/Misc: Call to Arms: The Plaguelands/Scarlet Diversions (3.3.5 Only) http://www.wowhead.com/quest=5093/a-call-to-arms-the-plaguelands#comments All versions of this quest are meant to be optional breadcrumb quests to lead players to the bulwark to quest in Western Plaguelands, previously on tc you could not continue chain unless breadcrumb was taken first. --- sql/updates/world/2016_01_10_05_world335.sql | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 sql/updates/world/2016_01_10_05_world335.sql diff --git a/sql/updates/world/2016_01_10_05_world335.sql b/sql/updates/world/2016_01_10_05_world335.sql new file mode 100644 index 0000000000..468e9c6dc1 --- /dev/null +++ b/sql/updates/world/2016_01_10_05_world335.sql @@ -0,0 +1,21 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` in(19,20) AND `SourceId` in(5066,5090,5091,5093,5094,5095,10373,10374); + +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(19, 0, 5066, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(20, 0, 5066, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(19, 0, 5090, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(20, 0, 5090, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(19, 0, 5091, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(20, 0, 5091, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(19, 0, 5093, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(20, 0, 5093, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(19, 0, 5094, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(20, 0, 5094, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(19, 0, 5095, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(20, 0, 5095, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(19, 0, 10373, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(20, 0, 10373, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(19, 0, 10374, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), +(20, 0, 10374, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'); + +UPDATE `quest_template_addon` SET `NextQuestID`=0 WHERE `ID` in(5066,5090,5091,5093,5094,5095,10373,10374); From b08038c8b69732d10d179ecccbad60e7853f40b4 Mon Sep 17 00:00:00 2001 From: ariel- Date: Sun, 10 Jan 2016 23:38:57 -0300 Subject: [PATCH 510/524] Fix typo after dcb7082277447c21b11c4a1d59f105fa342c172e --- src/server/game/AI/SmartScripts/SmartScript.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index 11fbc2f77b..e8b89a813b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -209,7 +209,7 @@ class SmartScript if (lookupRoot) { - if (!meOrigGUID) + if (!meOrigGUID.IsEmpty()) { if (Creature* m = ObjectAccessor::GetCreature(*lookupRoot, meOrigGUID)) { @@ -217,7 +217,8 @@ class SmartScript go = NULL; } } - if (!goOrigGUID) + + if (!goOrigGUID.IsEmpty()) { if (GameObject* o = ObjectAccessor::GetGameObject(*lookupRoot, goOrigGUID)) { From 95a2eec9232afdb1614e648dc4d587e307515d34 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Tue, 12 Jan 2016 07:27:27 +0100 Subject: [PATCH 511/524] Core/Scripts: move npc_shadowfang_prisoner gossip option to DB Getting rid of one more incorrect and hardcoded text which now will be read correct and from the DB instead. Wrong text: "Thanks, I'll follow you to the door." (core) Correct text: "Please unlock the courtyard door." (DB) Thanks to @Aokromes, @r00ty, @velinath, @Nayd, @Treeston, @Zedron and lots of other regular TrinityCore developers and members for the inspiration and motivation, as well as helpfulness along the way. --- sql/updates/world/2016_01_12_12_world335.sql | 5 +++++ .../EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 sql/updates/world/2016_01_12_12_world335.sql diff --git a/sql/updates/world/2016_01_12_12_world335.sql b/sql/updates/world/2016_01_12_12_world335.sql new file mode 100644 index 0000000000..c3206e70ac --- /dev/null +++ b/sql/updates/world/2016_01_12_12_world335.sql @@ -0,0 +1,5 @@ +-- Insert missing gossip_menu_option 21213 for Sorcerer Ashcrombe and 21214 for Deathstalker Adamant: +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (21213,21214) AND `OptionBroadcastTextID`= 2802; +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 +(21213,0,0,'Please unlock the courtyard door.',2802,1,1,0,0,0,0,'',0), +(21214,0,0,'Please unlock the courtyard door.',2802,1,1,0,0,0,0,'',0); diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index 47a6c0b6a2..94cf2825e6 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -63,8 +63,6 @@ enum Creatures NPC_ASH = 3850 }; -#define GOSSIP_ITEM_DOOR "Thanks, I'll follow you to the door." - class npc_shadowfang_prisoner : public CreatureScript { public: @@ -93,7 +91,7 @@ public: InstanceScript* instance = creature->GetInstanceScript(); if (instance && instance->GetData(TYPE_FREE_NPC) != DONE && instance->GetData(TYPE_RETHILGORE) == DONE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_DOOR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + player->ADD_GOSSIP_ITEM_DB(Player::GetDefaultGossipMenuForSource(creature), 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); From 22dd523c1f6071f591f4fa8d249464cb96e7febc Mon Sep 17 00:00:00 2001 From: tkrokli Date: Tue, 12 Jan 2016 09:38:56 +0100 Subject: [PATCH 512/524] Core/Scripts: move GOSSIP_ACCEPT_DUEL to DB Another attempt to shorten the list of hardcoded gossip menu options. This is the gossip menu option of the NPC ID 28406, Death Knight Initiate in Death's Breach in the Scarlet Enclave, the death knight starting area. This gossip is tied to the quest "Death's Challenge". Removing this text in the core script: "I challenge you, death knight!" (#define GOSSIP_ACCEPT_DUEL) and using `ADD_GOSSIP_ITEM_DB()` to pull the gossip_menu_option 9765 from the database instead. --- .../scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index c65ee5482e..81044a0dbb 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -449,8 +449,6 @@ class npc_eye_of_acherus : public CreatureScript ## npc_death_knight_initiate ######*/ -#define GOSSIP_ACCEPT_DUEL "I challenge you, death knight!" - enum Spells_DKI { SPELL_DUEL = 52996, @@ -511,7 +509,7 @@ public: if (player->IsInCombat() || creature->IsInCombat()) return true; - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ACCEPT_DUEL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); + player->ADD_GOSSIP_ITEM_DB(Player::GetDefaultGossipMenuForSource(creature), 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); } return true; From 76d5dbad4b7007fdff892e2fcaff6c000a713ed7 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Tue, 12 Jan 2016 15:08:06 +0100 Subject: [PATCH 513/524] [3.3.5] Core/Script: move Myranda the Hag's gossip option to DB Removing hardcoded text from the core script and into the DB: "I am ready for the illusion, Myranda." This quest is 3.3.5 *only*. Removed in patch 4.0.3a. Addendum: enum ILLUSION_GOSSIP = 4773 , instead of "magic number". --- sql/updates/world/2016_01_12_14_world335.sql | 4 ++++ .../scripts/EasternKingdoms/zone_western_plaguelands.cpp | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 sql/updates/world/2016_01_12_14_world335.sql diff --git a/sql/updates/world/2016_01_12_14_world335.sql b/sql/updates/world/2016_01_12_14_world335.sql new file mode 100644 index 0000000000..354d0bc129 --- /dev/null +++ b/sql/updates/world/2016_01_12_14_world335.sql @@ -0,0 +1,4 @@ +-- Insert missing gossip_menu_option 3801 for Myranda the Hag: +DELETE FROM `gossip_menu_option` WHERE `menu_id`= 3801 AND `OptionBroadcastTextID`= 7306; +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 +(3801,0,0,'I am ready for the illusion, Myranda.',7306,2,3,0,0,0,0,'',0); diff --git a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp index 4ab9d87288..6cf86c3069 100644 --- a/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_western_plaguelands.cpp @@ -114,13 +114,12 @@ public: enum Myranda { + ILLUSION_GOSSIP = 4773, QUEST_SUBTERFUGE = 5862, QUEST_IN_DREAMS = 5944, SPELL_SCARLET_ILLUSION = 17961 }; -#define GOSSIP_ITEM_ILLUSION "I am ready for the illusion, Myranda." - class npc_myranda_the_hag : public CreatureScript { public: @@ -146,8 +145,8 @@ public: player->GetQuestStatus(QUEST_IN_DREAMS) != QUEST_STATUS_COMPLETE && !player->HasAura(SPELL_SCARLET_ILLUSION)) { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_ILLUSION, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->SEND_GOSSIP_MENU(4773, creature->GetGUID()); + player->ADD_GOSSIP_ITEM_DB(Player::GetDefaultGossipMenuForSource(creature), 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + player->SEND_GOSSIP_MENU(ILLUSION_GOSSIP, creature->GetGUID()); return true; } else From fc2a570d09e58563f1b123ee5e8c8e8151a66c2b Mon Sep 17 00:00:00 2001 From: sirikfoll Date: Tue, 12 Jan 2016 15:24:55 -0200 Subject: [PATCH 514/524] Core/Spells Implement SpellScript needed for Achievement The Turkinator Closes #3997 --- sql/updates/world/2016_01_12_99_world.sql | 15 +++++ src/server/scripts/Spells/spell_holiday.cpp | 75 +++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 sql/updates/world/2016_01_12_99_world.sql diff --git a/sql/updates/world/2016_01_12_99_world.sql b/sql/updates/world/2016_01_12_99_world.sql new file mode 100644 index 0000000000..6ff3a76991 --- /dev/null +++ b/sql/updates/world/2016_01_12_99_world.sql @@ -0,0 +1,15 @@ +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=32820; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=32820; +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 +(32820,0,0,0,6,0,100,0,0,0,0,0,11,62014,2,0,0,0,0,7,0,0,0,0,0,0,0,"Wild Turkey - On Just Died - Cast 'Turkey Tracker'"); + +DELETE FROM `creature_text` WHERE `entry`=32820; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(32820,0,0,'Turkey Hunter!',42,0,100,0,0,0,33163,0,'Wild Turkey'), +(32820,1,0,'Turkey Domination!',42,0,100,0,0,0,33164,0,'Wild Turkey'), +(32820,2,0,'Turkey Slaughter!',42,0,100,0,0,0,33165,0,'Wild Turkey'), +(32820,3,0,'TURKEY TRIUMPH!',42,0,100,0,0,0,33167,0,'Wild Turkey'); + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pilgrims_bounty_turkey_tracker'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(62014,'spell_pilgrims_bounty_turkey_tracker'); diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index 94f12d8cda..7fe1f54a59 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -410,6 +410,80 @@ class spell_pilgrims_bounty_buff_food : public SpellScriptLoader } }; +enum TheTurkinator +{ + SPELL_KILL_COUNTER_VISUAL = 62015, + SPELL_KILL_COUNTER_VISUAL_MAX = 62021, + EMOTE_TURKEY_HUNTER = 0, + EMOTE_TURKEY_DOMINATION = 1, + EMOTE_TURKEY_SLAUGHTER = 2, + EMOTE_TURKEY_TRIUMPH = 3 +}; + +class spell_pilgrims_bounty_turkey_tracker : public SpellScriptLoader +{ + public: + spell_pilgrims_bounty_turkey_tracker() : SpellScriptLoader("spell_pilgrims_bounty_turkey_tracker") { } + + class spell_pilgrims_bounty_turkey_tracker_SpellScript : public SpellScript + { + PrepareSpellScript(spell_pilgrims_bounty_turkey_tracker_SpellScript); + + bool Validate(SpellInfo const* /*spell*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_KILL_COUNTER_VISUAL) || !sSpellMgr->GetSpellInfo(SPELL_KILL_COUNTER_VISUAL_MAX)) + return false; + return true; + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + Creature* caster = GetCaster()->ToCreature(); + Unit* target = GetHitUnit(); + + if (!target || !caster) + return; + + if (target->HasAura(SPELL_KILL_COUNTER_VISUAL_MAX)) + return; + + if (Aura const* aura = target->GetAura(GetSpellInfo()->Id)) + { + switch (aura->GetStackAmount()) + { + case 10: + caster->AI()->Talk(EMOTE_TURKEY_HUNTER, target); + break; + case 20: + caster->AI()->Talk(EMOTE_TURKEY_DOMINATION, target); + break; + case 30: + caster->AI()->Talk(EMOTE_TURKEY_SLAUGHTER, target); + break; + case 40: + caster->AI()->Talk(EMOTE_TURKEY_TRIUMPH, target); + target->CastSpell(target, SPELL_KILL_COUNTER_VISUAL_MAX, true); + target->RemoveAurasDueToSpell(GetSpellInfo()->Id); + break; + default: + return; + } + target->CastSpell(target, SPELL_KILL_COUNTER_VISUAL, true); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_pilgrims_bounty_turkey_tracker_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_pilgrims_bounty_turkey_tracker_SpellScript(); + } +}; + enum Mistletoe { SPELL_CREATE_MISTLETOE = 26206, @@ -973,6 +1047,7 @@ void AddSC_holiday_spell_scripts() new spell_pilgrims_bounty_buff_food("spell_gen_spice_bread_stuffing", SPELL_WELL_FED_HIT_TRIGGER); new spell_pilgrims_bounty_buff_food("spell_gen_pumpkin_pie", SPELL_WELL_FED_SPIRIT_TRIGGER); new spell_pilgrims_bounty_buff_food("spell_gen_candied_sweet_potato", SPELL_WELL_FED_HASTE_TRIGGER); + new spell_pilgrims_bounty_turkey_tracker(); // Winter Veil new spell_winter_veil_mistletoe(); new spell_winter_veil_px_238_winter_wondervolt(); From 3c3cde028cbcab64d463707e192fc333d8cadda0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 12 Jan 2016 19:08:37 +0100 Subject: [PATCH 515/524] Core/Quests: Fixed quest sharing Closes #12304 Closes #16183 --- .../game/Entities/Creature/GossipDef.cpp | 4 +- src/server/game/Entities/Player/Player.cpp | 8 +--- src/server/game/Handlers/QuestHandler.cpp | 43 +++++++++++++------ 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index be8553ed47..711196f6a2 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -408,10 +408,10 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU data << questTitle; data << questDetails; data << questObjectives; - data << uint8(activateAccept ? 1 : 0); // auto finish + data << uint8(activateAccept ? 1 : 0); // CGQuestInfo::m_autoLaunched data << uint32(quest->GetFlags()); // 3.3.3 questFlags data << uint32(quest->GetSuggestedPlayers()); - data << uint8(0); // IsFinished? value is sent back to server in quest accept packet + data << uint8(0); // CGQuestInfo::m_startQuestCheat if (quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4fdf25e41c..95e76a2576 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15638,13 +15638,7 @@ QuestStatus Player::GetQuestStatus(uint32 quest_id) const bool Player::CanShareQuest(uint32 quest_id) const { Quest const* qInfo = sObjectMgr->GetQuestTemplate(quest_id); - if (qInfo && qInfo->HasFlag(QUEST_FLAGS_SHARABLE)) - { - QuestStatusMap::const_iterator itr = m_QuestStatus.find(quest_id); - if (itr != m_QuestStatus.end()) - return itr->second.Status == QUEST_STATUS_INCOMPLETE; - } - return false; + return qInfo && qInfo->HasFlag(QUEST_FLAGS_SHARABLE) && IsActiveQuest(quest_id); } void Player::SetQuestStatus(uint32 questId, QuestStatus status, bool update /*= true*/) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 31ba812ab9..faf6677c90 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -102,12 +102,16 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) { ObjectGuid guid; uint32 questId; - uint32 unk1; - recvData >> guid >> questId >> unk1; + uint32 startCheat; + recvData >> guid >> questId >> startCheat; - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_ACCEPT_QUEST %s, quest = %u, unk1 = %u", guid.ToString().c_str(), questId, unk1); + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_ACCEPT_QUEST %s, quest = %u, startCheat = %u", guid.ToString().c_str(), questId, startCheat); - Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT|TYPEMASK_ITEM|TYPEMASK_PLAYER); + Object* object; + if (!guid.IsPlayer()) + object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT | TYPEMASK_ITEM); + else + object = ObjectAccessor::FindPlayer(guid); #define CLOSE_GOSSIP_CLEAR_DIVIDER() \ do { \ @@ -129,6 +133,11 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) CLOSE_GOSSIP_CLEAR_DIVIDER(); return; } + if (_player->GetGroup() != playerQuestObject->GetGroup() || (_player != playerQuestObject && !playerQuestObject->GetGroup())) + { + CLOSE_GOSSIP_CLEAR_DIVIDER(); + return; + } } else { @@ -141,7 +150,10 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) // some kind of WPE protection if (!_player->CanInteractWithQuestGiver(object)) + { + CLOSE_GOSSIP_CLEAR_DIVIDER(); return; + } if (Quest const* quest = sObjectMgr->GetQuestTemplate(questId)) { @@ -199,7 +211,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) } } - _player->PlayerTalkClass->SendCloseGossip(); + CLOSE_GOSSIP_CLEAR_DIVIDER(); #undef CLOSE_GOSSIP_CLEAR_DIVIDER } @@ -588,7 +600,7 @@ void WorldSession::HandlePushQuestToParty(WorldPacket& recvPacket) else { receiver->SetDivider(sender->GetGUID()); - receiver->PlayerTalkClass->SendQuestGiverQuestDetails(quest, sender->GetGUID(), true); + receiver->PlayerTalkClass->SendQuestGiverQuestDetails(quest, receiver->GetGUID(), true); } } } @@ -602,17 +614,20 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "WORLD: Received MSG_QUEST_PUSH_RESULT"); - if (_player->GetDivider() && _player->GetDivider() == guid) + if (_player->GetDivider()) { - Player* player = ObjectAccessor::FindPlayer(_player->GetDivider()); - if (player) + if (_player->GetDivider() == guid) { - WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 4 + 1); - data << uint64(_player->GetGUID()); - data << uint8(msg); // valid values: 0-8 - player->SendDirectMessage(&data); - _player->SetDivider(ObjectGuid::Empty); + Player* player = ObjectAccessor::FindPlayer(_player->GetDivider()); + if (player) + { + WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 4 + 1); + data << uint64(_player->GetGUID()); + data << uint8(msg); // valid values: 0-8 + player->SendDirectMessage(&data); + } } + _player->SetDivider(ObjectGuid::Empty); } } From 48940e292fdde1042f096cac507c2b1b54e8146b Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 12 Jan 2016 19:41:27 +0100 Subject: [PATCH 516/524] Core/Quests: Fixed party accept quests --- src/server/game/Handlers/QuestHandler.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index faf6677c90..002adc19a8 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -133,7 +133,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) CLOSE_GOSSIP_CLEAR_DIVIDER(); return; } - if (_player->GetGroup() != playerQuestObject->GetGroup() || (_player != playerQuestObject && !playerQuestObject->GetGroup())) + if (!_player->IsInSameRaidWith(playerQuestObject)) { CLOSE_GOSSIP_CLEAR_DIVIDER(); return; @@ -468,17 +468,22 @@ void WorldSession::HandleQuestConfirmAccept(WorldPacket& recvData) if (!_player->IsInSameRaidWith(originalPlayer)) return; - if (!originalPlayer->CanShareQuest(questId)) + if (!originalPlayer->IsActiveQuest(questId)) return; if (!_player->CanTakeQuest(quest, true)) return; if (_player->CanAddQuest(quest, true)) + { _player->AddQuestAndCheckCompletion(quest, NULL); // NULL, this prevent DB script from duplicate running - _player->SetDivider(ObjectGuid::Empty); + if (quest->GetSrcSpell() > 0) + _player->CastSpell(_player, quest->GetSrcSpell(), true); + } } + + _player->SetDivider(ObjectGuid::Empty); } void WorldSession::HandleQuestgiverCompleteQuest(WorldPacket& recvData) From 38782deed0e62f8348d32930d2b12dc1a0c1edd0 Mon Sep 17 00:00:00 2001 From: elecyb Date: Tue, 12 Jan 2016 02:04:33 -0300 Subject: [PATCH 517/524] Core/Entities: Show destroy animation for creatures and totems. Now all pets and totems will have their proper die/destroy animation when killed. Ported from MaNGOS. --- src/server/game/Entities/Object/Object.cpp | 9 ++++++++- src/server/game/Entities/Totem/Totem.cpp | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 253fed76fa..615202f2ba 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2426,7 +2426,14 @@ void WorldObject::DestroyForNearbyPlayers() if (isType(TYPEMASK_UNIT) && ToUnit()->GetCharmerGUID() == player->GetGUID()) /// @todo this is for puppet continue; - DestroyForPlayer(player); + if (GetTypeId() == TYPEID_UNIT) + { + // at remove from world (destroy) show kill animation + DestroyForPlayer(player, ToUnit()->IsDuringRemoveFromWorld() && ToCreature()->isDead()); + } + else + DestroyForPlayer(player); + player->m_clientGUIDs.erase(GetGUID()); } } diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp index 169c0e422b..5e8544246a 100644 --- a/src/server/game/Entities/Totem/Totem.cpp +++ b/src/server/game/Entities/Totem/Totem.cpp @@ -142,6 +142,10 @@ void Totem::UnSummon(uint32 msTime) } } + // any totem unsummon look like as totem kill, req. for proper animation + if (IsAlive()) + setDeathState(DEAD); + AddObjectToRemoveList(); } From ae6c59cd4e19d2bd2a24ed5b44003de06599e894 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Tue, 12 Jan 2016 22:17:04 +0100 Subject: [PATCH 518/524] Fix SQL update file name --- .../world/{2016_01_12_99_world.sql => 2016_01_12_03_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2016_01_12_99_world.sql => 2016_01_12_03_world.sql} (100%) diff --git a/sql/updates/world/2016_01_12_99_world.sql b/sql/updates/world/2016_01_12_03_world.sql similarity index 100% rename from sql/updates/world/2016_01_12_99_world.sql rename to sql/updates/world/2016_01_12_03_world.sql From 8dd072722ab523b611fa65e8bd6b84653dd7cacb Mon Sep 17 00:00:00 2001 From: Kittnz Date: Tue, 12 Jan 2016 22:17:48 +0100 Subject: [PATCH 519/524] DB/Event: Additional Feast of Winter Veil gameobject & creature fixes --- sql/updates/world/2016_01_12_04_world.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 sql/updates/world/2016_01_12_04_world.sql diff --git a/sql/updates/world/2016_01_12_04_world.sql b/sql/updates/world/2016_01_12_04_world.sql new file mode 100644 index 0000000000..b758a21da9 --- /dev/null +++ b/sql/updates/world/2016_01_12_04_world.sql @@ -0,0 +1,14 @@ +SET @OGUID:=79521; +SET @CGUID:=52265; +SET @Event:=2; + +DELETE FROM `gameobject` WHERE `guid` IN (@OGUID+0); +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, 187567, 530, 1, 1, -690.7932, 2724.943, 100.9289, 6.265733, 0, 0, 0, 1, 120, 255, 1); -- 187567 (Area: 3483) + +DELETE FROM `game_event_gameobject` WHERE `guid` IN (@OGUID+0); +INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES +(@Event, @OGUID+0); + +DELETE FROM `game_event_creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+4 AND `eventEntry`=@Event; +INSERT INTO game_event_creature SELECT @Event, creature.guid FROM `creature` WHERE creature.guid BETWEEN @CGUID+0 AND @CGUID+4; From 60e3127714f81748c8f2bc1d9774a71ecca786f2 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Tue, 12 Jan 2016 22:21:17 +0100 Subject: [PATCH 520/524] Quick little SQL update --- sql/updates/world/2016_01_12_04_world.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/updates/world/2016_01_12_04_world.sql b/sql/updates/world/2016_01_12_04_world.sql index b758a21da9..7cee922006 100644 --- a/sql/updates/world/2016_01_12_04_world.sql +++ b/sql/updates/world/2016_01_12_04_world.sql @@ -11,4 +11,4 @@ INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES (@Event, @OGUID+0); DELETE FROM `game_event_creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+4 AND `eventEntry`=@Event; -INSERT INTO game_event_creature SELECT @Event, creature.guid FROM `creature` WHERE creature.guid BETWEEN @CGUID+0 AND @CGUID+4; +INSERT INTO `game_event_creature` SELECT @Event, creature.guid FROM `creature` WHERE creature.guid BETWEEN @CGUID+0 AND @CGUID+4; From 2da458c56d024aac04468ce2af454a83ad790bf6 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 20 Dec 2015 13:28:16 +0100 Subject: [PATCH 521/524] Scripts/Instances: Complete rewrite of the boundary system. - Migrate boundary logic to Maps/AreaBoundary instead of having it sit in InstanceScript (to possibly allow use for other purposes). - Implement the first five boundary types in Maps/AreaBoundary.cpp. - Add boundary checks to Creature's update logic - Add boundary data for all Northrend raids - Add boundary initialization structures and methods to InstanceScript - Modify EnterEvadeMode signature. It now passes a value from the EvadeReason enum as parameter to allow special casing depending on evade reason - Remove previous (weird) boundary code that had them linked to GO spawns --- sql/base/auth_database.sql | 6 +- sql/updates/auth/2015_12_21_boundary.sql | 6 + sql/updates/world/2015_12_21_boundary.sql | 10 ++ src/server/game/AI/CoreAI/GuardAI.cpp | 2 +- src/server/game/AI/CoreAI/GuardAI.h | 2 +- src/server/game/AI/CoreAI/PassiveAI.cpp | 6 +- src/server/game/AI/CoreAI/PassiveAI.h | 6 +- src/server/game/AI/CoreAI/PetAI.h | 2 +- src/server/game/AI/CoreAI/TotemAI.cpp | 2 +- src/server/game/AI/CoreAI/TotemAI.h | 2 +- src/server/game/AI/CreatureAI.cpp | 108 ++++++++++++- src/server/game/AI/CreatureAI.h | 25 ++- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 60 +------ .../game/AI/ScriptedAI/ScriptedCreature.h | 15 -- .../game/AI/ScriptedAI/ScriptedEscortAI.cpp | 2 +- .../game/AI/ScriptedAI/ScriptedEscortAI.h | 2 +- .../game/AI/ScriptedAI/ScriptedFollowerAI.cpp | 2 +- .../game/AI/ScriptedAI/ScriptedFollowerAI.h | 2 +- src/server/game/AI/SmartScripts/SmartAI.cpp | 2 +- src/server/game/AI/SmartScripts/SmartAI.h | 2 +- src/server/game/Accounts/RBAC.h | 1 + .../game/Entities/Creature/Creature.cpp | 13 +- src/server/game/Entities/Creature/Creature.h | 1 + src/server/game/Entities/Unit/Unit.cpp | 4 +- src/server/game/Instances/InstanceScript.cpp | 31 +--- src/server/game/Instances/InstanceScript.h | 39 ++--- src/server/game/Maps/AreaBoundary.cpp | 124 ++++++++++++++ src/server/game/Maps/AreaBoundary.h | 152 ++++++++++++++++++ src/server/game/Miscellaneous/Language.h | 3 + src/server/scripts/CMakeLists.txt | 1 + src/server/scripts/Commands/cs_debug.cpp | 28 ++++ .../BlackrockDepths/boss_tomb_of_seven.cpp | 4 +- .../BlackwingLair/instance_blackwing_lair.cpp | 16 +- .../Karazhan/boss_midnight.cpp | 4 +- .../instance_magisters_terrace.cpp | 12 +- .../ScarletEnclave/chapter5.cpp | 4 +- .../instance_scarlet_monastery.cpp | 4 +- .../Scholomance/boss_kirtonos_the_herald.cpp | 2 +- .../SunwellPlateau/boss_brutallus.cpp | 4 +- .../SunwellPlateau/boss_kalecgos.cpp | 10 +- .../SunwellPlateau/boss_kiljaeden.cpp | 4 +- .../SunwellPlateau/boss_muru.cpp | 2 +- .../instance_sunwell_plateau.cpp | 14 +- .../EasternKingdoms/ZulAman/boss_janalai.cpp | 2 - .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 4 +- .../ZulGurub/instance_zulgurub.cpp | 4 +- .../EasternKingdoms/zone_stormwind_city.cpp | 4 +- .../BattleForMountHyjal/hyjalAI.cpp | 2 +- .../BattleForMountHyjal/hyjalAI.h | 2 +- .../instance_culling_of_stratholme.cpp | 6 +- .../Kalimdor/OnyxiasLair/boss_onyxia.cpp | 13 +- .../OnyxiasLair/instance_onyxias_lair.cpp | 6 + .../Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp | 4 +- .../Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp | 4 +- .../RuinsOfAhnQiraj/boss_ossirian.cpp | 4 +- .../Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp | 4 +- .../TempleOfAhnQiraj/boss_viscidus.cpp | 4 +- .../scripts/Kalimdor/zone_moonglade.cpp | 4 +- .../AzjolNerub/Ahnkahet/instance_ahnkahet.cpp | 4 +- .../AzjolNerub/instance_azjol_nerub.cpp | 10 +- .../ObsidianSanctum/boss_sartharion.cpp | 2 - .../instance_obsidian_sanctum.cpp | 7 + .../RubySanctum/boss_general_zarithrian.cpp | 11 +- .../RubySanctum/boss_halion.cpp | 28 ++-- .../RubySanctum/instance_ruby_sanctum.cpp | 11 +- .../boss_northrend_beasts.cpp | 17 +- .../TrialOfTheCrusader/boss_twin_valkyr.cpp | 4 +- .../instance_trial_of_the_crusader.cpp | 10 ++ .../HallsOfReflection/halls_of_reflection.cpp | 14 +- .../PitOfSaron/boss_krickandick.cpp | 6 +- .../PitOfSaron/boss_scourgelord_tyrannus.cpp | 2 +- .../PitOfSaron/instance_pit_of_saron.cpp | 6 +- .../Gundrak/boss_drakkari_colossus.cpp | 2 +- .../Northrend/Gundrak/instance_gundrak.cpp | 12 +- .../boss_blood_queen_lana_thel.cpp | 11 +- .../boss_deathbringer_saurfang.cpp | 10 +- .../IcecrownCitadel/boss_festergut.cpp | 8 +- .../boss_icecrown_gunship_battle.cpp | 14 +- .../boss_lady_deathwhisper.cpp | 7 +- .../IcecrownCitadel/boss_lord_marrowgar.cpp | 2 +- .../boss_professor_putricide.cpp | 2 +- .../IcecrownCitadel/boss_rotface.cpp | 8 +- .../IcecrownCitadel/boss_sindragosa.cpp | 2 +- .../IcecrownCitadel/boss_the_lich_king.cpp | 10 +- .../boss_valithria_dreamwalker.cpp | 2 + .../IcecrownCitadel/icecrown_citadel.cpp | 6 +- .../instance_icecrown_citadel.cpp | 73 ++++++--- .../Northrend/Naxxramas/boss_anubrekhan.cpp | 2 +- .../Northrend/Naxxramas/boss_gluth.cpp | 2 +- .../Northrend/Naxxramas/boss_gothik.cpp | 8 +- .../Northrend/Naxxramas/boss_heigan.cpp | 2 +- .../Northrend/Naxxramas/boss_maexxna.cpp | 2 +- .../scripts/Northrend/Naxxramas/boss_noth.cpp | 4 +- .../Northrend/Naxxramas/boss_sapphiron.cpp | 2 +- .../Northrend/Naxxramas/boss_thaddius.cpp | 4 +- .../Naxxramas/instance_naxxramas.cpp | 102 ++++++++---- .../Nexus/EyeOfEternity/boss_malygos.cpp | 10 +- .../instance_eye_of_eternity.cpp | 6 + .../Nexus/Oculus/instance_oculus.cpp | 4 +- .../HallsOfLightning/boss_bjarngrim.cpp | 4 +- .../instance_halls_of_lightning.cpp | 8 +- .../HallsOfStone/instance_halls_of_stone.cpp | 4 +- .../Ulduar/boss_algalon_the_observer.cpp | 8 +- .../Ulduar/Ulduar/boss_flame_leviathan.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_ignis.cpp | 2 - .../Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 8 +- .../Northrend/Ulduar/Ulduar/boss_thorim.cpp | 8 +- .../Northrend/Ulduar/Ulduar/boss_xt002.cpp | 2 +- .../Ulduar/Ulduar/boss_yogg_saron.cpp | 4 +- .../Ulduar/Ulduar/instance_ulduar.cpp | 68 +++++--- .../scripts/Northrend/Ulduar/Ulduar/ulduar.h | 3 +- .../UtgardeKeep/instance_utgarde_keep.cpp | 6 +- .../instance_utgarde_pinnacle.cpp | 12 +- .../scripts/Northrend/zone_grizzly_hills.cpp | 2 +- .../scripts/Northrend/zone_icecrown.cpp | 6 +- .../scripts/Northrend/zone_storm_peaks.cpp | 2 +- .../SethekkHalls/instance_sethekk_halls.cpp | 4 +- .../boss_ambassador_hellmaw.cpp | 2 +- .../instance_shadow_labyrinth.cpp | 6 +- .../Outland/BlackTemple/boss_illidan.cpp | 8 +- .../Outland/BlackTemple/illidari_council.cpp | 4 +- .../BlackTemple/instance_black_temple.cpp | 24 +-- .../GruulsLair/instance_gruuls_lair.cpp | 6 +- .../BloodFurnace/instance_blood_furnace.cpp | 14 +- .../instance_shattered_halls.cpp | 6 +- .../Outland/TempestKeep/Eye/boss_alar.cpp | 2 +- .../TempestKeep/Eye/boss_void_reaver.cpp | 2 - .../TempestKeep/Eye/instance_the_eye.cpp | 6 +- .../Mechanar/instance_mechanar.cpp | 8 +- .../arcatraz/instance_arcatraz.cpp | 6 +- .../Outland/zone_hellfire_peninsula.cpp | 4 +- src/server/scripts/Pet/pet_mage.cpp | 4 +- src/server/scripts/Pet/pet_priest.cpp | 2 +- src/server/scripts/World/npcs_special.cpp | 4 +- 134 files changed, 985 insertions(+), 533 deletions(-) create mode 100644 sql/updates/auth/2015_12_21_boundary.sql create mode 100644 sql/updates/world/2015_12_21_boundary.sql create mode 100644 src/server/game/Maps/AreaBoundary.cpp create mode 100644 src/server/game/Maps/AreaBoundary.h diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index b11f5002bc..622dab24dd 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -375,7 +375,7 @@ CREATE TABLE `rbac_linked_permissions` ( LOCK TABLES `rbac_linked_permissions` WRITE; /*!40000 ALTER TABLE `rbac_linked_permissions` DISABLE KEYS */; -INSERT INTO `rbac_linked_permissions` VALUES (192,21),(192,42),(192,43),(192,193),(192,196),(192,778),(192,779),(192,780),(192,781),(192,782),(192,783),(192,784),(192,785),(192,786),(192,787),(192,788),(192,789),(192,790),(192,791),(192,792),(192,793),(192,794),(192,795),(192,796),(192,835),(193,48),(193,194),(193,197),(194,1),(194,2),(194,11),(194,13),(194,14),(194,15),(194,16),(194,17),(194,18),(194,19),(194,20),(194,22),(194,23),(194,25),(194,26),(194,27),(194,28),(194,29),(194,30),(194,31),(194,32),(194,33),(194,34),(194,35),(194,36),(194,37),(194,38),(194,39),(194,40),(194,41),(194,44),(194,46),(194,47),(194,51),(194,195),(194,198),(194,632),(194,798),(195,3),(195,4),(195,5),(195,6),(195,24),(195,49),(195,199),(196,200),(196,201),(196,226),(196,227),(196,230),(196,231),(196,233),(196,234),(196,235),(196,238),(196,239),(196,240),(196,241),(196,242),(196,243),(196,244),(196,245),(196,246),(196,247),(196,248),(196,249),(196,250),(196,251),(196,252),(196,253),(196,254),(196,255),(196,256),(196,257),(196,258),(196,259),(196,260),(196,261),(196,262),(196,264),(196,265),(196,266),(196,267),(196,268),(196,269),(196,270),(196,271),(196,272),(196,279),(196,280),(196,283),(196,287),(196,288),(196,289),(196,290),(196,291),(196,292),(196,293),(196,294),(196,295),(196,296),(196,297),(196,298),(196,299),(196,302),(196,303),(196,304),(196,305),(196,306),(196,307),(196,308),(196,309),(196,310),(196,313),(196,314),(196,319),(196,320),(196,321),(196,322),(196,323),(196,324),(196,325),(196,326),(196,327),(196,328),(196,329),(196,330),(196,331),(196,332),(196,333),(196,334),(196,335),(196,336),(196,337),(196,338),(196,339),(196,340),(196,341),(196,342),(196,343),(196,344),(196,345),(196,346),(196,347),(196,348),(196,349),(196,350),(196,351),(196,352),(196,353),(196,354),(196,355),(196,356),(196,357),(196,358),(196,359),(196,360),(196,361),(196,362),(196,363),(196,364),(196,365),(196,366),(196,373),(196,375),(196,400),(196,401),(196,402),(196,403),(196,404),(196,405),(196,406),(196,407),(196,417),(196,418),(196,419),(196,420),(196,421),(196,422),(196,423),(196,424),(196,425),(196,426),(196,427),(196,428),(196,429),(196,434),(196,435),(196,436),(196,437),(196,438),(196,439),(196,440),(196,441),(196,442),(196,443),(196,444),(196,445),(196,446),(196,447),(196,448),(196,449),(196,450),(196,451),(196,452),(196,453),(196,454),(196,455),(196,456),(196,457),(196,458),(196,459),(196,461),(196,463),(196,464),(196,465),(196,472),(196,473),(196,474),(196,475),(196,476),(196,477),(196,478),(196,488),(196,489),(196,491),(196,492),(196,493),(196,495),(196,497),(196,498),(196,499),(196,500),(196,502),(196,503),(196,505),(196,508),(196,511),(196,513),(196,514),(196,516),(196,519),(196,522),(196,523),(196,526),(196,527),(196,529),(196,530),(196,533),(196,535),(196,536),(196,537),(196,538),(196,539),(196,540),(196,541),(196,556),(196,581),(196,582),(196,592),(196,593),(196,596),(196,602),(196,603),(196,604),(196,605),(196,606),(196,607),(196,608),(196,609),(196,610),(196,611),(196,612),(196,613),(196,614),(196,615),(196,616),(196,617),(196,618),(196,619),(196,620),(196,621),(196,622),(196,623),(196,624),(196,625),(196,626),(196,627),(196,628),(196,629),(196,630),(196,631),(196,633),(196,634),(196,635),(196,636),(196,637),(196,638),(196,639),(196,640),(196,641),(196,642),(196,643),(196,644),(196,645),(196,646),(196,647),(196,648),(196,649),(196,650),(196,651),(196,652),(196,653),(196,654),(196,655),(196,656),(196,657),(196,658),(196,659),(196,660),(196,661),(196,662),(196,663),(196,664),(196,665),(196,666),(196,667),(196,668),(196,669),(196,670),(196,671),(196,672),(196,673),(196,674),(196,675),(196,676),(196,677),(196,678),(196,679),(196,680),(196,681),(196,682),(196,683),(196,684),(196,685),(196,686),(196,687),(196,688),(196,689),(196,690),(196,691),(196,692),(196,693),(196,694),(196,695),(196,696),(196,697),(196,698),(196,699),(196,700),(196,701),(196,702),(196,703),(196,704),(196,705),(196,706),(196,707),(196,708),(196,709),(196,710),(196,711),(196,712),(196,713),(196,714),(196,715),(196,716),(196,717),(196,718),(196,719),(196,721),(196,722),(196,723),(196,724),(196,725),(196,726),(196,727),(196,728),(196,729),(196,730),(196,733),(196,734),(196,735),(196,736),(196,738),(196,739),(196,748),(196,753),(196,757),(196,773),(196,777),(197,232),(197,236),(197,237),(197,273),(197,274),(197,275),(197,276),(197,277),(197,284),(197,285),(197,286),(197,301),(197,311),(197,387),(197,388),(197,389),(197,390),(197,391),(197,392),(197,393),(197,394),(197,395),(197,396),(197,397),(197,398),(197,399),(197,479),(197,480),(197,481),(197,482),(197,485),(197,486),(197,487),(197,494),(197,506),(197,509),(197,510),(197,517),(197,518),(197,521),(197,542),(197,543),(197,550),(197,558),(197,568),(197,571),(197,572),(197,573),(197,574),(197,575),(197,576),(197,577),(197,578),(197,579),(197,580),(197,583),(197,584),(197,585),(197,586),(197,587),(197,588),(197,589),(197,590),(197,591),(197,594),(197,595),(197,601),(197,743),(197,750),(197,758),(197,761),(197,762),(197,763),(197,764),(197,765),(197,766),(197,767),(197,768),(197,769),(197,770),(197,771),(197,772),(197,774),(198,218),(198,300),(198,312),(198,315),(198,316),(198,317),(198,318),(198,367),(198,368),(198,369),(198,370),(198,371),(198,372),(198,374),(198,376),(198,377),(198,378),(198,379),(198,380),(198,381),(198,382),(198,383),(198,384),(198,385),(198,386),(198,408),(198,409),(198,410),(198,411),(198,412),(198,413),(198,414),(198,415),(198,416),(198,430),(198,431),(198,432),(198,433),(198,462),(198,466),(198,467),(198,468),(198,469),(198,470),(198,471),(198,483),(198,484),(198,490),(198,504),(198,512),(198,515),(198,520),(198,524),(198,528),(198,531),(198,532),(198,544),(198,545),(198,546),(198,547),(198,548),(198,549),(198,551),(198,552),(198,553),(198,554),(198,555),(198,557),(198,559),(198,560),(198,561),(198,562),(198,563),(198,564),(198,565),(198,566),(198,567),(198,569),(198,570),(198,597),(198,598),(198,599),(198,600),(198,737),(198,740),(198,741),(198,742),(198,744),(198,745),(198,746),(198,747),(198,749),(198,751),(198,752),(198,754),(198,755),(198,756),(198,759),(198,760),(199,217),(199,221),(199,222),(199,223),(199,225),(199,263),(199,496),(199,501),(199,507),(199,525),(199,534),(199,797); +INSERT INTO `rbac_linked_permissions` VALUES (192,21),(192,42),(192,43),(192,193),(192,196),(192,778),(192,779),(192,780),(192,781),(192,782),(192,783),(192,784),(192,785),(192,786),(192,787),(192,788),(192,789),(192,790),(192,791),(192,792),(192,793),(192,794),(192,795),(192,796),(192,835),(193,48),(193,194),(193,197),(194,1),(194,2),(194,11),(194,13),(194,14),(194,15),(194,16),(194,17),(194,18),(194,19),(194,20),(194,22),(194,23),(194,25),(194,26),(194,27),(194,28),(194,29),(194,30),(194,31),(194,32),(194,33),(194,34),(194,35),(194,36),(194,37),(194,38),(194,39),(194,40),(194,41),(194,44),(194,46),(194,47),(194,51),(194,195),(194,198),(194,632),(194,798),(195,3),(195,4),(195,5),(195,6),(195,24),(195,49),(195,199),(196,200),(196,201),(196,226),(196,227),(196,230),(196,231),(196,233),(196,234),(196,235),(196,238),(196,239),(196,240),(196,241),(196,242),(196,243),(196,244),(196,245),(196,246),(196,247),(196,248),(196,249),(196,250),(196,251),(196,252),(196,253),(196,254),(196,255),(196,256),(196,257),(196,258),(196,259),(196,260),(196,261),(196,262),(196,264),(196,265),(196,266),(196,267),(196,268),(196,269),(196,270),(196,271),(196,272),(196,279),(196,280),(196,283),(196,287),(196,288),(196,289),(196,290),(196,291),(196,292),(196,293),(196,294),(196,295),(196,296),(196,297),(196,298),(196,299),(196,302),(196,303),(196,304),(196,305),(196,306),(196,307),(196,308),(196,309),(196,310),(196,313),(196,314),(196,319),(196,320),(196,321),(196,322),(196,323),(196,324),(196,325),(196,326),(196,327),(196,328),(196,329),(196,330),(196,331),(196,332),(196,333),(196,334),(196,335),(196,336),(196,337),(196,338),(196,339),(196,340),(196,341),(196,342),(196,343),(196,344),(196,345),(196,346),(196,347),(196,348),(196,349),(196,350),(196,351),(196,352),(196,353),(196,354),(196,355),(196,356),(196,357),(196,358),(196,359),(196,360),(196,361),(196,362),(196,363),(196,364),(196,365),(196,366),(196,373),(196,375),(196,400),(196,401),(196,402),(196,403),(196,404),(196,405),(196,406),(196,407),(196,417),(196,418),(196,419),(196,420),(196,421),(196,422),(196,423),(196,424),(196,425),(196,426),(196,427),(196,428),(196,429),(196,434),(196,435),(196,436),(196,437),(196,438),(196,439),(196,440),(196,441),(196,442),(196,443),(196,444),(196,445),(196,446),(196,447),(196,448),(196,449),(196,450),(196,451),(196,452),(196,453),(196,454),(196,455),(196,456),(196,457),(196,458),(196,459),(196,461),(196,463),(196,464),(196,465),(196,472),(196,473),(196,474),(196,475),(196,476),(196,477),(196,478),(196,488),(196,489),(196,491),(196,492),(196,493),(196,495),(196,497),(196,498),(196,499),(196,500),(196,502),(196,503),(196,505),(196,508),(196,511),(196,513),(196,514),(196,516),(196,519),(196,522),(196,523),(196,526),(196,527),(196,529),(196,530),(196,533),(196,535),(196,536),(196,537),(196,538),(196,539),(196,540),(196,541),(196,556),(196,581),(196,582),(196,592),(196,593),(196,596),(196,602),(196,603),(196,604),(196,605),(196,606),(196,607),(196,608),(196,609),(196,610),(196,611),(196,612),(196,613),(196,614),(196,615),(196,616),(196,617),(196,618),(196,619),(196,620),(196,621),(196,622),(196,623),(196,624),(196,625),(196,626),(196,627),(196,628),(196,629),(196,630),(196,631),(196,633),(196,634),(196,635),(196,636),(196,637),(196,638),(196,639),(196,640),(196,641),(196,642),(196,643),(196,644),(196,645),(196,646),(196,647),(196,648),(196,649),(196,650),(196,651),(196,652),(196,653),(196,654),(196,655),(196,656),(196,657),(196,658),(196,659),(196,660),(196,661),(196,662),(196,663),(196,664),(196,665),(196,666),(196,667),(196,668),(196,669),(196,670),(196,671),(196,672),(196,673),(196,674),(196,675),(196,676),(196,677),(196,678),(196,679),(196,680),(196,681),(196,682),(196,683),(196,684),(196,685),(196,686),(196,687),(196,688),(196,689),(196,690),(196,691),(196,692),(196,693),(196,694),(196,695),(196,696),(196,697),(196,698),(196,699),(196,700),(196,701),(196,702),(196,703),(196,704),(196,705),(196,706),(196,707),(196,708),(196,709),(196,710),(196,711),(196,712),(196,713),(196,714),(196,715),(196,716),(196,717),(196,718),(196,719),(196,721),(196,722),(196,723),(196,724),(196,725),(196,726),(196,727),(196,728),(196,729),(196,730),(196,733),(196,734),(196,735),(196,736),(196,738),(196,739),(196,748),(196,753),(196,757),(196,773),(196,777),(196,836),(197,232),(197,236),(197,237),(197,273),(197,274),(197,275),(197,276),(197,277),(197,284),(197,285),(197,286),(197,301),(197,311),(197,387),(197,388),(197,389),(197,390),(197,391),(197,392),(197,393),(197,394),(197,395),(197,396),(197,397),(197,398),(197,399),(197,479),(197,480),(197,481),(197,482),(197,485),(197,486),(197,487),(197,494),(197,506),(197,509),(197,510),(197,517),(197,518),(197,521),(197,542),(197,543),(197,550),(197,558),(197,568),(197,571),(197,572),(197,573),(197,574),(197,575),(197,576),(197,577),(197,578),(197,579),(197,580),(197,583),(197,584),(197,585),(197,586),(197,587),(197,588),(197,589),(197,590),(197,591),(197,594),(197,595),(197,601),(197,743),(197,750),(197,758),(197,761),(197,762),(197,763),(197,764),(197,765),(197,766),(197,767),(197,768),(197,769),(197,770),(197,771),(197,772),(197,774),(198,218),(198,300),(198,312),(198,315),(198,316),(198,317),(198,318),(198,367),(198,368),(198,369),(198,370),(198,371),(198,372),(198,374),(198,376),(198,377),(198,378),(198,379),(198,380),(198,381),(198,382),(198,383),(198,384),(198,385),(198,386),(198,408),(198,409),(198,410),(198,411),(198,412),(198,413),(198,414),(198,415),(198,416),(198,430),(198,431),(198,432),(198,433),(198,462),(198,466),(198,467),(198,468),(198,469),(198,470),(198,471),(198,483),(198,484),(198,490),(198,504),(198,512),(198,515),(198,520),(198,524),(198,528),(198,531),(198,532),(198,544),(198,545),(198,546),(198,547),(198,548),(198,549),(198,551),(198,552),(198,553),(198,554),(198,555),(198,557),(198,559),(198,560),(198,561),(198,562),(198,563),(198,564),(198,565),(198,566),(198,567),(198,569),(198,570),(198,597),(198,598),(198,599),(198,600),(198,737),(198,740),(198,741),(198,742),(198,744),(198,745),(198,746),(198,747),(198,749),(198,751),(198,752),(198,754),(198,755),(198,756),(198,759),(198,760),(199,217),(199,221),(199,222),(199,223),(199,225),(199,263),(199,496),(199,501),(199,507),(199,525),(199,534),(199,797); /*!40000 ALTER TABLE `rbac_linked_permissions` ENABLE KEYS */; UNLOCK TABLES; @@ -399,7 +399,7 @@ CREATE TABLE `rbac_permissions` ( LOCK TABLES `rbac_permissions` WRITE; /*!40000 ALTER TABLE `rbac_permissions` DISABLE KEYS */; -INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(11,'Log GM trades'),(13,'Skip Instance required bosses check'),(14,'Skip character creation team mask check'),(15,'Skip character creation class mask check'),(16,'Skip character creation race mask check'),(17,'Skip character creation reserved name check'),(18,'Skip character creation heroic min level check'),(19,'Skip needed requirements to use channel check'),(20,'Skip disable map check'),(21,'Skip reset talents when used more than allowed check'),(22,'Skip spam chat check'),(23,'Skip over-speed ping check'),(24,'Two side faction characters on the same account'),(25,'Allow say chat between factions'),(26,'Allow channel chat between factions'),(27,'Two side mail interaction'),(28,'See two side who list'),(29,'Add friends of other faction'),(30,'Save character without delay with .save command'),(31,'Use params with .unstuck command'),(32,'Can be assigned tickets with .assign ticket command'),(33,'Notify if a command was not found'),(34,'Check if should appear in list using .gm ingame command'),(35,'See all security levels with who command'),(36,'Filter whispers'),(37,'Use staff badge in chat'),(38,'Resurrect with full Health Points'),(39,'Restore saved gm setting states'),(40,'Allows to add a gm to friend list'),(41,'Use Config option START_GM_LEVEL to assign new character level'),(42,'Allows to use CMSG_WORLD_TELEPORT opcode'),(43,'Allows to use CMSG_WHOIS opcode'),(44,'Receive global GM messages/texts'),(45,'Join channels without announce'),(46,'Change channel settings without being channel moderator'),(47,'Enables lower security than target check'),(48,'Enable IP, Last Login and EMail output in pinfo'),(49,'Forces to enter the email for confirmation on password change'),(50,'Allow user to check his own email with .account'),(51,'Allow trading between factions'),(192,'Role: Sec Level Administrator'),(193,'Role: Sec Level Gamemaster'),(194,'Role: Sec Level Moderator'),(195,'Role: Sec Level Player'),(196,'Role: Administrator Commands'),(197,'Role: Gamemaster Commands'),(198,'Role: Moderator Commands'),(199,'Role: Player Commands'),(200,'Command: rbac'),(201,'Command: rbac account'),(202,'Command: rbac account list'),(203,'Command: rbac account grant'),(204,'Command: rbac account deny'),(205,'Command: rbac account revoke'),(206,'Command: rbac list'),(217,'Command: account'),(218,'Command: account addon'),(219,'Command: account create'),(220,'Command: account delete'),(221,'Command: account lock'),(222,'Command: account lock country'),(223,'Command: account lock ip'),(224,'Command: account onlinelist'),(225,'Command: account password'),(226,'Command: account set'),(227,'Command: account set addon'),(228,'Command: account set gmlevel'),(229,'Command: account set password'),(230,'Command: achievement'),(231,'Command: achievement add'),(232,'Command: arena'),(233,'Command: arena captain'),(234,'Command: arena create'),(235,'Command: arena disband'),(236,'Command: arena info'),(237,'Command: arena lookup'),(238,'Command: arena rename'),(239,'Command: ban'),(240,'Command: ban account'),(241,'Command: ban character'),(242,'Command: ban ip'),(243,'Command: ban playeraccount'),(244,'Command: baninfo'),(245,'Command: baninfo account'),(246,'Command: baninfo character'),(247,'Command: baninfo ip'),(248,'Command: banlist'),(249,'Command: banlist account'),(250,'Command: banlist character'),(251,'Command: banlist ip'),(252,'Command: unban'),(253,'Command: unban account'),(254,'Command: unban character'),(255,'Command: unban ip'),(256,'Command: unban playeraccount'),(257,'Command: bf'),(258,'Command: bf start'),(259,'Command: bf stop'),(260,'Command: bf switch'),(261,'Command: bf timer'),(262,'Command: bf enable'),(263,'Command: account email'),(264,'Command: account set sec'),(265,'Command: account set sec email'),(266,'Command: account set sec regmail'),(267,'Command: cast'),(268,'Command: cast back'),(269,'Command: cast dist'),(270,'Command: cast self'),(271,'Command: cast target'),(272,'Command: cast dest'),(273,'Command: character'),(274,'Command: character customize'),(275,'Command: character changefaction'),(276,'Command: character changerace'),(277,'Command: character deleted'),(279,'Command: character deleted list'),(280,'Command: character deleted restore'),(283,'Command: character level'),(284,'Command: character rename'),(285,'Command: character reputation'),(286,'Command: character titles'),(287,'Command: levelup'),(288,'Command: pdump'),(289,'Command: pdump load'),(290,'Command: pdump write'),(291,'Command: cheat'),(292,'Command: cheat casttime'),(293,'Command: cheat cooldown'),(294,'Command: cheat explore'),(295,'Command: cheat god'),(296,'Command: cheat power'),(297,'Command: cheat status'),(298,'Command: cheat taxi'),(299,'Command: cheat waterwalk'),(300,'Command: debug'),(301,'Command: debug anim'),(302,'Command: debug areatriggers'),(303,'Command: debug arena'),(304,'Command: debug bg'),(305,'Command: debug entervehicle'),(306,'Command: debug getitemstate'),(307,'Command: debug getitemvalue'),(308,'Command: debug getvalue'),(309,'Command: debug hostil'),(310,'Command: debug itemexpire'),(311,'Command: debug lootrecipient'),(312,'Command: debug los'),(313,'Command: debug mod32value'),(314,'Command: debug moveflags'),(315,'Command: debug play'),(316,'Command: debug play cinematics'),(317,'Command: debug play movie'),(318,'Command: debug play sound'),(319,'Command: debug send'),(320,'Command: debug send buyerror'),(321,'Command: debug send channelnotify'),(322,'Command: debug send chatmessage'),(323,'Command: debug send equiperror'),(324,'Command: debug send largepacket'),(325,'Command: debug send opcode'),(326,'Command: debug send qinvalidmsg'),(327,'Command: debug send qpartymsg'),(328,'Command: debug send sellerror'),(329,'Command: debug send setphaseshift'),(330,'Command: debug send spellfail'),(331,'Command: debug setaurastate'),(332,'Command: debug setbit'),(333,'Command: debug setitemvalue'),(334,'Command: debug setvalue'),(335,'Command: debug setvid'),(336,'Command: debug spawnvehicle'),(337,'Command: debug threat'),(338,'Command: debug update'),(339,'Command: debug uws'),(340,'Command: wpgps'),(341,'Command: deserter'),(342,'Command: deserter bg'),(343,'Command: deserter bg add'),(344,'Command: deserter bg remove'),(345,'Command: deserter instance'),(346,'Command: deserter instance add'),(347,'Command: deserter instance remove'),(348,'Command: disable'),(349,'Command: disable add'),(350,'Command: disable add achievement_criteria'),(351,'Command: disable add battleground'),(352,'Command: disable add map'),(353,'Command: disable add mmap'),(354,'Command: disable add outdoorpvp'),(355,'Command: disable add quest'),(356,'Command: disable add spell'),(357,'Command: disable add vmap'),(358,'Command: disable remove'),(359,'Command: disable remove achievement_criteria'),(360,'Command: disable remove battleground'),(361,'Command: disable remove map'),(362,'Command: disable remove mmap'),(363,'Command: disable remove outdoorpvp'),(364,'Command: disable remove quest'),(365,'Command: disable remove spell'),(366,'Command: disable remove vmap'),(367,'Command: event'),(368,'Command: event activelist'),(369,'Command: event start'),(370,'Command: event stop'),(371,'Command: gm'),(372,'Command: gm chat'),(373,'Command: gm fly'),(374,'Command: gm ingame'),(375,'Command: gm list'),(376,'Command: gm visible'),(377,'Command: go'),(378,'Command: go creature'),(379,'Command: go graveyard'),(380,'Command: go grid'),(381,'Command: go object'),(382,'Command: go taxinode'),(383,'Command: go ticket'),(384,'Command: go trigger'),(385,'Command: go xyz'),(386,'Command: go zonexy'),(387,'Command: gobject'),(388,'Command: gobject activate'),(389,'Command: gobject add'),(390,'Command: gobject add temp'),(391,'Command: gobject delete'),(392,'Command: gobject info'),(393,'Command: gobject move'),(394,'Command: gobject near'),(395,'Command: gobject set'),(396,'Command: gobject set phase'),(397,'Command: gobject set state'),(398,'Command: gobject target'),(399,'Command: gobject turn'),(400,'debug transport'),(401,'Command: guild'),(402,'Command: guild create'),(403,'Command: guild delete'),(404,'Command: guild invite'),(405,'Command: guild uninvite'),(406,'Command: guild rank'),(407,'Command: guild rename'),(408,'Command: honor'),(409,'Command: honor add'),(410,'Command: honor add kill'),(411,'Command: honor update'),(412,'Command: instance'),(413,'Command: instance listbinds'),(414,'Command: instance unbind'),(415,'Command: instance stats'),(416,'Command: instance savedata'),(417,'Command: learn'),(418,'Command: learn all'),(419,'Command: learn all my'),(420,'Command: learn all my class'),(421,'Command: learn all my pettalents'),(422,'Command: learn all my spells'),(423,'Command: learn all my talents'),(424,'Command: learn all gm'),(425,'Command: learn all crafts'),(426,'Command: learn all default'),(427,'Command: learn all lang'),(428,'Command: learn all recipes'),(429,'Command: unlearn'),(430,'Command: lfg'),(431,'Command: lfg player'),(432,'Command: lfg group'),(433,'Command: lfg queue'),(434,'Command: lfg clean'),(435,'Command: lfg options'),(436,'Command: list'),(437,'Command: list creature'),(438,'Command: list item'),(439,'Command: list object'),(440,'Command: list auras'),(441,'Command: list mail'),(442,'Command: lookup'),(443,'Command: lookup area'),(444,'Command: lookup creature'),(445,'Command: lookup event'),(446,'Command: lookup faction'),(447,'Command: lookup item'),(448,'Command: lookup itemset'),(449,'Command: lookup object'),(450,'Command: lookup quest'),(451,'Command: lookup player'),(452,'Command: lookup player ip'),(453,'Command: lookup player account'),(454,'Command: lookup player email'),(455,'Command: lookup skill'),(456,'Command: lookup spell'),(457,'Command: lookup spell id'),(458,'Command: lookup taxinode'),(459,'Command: lookup tele'),(460,'Command: lookup title'),(461,'Command: lookup map'),(462,'Command: announce'),(463,'Command: channel'),(464,'Command: channel set'),(465,'Command: channel set ownership'),(466,'Command: gmannounce'),(467,'Command: gmnameannounce'),(468,'Command: gmnotify'),(469,'Command: nameannounce'),(470,'Command: notify'),(471,'Command: whispers'),(472,'Command: group'),(473,'Command: group leader'),(474,'Command: group disband'),(475,'Command: group remove'),(476,'Command: group join'),(477,'Command: group list'),(478,'Command: group summon'),(479,'Command: pet'),(480,'Command: pet create'),(481,'Command: pet learn'),(482,'Command: pet unlearn'),(483,'Command: send'),(484,'Command: send items'),(485,'Command: send mail'),(486,'Command: send message'),(487,'Command: send money'),(488,'Command: additem'),(489,'Command: additemset'),(490,'Command: appear'),(491,'Command: aura'),(492,'Command: bank'),(493,'Command: bindsight'),(494,'Command: combatstop'),(495,'Command: cometome'),(496,'Command: commands'),(497,'Command: cooldown'),(498,'Command: damage'),(499,'Command: dev'),(500,'Command: die'),(501,'Command: dismount'),(502,'Command: distance'),(503,'Command: flusharenapoints'),(504,'Command: freeze'),(505,'Command: gps'),(506,'Command: guid'),(507,'Command: help'),(508,'Command: hidearea'),(509,'Command: itemmove'),(510,'Command: kick'),(511,'Command: linkgrave'),(512,'Command: listfreeze'),(513,'Command: maxskill'),(514,'Command: movegens'),(515,'Command: mute'),(516,'Command: neargrave'),(517,'Command: pinfo'),(518,'Command: playall'),(519,'Command: possess'),(520,'Command: recall'),(521,'Command: repairitems'),(522,'Command: respawn'),(523,'Command: revive'),(524,'Command: saveall'),(525,'Command: save'),(526,'Command: setskill'),(527,'Command: showarea'),(528,'Command: summon'),(529,'Command: unaura'),(530,'Command: unbindsight'),(531,'Command: unfreeze'),(532,'Command: unmute'),(533,'Command: unpossess'),(534,'Command: unstuck'),(535,'Command: wchange'),(536,'Command: mmap'),(537,'Command: mmap loadedtiles'),(538,'Command: mmap loc'),(539,'Command: mmap path'),(540,'Command: mmap stats'),(541,'Command: mmap testarea'),(542,'Command: morph'),(543,'Command: demorph'),(544,'Command: modify'),(545,'Command: modify arenapoints'),(546,'Command: modify bit'),(547,'Command: modify drunk'),(548,'Command: modify energy'),(549,'Command: modify faction'),(550,'Command: modify gender'),(551,'Command: modify honor'),(552,'Command: modify hp'),(553,'Command: modify mana'),(554,'Command: modify money'),(555,'Command: modify mount'),(556,'Command: modify phase'),(557,'Command: modify rage'),(558,'Command: modify reputation'),(559,'Command: modify runicpower'),(560,'Command: modify scale'),(561,'Command: modify speed'),(562,'Command: modify speed all'),(563,'Command: modify speed backwalk'),(564,'Command: modify speed fly'),(565,'Command: modify speed walk'),(566,'Command: modify speed swim'),(567,'Command: modify spell'),(568,'Command: modify standstate'),(569,'Command: modify talentpoints'),(570,'Command: npc'),(571,'Command: npc add'),(572,'Command: npc add formation'),(573,'Command: npc add item'),(574,'Command: npc add move'),(575,'Command: npc add temp'),(576,'Command: npc add delete'),(577,'Command: npc add delete item'),(578,'Command: npc add follow'),(579,'Command: npc add follow stop'),(580,'Command: npc set'),(581,'Command: npc set allowmove'),(582,'Command: npc set entry'),(583,'Command: npc set factionid'),(584,'Command: npc set flag'),(585,'Command: npc set level'),(586,'Command: npc set link'),(587,'Command: npc set model'),(588,'Command: npc set movetype'),(589,'Command: npc set phase'),(590,'Command: npc set spawndist'),(591,'Command: npc set spawntime'),(592,'Command: npc set data'),(593,'Command: npc info'),(594,'Command: npc near'),(595,'Command: npc move'),(596,'Command: npc playemote'),(597,'Command: npc say'),(598,'Command: npc textemote'),(599,'Command: npc whisper'),(600,'Command: npc yell'),(601,'Command: npc tame'),(602,'Command: quest'),(603,'Command: quest add'),(604,'Command: quest complete'),(605,'Command: quest remove'),(606,'Command: quest reward'),(607,'Command: reload'),(608,'Command: reload access_requirement'),(609,'Command: reload achievement_criteria_data'),(610,'Command: reload achievement_reward'),(611,'Command: reload all'),(612,'Command: reload all achievement'),(613,'Command: reload all area'),(614,'Command: broadcast_text'),(615,'Command: reload all gossips'),(616,'Command: reload all item'),(617,'Command: reload all locales'),(618,'Command: reload all loot'),(619,'Command: reload all npc'),(620,'Command: reload all quest'),(621,'Command: reload all scripts'),(622,'Command: reload all spell'),(623,'Command: reload areatrigger_involvedrelation'),(624,'Command: reload areatrigger_tavern'),(625,'Command: reload areatrigger_teleport'),(626,'Command: reload auctions'),(627,'Command: reload autobroadcast'),(628,'Command: reload command'),(629,'Command: reload conditions'),(630,'Command: reload config'),(631,'Command: reload battleground_template'),(632,'Command: .mutehistory'),(633,'Command: reload creature_linked_respawn'),(634,'Command: reload creature_loot_template'),(635,'Command: reload creature_onkill_reputation'),(636,'Command: reload creature_questender'),(637,'Command: reload creature_queststarter'),(638,'Command: reload creature_summon_groups'),(639,'Command: reload creature_template'),(640,'Command: reload creature_text'),(641,'Command: reload disables'),(642,'Command: reload disenchant_loot_template'),(643,'Command: reload event_scripts'),(644,'Command: reload fishing_loot_template'),(645,'Command: reload game_graveyard_zone'),(646,'Command: reload game_tele'),(647,'Command: reload gameobject_questender'),(648,'Command: reload gameobject_loot_template'),(649,'Command: reload gameobject_queststarter'),(650,'Command: reload gm_tickets'),(651,'Command: reload gossip_menu'),(652,'Command: reload gossip_menu_option'),(653,'Command: reload item_enchantment_template'),(654,'Command: reload item_loot_template'),(655,'Command: reload item_set_names'),(656,'Command: reload lfg_dungeon_rewards'),(657,'Command: reload locales_achievement_reward'),(658,'Command: reload locales_creature'),(659,'Command: reload locales_creature_text'),(660,'Command: reload locales_gameobject'),(661,'Command: reload locales_gossip_menu_option'),(662,'Command: reload locales_item'),(663,'Command: reload locales_item_set_name'),(664,'Command: reload locales_npc_text'),(665,'Command: reload locales_page_text'),(666,'Command: reload locales_points_of_interest'),(667,'Command: reload locales_quest'),(668,'Command: reload mail_level_reward'),(669,'Command: reload mail_loot_template'),(670,'Command: reload milling_loot_template'),(671,'Command: reload npc_spellclick_spells'),(672,'Command: reload npc_trainer'),(673,'Command: reload npc_vendor'),(674,'Command: reload page_text'),(675,'Command: reload pickpocketing_loot_template'),(676,'Command: reload points_of_interest'),(677,'Command: reload prospecting_loot_template'),(678,'Command: reload quest_poi'),(679,'Command: reload quest_template'),(680,'Command: reload rbac'),(681,'Command: reload reference_loot_template'),(682,'Command: reload reserved_name'),(683,'Command: reload reputation_reward_rate'),(684,'Command: reload reputation_spillover_template'),(685,'Command: reload skill_discovery_template'),(686,'Command: reload skill_extra_item_template'),(687,'Command: reload skill_fishing_base_level'),(688,'Command: reload skinning_loot_template'),(689,'Command: reload smart_scripts'),(690,'Command: reload spell_required'),(691,'Command: reload spell_area'),(692,'Command: reload spell_bonus_data'),(693,'Command: reload spell_group'),(694,'Command: reload spell_learn_spell'),(695,'Command: reload spell_loot_template'),(696,'Command: reload spell_linked_spell'),(697,'Command: reload spell_pet_auras'),(698,'Command: reload spell_proc_event'),(699,'Command: reload spell_proc'),(700,'Command: reload spell_scripts'),(701,'Command: reload spell_target_position'),(702,'Command: reload spell_threats'),(703,'Command: reload spell_group_stack_rules'),(704,'Command: reload trinity_string'),(705,'Command: reload warden_action'),(706,'Command: reload waypoint_scripts'),(707,'Command: reload waypoint_data'),(708,'Command: reload vehicle_accessory'),(709,'Command: reload vehicle_template_accessory'),(710,'Command: reset'),(711,'Command: reset achievements'),(712,'Command: reset honor'),(713,'Command: reset level'),(714,'Command: reset spells'),(715,'Command: reset stats'),(716,'Command: reset talents'),(717,'Command: reset all'),(718,'Command: server'),(719,'Command: server corpses'),(720,'Command: server exit'),(721,'Command: server idlerestart'),(722,'Command: server idlerestart cancel'),(723,'Command: server idleshutdown'),(724,'Command: server idleshutdown cancel'),(725,'Command: server info'),(726,'Command: server plimit'),(727,'Command: server restart'),(728,'Command: server restart cancel'),(729,'Command: server set'),(730,'Command: server set closed'),(731,'Command: server set difftime'),(732,'Command: server set loglevel'),(733,'Command: server set motd'),(734,'Command: server shutdown'),(735,'Command: server shutdown cancel'),(736,'Command: server motd'),(737,'Command: tele'),(738,'Command: tele add'),(739,'Command: tele del'),(740,'Command: tele name'),(741,'Command: tele group'),(742,'Command: ticket'),(743,'Command: ticket assign'),(744,'Command: ticket close'),(745,'Command: ticket closedlist'),(746,'Command: ticket comment'),(747,'Command: ticket complete'),(748,'Command: ticket delete'),(749,'Command: ticket escalate'),(750,'Command: ticket escalatedlist'),(751,'Command: ticket list'),(752,'Command: ticket onlinelist'),(753,'Command: ticket reset'),(754,'Command: ticket response'),(755,'Command: ticket response append'),(756,'Command: ticket response appendln'),(757,'Command: ticket togglesystem'),(758,'Command: ticket unassign'),(759,'Command: ticket viewid'),(760,'Command: ticket viewname'),(761,'Command: titles'),(762,'Command: titles add'),(763,'Command: titles current'),(764,'Command: titles remove'),(765,'Command: titles set'),(766,'Command: titles set mask'),(767,'Command: wp'),(768,'Command: wp add'),(769,'Command: wp event'),(770,'Command: wp load'),(771,'Command: wp modify'),(772,'Command: wp unload'),(773,'Command: wp reload'),(774,'Command: wp show'),(777,'Command: mailbox'),(778,'Command: ahbot'),(779,'Command: ahbot items'),(780,'Command: ahbot items gray'),(781,'Command: ahbot items white'),(782,'Command: ahbot items green'),(783,'Command: ahbot items blue'),(784,'Command: ahbot items purple'),(785,'Command: ahbot items orange'),(786,'Command: ahbot items yellow'),(787,'Command: ahbot ratio'),(788,'Command: ahbot ratio alliance'),(789,'Command: ahbot ratio horde'),(790,'Command: ahbot ratio neutral'),(791,'Command: ahbot rebuild'),(792,'Command: ahbot reload'),(793,'Command: ahbot status'),(794,'Command: .guild info'),(795,'Command: .instance setbossstate'),(796,'Command: instance getbossstate'),(797,'Command: pvpstats'),(798,'Command: .mod xp'),(835,'Command: debug loadcells'); +INSERT INTO `rbac_permissions` VALUES (1,'Instant logout'),(2,'Skip Queue'),(3,'Join Normal Battleground'),(4,'Join Random Battleground'),(5,'Join Arenas'),(6,'Join Dungeon Finder'),(11,'Log GM trades'),(13,'Skip Instance required bosses check'),(14,'Skip character creation team mask check'),(15,'Skip character creation class mask check'),(16,'Skip character creation race mask check'),(17,'Skip character creation reserved name check'),(18,'Skip character creation heroic min level check'),(19,'Skip needed requirements to use channel check'),(20,'Skip disable map check'),(21,'Skip reset talents when used more than allowed check'),(22,'Skip spam chat check'),(23,'Skip over-speed ping check'),(24,'Two side faction characters on the same account'),(25,'Allow say chat between factions'),(26,'Allow channel chat between factions'),(27,'Two side mail interaction'),(28,'See two side who list'),(29,'Add friends of other faction'),(30,'Save character without delay with .save command'),(31,'Use params with .unstuck command'),(32,'Can be assigned tickets with .assign ticket command'),(33,'Notify if a command was not found'),(34,'Check if should appear in list using .gm ingame command'),(35,'See all security levels with who command'),(36,'Filter whispers'),(37,'Use staff badge in chat'),(38,'Resurrect with full Health Points'),(39,'Restore saved gm setting states'),(40,'Allows to add a gm to friend list'),(41,'Use Config option START_GM_LEVEL to assign new character level'),(42,'Allows to use CMSG_WORLD_TELEPORT opcode'),(43,'Allows to use CMSG_WHOIS opcode'),(44,'Receive global GM messages/texts'),(45,'Join channels without announce'),(46,'Change channel settings without being channel moderator'),(47,'Enables lower security than target check'),(48,'Enable IP, Last Login and EMail output in pinfo'),(49,'Forces to enter the email for confirmation on password change'),(50,'Allow user to check his own email with .account'),(51,'Allow trading between factions'),(192,'Role: Sec Level Administrator'),(193,'Role: Sec Level Gamemaster'),(194,'Role: Sec Level Moderator'),(195,'Role: Sec Level Player'),(196,'Role: Administrator Commands'),(197,'Role: Gamemaster Commands'),(198,'Role: Moderator Commands'),(199,'Role: Player Commands'),(200,'Command: rbac'),(201,'Command: rbac account'),(202,'Command: rbac account list'),(203,'Command: rbac account grant'),(204,'Command: rbac account deny'),(205,'Command: rbac account revoke'),(206,'Command: rbac list'),(217,'Command: account'),(218,'Command: account addon'),(219,'Command: account create'),(220,'Command: account delete'),(221,'Command: account lock'),(222,'Command: account lock country'),(223,'Command: account lock ip'),(224,'Command: account onlinelist'),(225,'Command: account password'),(226,'Command: account set'),(227,'Command: account set addon'),(228,'Command: account set gmlevel'),(229,'Command: account set password'),(230,'Command: achievement'),(231,'Command: achievement add'),(232,'Command: arena'),(233,'Command: arena captain'),(234,'Command: arena create'),(235,'Command: arena disband'),(236,'Command: arena info'),(237,'Command: arena lookup'),(238,'Command: arena rename'),(239,'Command: ban'),(240,'Command: ban account'),(241,'Command: ban character'),(242,'Command: ban ip'),(243,'Command: ban playeraccount'),(244,'Command: baninfo'),(245,'Command: baninfo account'),(246,'Command: baninfo character'),(247,'Command: baninfo ip'),(248,'Command: banlist'),(249,'Command: banlist account'),(250,'Command: banlist character'),(251,'Command: banlist ip'),(252,'Command: unban'),(253,'Command: unban account'),(254,'Command: unban character'),(255,'Command: unban ip'),(256,'Command: unban playeraccount'),(257,'Command: bf'),(258,'Command: bf start'),(259,'Command: bf stop'),(260,'Command: bf switch'),(261,'Command: bf timer'),(262,'Command: bf enable'),(263,'Command: account email'),(264,'Command: account set sec'),(265,'Command: account set sec email'),(266,'Command: account set sec regmail'),(267,'Command: cast'),(268,'Command: cast back'),(269,'Command: cast dist'),(270,'Command: cast self'),(271,'Command: cast target'),(272,'Command: cast dest'),(273,'Command: character'),(274,'Command: character customize'),(275,'Command: character changefaction'),(276,'Command: character changerace'),(277,'Command: character deleted'),(279,'Command: character deleted list'),(280,'Command: character deleted restore'),(283,'Command: character level'),(284,'Command: character rename'),(285,'Command: character reputation'),(286,'Command: character titles'),(287,'Command: levelup'),(288,'Command: pdump'),(289,'Command: pdump load'),(290,'Command: pdump write'),(291,'Command: cheat'),(292,'Command: cheat casttime'),(293,'Command: cheat cooldown'),(294,'Command: cheat explore'),(295,'Command: cheat god'),(296,'Command: cheat power'),(297,'Command: cheat status'),(298,'Command: cheat taxi'),(299,'Command: cheat waterwalk'),(300,'Command: debug'),(301,'Command: debug anim'),(302,'Command: debug areatriggers'),(303,'Command: debug arena'),(304,'Command: debug bg'),(305,'Command: debug entervehicle'),(306,'Command: debug getitemstate'),(307,'Command: debug getitemvalue'),(308,'Command: debug getvalue'),(309,'Command: debug hostil'),(310,'Command: debug itemexpire'),(311,'Command: debug lootrecipient'),(312,'Command: debug los'),(313,'Command: debug mod32value'),(314,'Command: debug moveflags'),(315,'Command: debug play'),(316,'Command: debug play cinematics'),(317,'Command: debug play movie'),(318,'Command: debug play sound'),(319,'Command: debug send'),(320,'Command: debug send buyerror'),(321,'Command: debug send channelnotify'),(322,'Command: debug send chatmessage'),(323,'Command: debug send equiperror'),(324,'Command: debug send largepacket'),(325,'Command: debug send opcode'),(326,'Command: debug send qinvalidmsg'),(327,'Command: debug send qpartymsg'),(328,'Command: debug send sellerror'),(329,'Command: debug send setphaseshift'),(330,'Command: debug send spellfail'),(331,'Command: debug setaurastate'),(332,'Command: debug setbit'),(333,'Command: debug setitemvalue'),(334,'Command: debug setvalue'),(335,'Command: debug setvid'),(336,'Command: debug spawnvehicle'),(337,'Command: debug threat'),(338,'Command: debug update'),(339,'Command: debug uws'),(340,'Command: wpgps'),(341,'Command: deserter'),(342,'Command: deserter bg'),(343,'Command: deserter bg add'),(344,'Command: deserter bg remove'),(345,'Command: deserter instance'),(346,'Command: deserter instance add'),(347,'Command: deserter instance remove'),(348,'Command: disable'),(349,'Command: disable add'),(350,'Command: disable add achievement_criteria'),(351,'Command: disable add battleground'),(352,'Command: disable add map'),(353,'Command: disable add mmap'),(354,'Command: disable add outdoorpvp'),(355,'Command: disable add quest'),(356,'Command: disable add spell'),(357,'Command: disable add vmap'),(358,'Command: disable remove'),(359,'Command: disable remove achievement_criteria'),(360,'Command: disable remove battleground'),(361,'Command: disable remove map'),(362,'Command: disable remove mmap'),(363,'Command: disable remove outdoorpvp'),(364,'Command: disable remove quest'),(365,'Command: disable remove spell'),(366,'Command: disable remove vmap'),(367,'Command: event'),(368,'Command: event activelist'),(369,'Command: event start'),(370,'Command: event stop'),(371,'Command: gm'),(372,'Command: gm chat'),(373,'Command: gm fly'),(374,'Command: gm ingame'),(375,'Command: gm list'),(376,'Command: gm visible'),(377,'Command: go'),(378,'Command: go creature'),(379,'Command: go graveyard'),(380,'Command: go grid'),(381,'Command: go object'),(382,'Command: go taxinode'),(383,'Command: go ticket'),(384,'Command: go trigger'),(385,'Command: go xyz'),(386,'Command: go zonexy'),(387,'Command: gobject'),(388,'Command: gobject activate'),(389,'Command: gobject add'),(390,'Command: gobject add temp'),(391,'Command: gobject delete'),(392,'Command: gobject info'),(393,'Command: gobject move'),(394,'Command: gobject near'),(395,'Command: gobject set'),(396,'Command: gobject set phase'),(397,'Command: gobject set state'),(398,'Command: gobject target'),(399,'Command: gobject turn'),(400,'debug transport'),(401,'Command: guild'),(402,'Command: guild create'),(403,'Command: guild delete'),(404,'Command: guild invite'),(405,'Command: guild uninvite'),(406,'Command: guild rank'),(407,'Command: guild rename'),(408,'Command: honor'),(409,'Command: honor add'),(410,'Command: honor add kill'),(411,'Command: honor update'),(412,'Command: instance'),(413,'Command: instance listbinds'),(414,'Command: instance unbind'),(415,'Command: instance stats'),(416,'Command: instance savedata'),(417,'Command: learn'),(418,'Command: learn all'),(419,'Command: learn all my'),(420,'Command: learn all my class'),(421,'Command: learn all my pettalents'),(422,'Command: learn all my spells'),(423,'Command: learn all my talents'),(424,'Command: learn all gm'),(425,'Command: learn all crafts'),(426,'Command: learn all default'),(427,'Command: learn all lang'),(428,'Command: learn all recipes'),(429,'Command: unlearn'),(430,'Command: lfg'),(431,'Command: lfg player'),(432,'Command: lfg group'),(433,'Command: lfg queue'),(434,'Command: lfg clean'),(435,'Command: lfg options'),(436,'Command: list'),(437,'Command: list creature'),(438,'Command: list item'),(439,'Command: list object'),(440,'Command: list auras'),(441,'Command: list mail'),(442,'Command: lookup'),(443,'Command: lookup area'),(444,'Command: lookup creature'),(445,'Command: lookup event'),(446,'Command: lookup faction'),(447,'Command: lookup item'),(448,'Command: lookup itemset'),(449,'Command: lookup object'),(450,'Command: lookup quest'),(451,'Command: lookup player'),(452,'Command: lookup player ip'),(453,'Command: lookup player account'),(454,'Command: lookup player email'),(455,'Command: lookup skill'),(456,'Command: lookup spell'),(457,'Command: lookup spell id'),(458,'Command: lookup taxinode'),(459,'Command: lookup tele'),(460,'Command: lookup title'),(461,'Command: lookup map'),(462,'Command: announce'),(463,'Command: channel'),(464,'Command: channel set'),(465,'Command: channel set ownership'),(466,'Command: gmannounce'),(467,'Command: gmnameannounce'),(468,'Command: gmnotify'),(469,'Command: nameannounce'),(470,'Command: notify'),(471,'Command: whispers'),(472,'Command: group'),(473,'Command: group leader'),(474,'Command: group disband'),(475,'Command: group remove'),(476,'Command: group join'),(477,'Command: group list'),(478,'Command: group summon'),(479,'Command: pet'),(480,'Command: pet create'),(481,'Command: pet learn'),(482,'Command: pet unlearn'),(483,'Command: send'),(484,'Command: send items'),(485,'Command: send mail'),(486,'Command: send message'),(487,'Command: send money'),(488,'Command: additem'),(489,'Command: additemset'),(490,'Command: appear'),(491,'Command: aura'),(492,'Command: bank'),(493,'Command: bindsight'),(494,'Command: combatstop'),(495,'Command: cometome'),(496,'Command: commands'),(497,'Command: cooldown'),(498,'Command: damage'),(499,'Command: dev'),(500,'Command: die'),(501,'Command: dismount'),(502,'Command: distance'),(503,'Command: flusharenapoints'),(504,'Command: freeze'),(505,'Command: gps'),(506,'Command: guid'),(507,'Command: help'),(508,'Command: hidearea'),(509,'Command: itemmove'),(510,'Command: kick'),(511,'Command: linkgrave'),(512,'Command: listfreeze'),(513,'Command: maxskill'),(514,'Command: movegens'),(515,'Command: mute'),(516,'Command: neargrave'),(517,'Command: pinfo'),(518,'Command: playall'),(519,'Command: possess'),(520,'Command: recall'),(521,'Command: repairitems'),(522,'Command: respawn'),(523,'Command: revive'),(524,'Command: saveall'),(525,'Command: save'),(526,'Command: setskill'),(527,'Command: showarea'),(528,'Command: summon'),(529,'Command: unaura'),(530,'Command: unbindsight'),(531,'Command: unfreeze'),(532,'Command: unmute'),(533,'Command: unpossess'),(534,'Command: unstuck'),(535,'Command: wchange'),(536,'Command: mmap'),(537,'Command: mmap loadedtiles'),(538,'Command: mmap loc'),(539,'Command: mmap path'),(540,'Command: mmap stats'),(541,'Command: mmap testarea'),(542,'Command: morph'),(543,'Command: demorph'),(544,'Command: modify'),(545,'Command: modify arenapoints'),(546,'Command: modify bit'),(547,'Command: modify drunk'),(548,'Command: modify energy'),(549,'Command: modify faction'),(550,'Command: modify gender'),(551,'Command: modify honor'),(552,'Command: modify hp'),(553,'Command: modify mana'),(554,'Command: modify money'),(555,'Command: modify mount'),(556,'Command: modify phase'),(557,'Command: modify rage'),(558,'Command: modify reputation'),(559,'Command: modify runicpower'),(560,'Command: modify scale'),(561,'Command: modify speed'),(562,'Command: modify speed all'),(563,'Command: modify speed backwalk'),(564,'Command: modify speed fly'),(565,'Command: modify speed walk'),(566,'Command: modify speed swim'),(567,'Command: modify spell'),(568,'Command: modify standstate'),(569,'Command: modify talentpoints'),(570,'Command: npc'),(571,'Command: npc add'),(572,'Command: npc add formation'),(573,'Command: npc add item'),(574,'Command: npc add move'),(575,'Command: npc add temp'),(576,'Command: npc add delete'),(577,'Command: npc add delete item'),(578,'Command: npc add follow'),(579,'Command: npc add follow stop'),(580,'Command: npc set'),(581,'Command: npc set allowmove'),(582,'Command: npc set entry'),(583,'Command: npc set factionid'),(584,'Command: npc set flag'),(585,'Command: npc set level'),(586,'Command: npc set link'),(587,'Command: npc set model'),(588,'Command: npc set movetype'),(589,'Command: npc set phase'),(590,'Command: npc set spawndist'),(591,'Command: npc set spawntime'),(592,'Command: npc set data'),(593,'Command: npc info'),(594,'Command: npc near'),(595,'Command: npc move'),(596,'Command: npc playemote'),(597,'Command: npc say'),(598,'Command: npc textemote'),(599,'Command: npc whisper'),(600,'Command: npc yell'),(601,'Command: npc tame'),(602,'Command: quest'),(603,'Command: quest add'),(604,'Command: quest complete'),(605,'Command: quest remove'),(606,'Command: quest reward'),(607,'Command: reload'),(608,'Command: reload access_requirement'),(609,'Command: reload achievement_criteria_data'),(610,'Command: reload achievement_reward'),(611,'Command: reload all'),(612,'Command: reload all achievement'),(613,'Command: reload all area'),(614,'Command: broadcast_text'),(615,'Command: reload all gossips'),(616,'Command: reload all item'),(617,'Command: reload all locales'),(618,'Command: reload all loot'),(619,'Command: reload all npc'),(620,'Command: reload all quest'),(621,'Command: reload all scripts'),(622,'Command: reload all spell'),(623,'Command: reload areatrigger_involvedrelation'),(624,'Command: reload areatrigger_tavern'),(625,'Command: reload areatrigger_teleport'),(626,'Command: reload auctions'),(627,'Command: reload autobroadcast'),(628,'Command: reload command'),(629,'Command: reload conditions'),(630,'Command: reload config'),(631,'Command: reload battleground_template'),(632,'Command: .mutehistory'),(633,'Command: reload creature_linked_respawn'),(634,'Command: reload creature_loot_template'),(635,'Command: reload creature_onkill_reputation'),(636,'Command: reload creature_questender'),(637,'Command: reload creature_queststarter'),(638,'Command: reload creature_summon_groups'),(639,'Command: reload creature_template'),(640,'Command: reload creature_text'),(641,'Command: reload disables'),(642,'Command: reload disenchant_loot_template'),(643,'Command: reload event_scripts'),(644,'Command: reload fishing_loot_template'),(645,'Command: reload game_graveyard_zone'),(646,'Command: reload game_tele'),(647,'Command: reload gameobject_questender'),(648,'Command: reload gameobject_loot_template'),(649,'Command: reload gameobject_queststarter'),(650,'Command: reload gm_tickets'),(651,'Command: reload gossip_menu'),(652,'Command: reload gossip_menu_option'),(653,'Command: reload item_enchantment_template'),(654,'Command: reload item_loot_template'),(655,'Command: reload item_set_names'),(656,'Command: reload lfg_dungeon_rewards'),(657,'Command: reload locales_achievement_reward'),(658,'Command: reload locales_creature'),(659,'Command: reload locales_creature_text'),(660,'Command: reload locales_gameobject'),(661,'Command: reload locales_gossip_menu_option'),(662,'Command: reload locales_item'),(663,'Command: reload locales_item_set_name'),(664,'Command: reload locales_npc_text'),(665,'Command: reload locales_page_text'),(666,'Command: reload locales_points_of_interest'),(667,'Command: reload locales_quest'),(668,'Command: reload mail_level_reward'),(669,'Command: reload mail_loot_template'),(670,'Command: reload milling_loot_template'),(671,'Command: reload npc_spellclick_spells'),(672,'Command: reload npc_trainer'),(673,'Command: reload npc_vendor'),(674,'Command: reload page_text'),(675,'Command: reload pickpocketing_loot_template'),(676,'Command: reload points_of_interest'),(677,'Command: reload prospecting_loot_template'),(678,'Command: reload quest_poi'),(679,'Command: reload quest_template'),(680,'Command: reload rbac'),(681,'Command: reload reference_loot_template'),(682,'Command: reload reserved_name'),(683,'Command: reload reputation_reward_rate'),(684,'Command: reload reputation_spillover_template'),(685,'Command: reload skill_discovery_template'),(686,'Command: reload skill_extra_item_template'),(687,'Command: reload skill_fishing_base_level'),(688,'Command: reload skinning_loot_template'),(689,'Command: reload smart_scripts'),(690,'Command: reload spell_required'),(691,'Command: reload spell_area'),(692,'Command: reload spell_bonus_data'),(693,'Command: reload spell_group'),(694,'Command: reload spell_learn_spell'),(695,'Command: reload spell_loot_template'),(696,'Command: reload spell_linked_spell'),(697,'Command: reload spell_pet_auras'),(698,'Command: reload spell_proc_event'),(699,'Command: reload spell_proc'),(700,'Command: reload spell_scripts'),(701,'Command: reload spell_target_position'),(702,'Command: reload spell_threats'),(703,'Command: reload spell_group_stack_rules'),(704,'Command: reload trinity_string'),(705,'Command: reload warden_action'),(706,'Command: reload waypoint_scripts'),(707,'Command: reload waypoint_data'),(708,'Command: reload vehicle_accessory'),(709,'Command: reload vehicle_template_accessory'),(710,'Command: reset'),(711,'Command: reset achievements'),(712,'Command: reset honor'),(713,'Command: reset level'),(714,'Command: reset spells'),(715,'Command: reset stats'),(716,'Command: reset talents'),(717,'Command: reset all'),(718,'Command: server'),(719,'Command: server corpses'),(720,'Command: server exit'),(721,'Command: server idlerestart'),(722,'Command: server idlerestart cancel'),(723,'Command: server idleshutdown'),(724,'Command: server idleshutdown cancel'),(725,'Command: server info'),(726,'Command: server plimit'),(727,'Command: server restart'),(728,'Command: server restart cancel'),(729,'Command: server set'),(730,'Command: server set closed'),(731,'Command: server set difftime'),(732,'Command: server set loglevel'),(733,'Command: server set motd'),(734,'Command: server shutdown'),(735,'Command: server shutdown cancel'),(736,'Command: server motd'),(737,'Command: tele'),(738,'Command: tele add'),(739,'Command: tele del'),(740,'Command: tele name'),(741,'Command: tele group'),(742,'Command: ticket'),(743,'Command: ticket assign'),(744,'Command: ticket close'),(745,'Command: ticket closedlist'),(746,'Command: ticket comment'),(747,'Command: ticket complete'),(748,'Command: ticket delete'),(749,'Command: ticket escalate'),(750,'Command: ticket escalatedlist'),(751,'Command: ticket list'),(752,'Command: ticket onlinelist'),(753,'Command: ticket reset'),(754,'Command: ticket response'),(755,'Command: ticket response append'),(756,'Command: ticket response appendln'),(757,'Command: ticket togglesystem'),(758,'Command: ticket unassign'),(759,'Command: ticket viewid'),(760,'Command: ticket viewname'),(761,'Command: titles'),(762,'Command: titles add'),(763,'Command: titles current'),(764,'Command: titles remove'),(765,'Command: titles set'),(766,'Command: titles set mask'),(767,'Command: wp'),(768,'Command: wp add'),(769,'Command: wp event'),(770,'Command: wp load'),(771,'Command: wp modify'),(772,'Command: wp unload'),(773,'Command: wp reload'),(774,'Command: wp show'),(777,'Command: mailbox'),(778,'Command: ahbot'),(779,'Command: ahbot items'),(780,'Command: ahbot items gray'),(781,'Command: ahbot items white'),(782,'Command: ahbot items green'),(783,'Command: ahbot items blue'),(784,'Command: ahbot items purple'),(785,'Command: ahbot items orange'),(786,'Command: ahbot items yellow'),(787,'Command: ahbot ratio'),(788,'Command: ahbot ratio alliance'),(789,'Command: ahbot ratio horde'),(790,'Command: ahbot ratio neutral'),(791,'Command: ahbot rebuild'),(792,'Command: ahbot reload'),(793,'Command: ahbot status'),(794,'Command: .guild info'),(795,'Command: .instance setbossstate'),(796,'Command: instance getbossstate'),(797,'Command: pvpstats'),(798,'Command: .mod xp'),(835,'Command: debug loadcells'),(836,'Command: .debug boundary'); /*!40000 ALTER TABLE `rbac_permissions` ENABLE KEYS */; UNLOCK TABLES; @@ -486,7 +486,7 @@ CREATE TABLE `updates` ( LOCK TABLES `updates` WRITE; /*!40000 ALTER TABLE `updates` DISABLE KEYS */; -INSERT INTO `updates` VALUES ('2014_11_10_00_auth.sql','0E3CB119442D09DD88E967015319BBC8DAFBBFE0','ARCHIVED','2015-03-21 21:44:12',0),('2014_11_10_01_auth.sql','327E77A1DA3546D5275AB249915DD57EDD6FDD3D','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_10_00_auth.sql','821703A96D80F9080074852B5A46E2909C9562EA','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_21_00_auth.sql','CE2E5D2CD82E79C25294539ADED27A1429105B43','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_00_auth.sql','E8C5B74BB45F0F35DEC182C72BACF435C7066FB0','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_01_auth.sql','862961815354DA2746F5F71FBC8155F57CBE75AB','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_02_auth.sql','33E4F94086590768EF5D4855DD43D7DE7C06ADA4','ARCHIVED','2015-03-21 21:44:51',0),('2015_08_21_00_auth.sql','C31A9E1D28E11B60BE8F8198637DD51F6D75123F','ARCHIVED','2015-10-05 23:16:19',0),('2015_11_07_00_auth.sql','BAF9F6B8F97A30D04BDBBA8127A62A1720F9B904','RELEASED','2015-11-07 15:40:47',0); +INSERT INTO `updates` VALUES ('2014_11_10_00_auth.sql','0E3CB119442D09DD88E967015319BBC8DAFBBFE0','ARCHIVED','2015-03-21 21:44:12',0),('2014_11_10_01_auth.sql','327E77A1DA3546D5275AB249915DD57EDD6FDD3D','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_10_00_auth.sql','821703A96D80F9080074852B5A46E2909C9562EA','ARCHIVED','2015-03-21 21:44:12',0),('2014_12_21_00_auth.sql','CE2E5D2CD82E79C25294539ADED27A1429105B43','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_00_auth.sql','E8C5B74BB45F0F35DEC182C72BACF435C7066FB0','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_01_auth.sql','862961815354DA2746F5F71FBC8155F57CBE75AB','ARCHIVED','2015-03-21 21:44:12',0),('2015_03_20_02_auth.sql','33E4F94086590768EF5D4855DD43D7DE7C06ADA4','ARCHIVED','2015-03-21 21:44:51',0),('2015_08_21_00_auth.sql','C31A9E1D28E11B60BE8F8198637DD51F6D75123F','ARCHIVED','2015-10-05 23:16:19',0),('2015_11_07_00_auth.sql','BAF9F6B8F97A30D04BDBBA8127A62A1720F9B904','RELEASED','2015-11-07 15:40:47',0),('2015_12_21_boundary.sql','24615CC69B3CD7BB4699874647C35BA86E8A93FD','RELEASED','2015-12-21 18:37:25',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/auth/2015_12_21_boundary.sql b/sql/updates/auth/2015_12_21_boundary.sql new file mode 100644 index 0000000000..c70d4c0946 --- /dev/null +++ b/sql/updates/auth/2015_12_21_boundary.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `rbac_permissions` WHERE `id`=836; +INSERT INTO `rbac_permissions` (`id`,`name`) VALUES (836,"Command: .debug boundary"); + +DELETE FROM `rbac_linked_permissions` WHERE `linkedId`=836; +INSERT INTO `rbac_linked_permissions` (`id`,`linkedId`) VALUES (196, 836); diff --git a/sql/updates/world/2015_12_21_boundary.sql b/sql/updates/world/2015_12_21_boundary.sql new file mode 100644 index 0000000000..cba5d3a18a --- /dev/null +++ b/sql/updates/world/2015_12_21_boundary.sql @@ -0,0 +1,10 @@ +-- +DELETE FROM `command` WHERE `permission`=836; +INSERT INTO `command` (`name`,`permission`,`help`) VALUES ("debug boundary",836,"Syntax: .debug boundary [fill] [duration] +Flood fills the targeted unit's movement boundary and marks the edge of said boundary with debug creatures.\nSpecify 'fill' as first parameter to fill the entire area with debug creatures."); + +DELETE FROM `trinity_string` WHERE `entry` IN (11011,11012,11013); +INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES +(11011,"VisualizeBoundary warning: No interior point of the creature's boundary could be found - check if you have mutually exclusive boundaries!"), +(11012,"VisualizeBoundary error: Creature movement is unbounded"), +(11013,"VisualizeBoundary warning: Reached fail-safe flood boundary - check is your boundary is unbounded!"); diff --git a/src/server/game/AI/CoreAI/GuardAI.cpp b/src/server/game/AI/CoreAI/GuardAI.cpp index 176dd41fda..c7d618a991 100644 --- a/src/server/game/AI/CoreAI/GuardAI.cpp +++ b/src/server/game/AI/CoreAI/GuardAI.cpp @@ -43,7 +43,7 @@ bool GuardAI::CanSeeAlways(WorldObject const* obj) return false; } -void GuardAI::EnterEvadeMode() +void GuardAI::EnterEvadeMode(EvadeReason /*why*/) { if (!me->IsAlive()) { diff --git a/src/server/game/AI/CoreAI/GuardAI.h b/src/server/game/AI/CoreAI/GuardAI.h index 01d54e47b9..63f2750a5d 100644 --- a/src/server/game/AI/CoreAI/GuardAI.h +++ b/src/server/game/AI/CoreAI/GuardAI.h @@ -31,7 +31,7 @@ class GuardAI : public ScriptedAI static int Permissible(Creature const* creature); bool CanSeeAlways(WorldObject const* obj) override; - void EnterEvadeMode() override; + void EnterEvadeMode(EvadeReason /*why*/) override; void JustDied(Unit* killer) override; }; #endif diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp index 5f2c1ba5c5..aafde3c1d9 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.cpp +++ b/src/server/game/AI/CoreAI/PassiveAI.cpp @@ -26,7 +26,7 @@ NullCreatureAI::NullCreatureAI(Creature* c) : CreatureAI(c) { me->SetReactState( void PassiveAI::UpdateAI(uint32) { if (me->IsInCombat() && me->getAttackers().empty()) - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_NO_HOSTILES); } void PossessedAI::AttackStart(Unit* target) @@ -64,11 +64,11 @@ void CritterAI::DamageTaken(Unit* /*done_by*/, uint32&) me->SetControlled(true, UNIT_STATE_FLEEING); } -void CritterAI::EnterEvadeMode() +void CritterAI::EnterEvadeMode(EvadeReason why) { if (me->HasUnitState(UNIT_STATE_FLEEING)) me->SetControlled(false, UNIT_STATE_FLEEING); - CreatureAI::EnterEvadeMode(); + CreatureAI::EnterEvadeMode(why); } void TriggerAI::IsSummonedBy(Unit* summoner) diff --git a/src/server/game/AI/CoreAI/PassiveAI.h b/src/server/game/AI/CoreAI/PassiveAI.h index 28a73cff5d..bd72cd7fbe 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.h +++ b/src/server/game/AI/CoreAI/PassiveAI.h @@ -41,7 +41,7 @@ class PossessedAI : public CreatureAI void MoveInLineOfSight(Unit*) override { } void AttackStart(Unit* target) override; void UpdateAI(uint32) override; - void EnterEvadeMode() override { } + void EnterEvadeMode(EvadeReason /*why*/) override { } void JustDied(Unit*) override; void KilledUnit(Unit* victim) override; @@ -57,7 +57,7 @@ class NullCreatureAI : public CreatureAI void MoveInLineOfSight(Unit*) override { } void AttackStart(Unit*) override { } void UpdateAI(uint32) override { } - void EnterEvadeMode() override { } + void EnterEvadeMode(EvadeReason /*why*/) override { } void OnCharmed(bool /*apply*/) override { } static int Permissible(const Creature*) { return PERMIT_BASE_IDLE; } @@ -69,7 +69,7 @@ class CritterAI : public PassiveAI explicit CritterAI(Creature* c) : PassiveAI(c) { } void DamageTaken(Unit* done_by, uint32& /*damage*/) override; - void EnterEvadeMode() override; + void EnterEvadeMode(EvadeReason why) override; }; class TriggerAI : public NullCreatureAI diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h index 9f220e64bf..9c33baa9a9 100644 --- a/src/server/game/AI/CoreAI/PetAI.h +++ b/src/server/game/AI/CoreAI/PetAI.h @@ -47,7 +47,7 @@ class PetAI : public CreatureAI // void MoveInLineOfSight(Unit* /*who*/) override { } // CreatureAI interferes with returning pets void MoveInLineOfSight_Safe(Unit* /*who*/) { } // CreatureAI interferes with returning pets - void EnterEvadeMode() override { } // For fleeing, pets don't use this type of Evade mechanic + void EnterEvadeMode(EvadeReason /*why*/) override { } // For fleeing, pets don't use this type of Evade mechanic private: bool _isVisible(Unit*) const; diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp index efcfab51ba..10fbb00bf9 100644 --- a/src/server/game/AI/CoreAI/TotemAI.cpp +++ b/src/server/game/AI/CoreAI/TotemAI.cpp @@ -40,7 +40,7 @@ TotemAI::TotemAI(Creature* c) : CreatureAI(c), i_victimGuid() void TotemAI::MoveInLineOfSight(Unit* /*who*/) { } -void TotemAI::EnterEvadeMode() +void TotemAI::EnterEvadeMode(EvadeReason /*why*/) { me->CombatStop(true); } diff --git a/src/server/game/AI/CoreAI/TotemAI.h b/src/server/game/AI/CoreAI/TotemAI.h index fdde303c7b..e1d1618037 100644 --- a/src/server/game/AI/CoreAI/TotemAI.h +++ b/src/server/game/AI/CoreAI/TotemAI.h @@ -33,7 +33,7 @@ class TotemAI : public CreatureAI void MoveInLineOfSight(Unit* who) override; void AttackStart(Unit* victim) override; - void EnterEvadeMode() override; + void EnterEvadeMode(EvadeReason /*why*/) override; void UpdateAI(uint32 diff) override; static int Permissible(Creature const* creature); diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index e94f5a037a..8ef8940e89 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -26,6 +26,7 @@ #include "MapReference.h" #include "Player.h" #include "CreatureTextMgr.h" +#include "Language.h" //Disable CreatureAI when charmed void CreatureAI::OnCharmed(bool /*apply*/) @@ -164,9 +165,9 @@ void CreatureAI::TriggerAlert(Unit const* who) const me->GetMotionMaster()->MoveDistract(5 * IN_MILLISECONDS); } -void CreatureAI::EnterEvadeMode() +void CreatureAI::EnterEvadeMode(EvadeReason why) { - if (!_EnterEvadeMode()) + if (!_EnterEvadeMode(why)) return; TC_LOG_DEBUG("entities.unit", "Creature %u enters evade mode.", me->GetEntry()); @@ -241,14 +242,14 @@ bool CreatureAI::UpdateVictim() } else if (me->getThreatManager().isThreatListEmpty()) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_NO_HOSTILES); return false; } return true; } -bool CreatureAI::_EnterEvadeMode() +bool CreatureAI::_EnterEvadeMode(EvadeReason /*why*/) { if (!me->IsAlive()) return false; @@ -271,6 +272,105 @@ bool CreatureAI::_EnterEvadeMode() return true; } +#define BOUNDARY_VISUALIZE_CREATURE 15425 +#define BOUNDARY_VISUALIZE_CREATURE_SCALE 0.25f +#define BOUNDARY_VISUALIZE_STEP_SIZE 1 +#define BOUNDARY_VISUALIZE_FAILSAFE_LIMIT 750 +#define BOUNDARY_VISUALIZE_SPAWN_HEIGHT 5 +int32 CreatureAI::VisualizeBoundary(uint32 duration, Unit* owner, bool fill) const +{ + typedef std::pair coordinate; + + if (!owner) + return -1; + + if (!_boundary || _boundary->empty()) + return LANG_CREATURE_MOVEMENT_NOT_BOUNDED; + + std::queue Q; + std::unordered_set alreadyChecked; + std::unordered_set outOfBounds; + + Position startPosition = owner->GetPosition(); + if (!CheckBoundary(&startPosition)) // fall back to creature position + { + startPosition = me->GetPosition(); + if (!CheckBoundary(&startPosition)) + { + startPosition = me->GetHomePosition(); + if (!CheckBoundary(&startPosition)) // fall back to creature home position + return LANG_CREATURE_NO_INTERIOR_POINT_FOUND; + } + } + float spawnZ = startPosition.GetPositionZ() + BOUNDARY_VISUALIZE_SPAWN_HEIGHT; + + bool boundsWarning = false; + Q.push({ 0,0 }); + while (!Q.empty()) + { + coordinate front = Q.front(); + bool hasOutOfBoundsNeighbor = false; + for (coordinate off : std::initializer_list{{1,0}, {0,1}, {-1,0}, {0,-1}}) + { + coordinate next(front.first + off.first, front.second + off.second); + if (next.first > BOUNDARY_VISUALIZE_FAILSAFE_LIMIT || next.first < -BOUNDARY_VISUALIZE_FAILSAFE_LIMIT || next.second > BOUNDARY_VISUALIZE_FAILSAFE_LIMIT || next.second < -BOUNDARY_VISUALIZE_FAILSAFE_LIMIT) + { + boundsWarning = true; + continue; + } + if (alreadyChecked.find(next) == alreadyChecked.end()) // never check a coordinate twice + { + Position nextPos(startPosition.GetPositionX() + next.first*BOUNDARY_VISUALIZE_STEP_SIZE, startPosition.GetPositionY() + next.second*BOUNDARY_VISUALIZE_STEP_SIZE, startPosition.GetPositionZ()); + if (CheckBoundary(&nextPos)) + Q.push(next); + else + { + outOfBounds.insert(next); + hasOutOfBoundsNeighbor = true; + } + alreadyChecked.insert(next); + } + else + if (outOfBounds.find(next) != outOfBounds.end()) + hasOutOfBoundsNeighbor = true; + } + if (fill || hasOutOfBoundsNeighbor) + if (TempSummon* point = owner->SummonCreature(BOUNDARY_VISUALIZE_CREATURE, Position(startPosition.GetPositionX() + front.first*BOUNDARY_VISUALIZE_STEP_SIZE, startPosition.GetPositionY() + front.second*BOUNDARY_VISUALIZE_STEP_SIZE, spawnZ), TEMPSUMMON_TIMED_DESPAWN, duration * IN_MILLISECONDS)) + { + point->SetObjectScale(BOUNDARY_VISUALIZE_CREATURE_SCALE); + point->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_NPC); + if (!hasOutOfBoundsNeighbor) + point->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + } + Q.pop(); + } + return boundsWarning ? LANG_CREATURE_MOVEMENT_MAYBE_UNBOUNDED : 0; +} + +bool CreatureAI::CheckBoundary(Position* who) const +{ + if (!who) + who = me; + + if (_boundary) + for (CreatureBoundary::const_iterator it = _boundary->begin(); it != _boundary->end(); ++it) + if (!(*it)->IsWithinBoundary(who)) + return false; + + return true; +} + +bool CreatureAI::CheckInRoom() +{ + if (CheckBoundary()) + return true; + else + { + EnterEvadeMode(EVADE_REASON_BOUNDARY); + return false; + } +} + Creature* CreatureAI::DoSummon(uint32 entry, const Position& pos, uint32 despawnTime, TempSummonType summonType) { return me->SummonCreature(entry, pos, summonType, despawnTime); diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 0a2cce723d..3b7c489e01 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -21,6 +21,7 @@ #include "Creature.h" #include "UnitAI.h" +#include "AreaBoundary.h" #include "Common.h" class WorldObject; @@ -63,6 +64,7 @@ enum SCEquip EQUIP_UNEQUIP = 0 }; +typedef std::set CreatureBoundary; class CreatureAI : public UnitAI { protected: @@ -77,10 +79,20 @@ class CreatureAI : public UnitAI Creature* DoSummon(uint32 entry, WorldObject* obj, float radius = 5.0f, uint32 despawnTime = 30000, TempSummonType summonType = TEMPSUMMON_CORPSE_TIMED_DESPAWN); Creature* DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius = 5.0f, uint32 despawnTime = 30000, TempSummonType summonType = TEMPSUMMON_CORPSE_TIMED_DESPAWN); + bool CheckBoundary(Position* who = nullptr) const; + void SetBoundary(CreatureBoundary const* boundary) { _boundary = boundary; CheckInRoom(); } public: + enum EvadeReason + { + EVADE_REASON_NO_HOSTILES, // the creature's threat list is empty + EVADE_REASON_BOUNDARY, // the creature has moved outside its evade boundary + EVADE_REASON_SEQUENCE_BREAK, // this is a boss and the pre-requisite encounters for engaging it are not defeated yet + EVADE_REASON_OTHER + }; + void Talk(uint8 id, WorldObject const* whisperTarget = nullptr); - explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), m_MoveInLineOfSight_locked(false) { } + explicit CreatureAI(Creature* creature) : UnitAI(creature), me(creature), _boundary(nullptr), m_MoveInLineOfSight_locked(false) { } virtual ~CreatureAI() { } @@ -96,7 +108,7 @@ class CreatureAI : public UnitAI virtual bool CanRespawn() { return true; } // Called for reaction at stopping attack at no attackers or targets - virtual void EnterEvadeMode(); + virtual void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER); // Called for reaction at enter to combat if not in combat yet (enemy can be NULL) virtual void EnterCombat(Unit* /*victim*/) { } @@ -174,10 +186,17 @@ class CreatureAI : public UnitAI virtual bool CanSeeAlways(WorldObject const* /*obj*/) { return false; } + // 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(); + CreatureBoundary const* GetBoundary() const { return _boundary; } + protected: virtual void MoveInLineOfSight(Unit* /*who*/); - bool _EnterEvadeMode(); + bool _EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER); + + CreatureBoundary const* _boundary; private: bool m_MoveInLineOfSight_locked; diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index f6022adf6b..8a1be33cc2 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -23,6 +23,7 @@ #include "Cell.h" #include "CellImpl.h" #include "ObjectMgr.h" +#include "AreaBoundary.h" // Spell summary for ScriptedAI::SelectSpell struct TSpellSummary @@ -98,7 +99,6 @@ bool SummonList::HasEntry(uint32 entry) const ScriptedAI::ScriptedAI(Creature* creature) : CreatureAI(creature), IsFleeing(false), - _evadeCheckCooldown(2500), _isCombatMovementAllowed(true) { _isHeroic = me->GetMap()->IsHeroic(); @@ -405,7 +405,7 @@ enum NPCs // Hacklike storage used for misc creatures that are expected to evade of outside of a certain area. // It is assumed the information is found elswehere and can be handled by the core. So far no luck finding such information/way to extract it. -bool ScriptedAI::EnterEvadeIfOutOfCombatArea(uint32 const diff) +/*bool ScriptedAI::EnterEvadeIfOutOfCombatArea(uint32 const diff) { if (_evadeCheckCooldown <= diff) _evadeCheckCooldown = 2500; @@ -449,15 +449,16 @@ bool ScriptedAI::EnterEvadeIfOutOfCombatArea(uint32 const diff) EnterEvadeMode(); return true; -} +}*/ // BossAI - for instanced bosses BossAI::BossAI(Creature* creature, uint32 bossId) : ScriptedAI(creature), instance(creature->GetInstanceScript()), summons(creature), - _boundary(instance ? instance->GetBossBoundary(bossId) : NULL), _bossId(bossId) { + if (instance) + SetBoundary(instance->GetBossBoundary(bossId)); scheduler.SetValidator([this] { return !me->HasUnitState(UNIT_STATE_CASTING); @@ -494,7 +495,7 @@ void BossAI::_EnterCombat() // bosses do not respawn, check only on enter combat if (!instance->CheckRequiredBosses(_bossId)) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_SEQUENCE_BREAK); return; } instance->SetBossState(_bossId, IN_PROGRESS); @@ -518,55 +519,6 @@ void BossAI::TeleportCheaters() target->NearTeleportTo(x, y, z, 0); } -bool BossAI::CheckBoundary(Unit* who) -{ - if (!GetBoundary() || !who) - return true; - - for (BossBoundaryMap::const_iterator itr = GetBoundary()->begin(); itr != GetBoundary()->end(); ++itr) - { - switch (itr->first) - { - case BOUNDARY_N: - if (who->GetPositionX() > itr->second) - return false; - break; - case BOUNDARY_S: - if (who->GetPositionX() < itr->second) - return false; - break; - case BOUNDARY_E: - if (who->GetPositionY() < itr->second) - return false; - break; - case BOUNDARY_W: - if (who->GetPositionY() > itr->second) - return false; - break; - case BOUNDARY_NW: - if (who->GetPositionX() + who->GetPositionY() > itr->second) - return false; - break; - case BOUNDARY_SE: - if (who->GetPositionX() + who->GetPositionY() < itr->second) - return false; - break; - case BOUNDARY_NE: - if (who->GetPositionX() - who->GetPositionY() > itr->second) - return false; - break; - case BOUNDARY_SW: - if (who->GetPositionX() - who->GetPositionY() < itr->second) - return false; - break; - default: - break; - } - } - - return true; -} - void BossAI::JustSummoned(Creature* summon) { summons.Summon(summon); diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index fec1dcb43c..448ddc7dc7 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -263,8 +263,6 @@ struct ScriptedAI : public CreatureAI void SetCombatMovement(bool allowMovement); bool IsCombatMovementAllowed() const { return _isCombatMovementAllowed; } - bool EnterEvadeIfOutOfCombatArea(uint32 const diff); - // return true for heroic mode. i.e. // - for dungeon in mode 10-heroic, // - for raid in mode 10-Heroic @@ -332,7 +330,6 @@ struct ScriptedAI : public CreatureAI private: Difficulty _difficulty; - uint32 _evadeCheckCooldown; bool _isCombatMovementAllowed; bool _isHeroic; }; @@ -344,7 +341,6 @@ class BossAI : public ScriptedAI virtual ~BossAI() { } InstanceScript* const instance; - BossBoundaryMap const* GetBoundary() const { return _boundary; } void JustSummoned(Creature* summon) override; void SummonedCreatureDespawn(Creature* summon) override; @@ -370,16 +366,6 @@ class BossAI : public ScriptedAI void _JustDied(); void _JustReachedHome() { me->setActive(false); } - virtual bool CheckInRoom() - { - if (CheckBoundary(me)) - return true; - - EnterEvadeMode(); - return false; - } - - bool CheckBoundary(Unit* who); void TeleportCheaters(); EventMap events; @@ -387,7 +373,6 @@ class BossAI : public ScriptedAI TaskScheduler scheduler; private: - BossBoundaryMap const* const _boundary; uint32 const _bossId; }; diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index 70c44f6fe9..68cb8d346d 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -184,7 +184,7 @@ void npc_escortAI::ReturnToLastPoint() me->GetMotionMaster()->MovePoint(POINT_LAST_POINT, x, y, z); } -void npc_escortAI::EnterEvadeMode() +void npc_escortAI::EnterEvadeMode(EvadeReason /*why*/) { me->RemoveAllAuras(); me->DeleteThreatList(); diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h index 3b7428e2b9..673f3e671a 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h @@ -66,7 +66,7 @@ struct npc_escortAI : public ScriptedAI void ReturnToLastPoint(); - void EnterEvadeMode() override; + void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER) override; void UpdateAI(uint32 diff) override; // the "internal" update, calls UpdateEscortAI() virtual void UpdateEscortAI(uint32 diff); // used when it's needed to add code in update (abilities, scripted events, etc) diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp index 40c404933a..dc9f6d2681 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp @@ -176,7 +176,7 @@ void FollowerAI::JustRespawned() Reset(); } -void FollowerAI::EnterEvadeMode() +void FollowerAI::EnterEvadeMode(EvadeReason /*why*/) { me->RemoveAllAuras(); me->DeleteThreatList(); diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h index f3919ea63b..d1c976b45c 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.h @@ -46,7 +46,7 @@ class FollowerAI : public ScriptedAI void MoveInLineOfSight(Unit*) override; - void EnterEvadeMode() override; + void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER) override; void JustDied(Unit*) override; diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 30e6ae2f9e..eca327e770 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -408,7 +408,7 @@ void SmartAI::MovementInform(uint32 MovementType, uint32 Data) MovepointReached(Data); } -void SmartAI::EnterEvadeMode() +void SmartAI::EnterEvadeMode(EvadeReason /*why*/) { if (!me->IsAlive() || me->IsInEvadeMode()) return; diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index cfc8fbe785..02c057247f 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -79,7 +79,7 @@ class SmartAI : public CreatureAI void EnterCombat(Unit* enemy) override; // Called for reaction at stopping attack at no attackers or targets - void EnterEvadeMode() override; + void EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER) override; // Called when the creature is killed void JustDied(Unit* killer) override; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 1627b91d80..4ebd3ae704 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -696,6 +696,7 @@ enum RBACPermissions RBAC_PERM_COMMAND_MODIFY_XP = 798, // 799 - 834 6.x only RBAC_PERM_COMMAND_DEBUG_LOADCELLS = 835, + RBAC_PERM_COMMAND_DEBUG_BOUNDARY = 836, // custom permissions 1000+ RBAC_PERM_MAX diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 97b3a0b031..19d6490706 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -180,7 +180,7 @@ bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) Creature::Creature(bool isWorldObject): Unit(isWorldObject), MapObject(), m_groupLootTimer(0), lootingGroupLowGUID(0), m_PlayerDamageReq(0), m_lootRecipient(), m_lootRecipientGroup(0), _skinner(), _pickpocketLootRestore(0), m_corpseRemoveTime(0), m_respawnTime(0), -m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_combatPulseTime(0), m_combatPulseDelay(0), m_reactState(REACT_AGGRESSIVE), +m_respawnDelay(300), m_corpseDelay(60), m_respawnradius(0.0f), m_boundaryCheckTime(2500), m_combatPulseTime(0), m_combatPulseDelay(0), m_reactState(REACT_AGGRESSIVE), m_defaultMovementType(IDLE_MOTION_TYPE), m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false), m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(NULL), m_creatureData(NULL), m_waypointID(0), m_path_id(0), m_formation(NULL) @@ -582,6 +582,17 @@ void Creature::Update(uint32 diff) LastCharmerGUID.Clear(); } + // periodic check to see if the creature has passed an evade boundary + if (IsAIEnabled && !IsInEvadeMode() && IsInCombat()) + { + if (diff >= m_boundaryCheckTime) + { + AI()->CheckInRoom(); + m_boundaryCheckTime = 2500; + } else + m_boundaryCheckTime -= diff; + } + // if periodic combat pulse is enabled and we are both in combat and in a dungeon, do this now if (m_combatPulseDelay > 0 && IsInCombat() && GetMap()->IsDungeon()) { diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 371f3c9395..92522a6a77 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -698,6 +698,7 @@ class Creature : public Unit, public GridObject, public MapObject uint32 m_respawnDelay; // (secs) delay between corpse disappearance and respawning uint32 m_corpseDelay; // (secs) delay between death and corpse disappearance float m_respawnradius; + uint32 m_boundaryCheckTime; // (msecs) remaining time for next evade boundary check uint32 m_combatPulseTime; // (msecs) remaining time for next zone-in-combat pulse uint32 m_combatPulseDelay; // (secs) how often the creature puts the entire zone in combat (only works in dungeons) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 261f4faf1a..06ff5d527e 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12683,7 +12683,7 @@ void Unit::TauntFadeOut(Unit* taunter) if (m_ThreatManager.isThreatListEmpty()) { if (creature->IsAIEnabled) - creature->AI()->EnterEvadeMode(); + creature->AI()->EnterEvadeMode(CreatureAI::EVADE_REASON_NO_HOSTILES); return; } @@ -12824,7 +12824,7 @@ Unit* Creature::SelectVictim() } // enter in evade mode in other case - AI()->EnterEvadeMode(); + AI()->EnterEvadeMode(CreatureAI::EVADE_REASON_NO_HOSTILES); return NULL; } diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index e59171bc3b..20f513323c 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -96,6 +96,13 @@ void InstanceScript::SetHeaders(std::string const& dataHeaders) headers.push_back(header); } +void InstanceScript::LoadBossBoundaries(const BossBoundaryData& data) +{ + for (BossBoundaryEntry entry : data) + if (entry.bossId < bosses.size()) + bosses[entry.bossId].boundary.insert(entry.boundary); +} + void InstanceScript::LoadMinionData(const MinionData* data) { while (data->entry) @@ -113,7 +120,7 @@ void InstanceScript::LoadDoorData(const DoorData* data) while (data->entry) { if (data->bossId < bosses.size()) - doors.insert(std::make_pair(data->entry, DoorInfo(&bosses[data->bossId], data->type, BoundaryType(data->boundary)))); + doors.insert(std::make_pair(data->entry, DoorInfo(&bosses[data->bossId], data->type))); ++data; } @@ -236,28 +243,6 @@ void InstanceScript::AddDoor(GameObject* door, bool add) if (add) { data.bossInfo->door[data.type].insert(door->GetGUID()); - switch (data.boundary) - { - default: - case BOUNDARY_NONE: - break; - case BOUNDARY_N: - case BOUNDARY_S: - data.bossInfo->boundary[data.boundary] = door->GetPositionX(); - break; - case BOUNDARY_E: - case BOUNDARY_W: - data.bossInfo->boundary[data.boundary] = door->GetPositionY(); - break; - case BOUNDARY_NW: - case BOUNDARY_SE: - data.bossInfo->boundary[data.boundary] = door->GetPositionX() + door->GetPositionY(); - break; - case BOUNDARY_NE: - case BOUNDARY_SW: - data.bossInfo->boundary[data.boundary] = door->GetPositionX() - door->GetPositionY(); - break; - } } else data.bossInfo->door[data.type].erase(door->GetGUID()); diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 189767e54b..8285eaa734 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -19,9 +19,11 @@ #ifndef TRINITY_INSTANCE_DATA_H #define TRINITY_INSTANCE_DATA_H +#include #include "ZoneScript.h" #include "World.h" #include "ObjectMgr.h" +#include "CreatureAI.h" #define OUT_SAVE_INST_DATA TC_LOG_DEBUG("scripts", "Saving Instance Data for Instance %s (Map %d, Instance Id %d)", instance->GetMapName(), instance->GetId(), instance->GetInstanceId()) #define OUT_SAVE_INST_DATA_COMPLETE TC_LOG_DEBUG("scripts", "Saving Instance Data for Instance %s (Map %d, Instance Id %d) completed.", instance->GetMapName(), instance->GetId(), instance->GetInstanceId()) @@ -65,32 +67,19 @@ enum DoorType MAX_DOOR_TYPES }; -enum BoundaryType -{ - BOUNDARY_NONE = 0, - BOUNDARY_N, - BOUNDARY_S, - BOUNDARY_E, - BOUNDARY_W, - BOUNDARY_NE, - BOUNDARY_NW, - BOUNDARY_SE, - BOUNDARY_SW, - BOUNDARY_MAX_X = BOUNDARY_N, - BOUNDARY_MIN_X = BOUNDARY_S, - BOUNDARY_MAX_Y = BOUNDARY_W, - BOUNDARY_MIN_Y = BOUNDARY_E -}; - -typedef std::map BossBoundaryMap; - struct DoorData { uint32 entry, bossId; DoorType type; - uint32 boundary; }; +struct BossBoundaryEntry +{ + uint32 const bossId; + AreaBoundary const* const boundary; +}; +typedef std::list BossBoundaryData; + struct MinionData { uint32 entry, bossId; @@ -108,16 +97,15 @@ struct BossInfo EncounterState state; GuidSet door[MAX_DOOR_TYPES]; GuidSet minion; - BossBoundaryMap boundary; + CreatureBoundary boundary; }; struct DoorInfo { - explicit DoorInfo(BossInfo* _bossInfo, DoorType _type, BoundaryType _boundary) - : bossInfo(_bossInfo), type(_type), boundary(_boundary) { } + explicit DoorInfo(BossInfo* _bossInfo, DoorType _type) + : bossInfo(_bossInfo), type(_type) { } BossInfo* bossInfo; DoorType type; - BoundaryType boundary; }; struct MinionInfo @@ -221,7 +209,7 @@ class InstanceScript : public ZoneScript virtual bool SetBossState(uint32 id, EncounterState state); EncounterState GetBossState(uint32 id) const { return id < bosses.size() ? bosses[id].state : TO_BE_DECIDED; } static std::string GetBossStateName(uint8 state); - BossBoundaryMap const* GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : NULL; } + CreatureBoundary const* GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : NULL; } // Achievement criteria additional requirements check // NOTE: not use this if same can be checked existed requirement types from AchievementCriteriaRequirementType @@ -248,6 +236,7 @@ class InstanceScript : public ZoneScript protected: void SetHeaders(std::string const& dataHeaders); void SetBossNumber(uint32 number) { bosses.resize(number); } + void LoadBossBoundaries(BossBoundaryData const& data); void LoadDoorData(DoorData const* data); void LoadMinionData(MinionData const* data); void LoadObjectData(ObjectData const* creatureData, ObjectData const* gameObjectData); diff --git a/src/server/game/Maps/AreaBoundary.cpp b/src/server/game/Maps/AreaBoundary.cpp new file mode 100644 index 0000000000..837a995904 --- /dev/null +++ b/src/server/game/Maps/AreaBoundary.cpp @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2015-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 "AreaBoundary.h" +#include "Unit.h" +#include "TemporarySummon.h" + +// ---== RECTANGLE ==--- +RectangleBoundary::RectangleBoundary(float southX, float northX, float eastY, float westY, bool isInverted) : + AreaBoundary(BoundaryType::BOUNDARY_RECTANGLE, isInverted), _minX(southX), _maxX(northX), _minY(eastY), _maxY(westY) { } +bool RectangleBoundary::IsWithinBoundaryArea(const Position* pos) const +{ + if (!pos) + return false; + + return !( + pos->GetPositionX() < _minX || + pos->GetPositionX() > _maxX || + pos->GetPositionY() < _minY || + pos->GetPositionY() > _maxY + ); +} + + +// ---== CIRCLE ==--- +CircleBoundary::CircleBoundary(Position const& center, double radius, bool isInverted) : + CircleBoundary(DoublePosition(center), radius, isInverted) { } +CircleBoundary::CircleBoundary(DoublePosition const& center, double radius, bool isInverted) : + AreaBoundary(BoundaryType::BOUNDARY_CIRCLE, isInverted), _center(center), _radiusSq(radius*radius) { } +CircleBoundary::CircleBoundary(Position const& center, Position const& pointOnCircle, bool isInverted) : + CircleBoundary(DoublePosition(center), DoublePosition(pointOnCircle), isInverted) { } +CircleBoundary::CircleBoundary(DoublePosition const& center, DoublePosition const& pointOnCircle, bool isInverted) : + AreaBoundary(BoundaryType::BOUNDARY_CIRCLE, isInverted), _center(center), _radiusSq(center.GetDoubleExactDist2dSq(pointOnCircle)) { } +bool CircleBoundary::IsWithinBoundaryArea(const Position* pos) const +{ + if (!pos) + return false; + + double offX = _center.GetDoublePositionX() - pos->GetPositionX(); + double offY = _center.GetDoublePositionY() - pos->GetPositionY(); + return offX*offX+offY*offY <= _radiusSq; +} + + +// ---== ELLIPSE ==--- +EllipseBoundary::EllipseBoundary(Position const& center, double radiusX, double radiusY, bool isInverted) : + EllipseBoundary(DoublePosition(center), radiusX, radiusY, isInverted) { } +EllipseBoundary::EllipseBoundary(DoublePosition const& center, double radiusX, double radiusY, bool isInverted) : + AreaBoundary(BoundaryType::BOUNDARY_ELLIPSE, isInverted), _center(center), _radiusYSq(radiusY*radiusY), _scaleXSq(_radiusYSq / (radiusX*radiusX)) { } +bool EllipseBoundary::IsWithinBoundaryArea(const Position* pos) const +{ + if (!pos) + return false; + + double offX = _center.GetDoublePositionX()-pos->GetPositionX(), offY = _center.GetDoublePositionY()-pos->GetPositionY(); + return (offX*offX)*_scaleXSq + (offY*offY) <= _radiusYSq; +} + + +// ---== TRIANGLE ==--- +TriangleBoundary::TriangleBoundary(Position const& pointA, Position const& pointB, Position const& pointC, bool isInverted) : + TriangleBoundary(DoublePosition(pointA), DoublePosition(pointB), DoublePosition(pointC), isInverted) { } +TriangleBoundary::TriangleBoundary(DoublePosition const& pointA, DoublePosition const& pointB, DoublePosition const& pointC, bool isInverted) : + AreaBoundary(BoundaryType::BOUNDARY_TRIANGLE, isInverted), _a(pointA), _b(pointB), _c(pointC), _abx(_b.GetDoublePositionX()-_a.GetDoublePositionX()), _bcx(_c.GetDoublePositionX()-_b.GetDoublePositionX()), _cax(_a.GetDoublePositionX() - _c.GetDoublePositionX()), _aby(_b.GetDoublePositionY()-_a.GetDoublePositionY()), _bcy(_c.GetDoublePositionY()-_b.GetDoublePositionY()), _cay(_a.GetDoublePositionY() - _c.GetDoublePositionY()) { } +bool TriangleBoundary::IsWithinBoundaryArea(const Position* pos) const +{ + if (!pos) + return false; + + // half-plane signs + bool sign1 = ((-_b.GetDoublePositionX() + pos->GetPositionX()) * _aby - (-_b.GetDoublePositionY() + pos->GetPositionY()) * _abx) < 0; + bool sign2 = ((-_c.GetDoublePositionX() + pos->GetPositionX()) * _bcy - (-_c.GetDoublePositionY() + pos->GetPositionY()) * _bcx) < 0; + bool sign3 = ((-_a.GetDoublePositionX() + pos->GetPositionX()) * _cay - (-_a.GetDoublePositionY() + pos->GetPositionY()) * _cax) < 0; + + // if all signs are the same, the point is inside the triangle + return ((sign1 == sign2) && (sign2 == sign3)); +} + + +// ---== PARALLELOGRAM ==--- +ParallelogramBoundary::ParallelogramBoundary(Position const& cornerA, Position const& cornerB, Position const& cornerD, bool isInverted) : + ParallelogramBoundary(DoublePosition(cornerA), DoublePosition(cornerB), DoublePosition(cornerD), isInverted) { } +ParallelogramBoundary::ParallelogramBoundary(DoublePosition const& cornerA, DoublePosition const& cornerB, DoublePosition const& cornerD, bool isInverted) : + AreaBoundary(BoundaryType::BOUNDARY_PARALLELOGRAM, isInverted), _a(cornerA), _b(cornerB), _d(cornerD), _c(DoublePosition(_d.GetDoublePositionX() + (_b.GetDoublePositionX() - _a.GetDoublePositionX()), _d.GetDoublePositionY() + (_b.GetDoublePositionY() - _a.GetDoublePositionY()))), _abx(_b.GetDoublePositionX() - _a.GetDoublePositionX()), _dax(_a.GetDoublePositionX() - _d.GetDoublePositionX()), _aby(_b.GetDoublePositionY() - _a.GetDoublePositionY()), _day(_a.GetDoublePositionY() - _d.GetDoublePositionY()) { } +bool ParallelogramBoundary::IsWithinBoundaryArea(const Position* pos) const +{ + if (!pos) + return false; + + // half-plane signs + bool sign1 = ((-_b.GetDoublePositionX() + pos->GetPositionX()) * _aby - (-_b.GetDoublePositionY() + pos->GetPositionY()) * _abx) < 0; + bool sign2 = ((-_a.GetDoublePositionX() + pos->GetPositionX()) * _day - (-_a.GetDoublePositionY() + pos->GetPositionY()) * _dax) < 0; + bool sign3 = ((-_d.GetDoublePositionY() + pos->GetPositionY()) * _abx - (-_d.GetDoublePositionX() + pos->GetPositionX()) * _aby) < 0; // AB = -CD + bool sign4 = ((-_c.GetDoublePositionY() + pos->GetPositionY()) * _dax - (-_c.GetDoublePositionX() + pos->GetPositionX()) * _day) < 0; // DA = -BC + + // if all signs are equal, the point is inside + return ((sign1 == sign2) && (sign2 == sign3) && (sign3 == sign4)); +} + + +// ---== Z RANGE ==--- +ZRangeBoundary::ZRangeBoundary(float minZ, float maxZ, bool isInverted) : + AreaBoundary(BoundaryType::BOUNDARY_Z_RANGE, isInverted), _minZ(minZ), _maxZ(maxZ) { } +bool ZRangeBoundary::IsWithinBoundaryArea(const Position* pos) const +{ + if (!pos) + return false; + + return !(pos->GetPositionZ() < _minZ || pos->GetPositionZ() > _maxZ); +} diff --git a/src/server/game/Maps/AreaBoundary.h b/src/server/game/Maps/AreaBoundary.h new file mode 100644 index 0000000000..24a0096235 --- /dev/null +++ b/src/server/game/Maps/AreaBoundary.h @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2015-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_AREA_BOUNDARY_H +#define TRINITY_AREA_BOUNDARY_H + +#include "Position.h" + +class AreaBoundary +{ + public: + enum BoundaryType + { + BOUNDARY_RECTANGLE, // Rectangle aligned with the coordinate axis + BOUNDARY_CIRCLE, + BOUNDARY_ELLIPSE, + BOUNDARY_TRIANGLE, + BOUNDARY_PARALLELOGRAM, + BOUNDARY_Z_RANGE, + }; + BoundaryType GetBoundaryType() const { return m_boundaryType; } + bool IsWithinBoundary(const Position* pos) const { return (IsWithinBoundaryArea(pos) != m_isInvertedBoundary); } + + struct DoublePosition : Position + { + double d_positionX, d_positionY, d_positionZ; + DoublePosition(double x = 0, double y = 0, double z = 0, float o = 0) + : Position((float)x, (float)y, (float)z, o), d_positionX(x), d_positionY(y), d_positionZ(z) { } + DoublePosition(float x = 0, float y = 0, float z = 0, float o = 0) + : Position(x, y, z, o), d_positionX(x), d_positionY(y), d_positionZ(z) { } + DoublePosition(const Position& pos) + : DoublePosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()) { } + + double GetDoublePositionX() const { return d_positionX; } + double GetDoublePositionY() const { return d_positionY; } + double GetDoublePositionZ() const { return d_positionZ; } + + double GetDoubleExactDist2dSq(DoublePosition const& pos) const { + double offX = GetDoublePositionX() - pos.GetDoublePositionX(); + double offY = GetDoublePositionY() - pos.GetDoublePositionY(); + return (offX*offX) + (offY*offY); + } + + Position* sync() { m_positionX = (float)d_positionX; m_positionY = (float)d_positionY; m_positionZ = (float)d_positionZ; return this; } + }; + + protected: + AreaBoundary(BoundaryType bType, bool isInverted) : m_boundaryType(bType), m_isInvertedBoundary(isInverted) { } + virtual bool IsWithinBoundaryArea(const Position* pos) const = 0; + const BoundaryType m_boundaryType; + bool m_isInvertedBoundary; +}; + +class RectangleBoundary : public AreaBoundary +{ + public: + // X axis is north/south, Y axis is east/west, larger values are northwest + RectangleBoundary(float southX, float northX, float eastY, float westY, bool isInverted = false); + + protected: + bool IsWithinBoundaryArea(const Position* pos) const override; + + private: + const float _minX, _maxX, _minY, _maxY; +}; + +class CircleBoundary : public AreaBoundary +{ + public: + CircleBoundary(Position const& center, double radius, bool isInverted = false); + CircleBoundary(DoublePosition const& center, double radius, bool isInverted = false); + CircleBoundary(Position const& center, Position const& pointOnCircle, bool isInverted = false); + CircleBoundary(DoublePosition const& center, DoublePosition const& pointOnCircle, bool isInverted = false); + + protected: + bool IsWithinBoundaryArea(const Position* pos) const override; + + private: + const DoublePosition _center; + const double _radiusSq; +}; + +class EllipseBoundary : public AreaBoundary +{ + public: + EllipseBoundary(Position const& center, double radiusX, double radiusY, bool isInverted = false); + EllipseBoundary(DoublePosition const& center, double radiusX, double radiusY, bool isInverted = false); + + protected: + bool IsWithinBoundaryArea(const Position* pos) const override; + + private: + const DoublePosition _center; + const double _radiusYSq, _scaleXSq; +}; + +class TriangleBoundary : public AreaBoundary +{ + public: + TriangleBoundary(Position const& pointA, Position const& pointB, Position const& pointC, bool isInverted = false); + TriangleBoundary(DoublePosition const& pointA, DoublePosition const& pointB, DoublePosition const& pointC, bool isInverted = false); + + protected: + bool IsWithinBoundaryArea(const Position* pos) const override; + + private: + const DoublePosition _a, _b, _c; + const double _abx, _bcx, _cax, _aby, _bcy, _cay; +}; + +class ParallelogramBoundary : public AreaBoundary +{ + public: + // Note: AB must be orthogonal to AD + ParallelogramBoundary(Position const& cornerA, Position const& cornerB, Position const& cornerD, bool isInverted = false); + ParallelogramBoundary(DoublePosition const& cornerA, DoublePosition const& cornerB, DoublePosition const& cornerD, bool isInverted = false); + + protected: + bool IsWithinBoundaryArea(const Position* pos) const override; + + private: + const DoublePosition _a, _b, _d, _c; + const double _abx, _dax, _aby, _day; +}; + +class ZRangeBoundary : public AreaBoundary +{ + public: + ZRangeBoundary(float minZ, float maxZ, bool isInverted = false); + + protected: + bool IsWithinBoundaryArea(const Position* pos) const override; + + private: + const float _minZ, _maxZ; +}; + +#endif //TRINITY_AREA_BOUNDARY_H diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index e42204b3ba..62c2a3a198 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -1205,6 +1205,9 @@ enum TrinityStrings LANG_NPCINFO_FLAGS_EXTRA = 11009, LANG_INSTANCE_LOGIN_GAMEMASTER_EXCEPTION = 11010, + LANG_CREATURE_NO_INTERIOR_POINT_FOUND = 11011, + LANG_CREATURE_MOVEMENT_NOT_BOUNDED = 11012, + LANG_CREATURE_MOVEMENT_MAYBE_UNBOUNDED = 11013, LANG_INSTANCE_BIND_MISMATCH = 11014 }; #endif diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index 8b62e7d55f..a15b6f8ad0 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -25,6 +25,7 @@ set(scripts_STAT_SRCS ../game/AI/ScriptedAI/ScriptedEscortAI.cpp ../game/AI/ScriptedAI/ScriptedCreature.cpp ../game/AI/ScriptedAI/ScriptedFollowerAI.cpp + ../game/Maps/AreaBoundary.cpp ) if(SCRIPTS) diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index bfc0193206..9902b83ff6 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -93,6 +93,7 @@ public: { "moveflags", rbac::RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "" }, { "transport", rbac::RBAC_PERM_COMMAND_DEBUG_TRANSPORT, false, &HandleDebugTransportCommand, "" }, { "loadcells", rbac::RBAC_PERM_COMMAND_DEBUG_LOADCELLS, false, &HandleDebugLoadCellsCommand, "" }, + { "boundary", rbac::RBAC_PERM_COMMAND_DEBUG_BOUNDARY, false, &HandleDebugBoundaryCommand, "" } }; static std::vector commandTable = { @@ -1414,6 +1415,33 @@ public: handler->PSendSysMessage("Cells loaded (mapId: %u) After load - Next GameObject %u, Creature %u", map->GetId(), map->GetMaxLowGuid(), map->GetMaxLowGuid()); return true; } + + static bool HandleDebugBoundaryCommand(ChatHandler* handler, char const* args) + { + Player* player = handler->GetSession()->GetPlayer(); + if (!player) + return false; + Creature* target = handler->getSelectedCreature(); + if (!target || !target->IsAIEnabled || !target->AI()) + { + return false; + } + + char* fill_str = args ? strtok((char*)args, " ") : nullptr; + char* duration_str = args ? strtok(nullptr, " ") : nullptr; + + int duration = duration_str ? atoi(duration_str) : -1; + if (duration <= 0 || duration >= 30 * MINUTE) // arbitary upper limit + duration = 3 * MINUTE; + + bool doFill = fill_str ? (stricmp(fill_str, "FILL") == 0) : false; + + int32 errMsg = target->AI()->VisualizeBoundary(duration, player, doFill); + if (errMsg > 0) + handler->PSendSysMessage(errMsg); + + return true; + } }; void AddSC_debug_commandscript() diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp index bd489d279a..5e1aad82fa 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp @@ -198,9 +198,9 @@ class boss_doomrel : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); _instance->SetGuidData(DATA_EVENSTARTER, ObjectGuid::Empty); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index a3ef50c3fb..83b2b45851 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -22,14 +22,14 @@ DoorData const doorData[] = { - { GO_BOSSGATE01, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_DRAKE_RIDER_PORTCULLIS, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ALTERAC_VALLEY_GATE, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GATE, DATA_FIREMAW, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GATE, DATA_EBONROC, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GATE, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_VACCUUM_EXIT_GATE, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_BOSSGATE01, DATA_RAZORGORE_THE_UNTAMED, DOOR_TYPE_PASSAGE }, + { GO_DRAKE_RIDER_PORTCULLIS, DATA_VAELASTRAZ_THE_CORRUPT, DOOR_TYPE_PASSAGE }, + { GO_ALTERAC_VALLEY_GATE, DATA_BROODLORD_LASHLAYER, DOOR_TYPE_PASSAGE }, + { GO_GATE, DATA_FIREMAW, DOOR_TYPE_PASSAGE }, + { GO_GATE, DATA_EBONROC, DOOR_TYPE_PASSAGE }, + { GO_GATE, DATA_FLAMEGOR, DOOR_TYPE_PASSAGE }, + { GO_VACCUUM_EXIT_GATE, DATA_CHROMAGGUS, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; ObjectData const creatureData[] = diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index 96e0554168..ced8dd8f37 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -91,9 +91,9 @@ public: Initialize(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); ResetTimer = 2000; } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index c726461044..b48f0edec2 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -28,12 +28,12 @@ DoorData const doorData[] = { - { GO_SELIN_DOOR, DATA_SELIN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_KAEL_DOOR, DATA_KAELTHAS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_SELIN_DOOR, DATA_SELIN, DOOR_TYPE_PASSAGE }, + { GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN, DOOR_TYPE_ROOM }, + { GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE }, + { GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE }, + { GO_KAEL_DOOR, DATA_KAELTHAS, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_magisters_terrace : public InstanceMapScript diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 4eb7bdc780..e336ff2438 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -596,10 +596,10 @@ public: } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { if (!bIsBattle)//do not reset self if we are in battle - npc_escortAI::EnterEvadeMode(); + npc_escortAI::EnterEvadeMode(why); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp index caab177d53..7096e60fb1 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp @@ -21,8 +21,8 @@ DoorData const doorData[] = { - { GO_HIGH_INQUISITORS_DOOR, DATA_MOGRAINE_AND_WHITE_EVENT, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_HIGH_INQUISITORS_DOOR, DATA_MOGRAINE_AND_WHITE_EVENT, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_scarlet_monastery : public InstanceMapScript diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index 67b1d29269..7db477ca7e 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -108,7 +108,7 @@ class boss_kirtonos_the_herald : public CreatureScript _JustDied(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetGuidData(GO_GATE_KIRTONOS))) gate->SetGoState(GO_STATE_ACTIVE); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index 936ae51f16..2534c09916 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -136,10 +136,10 @@ public: me->SummonCreature(NPC_FELMYST, x, y, z + 30, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN, 0); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { if (!Intro) - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void StartIntro() diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index 3aebbedbbf..8707c7eca2 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -169,12 +169,12 @@ public: me->SetFullHealth(); //dunno why it does not resets health at evade.. } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { bJustReset = true; me->SetVisible(false); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void DoAction(int32 param) override @@ -237,7 +237,7 @@ public: { if (me->GetDistance(CENTER_X, CENTER_Y, DRAGON_REALM_Z) >= 75) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_BOUNDARY); return; } if (HealthBelowPct(10) && !isEnraged) @@ -261,7 +261,7 @@ public: else { TC_LOG_ERROR("scripts", "Didn't find Shathrowar. Kalecgos event reseted."); - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return; } } @@ -423,7 +423,7 @@ public: TalkTimer = 15000; break; case 3: - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index c792214ae4..d86b370760 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -624,9 +624,9 @@ public: Talk(SAY_KJ_SLAY); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); summons.DespawnAll(); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 1b3996d1e6..04d23cd7d4 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -151,7 +151,7 @@ public: } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (Creature* muru = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_MURU))) muru->AI()->Reset(); // Reset encounter. diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp index 3f89e80906..bb9d3065f6 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp @@ -31,13 +31,13 @@ DoorData const doorData[] = { - { GO_FIRE_BARRIER, DATA_FELMYST, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_MURUS_GATE_1, DATA_MURU, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_MURUS_GATE_2, DATA_MURU, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_BOSS_COLLISION_1, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_BOSS_COLLISION_2, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_FORCE_FIELD, DATA_KALECGOS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_FIRE_BARRIER, DATA_FELMYST, DOOR_TYPE_PASSAGE }, + { GO_MURUS_GATE_1, DATA_MURU, DOOR_TYPE_ROOM }, + { GO_MURUS_GATE_2, DATA_MURU, DOOR_TYPE_PASSAGE }, + { GO_BOSS_COLLISION_1, DATA_KALECGOS, DOOR_TYPE_ROOM }, + { GO_BOSS_COLLISION_2, DATA_KALECGOS, DOOR_TYPE_ROOM }, + { GO_FORCE_FIELD, DATA_KALECGOS, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_sunwell_plateau : public InstanceMapScript diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index c6e8945900..0cae909558 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -424,8 +424,6 @@ class boss_janalai : public CreatureScript } else HatcherTimer -= diff; } - EnterEvadeIfOutOfCombatArea(diff); - DoMeleeAttackIfReady(); if (FireBreathTimer <= diff) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index ac4f404bfb..4eac8556db 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -157,9 +157,9 @@ class boss_arlokk : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - BossAI::EnterEvadeMode(); + BossAI::EnterEvadeMode(why); if (GameObject* object = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GONG_OF_BETHEKK))) object->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); me->DespawnOrUnsummon(4000); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index 01e314e9ed..60cb976f17 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -29,8 +29,8 @@ EndScriptData */ DoorData const doorData[] = { - { GO_FORCEFIELD, DATA_ARLOKK, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_FORCEFIELD, DATA_ARLOKK, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_zulgurub : public InstanceMapScript diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp index 7529c86d59..2d6d4da5ae 100644 --- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp @@ -256,7 +256,7 @@ public: Initialize(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { me->DisappearAndDie(); @@ -417,7 +417,7 @@ public: } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { me->DisappearAndDie(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp index 26f41e3f35..6b2142a809 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp @@ -417,7 +417,7 @@ void hyjalAI::Reset() } } -void hyjalAI::EnterEvadeMode() +void hyjalAI::EnterEvadeMode(EvadeReason /*why*/) { if (me->GetEntry() != JAINA) me->RemoveAllAuras(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h index 92507fe17b..55b8580165 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h @@ -123,7 +123,7 @@ struct hyjalAI : public npc_escortAI void Reset(); // Generically used to reset our variables. Do *not* call in EnterEvadeMode as this may make problems if the raid is still in combat - void EnterEvadeMode(); // Send creature back to spawn location and evade. + void EnterEvadeMode(EvadeReason /*why*/ = EVADE_REASON_OTHER); // Send creature back to spawn location and evade. void EnterCombat(Unit* /*who*/); // Used to reset cooldowns for our spells and to inform the raid that we're under attack diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp index 00324d5ff7..17f15cf7f3 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp @@ -43,9 +43,9 @@ Position const GuardianOfTimePos = { 2321.489f, 1268.383f, 132.8507f, 0.418879f DoorData const doorData[] = { - { GO_MALGANIS_GATE_2, DATA_MAL_GANIS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_EXIT_GATE, DATA_MAL_GANIS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_MALGANIS_GATE_2, DATA_MAL_GANIS, DOOR_TYPE_ROOM }, + { GO_EXIT_GATE, DATA_MAL_GANIS, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_culling_of_stratholme : public InstanceMapScript diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 772c77bd01..7da15b1fdc 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -316,20 +316,9 @@ public: MovePoint = iTemp; } - bool CheckInRoom() override - { - if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 95.0f) - { - EnterEvadeMode(); - return false; - } - - return true; - } - void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; //Common to PHASE_START && PHASE_END diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp index 7e95af5c82..1f4bfb1c41 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp @@ -31,6 +31,11 @@ EndScriptData */ #include "onyxias_lair.h" #include "TemporarySummon.h" +BossBoundaryData const boundaries = +{ + { DATA_ONYXIA, new CircleBoundary(Position(-34.3697f, -212.3296f), 100.0) } +}; + class instance_onyxias_lair : public InstanceMapScript { public: @@ -47,6 +52,7 @@ public: { SetHeaders(DataHeader); SetBossNumber(EncounterCount); + LoadBossBoundaries(boundaries); onyxiaLiftoffTimer = 0; manyWhelpsCounter = 0; diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp index 04d86a87f1..fa8eb2b706 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp @@ -129,10 +129,10 @@ class boss_ayamiss : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { me->ClearUnitState(UNIT_STATE_ROOT); - BossAI::EnterEvadeMode(); + BossAI::EnterEvadeMode(why); } void EnterCombat(Unit* attacker) override diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp index 4b6622e43c..8a564c4974 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp @@ -72,9 +72,9 @@ class boss_buru : public CreatureScript _phase = 0; } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - BossAI::EnterEvadeMode(); + BossAI::EnterEvadeMode(why); for (ObjectGuid eggGuid : Eggs) if (Creature* egg = me->GetMap()->GetCreature(eggGuid)) diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index f118b3f985..b192ff8ef4 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -163,11 +163,11 @@ class boss_ossirian : public CreatureScript Talk(SAY_SLAY); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { Cleanup(); summons.DespawnAll(); - BossAI::EnterEvadeMode(); + BossAI::EnterEvadeMode(why); } void JustDied(Unit* /*killer*/) override diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp index abfbc8162d..de425fbfce 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp @@ -77,9 +77,9 @@ class boss_skeram : public CreatureScript Talk(SAY_SLAY); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); if (me->IsSummon()) ((TempSummon*)me)->UnSummon(); } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp index 595eadd6d2..9f4c2da91e 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp @@ -190,10 +190,10 @@ class boss_viscidus : public CreatureScript events.ScheduleEvent(EVENT_POISON_SHOCK, urand(7000, 12000)); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { summons.DespawnAll(); - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void JustDied(Unit* /*killer*/) override diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index fbcea95842..99a209b5f0 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -304,7 +304,7 @@ public: } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); if (player && player->IsInCombat() && player->getAttackerForHelper()) @@ -312,7 +312,7 @@ public: AttackStart(player->getAttackerForHelper()); return; } - npc_escortAI::EnterEvadeMode(); + npc_escortAI::EnterEvadeMode(why); } void StartEvent(Player* player) diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp index 01958f1529..36a094d272 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp @@ -22,8 +22,8 @@ DoorData const doorData[] = { - { GO_PRINCE_TALDARAM_GATE, DATA_PRINCE_TALDARAM, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_PRINCE_TALDARAM_GATE, DATA_PRINCE_TALDARAM, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_ahnkahet : public InstanceMapScript diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp index 9c774a434a..88003680ec 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp @@ -21,11 +21,11 @@ DoorData const doorData[] = { - { GO_KRIKTHIR_DOOR, DATA_KRIKTHIR_THE_GATEWATCHER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ANUBARAK_DOOR_1, DATA_ANUBARAK, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_ANUBARAK_DOOR_2, DATA_ANUBARAK, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_ANUBARAK_DOOR_3, DATA_ANUBARAK, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_KRIKTHIR_DOOR, DATA_KRIKTHIR_THE_GATEWATCHER, DOOR_TYPE_PASSAGE }, + { GO_ANUBARAK_DOOR_1, DATA_ANUBARAK, DOOR_TYPE_ROOM }, + { GO_ANUBARAK_DOOR_2, DATA_ANUBARAK, DOOR_TYPE_ROOM }, + { GO_ANUBARAK_DOOR_3, DATA_ANUBARAK, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; ObjectData const creatureData[] = diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index d2fdfee859..f0b5a02e66 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -501,8 +501,6 @@ public: } DoMeleeAttackIfReady(); - - EnterEvadeIfOutOfCombatArea(diff); } private: diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp index 10e6770418..b54010b386 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp @@ -23,6 +23,11 @@ 0 - Sartharion */ +BossBoundaryData const boundaries = +{ + { DATA_SARTHARION, new RectangleBoundary(3218.86f, 3275.69f, 484.68f, 572.4f) } +}; + class instance_obsidian_sanctum : public InstanceMapScript { public: @@ -33,6 +38,8 @@ public: instance_obsidian_sanctum_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); + SetBossNumber(EncounterCount); + LoadBossBoundaries(boundaries); } void OnCreatureCreate(Creature* creature) override diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp index 590c1011d5..fb5642c6f3 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp @@ -98,7 +98,7 @@ class boss_general_zarithrian : public CreatureScript { _Reset(); if (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE) - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); } void EnterCombat(Unit* /*who*/) override @@ -145,13 +145,6 @@ class boss_general_zarithrian : public CreatureScript if (!UpdateVictim()) return; - // Can't use room boundary here, the gameobject is spawned at the same position as the boss. This is just as good anyway. - if (me->GetPositionX() > 3058.0f) - { - EnterEvadeMode(); - return; - } - events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) @@ -228,7 +221,7 @@ class npc_onyx_flamecaller : public CreatureScript _events.ScheduleEvent(EVENT_LAVA_GOUT, 5000); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { // Prevent EvadeMode } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 8b33269632..9e83116159 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -257,21 +257,9 @@ struct generic_halionAI : public BossAI } } - bool CheckInRoom() override - { - // Rough radius, it is not an exactly perfect circle - if (me->GetDistance2d(HalionControllerSpawnPos.GetPositionX(), HalionControllerSpawnPos.GetPositionY()) > 48.5f) - { - if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER))) - controller->AI()->EnterEvadeMode(); - return false; - } - return true; - } - void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom() || me->HasUnitState(UNIT_STATE_CASTING)) + if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING)) return; events.Update(diff); @@ -324,11 +312,15 @@ class boss_halion : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { + if(why == EVADE_REASON_BOUNDARY) + if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER))) + controller->AI()->EnterEvadeMode(); + // Phase 1: We always can evade. Phase 2 & 3: We can evade if and only if the controller tells us to. if (events.IsInPhase(PHASE_ONE) || _canEvade) - generic_halionAI::EnterEvadeMode(); + generic_halionAI::EnterEvadeMode(why); } void EnterCombat(Unit* who) override @@ -498,7 +490,7 @@ class boss_twilight_halion : public CreatureScript } // Never evade - void EnterEvadeMode() override { } + void EnterEvadeMode(EvadeReason /*why*/) override { } void KilledUnit(Unit* victim) override { @@ -1023,7 +1015,7 @@ class npc_meteor_strike_initial : public CreatureScript } void UpdateAI(uint32 /*diff*/) override { } - void EnterEvadeMode() override { } + void EnterEvadeMode(EvadeReason /*why*/) override { } private: InstanceScript* _instance; std::list _meteorList; @@ -1149,7 +1141,7 @@ class npc_meteor_strike_flame : public CreatureScript flame->AI()->SetGUID(_rootOwnerGuid); } - void EnterEvadeMode() override { } + void EnterEvadeMode(EvadeReason /*why*/) override { } private: InstanceScript* _instance; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index 4f8da75d7d..a6cd8362db 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -23,10 +23,16 @@ #include "WorldPacket.h" #include "ruby_sanctum.h" +BossBoundaryData const boundaries = +{ + { DATA_GENERAL_ZARITHRIAN, new EllipseBoundary(Position(3013.409f, 529.492f), 45.0, 100.0) }, + { DATA_HALION, new CircleBoundary(Position(3156.037f, 533.2656f), 48.5) } +}; + DoorData const doorData[] = { - {GO_FIRE_FIELD, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE, BOUNDARY_E }, - {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE}, + {GO_FIRE_FIELD, DATA_BALTHARUS_THE_WARBORN, DOOR_TYPE_PASSAGE }, + {0, 0, DOOR_TYPE_ROOM }, }; class instance_ruby_sanctum : public InstanceMapScript @@ -40,6 +46,7 @@ class instance_ruby_sanctum : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(EncounterCount); + LoadBossBoundaries(boundaries); LoadDoorData(doorData); BaltharusSharedHealth = 0; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 5836514dcf..83daa6e35a 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -167,10 +167,10 @@ class boss_gormok : public CreatureScript summons.DespawnAll(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void MovementInform(uint32 type, uint32 pointId) override @@ -309,11 +309,6 @@ class npc_snobold_vassal : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); } - void EnterEvadeMode() override - { - ScriptedAI::EnterEvadeMode(); - } - void EnterCombat(Unit* who) override { _targetGUID = who->GetGUID(); @@ -751,10 +746,10 @@ class boss_dreadscale : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); - boss_jormungarAI::EnterEvadeMode(); + boss_jormungarAI::EnterEvadeMode(why); } void JustReachedHome() override @@ -924,10 +919,10 @@ class boss_icehowl : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void JustReachedHome() override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 774c537ca2..eb1e769c07 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -416,10 +416,10 @@ class boss_fjola : public CreatureScript boss_twin_baseAI::EnterCombat(who); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); - boss_twin_baseAI::EnterEvadeMode(); + boss_twin_baseAI::EnterEvadeMode(why); } void JustReachedHome() override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index bcfe5e29ab..e5ac2676ad 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -22,6 +22,15 @@ #include "Player.h" #include "TemporarySummon.h" +AreaBoundary const* const mainBoundary = new CircleBoundary(Position(563.26f, 139.6f), 75.0); +BossBoundaryData const boundaries = { + { BOSS_BEASTS, mainBoundary }, + { BOSS_JARAXXUS, mainBoundary }, + { BOSS_CRUSADERS, mainBoundary }, + { BOSS_VALKIRIES, mainBoundary }, + { BOSS_ANUBARAK, new EllipseBoundary(Position(746.0f, 135.0f), 100.0, 75.0) } +}; + class instance_trial_of_the_crusader : public InstanceMapScript { public: @@ -33,6 +42,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); + LoadBossBoundaries(boundaries); TrialCounter = 50; EventStage = 0; NorthrendBeasts = NOT_STARTED; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index e595beb10c..4c2b92da0e 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -1269,7 +1269,7 @@ class npc_the_lich_king_escape_hor : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (_despawn) return; @@ -1335,7 +1335,7 @@ class npc_the_lich_king_escape_hor : public CreatureScript } else if (me->getThreatManager().getThreatList().size() < 2 && me->HasAura(SPELL_REMORSELESS_WINTER)) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return false; } @@ -1438,7 +1438,7 @@ struct npc_gauntlet_trash : public ScriptedAI _events.Reset(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (_instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED) _instance->SetData(DATA_WAVE_COUNT, NOT_STARTED); @@ -1546,10 +1546,10 @@ class npc_phantom_mage : public CreatureScript { npc_phantom_mageAI(Creature* creature) : npc_gauntlet_trash(creature) { } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { if (!me->HasAura(AURA_HALLUCINATION)) - npc_gauntlet_trash::EnterEvadeMode(); + npc_gauntlet_trash::EnterEvadeMode(why); } void EnterCombat(Unit* /*who*/) override @@ -1626,10 +1626,10 @@ class npc_phantom_hallucination : public CreatureScript DoZoneInCombat(me, 150.0f); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { if (me->GetOwner() && !me->GetOwner()->HasAura(AURA_HALLUCINATION)) - npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode(); + npc_phantom_mage::npc_phantom_mageAI::EnterEvadeMode(why); } void JustDied(Unit* /*killer*/) override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index a565929970..03f12e46bc 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -166,10 +166,10 @@ class boss_ick : public CreatureScript events.ScheduleEvent(EVENT_SPECIAL, urand(30000, 35000)); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { me->GetMotionMaster()->Clear(); - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void JustDied(Unit* /*killer*/) override @@ -203,7 +203,7 @@ class boss_ick : public CreatureScript if (!me->GetVictim() && me->getThreatManager().isThreatListEmpty()) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_NO_HOSTILES); 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 8e9acd57dd..96bd0aaa35 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -170,7 +170,7 @@ class boss_tyrannus : public CreatureScript me->GetMotionMaster()->MoveChase(victim); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { instance->SetBossState(DATA_TYRANNUS, FAIL); if (Creature* rimefang = GetRimefang()) diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp index e547b84c38..12845d6e2b 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp @@ -27,9 +27,9 @@ Position const EventLeaderPos2 = {1054.368f, 107.14620f, 628.4467f, 0.0f}; DoorData const Doors[] = { - {GO_ICE_WALL, DATA_GARFROST, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, - {GO_ICE_WALL, DATA_ICK, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, - {GO_HALLS_OF_REFLECTION_PORTCULLIS, DATA_TYRANNUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, + {GO_ICE_WALL, DATA_GARFROST, DOOR_TYPE_PASSAGE }, + {GO_ICE_WALL, DATA_ICK, DOOR_TYPE_PASSAGE }, + {GO_HALLS_OF_REFLECTION_PORTCULLIS, DATA_TYRANNUS, DOOR_TYPE_PASSAGE }, }; class instance_pit_of_saron : public InstanceMapScript diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 9e43228dc6..053e38ed93 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -336,7 +336,7 @@ class boss_drakkari_elemental : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { me->DespawnOrUnsummon(); } diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index 6ec02bfbe3..9f90b22824 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -23,12 +23,12 @@ DoorData const doorData[] = { - { GO_GAL_DARAH_DOOR_1, DATA_GAL_DARAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GAL_DARAH_DOOR_2, DATA_GAL_DARAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GAL_DARAH_DOOR_3, DATA_GAL_DARAH, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_ECK_THE_FEROCIOUS_DOOR, DATA_MOORABI, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ECK_THE_FEROCIOUS_DOOR_BEHIND, DATA_ECK_THE_FEROCIOUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_GAL_DARAH_DOOR_1, DATA_GAL_DARAH, DOOR_TYPE_PASSAGE }, + { GO_GAL_DARAH_DOOR_2, DATA_GAL_DARAH, DOOR_TYPE_PASSAGE }, + { GO_GAL_DARAH_DOOR_3, DATA_GAL_DARAH, DOOR_TYPE_ROOM }, + { GO_ECK_THE_FEROCIOUS_DOOR, DATA_MOORABI, DOOR_TYPE_PASSAGE }, + { GO_ECK_THE_FEROCIOUS_DOOR_BEHIND, DATA_ECK_THE_FEROCIOUS, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; ObjectData const creatureData[] = diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index bb30d90feb..bc8c7f877a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -173,7 +173,7 @@ class boss_blood_queen_lana_thel : public CreatureScript { if (!instance->CheckRequiredBosses(DATA_BLOOD_QUEEN_LANA_THEL, who->ToPlayer())) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT); return; } @@ -244,9 +244,11 @@ class boss_blood_queen_lana_thel : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - _EnterEvadeMode(); + if (!_EnterEvadeMode(why)) + return; + CleanAuras(); if (_killMinchar) { @@ -257,6 +259,7 @@ class boss_blood_queen_lana_thel : public CreatureScript } else { + me->AddUnitState(UNIT_STATE_EVADE); me->GetMotionMaster()->MoveTargetedHome(); Reset(); } @@ -333,7 +336,7 @@ class boss_blood_queen_lana_thel : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 98108d8fce..7e9083115b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -287,7 +287,7 @@ class boss_deathbringer_saurfang : public CreatureScript if (!instance->CheckRequiredBosses(DATA_DEATHBRINGER_SAURFANG, who->ToPlayer())) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT); return; } @@ -332,9 +332,9 @@ class boss_deathbringer_saurfang : public CreatureScript ScriptedAI::AttackStart(victim); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); if (_introDone) me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); } @@ -390,7 +390,7 @@ class boss_deathbringer_saurfang : public CreatureScript if (target->GetTransport()) { summon->DespawnOrUnsummon(1); - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return; } @@ -420,7 +420,7 @@ class boss_deathbringer_saurfang : public CreatureScript { if (target->GetTransport()) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index ead4467aa5..55cb455d03 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -115,7 +115,7 @@ class boss_festergut : public CreatureScript { if (!instance->CheckRequiredBosses(DATA_FESTERGUT, who->ToPlayer())) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT); return; } @@ -145,9 +145,9 @@ class boss_festergut : public CreatureScript instance->SetBossState(DATA_FESTERGUT, FAIL); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE))) professor->AI()->EnterEvadeMode(); } @@ -166,7 +166,7 @@ class boss_festergut : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 917cc7d665..9b0693ec95 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -572,7 +572,7 @@ struct gunship_npc_AI : public ScriptedAI } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (!me->IsAlive() || !me->IsInCombat()) return; @@ -621,7 +621,7 @@ protected: { if (Instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != IN_PROGRESS) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return false; } @@ -634,7 +634,7 @@ protected: } else if (me->getThreatManager().isThreatListEmpty()) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return false; } @@ -875,7 +875,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript _events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 10000)); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (!me->IsAlive()) return; @@ -1143,7 +1143,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript _events.ScheduleEvent(EVENT_CLEAVE, urand(2000, 10000)); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (!me->IsAlive()) return; @@ -1721,9 +1721,9 @@ class npc_gunship_mage : public CreatureScript me->SetReactState(REACT_PASSIVE); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void MovementInform(uint32 type, uint32 pointId) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 7d95491b28..d3cf6495aa 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)) || !CheckInRoom()) + if ((!UpdateVictim() && !events.IsInPhase(PHASE_INTRO))) return; events.Update(diff); @@ -1043,8 +1043,9 @@ class at_lady_deathwhisper_entrance : public AreaTriggerScript bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) - if (Creature* ladyDeathwhisper = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_LADY_DEATHWHISPER))) - ladyDeathwhisper->AI()->DoAction(ACTION_START_INTRO); + if (instance->GetBossState(DATA_LADY_DEATHWHISPER) != DONE) + if (Creature* ladyDeathwhisper = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_LADY_DEATHWHISPER))) + ladyDeathwhisper->AI()->DoAction(ACTION_START_INTRO); return true; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 66806920e7..056231285e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -186,7 +186,7 @@ class boss_lord_marrowgar : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) 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 fafe311383..0f721148b7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -564,7 +564,7 @@ class boss_professor_putricide : public CreatureScript void UpdateAI(uint32 diff) override { - if ((!(events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)) && !UpdateVictim()) || !CheckInRoom()) + if ((!(events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)) && !UpdateVictim())) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index 716da8f9b6..683dd976b7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -119,7 +119,7 @@ class boss_rotface : public CreatureScript { if (!instance->CheckRequiredBosses(DATA_ROTFACE, who->ToPlayer())) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT); return; } @@ -155,9 +155,9 @@ class boss_rotface : public CreatureScript Talk(SAY_KILL); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE))) professor->AI()->EnterEvadeMode(); } @@ -179,7 +179,7 @@ class boss_rotface : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 3f3fd53bad..9bdbce81db 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -417,7 +417,7 @@ class boss_sindragosa : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 5a78490b25..755bbd759e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -538,7 +538,7 @@ class boss_the_lich_king : public CreatureScript { if (!instance->CheckRequiredBosses(DATA_THE_LICH_KING, target->ToPlayer())) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); instance->DoCastSpellOnPlayers(LIGHT_S_HAMMER_TELEPORT); return; } @@ -581,10 +581,10 @@ class boss_the_lich_king : public CreatureScript return !target->HasAura(SPELL_IN_FROSTMOURNE_ROOM); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { instance->SetBossState(DATA_THE_LICH_KING, FAIL); - BossAI::EnterEvadeMode(); + BossAI::EnterEvadeMode(why); if (Creature* tirion = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HIGHLORD_TIRION_FORDRING))) tirion->AI()->EnterEvadeMode(); DoCastAOE(SPELL_KILL_FROSTMOURNE_PLAYERS); @@ -1724,7 +1724,7 @@ class npc_terenas_menethil : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { // no running back home if (!me->IsAlive()) @@ -1967,7 +1967,7 @@ class npc_broken_frostmourne : public CreatureScript _events.ScheduleEvent(EVENT_OUTRO_SUMMON_TERENAS, 6000, 0, PHASE_OUTRO); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 1dd0d1a681..4f35f84892 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -557,6 +557,8 @@ class npc_green_dragon_combat_trigger : public CreatureScript if (!me->IsInCombat()) return; + // @TODO check out of bounds on all encounter creatures, evade if matched + std::list const& threatList = me->getThreatManager().getThreatList(); if (threatList.empty()) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 1c06b355f9..25ca99f6a2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -1283,16 +1283,16 @@ struct npc_argent_captainAI : public ScriptedAI return (me->GetPositionY() > 2660.0f) == (target->GetPositionY() > 2660.0f); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { // not yet following if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_IDLE) != CHASE_MOTION_TYPE || IsUndead) { - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); return; } - if (!_EnterEvadeMode()) + if (!_EnterEvadeMode(why)) return; if (!me->GetVehicle()) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 4e80605fc2..388d7ff756 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -47,34 +47,54 @@ enum TimedEvents EVENT_RESPAWN_GUNSHIP = 4 }; +BossBoundaryData const boundaries = +{ + { DATA_LORD_MARROWGAR, new CircleBoundary(Position(-428.0f,2211.0f), 95.0) }, + { DATA_LORD_MARROWGAR, new RectangleBoundary(-430.0f, -330.0f, 2110.0f, 2310.0f) }, + { DATA_LADY_DEATHWHISPER, new RectangleBoundary(-670.0f, -520.0f, 2145.0f, 2280.0f) }, + { DATA_DEATHBRINGER_SAURFANG, new RectangleBoundary(-565.0f, -465.0f, 2160.0f, 2260.0f) }, + + { DATA_ROTFACE, new RectangleBoundary(4385.0f, 4505.0f, 3082.0f, 3195.0f) }, + { DATA_FESTERGUT, new RectangleBoundary(4205.0f, 4325.0f, 3082.0f, 3195.0f) }, + { DATA_PROFESSOR_PUTRICIDE, new ParallelogramBoundary(Position(4356.0f, 3290.0f), Position(4435.0f, 3194.0f), Position(4280.0f, 3194.0f)) }, + { DATA_PROFESSOR_PUTRICIDE, new RectangleBoundary(4280.0f, 4435.0f, 3150.0f, 4360.0f) }, + + { DATA_BLOOD_PRINCE_COUNCIL, new EllipseBoundary(Position(4660.95f, 2769.194f), 85.0, 60.0) }, + { DATA_BLOOD_QUEEN_LANA_THEL, new CircleBoundary(Position(4595.93f, 2769.365f), 64.0) }, + + { DATA_SISTER_SVALNA, new RectangleBoundary(4291.0f, 4423.0f, 2438.0f, 2653.0f) }, + { DATA_VALITHRIA_DREAMWALKER, new RectangleBoundary(4112.5f, 4293.5f, 2385.0f, 2585.0f) }, + { DATA_SINDRAGOSA, new EllipseBoundary(Position(4408.6f, 2484.0f), 100.0, 75.0) } +}; + DoorData const doorData[] = { - {GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM, BOUNDARY_N }, - {GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, - {GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, - {GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM, BOUNDARY_N }, - {GO_SAURFANG_S_DOOR, DATA_DEATHBRINGER_SAURFANG, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, - {GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM, BOUNDARY_E }, - {GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM, BOUNDARY_E }, - {GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM, BOUNDARY_E }, - {GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_S }, - {GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_W }, - {GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE, BOUNDARY_E }, - {GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM, BOUNDARY_S }, - {GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, - {GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_SISTER_SVALNA, DOOR_TYPE_PASSAGE, BOUNDARY_S }, - {GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_ROOM, BOUNDARY_N }, - {GO_GREEN_DRAGON_BOSS_EXIT, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_PASSAGE, BOUNDARY_S }, - {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_N }, - {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_S }, - {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_N }, - {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_S }, - {GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_S }, - {GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_E }, - {GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE}, - {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SE }, - {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM, BOUNDARY_SW }, - {0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE} // END + {GO_LORD_MARROWGAR_S_ENTRANCE, DATA_LORD_MARROWGAR, DOOR_TYPE_ROOM }, + {GO_ICEWALL, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE }, + {GO_DOODAD_ICECROWN_ICEWALL02, DATA_LORD_MARROWGAR, DOOR_TYPE_PASSAGE }, + {GO_ORATORY_OF_THE_DAMNED_ENTRANCE, DATA_LADY_DEATHWHISPER, DOOR_TYPE_ROOM }, + {GO_SAURFANG_S_DOOR, DATA_DEATHBRINGER_SAURFANG, DOOR_TYPE_PASSAGE }, + {GO_ORANGE_PLAGUE_MONSTER_ENTRANCE, DATA_FESTERGUT, DOOR_TYPE_ROOM }, + {GO_GREEN_PLAGUE_MONSTER_ENTRANCE, DATA_ROTFACE, DOOR_TYPE_ROOM }, + {GO_SCIENTIST_ENTRANCE, DATA_PROFESSOR_PUTRICIDE, DOOR_TYPE_ROOM }, + {GO_CRIMSON_HALL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_ROOM }, + {GO_BLOOD_ELF_COUNCIL_DOOR, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE }, + {GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT, DATA_BLOOD_PRINCE_COUNCIL, DOOR_TYPE_PASSAGE }, + {GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_ROOM }, + {GO_DOODAD_ICECROWN_GRATE_01, DATA_BLOOD_QUEEN_LANA_THEL, DOOR_TYPE_PASSAGE }, + {GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_SISTER_SVALNA, DOOR_TYPE_PASSAGE }, + {GO_GREEN_DRAGON_BOSS_ENTRANCE, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_ROOM }, + {GO_GREEN_DRAGON_BOSS_EXIT, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_PASSAGE }, + {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_01, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE }, + {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_02, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE }, + {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_03, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE }, + {GO_DOODAD_ICECROWN_ROOSTPORTCULLIS_04, DATA_VALITHRIA_DREAMWALKER, DOOR_TYPE_SPAWN_HOLE }, + {GO_SINDRAGOSA_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_ROOM }, + {GO_SINDRAGOSA_SHORTCUT_ENTRANCE_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE }, + {GO_SINDRAGOSA_SHORTCUT_EXIT_DOOR, DATA_SINDRAGOSA, DOOR_TYPE_PASSAGE }, + {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM }, + {GO_ICE_WALL, DATA_SINDRAGOSA, DOOR_TYPE_ROOM }, + {0, 0, DOOR_TYPE_ROOM } // END }; // this doesnt have to only store questgivers, also can be used for related quest spawns @@ -115,6 +135,7 @@ class instance_icecrown_citadel : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(EncounterCount); + LoadBossBoundaries(boundaries); LoadDoorData(doorData); TeamInInstance = 0; HeroicAttempts = MaxHeroicAttempts; diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index a76c1f722f..e8c4216b00 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -173,7 +173,7 @@ public: void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp index 9b3d0b7555..ec47b0db10 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp @@ -100,7 +100,7 @@ public: void UpdateAI(uint32 diff) override { - if (!UpdateVictimWithGaze() || !CheckInRoom()) + if (!UpdateVictimWithGaze()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 077d088778..c9684cf10c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -391,7 +391,7 @@ class boss_gothik : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); @@ -537,11 +537,11 @@ class npc_gothik_minion : public CreatureScript CombatAI::JustDied(owner); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { if (!gateClose) { - CombatAI::EnterEvadeMode(); + CombatAI::EnterEvadeMode(why); return; } @@ -566,7 +566,7 @@ class npc_gothik_minion : public CreatureScript { if (gateClose && (!isOnSameSide(me) || (me->GetVictim() && !isOnSameSide(me->GetVictim())))) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index 74eacee909..9b9619fe5b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -115,7 +115,7 @@ public: void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index a9ff0d245f..9d8f1365af 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -116,7 +116,7 @@ public: void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; if (HealthBelowPct(30) && !me->HasAura(SPELL_FRENZY_HELPER)) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index be41b1c69d..8ee3936dee 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -88,7 +88,7 @@ public: events.SetPhase(PHASE_NONE); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { Reset(); // teleport back first _EnterEvadeMode(); @@ -205,7 +205,7 @@ public: void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 667258ba67..68b9e25215 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -231,7 +231,7 @@ class boss_sapphiron : public CreatureScript events.Update(diff); - if ((_phase != PHASE_BIRTH && !UpdateVictim()) || !CheckInRoom()) + if (_phase != PHASE_BIRTH && !UpdateVictim()) return; if (_phase == PHASE_GROUND) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 9c243002c4..7330f90e58 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -456,6 +456,7 @@ public: { Initialize(); instance = creature->GetInstanceScript(); + SetBoundary(instance->GetBossBoundary(BOSS_THADDIUS)); } void Initialize() @@ -723,6 +724,7 @@ public: { Initialize(); instance = creature->GetInstanceScript(); + SetBoundary(instance->GetBossBoundary(BOSS_THADDIUS)); } void Initialize() @@ -990,7 +992,7 @@ public: { npc_teslaAI(Creature* creature) : ScriptedAI(creature) { } - void EnterEvadeMode() override { } // never stop casting due to evade + void EnterEvadeMode(EvadeReason /*why*/) override { } // never stop casting due to evade void UpdateAI(uint32 /*diff*/) override { } // never do anything unless told void EnterCombat(Unit* /*who*/) override { } void DamageTaken(Unit* /*who*/, uint32& damage) override { damage = 0; } // no, you can't kill it diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 69666563e9..916bc3d043 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -20,42 +20,75 @@ #include "InstanceScript.h" #include "naxxramas.h" +BossBoundaryData const boundaries = +{ + /* Arachnid Quarter */ + { BOSS_ANUBREKHAN, new CircleBoundary(Position(3273.376709f, -3475.876709f), Position(3195.668213f, -3475.930176f)) }, + { BOSS_FAERLINA, new RectangleBoundary(3315.0f, 3402.0f, -3727.0f, -3590.0f) }, + { BOSS_FAERLINA, new CircleBoundary(Position(3372.68f, -3648.2f), Position(3316.0f, -3704.26f)) }, + { BOSS_MAEXXNA, new CircleBoundary(Position(3502.2587f, -3892.1697f), Position(3418.7422f, -3840.271f)) }, + + /* Plague Quarter */ + { BOSS_NOTH, new RectangleBoundary(2618.0f, 2754.0f, -3557.43f, -3450.0f) }, + { BOSS_HEIGAN, new CircleBoundary(Position(2772.57f, -3685.28f), 56.0f) }, + { BOSS_LOATHEB, new CircleBoundary(Position(2909.0f, -3997.41f), 57.0f) }, + + /* Military Quarter */ + { BOSS_RAZUVIOUS, new ZRangeBoundary(260.0f, 287.0f) }, // will not chase onto the upper floor + { BOSS_GOTHIK, new RectangleBoundary(2627.0f, 2764.0f, -3440.0f, -3275.0f) }, + { BOSS_HORSEMEN, new ParallelogramBoundary(AreaBoundary::DoublePosition(2646.0, -2959.0), AreaBoundary::DoublePosition(2529.0, -3075.0), AreaBoundary::DoublePosition(2506.0, -2854.0)) }, + + /* Construct Quarter */ + { BOSS_PATCHWERK, new CircleBoundary(Position(3204.0f, -3241.4f), 240.0f) }, + { BOSS_PATCHWERK, new CircleBoundary(Position(3130.8576f, -3210.36f), Position(3085.37f, -3219.85f), true) }, // entrance slime circle blocker + { BOSS_GROBBULUS, new CircleBoundary(Position(3204.0f, -3241.4f), 240.0f) }, + { BOSS_GROBBULUS, new RectangleBoundary(3295.0f, 3340.0f, -3254.2f, -3230.18f, true) }, // entrance door blocker + { BOSS_GLUTH, new CircleBoundary(Position(3293.0f, -3142.0f), 80.0) }, + { BOSS_GLUTH, new ParallelogramBoundary(AreaBoundary::DoublePosition(3401.0, -3149.0), AreaBoundary::DoublePosition(3261.0, -3028.0), AreaBoundary::DoublePosition(3320.0, -3267.0)) }, + { BOSS_GLUTH, new ZRangeBoundary(285.0f, 310.0f) }, + { BOSS_THADDIUS, new ParallelogramBoundary(AreaBoundary::DoublePosition(3478.3, -3070.0), AreaBoundary::DoublePosition(3370.0, -2961.5), AreaBoundary::DoublePosition(3580.0, -2961.5)) }, + + /* Frostwyrm Lair */ + { BOSS_SAPPHIRON, new CircleBoundary(Position(3517.627f, -5255.5f), 110.0) }, + { BOSS_KELTHUZAD, new CircleBoundary(Position(3716.0f, -5107.0f), 85.0) } +}; + DoorData const doorData[] = { - { GO_ROOM_ANUBREKHAN, BOSS_ANUBREKHAN, DOOR_TYPE_ROOM, BOUNDARY_S }, - { GO_PASSAGE_ANUBREKHAN, BOSS_ANUBREKHAN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_PASSAGE_FAERLINA, BOSS_FAERLINA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ROOM_MAEXXNA, BOSS_FAERLINA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ROOM_MAEXXNA, BOSS_MAEXXNA, DOOR_TYPE_ROOM, BOUNDARY_SW }, - { GO_ROOM_NOTH, BOSS_NOTH, DOOR_TYPE_ROOM, BOUNDARY_N }, - { GO_PASSAGE_NOTH, BOSS_NOTH, DOOR_TYPE_PASSAGE, BOUNDARY_E }, - { GO_ROOM_HEIGAN, BOSS_NOTH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ROOM_HEIGAN, BOSS_HEIGAN, DOOR_TYPE_ROOM, BOUNDARY_N }, - { GO_PASSAGE_HEIGAN, BOSS_HEIGAN, DOOR_TYPE_PASSAGE, BOUNDARY_E }, - { GO_ROOM_LOATHEB, BOSS_HEIGAN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ROOM_LOATHEB, BOSS_LOATHEB, DOOR_TYPE_ROOM, BOUNDARY_W }, - { GO_ROOM_GROBBULUS, BOSS_PATCHWERK, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ROOM_GROBBULUS, BOSS_GROBBULUS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_PASSAGE_GLUTH, BOSS_GLUTH, DOOR_TYPE_PASSAGE, BOUNDARY_NW }, - { GO_ROOM_THADDIUS, BOSS_GLUTH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ROOM_THADDIUS, BOSS_THADDIUS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_ROOM_GOTHIK, BOSS_RAZUVIOUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ROOM_GOTHIK, BOSS_GOTHIK, DOOR_TYPE_ROOM, BOUNDARY_N }, - { GO_PASSAGE_GOTHIK, BOSS_GOTHIK, DOOR_TYPE_PASSAGE, BOUNDARY_S }, - { GO_ROOM_HORSEMEN, BOSS_GOTHIK, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GOTHIK_GATE, BOSS_GOTHIK, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_ROOM_HORSEMEN, BOSS_HORSEMEN, DOOR_TYPE_ROOM, BOUNDARY_NE }, - { GO_PASSAGE_SAPPHIRON, BOSS_SAPPHIRON, DOOR_TYPE_PASSAGE, BOUNDARY_W }, - { GO_ROOM_KELTHUZAD, BOSS_KELTHUZAD, DOOR_TYPE_ROOM, BOUNDARY_S }, - { GO_ARAC_EYE_RAMP, BOSS_MAEXXNA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_ARAC_EYE_RAMP_BOSS, BOSS_MAEXXNA, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_PLAG_EYE_RAMP, BOSS_LOATHEB, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_PLAG_EYE_RAMP_BOSS, BOSS_LOATHEB, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_MILI_EYE_RAMP, BOSS_HORSEMEN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_MILI_EYE_RAMP_BOSS, BOSS_HORSEMEN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_CONS_EYE_RAMP, BOSS_THADDIUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_CONS_EYE_RAMP_BOSS, BOSS_THADDIUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } + { GO_ROOM_ANUBREKHAN, BOSS_ANUBREKHAN, DOOR_TYPE_ROOM }, + { GO_PASSAGE_ANUBREKHAN, BOSS_ANUBREKHAN, DOOR_TYPE_PASSAGE }, + { GO_PASSAGE_FAERLINA, BOSS_FAERLINA, DOOR_TYPE_PASSAGE }, + { GO_ROOM_MAEXXNA, BOSS_FAERLINA, DOOR_TYPE_PASSAGE }, + { GO_ROOM_MAEXXNA, BOSS_MAEXXNA, DOOR_TYPE_ROOM }, + { GO_ROOM_NOTH, BOSS_NOTH, DOOR_TYPE_ROOM }, + { GO_PASSAGE_NOTH, BOSS_NOTH, DOOR_TYPE_PASSAGE }, + { GO_ROOM_HEIGAN, BOSS_NOTH, DOOR_TYPE_PASSAGE }, + { GO_ROOM_HEIGAN, BOSS_HEIGAN, DOOR_TYPE_ROOM }, + { GO_PASSAGE_HEIGAN, BOSS_HEIGAN, DOOR_TYPE_PASSAGE }, + { GO_ROOM_LOATHEB, BOSS_HEIGAN, DOOR_TYPE_PASSAGE }, + { GO_ROOM_LOATHEB, BOSS_LOATHEB, DOOR_TYPE_ROOM }, + { GO_ROOM_GROBBULUS, BOSS_PATCHWERK, DOOR_TYPE_PASSAGE }, + { GO_ROOM_GROBBULUS, BOSS_GROBBULUS, DOOR_TYPE_ROOM }, + { GO_PASSAGE_GLUTH, BOSS_GLUTH, DOOR_TYPE_PASSAGE }, + { GO_ROOM_THADDIUS, BOSS_GLUTH, DOOR_TYPE_PASSAGE }, + { GO_ROOM_THADDIUS, BOSS_THADDIUS, DOOR_TYPE_ROOM }, + { GO_ROOM_GOTHIK, BOSS_RAZUVIOUS, DOOR_TYPE_PASSAGE }, + { GO_ROOM_GOTHIK, BOSS_GOTHIK, DOOR_TYPE_ROOM }, + { GO_PASSAGE_GOTHIK, BOSS_GOTHIK, DOOR_TYPE_PASSAGE }, + { GO_ROOM_HORSEMEN, BOSS_GOTHIK, DOOR_TYPE_PASSAGE }, + { GO_GOTHIK_GATE, BOSS_GOTHIK, DOOR_TYPE_ROOM }, + { GO_ROOM_HORSEMEN, BOSS_HORSEMEN, DOOR_TYPE_ROOM }, + { GO_PASSAGE_SAPPHIRON, BOSS_SAPPHIRON, DOOR_TYPE_PASSAGE }, + { GO_ROOM_KELTHUZAD, BOSS_KELTHUZAD, DOOR_TYPE_ROOM }, + { GO_ARAC_EYE_RAMP, BOSS_MAEXXNA, DOOR_TYPE_PASSAGE }, + { GO_ARAC_EYE_RAMP_BOSS, BOSS_MAEXXNA, DOOR_TYPE_PASSAGE }, + { GO_PLAG_EYE_RAMP, BOSS_LOATHEB, DOOR_TYPE_PASSAGE }, + { GO_PLAG_EYE_RAMP_BOSS, BOSS_LOATHEB, DOOR_TYPE_PASSAGE }, + { GO_MILI_EYE_RAMP, BOSS_HORSEMEN, DOOR_TYPE_PASSAGE }, + { GO_MILI_EYE_RAMP_BOSS, BOSS_HORSEMEN, DOOR_TYPE_PASSAGE }, + { GO_CONS_EYE_RAMP, BOSS_THADDIUS, DOOR_TYPE_PASSAGE }, + { GO_CONS_EYE_RAMP_BOSS, BOSS_THADDIUS, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } }; MinionData const minionData[] = @@ -117,6 +150,7 @@ class instance_naxxramas : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(EncounterCount); + LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadMinionData(minionData); LoadObjectData(nullptr, objectData); diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index c43be98ad5..277ca793a8 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -574,7 +574,7 @@ public: me->setActive(true); if (!instance->CheckRequiredBosses(DATA_MALYGOS_EVENT)) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return; } @@ -585,7 +585,7 @@ public: instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { instance->SetBossState(DATA_MALYGOS_EVENT, FAIL); @@ -1282,7 +1282,7 @@ public: VehicleAI::Reset(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { } @@ -1341,7 +1341,7 @@ class npc_nexus_lord : public CreatureScript _events.Reset(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { } @@ -1430,7 +1430,7 @@ class npc_scion_of_eternity : public CreatureScript { } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { } diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index 6e4cd9c6a6..e87115dd8e 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -21,6 +21,11 @@ #include "eye_of_eternity.h" #include "Player.h" +BossBoundaryData const boundaries = +{ + { DATA_MALYGOS_EVENT, new CircleBoundary(Position(754.362f, 1301.609985f), 280.0) } // sanity check boundary +}; + class instance_eye_of_eternity : public InstanceMapScript { public: @@ -37,6 +42,7 @@ public: { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); + LoadBossBoundaries(boundaries); } void OnPlayerEnter(Player* player) override diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 817cf42965..2c12f62d61 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -23,8 +23,8 @@ DoorData const doorData[] = { - { GO_DRAGON_CAGE_DOOR, DATA_DRAKOS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } + { GO_DRAGON_CAGE_DOOR, DATA_DRAKOS, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } }; Position const VerdisaMove = { 949.188f, 1032.91f, 359.967f, 1.093027f }; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index 1b93b611df..bc2fbe00f2 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -187,14 +187,14 @@ public: instance->SetBossState(DATA_BJARNGRIM, NOT_STARTED); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { if (me->HasAura(SPELL_TEMPORARY_ELECTRICAL_CHARGE)) canBuff = true; else canBuff = false; - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp index 33d4758f5a..37df62ac16 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp @@ -21,10 +21,10 @@ DoorData const doorData[] = { - { GO_VOLKHAN_DOOR, DATA_VOLKHAN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_IONAR_DOOR, DATA_IONAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_LOKEN_DOOR, DATA_LOKEN, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_VOLKHAN_DOOR, DATA_VOLKHAN, DOOR_TYPE_PASSAGE }, + { GO_IONAR_DOOR, DATA_IONAR, DOOR_TYPE_PASSAGE }, + { GO_LOKEN_DOOR, DATA_LOKEN, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_halls_of_lightning : public InstanceMapScript diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp index 63f4ed2895..c6822235ce 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp @@ -22,8 +22,8 @@ DoorData const doorData[] = { - { GO_SJONNIR_DOOR, DATA_TRIBUNAL_OF_AGES, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_SJONNIR_DOOR, DATA_TRIBUNAL_OF_AGES, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_halls_of_stone : public InstanceMapScript diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 457150f881..dbb00fa252 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -492,10 +492,10 @@ class boss_algalon_the_observer : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { instance->SetBossState(BOSS_ALGALON, FAIL); - BossAI::EnterEvadeMode(); + BossAI::EnterEvadeMode(why); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); me->SetSheath(SHEATH_STATE_UNARMED); } @@ -545,7 +545,7 @@ class boss_algalon_the_observer : public CreatureScript void UpdateAI(uint32 diff) override { - if ((!(events.IsInPhase(PHASE_ROLE_PLAY) || events.IsInPhase(PHASE_BIG_BANG)) && !UpdateVictim()) || !CheckInRoom()) + if (!(events.IsInPhase(PHASE_ROLE_PLAY) || events.IsInPhase(PHASE_BIG_BANG)) && !UpdateVictim()) return; events.Update(diff); @@ -639,7 +639,7 @@ class boss_algalon_the_observer : public CreatureScript events.ScheduleEvent(EVENT_EVADE, 2500); break; case EVENT_EVADE: - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); break; case EVENT_COSMIC_SMASH: Talk(EMOTE_ALGALON_COSMIC_SMASH); 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 a587b61cf0..c77f5b2bce 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -369,7 +369,7 @@ class boss_flame_leviathan : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index 3398d318d8..cd214a0114 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -277,8 +277,6 @@ class boss_ignis : public CreatureScript } DoMeleeAttackIfReady(); - - EnterEvadeIfOutOfCombatArea(diff); } private: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 575d0d1230..820332791c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -478,7 +478,7 @@ class boss_mimiron : public CreatureScript void UpdateAI(uint32 diff) override { - if ((!UpdateVictim() || !CheckInRoom()) && instance->GetBossState(BOSS_MIMIRON) != DONE) + if (!UpdateVictim() && instance->GetBossState(BOSS_MIMIRON) != DONE) return; events.Update(diff); @@ -846,7 +846,7 @@ class boss_leviathan_mk_ii : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); @@ -999,7 +999,7 @@ class boss_vx_001 : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { summons.DespawnAll(); } @@ -1174,7 +1174,7 @@ class boss_aerial_command_unit : public CreatureScript } } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { summons.DespawnAll(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index f898461154..3f783e8201 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -54,10 +54,10 @@ class boss_thorim : public CreatureScript _Reset(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { Talk(SAY_WIPE); - _EnterEvadeMode(); + _EnterEvadeMode(why); } void KilledUnit(Unit* who) override @@ -78,7 +78,7 @@ class boss_thorim : public CreatureScript _EnterCombat(); } - void UpdateAI(uint32 diff) override + void UpdateAI(uint32 /*diff*/) override { if (!UpdateVictim()) return; @@ -86,8 +86,6 @@ class boss_thorim : public CreatureScript // DoMeleeAttackIfReady(); - - EnterEvadeIfOutOfCombatArea(diff); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 8f01c15721..8cb20eadc9 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -267,7 +267,7 @@ class boss_xt002 : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || !CheckInRoom()) + if (!UpdateVictim()) return; events.Update(diff); 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 ca8340a987..7da67171b5 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -447,9 +447,9 @@ class boss_voice_of_yogg_saron : public CreatureScript me->SetInCombatWithZone(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - BossAI::EnterEvadeMode(); + BossAI::EnterEvadeMode(why); for (uint8 i = DATA_SARA; i <= DATA_MIMIRON_YS; ++i) if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(i))) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 51e9c5adb6..ab51128a5c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -24,26 +24,43 @@ #include "WorldPacket.h" #include "ulduar.h" +static BossBoundaryData const boundaries = +{ + { BOSS_LEVIATHAN, new RectangleBoundary(148.0f, 401.3f, -155.0f, 90.0f) }, + { BOSS_IGNIS, new RectangleBoundary(495.0f, 680.0f, 90.0f, 400.0f) }, + { BOSS_RAZORSCALE, new RectangleBoundary(370.0f, 810.0f, -542.0f, -55.0f) }, + { BOSS_XT002, new RectangleBoundary(755.0f, 940.0f, -125.0f, 95.0f) }, + { BOSS_ASSEMBLY_OF_IRON, new CircleBoundary(Position(1587.2f, 121.0f), 90.0) }, + { BOSS_ALGALON, new CircleBoundary(Position(1632.668f, -307.7656f), 45.0) }, + { BOSS_ALGALON, new ZRangeBoundary(410.0f, 440.0f) }, + { BOSS_HODIR, new EllipseBoundary(Position(2001.5f, -240.0f), 50.0, 75.0) }, + { BOSS_THORIM, new CircleBoundary(Position(2134.73f, -263.2f), 50.0) }, + { BOSS_FREYA, new RectangleBoundary(2094.6f, 2520.0f, -250.0f, 200.0f) }, + { BOSS_MIMIRON, new CircleBoundary(Position(2744.0f, 2569.0f), 70.0) }, + { BOSS_VEZAX, new RectangleBoundary(1740.0f, 1930.0f, 31.0f, 228.0f) }, + { BOSS_YOGG_SARON, new CircleBoundary(Position(1980.42f, -27.68f), 105.0) } +}; + static DoorData const doorData[] = { - { GO_LEVIATHAN_DOOR, BOSS_LEVIATHAN, DOOR_TYPE_ROOM, BOUNDARY_S }, - { GO_XT_002_DOOR, BOSS_XT002, DOOR_TYPE_ROOM, BOUNDARY_S }, - { GO_IRON_COUNCIL_DOOR, BOSS_ASSEMBLY_OF_IRON, DOOR_TYPE_ROOM, BOUNDARY_N }, - { GO_ARCHIVUM_DOOR, BOSS_ASSEMBLY_OF_IRON, DOOR_TYPE_PASSAGE, BOUNDARY_S }, - { GO_HODIR_ENTRANCE, BOSS_HODIR, DOOR_TYPE_ROOM, BOUNDARY_E }, - { GO_HODIR_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_HODIR_ICE_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE, BOUNDARY_W }, - { GO_MIMIRON_DOOR_1, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_W }, - { GO_MIMIRON_DOOR_2, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_E }, - { GO_MIMIRON_DOOR_3, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_S }, - { GO_VEZAX_DOOR, BOSS_VEZAX, DOOR_TYPE_PASSAGE, BOUNDARY_E }, - { GO_YOGG_SARON_DOOR, BOSS_YOGG_SARON, DOOR_TYPE_ROOM, BOUNDARY_S }, - { GO_DOODAD_UL_SIGILDOOR_03, BOSS_ALGALON, DOOR_TYPE_ROOM, BOUNDARY_W }, - { GO_DOODAD_UL_UNIVERSEFLOOR_01, BOSS_ALGALON, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_DOODAD_UL_UNIVERSEFLOOR_02, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE }, - { GO_DOODAD_UL_UNIVERSEGLOBE01, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE }, - { GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE }, + { GO_LEVIATHAN_DOOR, BOSS_LEVIATHAN, DOOR_TYPE_ROOM }, + { GO_XT_002_DOOR, BOSS_XT002, DOOR_TYPE_ROOM }, + { GO_IRON_COUNCIL_DOOR, BOSS_ASSEMBLY_OF_IRON, DOOR_TYPE_ROOM }, + { GO_ARCHIVUM_DOOR, BOSS_ASSEMBLY_OF_IRON, DOOR_TYPE_PASSAGE }, + { GO_HODIR_ENTRANCE, BOSS_HODIR, DOOR_TYPE_ROOM }, + { GO_HODIR_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE }, + { GO_HODIR_ICE_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE }, + { GO_MIMIRON_DOOR_1, BOSS_MIMIRON, DOOR_TYPE_ROOM }, + { GO_MIMIRON_DOOR_2, BOSS_MIMIRON, DOOR_TYPE_ROOM }, + { GO_MIMIRON_DOOR_3, BOSS_MIMIRON, DOOR_TYPE_ROOM }, + { GO_VEZAX_DOOR, BOSS_VEZAX, DOOR_TYPE_PASSAGE }, + { GO_YOGG_SARON_DOOR, BOSS_YOGG_SARON, DOOR_TYPE_ROOM }, + { GO_DOODAD_UL_SIGILDOOR_03, BOSS_ALGALON, DOOR_TYPE_ROOM }, + { GO_DOODAD_UL_UNIVERSEFLOOR_01, BOSS_ALGALON, DOOR_TYPE_ROOM }, + { GO_DOODAD_UL_UNIVERSEFLOOR_02, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE }, + { GO_DOODAD_UL_UNIVERSEGLOBE01, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE }, + { GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE }, + { 0, 0, DOOR_TYPE_ROOM }, }; MinionData const minionData[] = @@ -74,7 +91,7 @@ class instance_ulduar : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTER); - + LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadMinionData(minionData); LoadObjectData(creatureData, nullptr); @@ -818,12 +835,9 @@ class instance_ulduar : public InstanceMapScript { case DATA_COLOSSUS: ColossusData = data; - if (data == 2) + if (data == 2 && GetBossState(BOSS_LEVIATHAN) == NOT_STARTED) { - if (Creature* Leviathan = instance->GetCreature(LeviathanGUID)) - Leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION); - if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID)) - gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); + _events.ScheduleEvent(EVENT_LEVIATHAN_BREAK_DOOR, 5 * IN_MILLISECONDS); SaveToDB(); } break; @@ -1179,6 +1193,12 @@ class instance_ulduar : public InstanceMapScript } } break; + case EVENT_LEVIATHAN_BREAK_DOOR: + if (Creature* Leviathan = instance->GetCreature(LeviathanGUID)) + Leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION); + if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID)) + gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); + break; } } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index f9f2f94d58..58c963f9cb 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -427,7 +427,8 @@ enum UlduarEvents EVENT_DESPAWN_ALGALON = 1, EVENT_UPDATE_ALGALON_TIMER = 2, ACTION_INIT_ALGALON = 6, - EVENT_DESPAWN_LEVIATHAN_VEHICLES = 7 + EVENT_DESPAWN_LEVIATHAN_VEHICLES = 7, + EVENT_LEVIATHAN_BREAK_DOOR = 8 }; enum YoggSaronIllusions diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp index 556756f41a..fbcf464d8b 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp @@ -21,9 +21,9 @@ DoorData const doorData[] = { - { GO_GIANT_PORTCULLIS_1, DATA_INGVAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GIANT_PORTCULLIS_2, DATA_INGVAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_GIANT_PORTCULLIS_1, DATA_INGVAR, DOOR_TYPE_PASSAGE }, + { GO_GIANT_PORTCULLIS_2, DATA_INGVAR, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; MinionData const minionData[] = diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp index 910ddfbc57..8f2d5a6177 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp @@ -19,11 +19,16 @@ #include "InstanceScript.h" #include "utgarde_pinnacle.h" +BossBoundaryData const boundaries = +{ + { DATA_KING_YMIRON, new RectangleBoundary(340.0f, 450.0f, -412.0f, -275.0f) } +}; + DoorData const doorData[] = { - { GO_SKADI_THE_RUTHLESS_DOOR, DATA_SKADI_THE_RUTHLESS, DOOR_TYPE_PASSAGE, BOUNDARY_W }, - { GO_KING_YMIRON_DOOR, DATA_KING_YMIRON, DOOR_TYPE_PASSAGE, BOUNDARY_N }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_SKADI_THE_RUTHLESS_DOOR, DATA_SKADI_THE_RUTHLESS, DOOR_TYPE_PASSAGE }, + { GO_KING_YMIRON_DOOR, DATA_KING_YMIRON, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_utgarde_pinnacle : public InstanceMapScript @@ -37,6 +42,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(EncounterCount); + LoadBossBoundaries(boundaries); LoadDoorData(doorData); } diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 0186ff4f00..59802165a9 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -239,7 +239,7 @@ public: } } - void EnterEvadeMode() override { } + void EnterEvadeMode(EvadeReason /*why*/) override { } void MoveInLineOfSight(Unit* /*who*/) override { } diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index ec7acf0d89..88217cb384 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -231,9 +231,9 @@ class npc_tournament_training_dummy : public CreatureScript events.ScheduleEvent(EVENT_DUMMY_RECAST_DEFEND, 5000); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - if (!_EnterEvadeMode()) + if (!_EnterEvadeMode(why)) return; Reset(); @@ -304,7 +304,7 @@ class npc_tournament_training_dummy : public CreatureScript case EVENT_DUMMY_RESET: if (UpdateVictim()) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); events.ScheduleEvent(EVENT_DUMMY_RESET, 10000); } break; diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index d29472a308..e5263a8630 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -338,7 +338,7 @@ public: void AttackStart(Unit* /*who*/) override { } void EnterCombat(Unit* /*who*/) override { } - void EnterEvadeMode() override { } + void EnterEvadeMode(EvadeReason /*why*/) override { } void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override { diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp index 94cc67a517..cbf0d6b1ce 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp @@ -21,8 +21,8 @@ DoorData const doorData[] = { - { GO_IKISS_DOOR, DATA_TALON_KING_IKISS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_IKISS_DOOR, DATA_TALON_KING_IKISS, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; ObjectData const gameObjectData[] = diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp index 2d98fb4319..8acd6067c0 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp @@ -143,7 +143,7 @@ class boss_ambassador_hellmaw : public CreatureScript if (me->HasAura(SPELL_BANISH)) { - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); return; } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp index ac351538ee..96978e92b1 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp @@ -22,9 +22,9 @@ DoorData const doorData[] = { - { GO_REFECTORY_DOOR, DATA_BLACKHEART_THE_INCITER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_SCREAMING_HALL_DOOR, DATA_GRANDMASTER_VORPIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_REFECTORY_DOOR, DATA_BLACKHEART_THE_INCITER, DOOR_TYPE_PASSAGE }, + { GO_SCREAMING_HALL_DOOR, DATA_GRANDMASTER_VORPIL, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_shadow_labyrinth : public InstanceMapScript diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 8f3cbc50e6..7902c58550 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -1181,7 +1181,7 @@ public: void EnterCombat(Unit* /*who*/) override { } void MoveInLineOfSight(Unit* /*who*/) override { } - void EnterEvadeMode() override { } + void EnterEvadeMode(EvadeReason /*why*/) override { } void GetIllidanGUID(ObjectGuid guid) { @@ -1439,7 +1439,7 @@ public: } // Do not call reset in Akama's evade mode, as this will stop him from summoning minions after he kills the first bit - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { me->RemoveAllAuras(); me->DeleteThreatList(); @@ -1474,7 +1474,7 @@ public: } for (std::vector::const_iterator itr = eliteList.begin(); itr != eliteList.end(); ++itr) (*itr)->setDeathState(JUST_DIED); - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); } void BeginTalk() @@ -1544,7 +1544,7 @@ public: { if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID)) ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID()); - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); ++WalkCount; } diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index e074e3e840..d883a48b63 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -408,7 +408,7 @@ struct boss_illidari_councilAI : public ScriptedAI LoadGUIDs(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { for (uint8 i = 0; i < 4; ++i) { @@ -419,7 +419,7 @@ struct boss_illidari_councilAI : public ScriptedAI return; } } - ScriptedAI::EnterEvadeMode(); + ScriptedAI::EnterEvadeMode(why); } void DamageTaken(Unit* done_by, uint32 &damage) override diff --git a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp index 1521b04375..86ad795895 100644 --- a/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp +++ b/src/server/scripts/Outland/BlackTemple/instance_black_temple.cpp @@ -21,18 +21,18 @@ DoorData const doorData[] = { - { GO_NAJENTUS_GATE, DATA_HIGH_WARLORD_NAJENTUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_SUPREMUS_GATE, DATA_SUPREMUS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_NAJENTUS_GATE, DATA_HIGH_WARLORD_NAJENTUS, DOOR_TYPE_PASSAGE }, + { GO_NAJENTUS_GATE, DATA_SUPREMUS, DOOR_TYPE_ROOM }, + { GO_SUPREMUS_GATE, DATA_SUPREMUS, DOOR_TYPE_PASSAGE }, + { GO_SHADE_OF_AKAMA_DOOR, DATA_SHADE_OF_AKAMA, DOOR_TYPE_ROOM }, + { GO_TERON_DOOR_1, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM }, + { GO_TERON_DOOR_2, DATA_TERON_GOREFIEND, DOOR_TYPE_ROOM }, + { GO_GURTOGG_DOOR, DATA_GURTOGG_BLOODBOIL, DOOR_TYPE_PASSAGE }, + { GO_TEMPLE_DOOR, DATA_RELIQUARY_OF_SOULS, DOOR_TYPE_PASSAGE }, + { GO_MOTHER_SHAHRAZ_DOOR, DATA_MOTHER_SHAHRAZ, DOOR_TYPE_PASSAGE }, + { GO_COUNCIL_DOOR_1, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM }, + { GO_COUNCIL_DOOR_2, DATA_ILLIDARI_COUNCIL, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_black_temple : public InstanceMapScript diff --git a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp index 9b23f45818..67f980cf19 100644 --- a/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp +++ b/src/server/scripts/Outland/GruulsLair/instance_gruuls_lair.cpp @@ -21,9 +21,9 @@ DoorData const doorData[] = { - { GO_MAULGAR_DOOR, DATA_MAULGAR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GRUUL_DOOR, DATA_GRUUL, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_MAULGAR_DOOR, DATA_MAULGAR, DOOR_TYPE_PASSAGE }, + { GO_GRUUL_DOOR, DATA_GRUUL, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } // END }; MinionData const minionData[] = diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp index f021a876b8..92b74c029b 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp @@ -22,13 +22,13 @@ DoorData const doorData[] = { - { GO_PRISON_DOOR_01, DATA_KELIDAN_THE_BREAKER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_PRISON_DOOR_02, DATA_THE_MAKER, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_PRISON_DOOR_03, DATA_THE_MAKER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_PRISON_DOOR_04, DATA_BROGGOK, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_PRISON_DOOR_05, DATA_BROGGOK, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { GO_SUMMON_DOOR, DATA_KELIDAN_THE_BREAKER, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_PRISON_DOOR_01, DATA_KELIDAN_THE_BREAKER, DOOR_TYPE_PASSAGE }, + { GO_PRISON_DOOR_02, DATA_THE_MAKER, DOOR_TYPE_ROOM }, + { GO_PRISON_DOOR_03, DATA_THE_MAKER, DOOR_TYPE_PASSAGE }, + { GO_PRISON_DOOR_04, DATA_BROGGOK, DOOR_TYPE_PASSAGE }, + { GO_PRISON_DOOR_05, DATA_BROGGOK, DOOR_TYPE_ROOM }, + { GO_SUMMON_DOOR, DATA_KELIDAN_THE_BREAKER, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_blood_furnace : public InstanceMapScript diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp index 8fc6ba084b..dfe11287f1 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp @@ -34,9 +34,9 @@ EndScriptData */ DoorData const doorData[] = { - { GO_GRAND_WARLOCK_CHAMBER_DOOR_1, DATA_NETHEKURSE, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_GRAND_WARLOCK_CHAMBER_DOOR_2, DATA_NETHEKURSE, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } + { GO_GRAND_WARLOCK_CHAMBER_DOOR_1, DATA_NETHEKURSE, DOOR_TYPE_PASSAGE }, + { GO_GRAND_WARLOCK_CHAMBER_DOOR_2, DATA_NETHEKURSE, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } }; class instance_shattered_halls : public InstanceMapScript diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 7f3a908b83..102d567e81 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -484,7 +484,7 @@ class npc_ember_of_alar : public CreatureScript DoZoneInCombat(); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { me->setDeathState(JUST_DIED); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index 0c0c6e8785..46388c3a18 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -159,8 +159,6 @@ class boss_void_reaver : public CreatureScript Berserk_Timer -= diff; DoMeleeAttackIfReady(); - - EnterEvadeIfOutOfCombatArea(diff); } }; diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp index 0d54d8fc22..a751ed546f 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp @@ -36,9 +36,9 @@ EndScriptData */ DoorData const doorData[] = { - { GO_ARCANE_DOOR_LEFT, DATA_KAELTHAS, DOOR_TYPE_ROOM, BOUNDARY_SW }, - { GO_ARCANE_DOOR_RIGHT, DATA_KAELTHAS, DOOR_TYPE_ROOM, BOUNDARY_SE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_ARCANE_DOOR_LEFT, DATA_KAELTHAS, DOOR_TYPE_ROOM/*, BOUNDARY_SW */ }, + { GO_ARCANE_DOOR_RIGHT, DATA_KAELTHAS, DOOR_TYPE_ROOM/*, BOUNDARY_SE */ }, + { 0, 0, DOOR_TYPE_ROOM } // END }; ObjectData const gameObjectData[] = diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp index 77018c6f43..c2f93fd391 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp @@ -22,10 +22,10 @@ static DoorData const doorData[] = { - { GO_DOOR_MOARG_1, DATA_GATEWATCHER_IRON_HAND, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_DOOR_MOARG_2, DATA_GATEWATCHER_GYROKILL, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_DOOR_NETHERMANCER, DATA_NETHERMANCER_SEPRETHREA, DOOR_TYPE_ROOM, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } + { GO_DOOR_MOARG_1, DATA_GATEWATCHER_IRON_HAND, DOOR_TYPE_PASSAGE }, + { GO_DOOR_MOARG_2, DATA_GATEWATCHER_GYROKILL, DOOR_TYPE_PASSAGE }, + { GO_DOOR_NETHERMANCER, DATA_NETHERMANCER_SEPRETHREA, DOOR_TYPE_ROOM }, + { 0, 0, DOOR_TYPE_ROOM } }; class instance_mechanar : public InstanceMapScript diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp index 2d8654a9b4..148420ad1a 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/instance_arcatraz.cpp @@ -21,9 +21,9 @@ DoorData const doorData[] = { - { GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA, DATA_SOCCOTHRATES, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA, DATA_DALLIAH, DOOR_TYPE_PASSAGE, BOUNDARY_NONE }, - { 0, 0, DOOR_TYPE_ROOM, BOUNDARY_NONE } // END + { GO_CONTAINMENT_CORE_SECURITY_FIELD_ALPHA, DATA_SOCCOTHRATES, DOOR_TYPE_PASSAGE }, + { GO_CONTAINMENT_CORE_SECURITY_FIELD_BETA, DATA_DALLIAH, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END }; class instance_arcatraz : public InstanceMapScript diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index b1ac2d4334..404cdc7ceb 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -168,9 +168,9 @@ public: } // Override Evade Mode event, recast buff that was removed by standard handler - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - npc_escortAI::EnterEvadeMode(); + npc_escortAI::EnterEvadeMode(why); DoCast(me, SPELL_ANCESTRAL_WOLF_BUFF, true); } diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 8bcc1fd80d..fee47aa1fa 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -167,7 +167,7 @@ class npc_pet_mage_mirror_image : public CreatureScript events.ScheduleEvent(SPELL_MAGE_FIRE_BLAST, TIMER_MIRROR_IMAGE_FIRE_BLAST); } else - EnterEvadeMode(); + EnterEvadeMode(EVADE_REASON_OTHER); } void Reset() override @@ -233,7 +233,7 @@ class npc_pet_mage_mirror_image : public CreatureScript } // Do not reload Creature templates on evade mode enter - prevent visual lost - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (me->IsInEvadeMode() || !me->IsAlive()) return; diff --git a/src/server/scripts/Pet/pet_priest.cpp b/src/server/scripts/Pet/pet_priest.cpp index 61ac54f8ac..a3110ce8f8 100644 --- a/src/server/scripts/Pet/pet_priest.cpp +++ b/src/server/scripts/Pet/pet_priest.cpp @@ -44,7 +44,7 @@ class npc_pet_pri_lightwell : public CreatureScript DoCast(me, SPELL_PRIEST_LIGHTWELL_CHARGES, false); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason /*why*/) override { if (!me->IsAlive()) return; diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index a9fdb0d097..16b95e555b 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -1432,9 +1432,9 @@ public: _events.ScheduleEvent(EVENT_TD_DESPAWN, 15000); } - void EnterEvadeMode() override + void EnterEvadeMode(EvadeReason why) override { - if (!_EnterEvadeMode()) + if (!_EnterEvadeMode(why)) return; Reset(); From 09a65163673ce929b77c6fae5f996adf187f33e0 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Tue, 12 Jan 2016 22:43:48 +0100 Subject: [PATCH 522/524] Core/Object: Codestyle improvements --- src/server/game/Entities/Object/Object.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 615202f2ba..4877ff094e 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2427,10 +2427,7 @@ void WorldObject::DestroyForNearbyPlayers() continue; if (GetTypeId() == TYPEID_UNIT) - { - // at remove from world (destroy) show kill animation - DestroyForPlayer(player, ToUnit()->IsDuringRemoveFromWorld() && ToCreature()->isDead()); - } + DestroyForPlayer(player, ToUnit()->IsDuringRemoveFromWorld() && ToCreature()->isDead()); // at remove from world (destroy) show kill animation else DestroyForPlayer(player); From cc3a4e0948ab28bf1aebc0a6eaa0b2ab96c815bd Mon Sep 17 00:00:00 2001 From: Killyana Date: Wed, 13 Jan 2016 03:41:21 +0100 Subject: [PATCH 523/524] DB: Fix a typo in a previous commit Update https://github.com/TrinityCore/TrinityCore/commit/a7f1df606188fc789c00efc068e8ddfe6b25d692 --- sql/updates/world/2016_01_10_05_world335.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/updates/world/2016_01_10_05_world335.sql b/sql/updates/world/2016_01_10_05_world335.sql index 468e9c6dc1..7fb021cc9d 100644 --- a/sql/updates/world/2016_01_10_05_world335.sql +++ b/sql/updates/world/2016_01_10_05_world335.sql @@ -1,4 +1,4 @@ -DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` in(19,20) AND `SourceId` in(5066,5090,5091,5093,5094,5095,10373,10374); +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (19,20) AND `SourceEntry` IN (5066,5090,5091,5093,5094,5095,10373,10374); INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES (19, 0, 5066, 0, 0, 14, 0, 5092, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), @@ -18,4 +18,4 @@ INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry (19, 0, 10374, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'), (20, 0, 10374, 0, 0, 14, 0, 5096, 0, 0, 0, 0, 0, '', 'Call to Arms: The Plaguelands (Breadcrumb)'); -UPDATE `quest_template_addon` SET `NextQuestID`=0 WHERE `ID` in(5066,5090,5091,5093,5094,5095,10373,10374); +UPDATE `quest_template_addon` SET `NextQuestID`=0 WHERE `ID` IN (5066,5090,5091,5093,5094,5095,10373,10374); From f481ae1048aac32ba3a40491f0304d0317234295 Mon Sep 17 00:00:00 2001 From: treeston Date: Wed, 30 Sep 2015 13:37:58 +0200 Subject: [PATCH 524/524] Core/Spells: Creature spellcast facing rework: - Fixes creatures turning just before a spellcast finishes and smacking players with supposedly-unavoidable damage. Fixes and closes #15393, #10803, and probably others. - Fixes visual effects not lining up with the correct target for spells that have their visual aligned with the caster's orientation (examples: Anub'rekhan Impale, Ingvar's Smash/Dark Smash, etc.). Fixes and closes #2947 and probably a bunch of others, including the aforementioned #15393 and #10803. - Creatures' displayed target now properly matches the unit they are targeting with spells for a split second (blizzlike). This is necessary to get proper client-side orientation. --- src/server/game/AI/CreatureAI.cpp | 9 +- .../game/Entities/Creature/Creature.cpp | 119 +++++++++++++++--- src/server/game/Entities/Creature/Creature.h | 6 +- src/server/game/Entities/Unit/Unit.cpp | 23 +++- src/server/game/Entities/Unit/Unit.h | 4 +- .../TargetedMovementGenerator.cpp | 3 + src/server/game/Spells/Spell.cpp | 52 ++++++-- src/server/game/Spells/Spell.h | 1 + 8 files changed, 179 insertions(+), 38 deletions(-) diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index e94f5a037a..f874465518 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -203,7 +203,8 @@ void CreatureAI::SetGazeOn(Unit* target) { if (me->IsValidAttackTarget(target)) { - AttackStart(target); + if (!me->IsFocusing(nullptr, true)) + AttackStart(target); me->SetReactState(REACT_PASSIVE); } } @@ -222,7 +223,8 @@ bool CreatureAI::UpdateVictimWithGaze() } if (Unit* victim = me->SelectVictim()) - AttackStart(victim); + if (!me->IsFocusing(nullptr, true)) + AttackStart(victim); return me->GetVictim() != nullptr; } @@ -235,7 +237,8 @@ bool CreatureAI::UpdateVictim() if (!me->HasReactState(REACT_PASSIVE)) { if (Unit* victim = me->SelectVictim()) - AttackStart(victim); + if (!me->IsFocusing(nullptr, true)) + AttackStart(victim); return me->GetVictim() != nullptr; } diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 97b3a0b031..dd653c37a4 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -200,6 +200,7 @@ m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo( TriggerJustRespawned = false; m_isTempWorldObject = false; _focusSpell = NULL; + _focusDelay = 0; } Creature::~Creature() @@ -1558,7 +1559,9 @@ void Creature::setDeathState(DeathState s) if (sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY) || isWorldBoss()) SaveRespawnTime(); - SetTarget(ObjectGuid::Empty); // remove target selection in any cases (can be set at aura remove in Unit::setDeathState) + ReleaseFocus(); // remove spellcast focus (this also clears unit target) + SetTarget(ObjectGuid::Empty); // drop target - dead mobs shouldn't ever target things + SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); // if creature is mounted on a virtual mount, remove it at death @@ -2677,39 +2680,117 @@ void Creature::SetDisplayId(uint32 modelId) void Creature::SetTarget(ObjectGuid guid) { - if (!_focusSpell) + if (!IsFocusing()) SetGuidValue(UNIT_FIELD_TARGET, guid); } -void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target) +bool Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target) { // already focused if (_focusSpell) - return; + return false; + + if ((!target || target == this) && !focusSpell->GetCastTime()) // instant cast, untargeted (or self-targeted) spell doesn't need any facing updates + return false; _focusSpell = focusSpell; - SetGuidValue(UNIT_FIELD_TARGET, target->GetGUID()); - if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST)) - AddUnitState(UNIT_STATE_ROTATING); - // Set serverside orientation if needed (needs to be after attribute check) - SetInFront(target); + // "instant" creature casts that require re-targeting will be delayed by a short moment to prevent facing bugs + bool shouldDelay = false; + + // set target, then force send update packet to players if it changed to provide appropriate facing + ObjectGuid newTarget = target ? target->GetGUID() : ObjectGuid::Empty; + if (GetGuidValue(UNIT_FIELD_TARGET) != newTarget) + { + SetGuidValue(UNIT_FIELD_TARGET, newTarget); + if (target) + SetFacingToObject(target); + + if ( // here we determine if the (relatively expensive) forced update is worth it, or whether we can afford to wait until the scheduled update tick + ( // only require instant update for spells that actually have a visual + focusSpell->GetSpellInfo()->SpellVisual[0] || + focusSpell->GetSpellInfo()->SpellVisual[1] + ) && ( + !focusSpell->GetCastTime() || // if the spell is instant cast + focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST) // client gets confused if we attempt to turn at the regularly scheduled update packet + ) + ) + { + const MapRefManager& mapPlayers = GetMap()->GetPlayers(); + for (MapRefManager::const_iterator it = mapPlayers.begin(); it != mapPlayers.end(); ++it) + if (Player* player = (*it).GetSource()) + { + // only update players that can both see us, and are actually in combat with us (this is a performance tradeoff) + if (player->CanSeeOrDetect(this, false, true) && IsInCombatWith(player)) + { + SendUpdateToPlayer(player); + shouldDelay = true; + } + } + if (shouldDelay) + shouldDelay = (!focusSpell->IsTriggered() && !focusSpell->GetCastTime()); + + } + } + + // tell the creature that it should reacquire its current target after the cast is done (this is handled in ::Attack) + MustReacquireTarget(); + + bool canTurnDuringCast = !focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST); + // Face the target - we need to do this before the unit state is modified for no-turn spells + if (target) + SetInFront(target); + else if (!canTurnDuringCast) + if(Unit* victim = GetVictim()) + SetInFront(victim); // ensure server-side orientation is correct at beginning of cast + + if (!canTurnDuringCast) + AddUnitState(UNIT_STATE_CANNOT_TURN); + + return shouldDelay; } -void Creature::ReleaseFocus(Spell const* focusSpell) +bool Creature::IsFocusing(Spell const* focusSpell, bool withDelay) { - // focused to something else - if (focusSpell != _focusSpell) + if (!IsAlive()) // dead creatures cannot focus + { + ReleaseFocus(nullptr, false); + return false; + } + + if (focusSpell && (focusSpell != _focusSpell)) + return false; + + if (!_focusSpell) + { + if (!withDelay || !_focusDelay) + return false; + if (GetMSTimeDiffToNow(_focusDelay) > 1000) // @todo figure out if we can get rid of this magic number somehow + { + _focusDelay = 0; // save checks in the future + return false; + } + } + + return true; +} + +void Creature::ReleaseFocus(Spell const* focusSpell, bool withDelay) +{ + if (!_focusSpell) return; - _focusSpell = NULL; - if (Unit* victim = GetVictim()) - SetGuidValue(UNIT_FIELD_TARGET, victim->GetGUID()); - else - SetGuidValue(UNIT_FIELD_TARGET, ObjectGuid::Empty); + // focused to something else + if (focusSpell && focusSpell != _focusSpell) + return; - if (focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST)) - ClearUnitState(UNIT_STATE_ROTATING); + SetGuidValue(UNIT_FIELD_TARGET, ObjectGuid::Empty); + + if (_focusSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST)) + ClearUnitState(UNIT_STATE_CANNOT_TURN); + + _focusSpell = nullptr; + _focusDelay = withDelay ? getMSTime() : 0; // don't allow re-target right away to prevent visual bugs } void Creature::StartPickPocketRefillTimer() diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 371f3c9395..4f4bc7edf4 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -671,8 +671,9 @@ class Creature : public Unit, public GridObject, public MapObject // Handling caster facing during spellcast void SetTarget(ObjectGuid guid) override; - void FocusTarget(Spell const* focusSpell, WorldObject const* target); - void ReleaseFocus(Spell const* focusSpell); + bool FocusTarget(Spell const* focusSpell, WorldObject const* target); + bool IsFocusing(Spell const* focusSpell = nullptr, bool withDelay = false); + void ReleaseFocus(Spell const* focusSpell = nullptr, bool withDelay = true); CreatureTextRepeatIds GetTextRepeatGroup(uint8 textGroup); void SetTextRepeatId(uint8 textGroup, uint8 id); @@ -744,6 +745,7 @@ class Creature : public Unit, public GridObject, public MapObject bool TriggerJustRespawned; Spell const* _focusSpell; ///> Locks the target during spell cast for proper facing + uint32 _focusDelay; CreatureTextRepeatGroup m_textRepeat; }; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index fcd2535dad..b4ac90b970 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -223,7 +223,8 @@ Unit::Unit(bool isWorldObject) : for (uint8 i = 0; i < MAX_STATS; ++i) m_createStats[i] = 0.0f; - m_attacking = NULL; + m_attacking = nullptr; + m_shouldReacquireTarget = false; m_modMeleeHitChance = 0.0f; m_modRangedHitChance = 0.0f; m_modSpellHitChance = 0.0f; @@ -238,7 +239,7 @@ Unit::Unit(bool isWorldObject) : for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) m_speed_rate[i] = 1.0f; - m_charmInfo = NULL; + m_charmInfo = nullptr; _redirectThreadInfo = RedirectThreatInfo(); @@ -1956,6 +1957,9 @@ void Unit::AttackerStateUpdate (Unit* victim, WeaponAttackType attType, bool ext if (attType != BASE_ATTACK && attType != OFF_ATTACK) return; // ignore ranged case + if (GetTypeId() == TYPEID_UNIT && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + SetFacingToObject(victim); // update client side facing to face the target (prevents visual glitches when casting untargeted spells) + // melee attack spell cast at main hand attack only - no normal melee dmg dealt if (attType == BASE_ATTACK && m_currentSpells[CURRENT_MELEE_SPELL] && !extra) m_currentSpells[CURRENT_MELEE_SPELL]->cast(); @@ -8956,6 +8960,12 @@ bool Unit::Attack(Unit* victim, bool meleeAttack) if (HasAuraType(SPELL_AURA_MOD_UNATTACKABLE)) RemoveAurasByType(SPELL_AURA_MOD_UNATTACKABLE); + if (m_shouldReacquireTarget) + { + SetTarget(victim->GetGUID()); + m_shouldReacquireTarget = false; + } + if (m_attacking) { if (m_attacking == victim) @@ -9041,7 +9051,7 @@ bool Unit::AttackStop() Unit* victim = m_attacking; m_attacking->_removeAttacker(this); - m_attacking = NULL; + m_attacking = nullptr; // Clear our target SetTarget(ObjectGuid::Empty); @@ -12705,7 +12715,7 @@ Unit* Creature::SelectVictim() // next-victim-selection algorithm and evade mode are called // threat list sorting etc. - Unit* target = NULL; + Unit* target = nullptr; // First checking if we have some taunt on us AuraEffectList const& tauntAuras = GetAuraEffectsByType(SPELL_AURA_MOD_TAUNT); if (!tauntAuras.empty()) @@ -12773,7 +12783,8 @@ Unit* Creature::SelectVictim() if (target && _IsTargetAcceptable(target) && CanCreatureAttack(target)) { - SetInFront(target); + if(!IsFocusing()) + SetInFront(target); return target; } @@ -17558,7 +17569,7 @@ void Unit::SetFacingTo(float ori) init.Launch(); } -void Unit::SetFacingToObject(WorldObject* object) +void Unit::SetFacingToObject(WorldObject const* object) { // never face when already moving if (!IsStopped()) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 8fc93f2435..4f614314b8 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1274,6 +1274,7 @@ class Unit : public WorldObject void _removeAttacker(Unit* pAttacker); // must be called only from Unit::AttackStop() Unit* getAttackerForHelper() const; // If someone wants to help, who to give them bool Attack(Unit* victim, bool meleeAttack); + void MustReacquireTarget() { m_shouldReacquireTarget = true; } // flags the Unit for forced target reacquisition in the next ::Attack call void CastStop(uint32 except_spellid = 0); bool AttackStop(); void RemoveAllAttackers(); @@ -1584,7 +1585,7 @@ class Unit : public WorldObject void SetInFront(WorldObject const* target); void SetFacingTo(float ori); - void SetFacingToObject(WorldObject* object); + void SetFacingToObject(WorldObject const* object); void SendChangeCurrentVictimOpcode(HostileReference* pHostileReference); void SendClearThreatListOpcode(); @@ -2152,6 +2153,7 @@ class Unit : public WorldObject AttackerSet m_attackers; Unit* m_attacking; + bool m_shouldReacquireTarget; DeathState m_deathState; diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index d0340a4df5..b595059557 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -39,6 +39,9 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner, bool up if (owner->GetTypeId() == TYPEID_UNIT && !i_target->isInAccessiblePlaceFor(owner->ToCreature())) return; + if (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->IsFocusing(nullptr, true)) + return; + float x, y, z; if (updateDestination || !i_path) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index cb573f4ec3..2878b2e4da 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -602,6 +602,8 @@ m_caster((info->HasAttribute(SPELL_ATTR6_CAST_BY_CHARMER) && caster->GetCharmerO //Auto Shot & Shoot (wand) m_autoRepeat = m_spellInfo->IsAutoRepeatRangedSpell(); + + m_isDelayedInstantCast = false; m_runesState = 0; m_powerCost = 0; // setup to correct value in Spell::prepare, must not be used before. @@ -2936,6 +2938,27 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered else m_casttime = m_spellInfo->CalcCastTime(this); + if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) // _UNIT actually means creature. for some reason. + if (!(IsNextMeleeSwingSpell() || IsAutoRepeat() || _triggeredCastFlags & TRIGGERED_IGNORE_SET_FACING)) + { + if (m_targets.GetObjectTarget() && m_caster != m_targets.GetObjectTarget()) + { + if (m_caster->ToCreature()->FocusTarget(this, m_targets.GetObjectTarget())) + { + m_isDelayedInstantCast = true; + m_timer = 100; // 100ms delay ensures client has updated creature orientation when cast goes off + } + } + else if (m_spellInfo->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST)) + { + if (m_caster->ToCreature()->FocusTarget(this, nullptr)) + { + m_isDelayedInstantCast = true; + m_timer = 100; + } + } + } + // don't allow channeled spells / spells with cast time to be cast while moving // (even if they are interrupted on moving, spells with almost immediate effect get to have their effect processed before movement interrupter kicks in) if ((m_spellInfo->IsChanneled() || m_casttime) && m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->isMoving() && m_spellInfo->InterruptFlags & SPELL_INTERRUPT_FLAG_MOVEMENT) @@ -2971,18 +2994,14 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered } m_caster->SetCurrentCastSpell(this); - SendSpellStart(); - - // set target for proper facing - if ((m_casttime || m_spellInfo->IsChanneled()) && !(_triggeredCastFlags & TRIGGERED_IGNORE_SET_FACING)) - if (m_caster->GetTypeId() == TYPEID_UNIT && m_targets.GetObjectTarget() && m_caster != m_targets.GetObjectTarget()) - m_caster->ToCreature()->FocusTarget(this, m_targets.GetObjectTarget()); + if (!m_isDelayedInstantCast) + SendSpellStart(); if (!(_triggeredCastFlags & TRIGGERED_IGNORE_GCD)) TriggerGlobalCooldown(); //item: first cast may destroy item and second cast causes crash - if (!m_casttime && !m_spellInfo->StartRecoveryTime && !m_castItemGUID && GetCurrentContainer() == CURRENT_GENERIC_SPELL) + if (!m_casttime && !m_isDelayedInstantCast && !m_spellInfo->StartRecoveryTime && !m_castItemGUID && GetCurrentContainer() == CURRENT_GENERIC_SPELL) cast(true); } } @@ -2991,6 +3010,9 @@ void Spell::cancel() { if (m_spellState == SPELL_STATE_FINISHED) return; + // delayed instant casts are used for client-side visual orientation; they are treated as instant for all intents and purposes server-side, and thus cannot be interrupted by another cast + if (m_isDelayedInstantCast) + return; uint32 oldState = m_spellState; m_spellState = SPELL_STATE_FINISHED; @@ -3060,6 +3082,9 @@ void Spell::cast(bool skipCheck) return; } + if (m_isDelayedInstantCast) + SendSpellStart(); + if (Player* playerCaster = m_caster->ToPlayer()) { // now that we've done the basic check, now run the scripts @@ -3139,6 +3164,16 @@ void Spell::cast(bool skipCheck) } } + // if the spell allows the creature to turn while casting, then adjust server-side orientation to face the target now + // client-side orientation is handled by the client itself, as the cast target is targeted due to Creature::FocusTarget + if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + if (!m_spellInfo->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST)) + if (WorldObject* objTarget = m_targets.GetObjectTarget()) + { + m_caster->SetInFront(objTarget); + m_caster->SetFacingToObject(objTarget); + } + SelectSpellTargets(); // Spell may be finished after target map check @@ -3242,6 +3277,9 @@ void Spell::cast(bool skipCheck) } SetExecutedCurrently(false); + + if (Creature* creatureCaster = m_caster->ToCreature()) + creatureCaster->ReleaseFocus(this); } void Spell::handle_immediate() diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index e9fde23488..696d280164 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -524,6 +524,7 @@ class Spell int32 m_channeledDuration; // Calculated channeled spell duration in order to calculate correct pushback. bool m_canReflect; // can reflect this spell? bool m_autoRepeat; + bool m_isDelayedInstantCast; // whether this is a creature's delayed instant cast uint8 m_runesState; uint8 m_delayAtDamageCount;