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 0d6353cfb86..0fd5a82d7e8 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 267c038faaf..88cb351060f 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 88d7dfa6381..3e4e516edc4 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 a031840a1d8..ef252e0243b 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 0978adc1814..f6632dac4aa 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 00000000000..d76511a05f6 --- /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 eea0fd72e8b..a40619b41f9 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 818bb0041a9..6958b5d78a5 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 00000000000..cfa8399c350 --- /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 61d64413178..b31436f656a 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 0c7df100f60..f2edfa816a0 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 9f640c410ef..834ab32864f 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 68c115f9faf..0ab7c2fcb54 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 09d64acc795..4c209f89ec8 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 d9061dfb106..e268b376b34 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 c680494cd72..092ef714145 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 25531760b69..a1d04e4f89b 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 a031840a1d8..94d0fa5697c 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 9ed8dc1cf75..345cda22699 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 af0f5b0fc75..a671250c17d 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 dadc2eeeac3..e5815a415e7 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 fff7b9d8afa..c273ea7fb15 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 b69322f5720..2bcb4aeb3b3 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 f91fc1985d5..8c61c96dfdc 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 eb8533159a9..6cddd68ec1c 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 bb8abc37eb3..00000000000 --- 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 6cddd68ec1c..caf76b5ea19 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 8c61c96dfdc..8a5ac387f19 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 ee482c23d1b..02a7aa570e5 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 f5842181358..2ca55ee570b 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 5fc3cc618e5..b609dfe18dd 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 63be8d06739..db67f1f74f1 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 25531760b69..a4f55d0c257 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 9ed8dc1cf75..7b701f681b5 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 11b31d98cc8..b6e8d3c3ede 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 eea0fd72e8b..4fce8d9adde 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 78fd065e9bd..91b4a3181f5 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 00000000000..c524b8087be --- /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 0978adc1814..598bc5f8475 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 00000000000..017cbd0d7ef --- /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 00000000000..89e40a643d4 --- /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 00000000000..1e0da0ad8d0 --- /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 85d770e2ceb..524bb442868 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 00000000000..db9da587517 --- /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 00000000000..c71610a528b --- /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 2ca55ee570b..7c85c5f73b9 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 00000000000..03c7db23de9 --- /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 a5685c65d9c..00985e4fa1d 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 cebd9d4cf2f..f2da96b86bf 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 4d4624b63dd..edf56b29136 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 3da1c800410..6a872b44a60 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 59cb2392063..f5461d5f42e 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 f5002c6943b..6a0cf71cca6 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 00b6862369d..26b7f672cfa 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 9c654a1793c..d4e51315e92 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 f267bf7c6c6..c7d8132053c 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 2a3e91b7574..46422444bbb 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 7ef8ef2737d..e12bec768fb 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 141bac5e50f..4f91423d769 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 fc55c09bffa..6087e03b1bb 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 b1d7fcaa28a..e47bf220195 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 9556a55c4e1..e4e07cfeb53 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 598bc5f8475..f8810c9d14f 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 354bbe4e269..c758d132d6e 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 e4632bb7515..32c10cae16f 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 c8b7a19c943..59f514bed75 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 aed829a7b57..0ece05f1d93 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 4eea5eed03d..e380373f4c4 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 03f14d1cdc8..ca6946554d4 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 10c41835a9f..387fb156dee 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 00000000000..a7bcbb124dc --- /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 00000000000..e79dddf7691 --- /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 00000000000..aea8aaf43a1 --- /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 00000000000..40792506d57 --- /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 00000000000..eccb800e8ce --- /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 00000000000..4e0ee5b2222 --- /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 00000000000..ce126d38081 --- /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 2ccf4471788..505d41f63e7 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 00000000000..d56b962ad8f --- /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 00000000000..ea4914a6a53 --- /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 57346443390..22eabd3dd65 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 00000000000..e7938cdf352 --- /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 4bf6aa950c6..80c32cf66e7 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 00000000000..821e9ea3856 --- /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 f2da96b86bf..45f130ceb3b 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 505d41f63e7..9d0149a24a5 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 00000000000..c238d97c97c --- /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 c238d97c97c..a01d8a27e75 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 588ed0063db..571b74a749d 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 00000000000..1f46c5dd7f7 --- /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 00000000000..2851d4172b7 --- /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 1efdb16804f..6494f92b522 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 f88a912e022..a7ab5d00cb3 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 2522c97de25..c870f786af3 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 07bd49bdcc6..d3e11733997 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 f1ba985458e..8e2a82dbfd3 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 dadffe735d2..4b43ac889c5 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 51628eded54..cb338cd3584 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 0b85addfbf8..7ec1665bffc 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 51106d7cfe1..2662273697f 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 4b48f1f341b..265eb6f38ba 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 733bd5e9ec8..e6164b77005 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 a22db18fa7e..46181011719 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 0060cf4f304..00da81fb992 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 dc0388348fc..60cc609a06a 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 3b7e9ac3f33..e75c07d8946 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 d54f7814137..4fdb34e8d2f 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 3e9b68d4611..2b4d5a4df5e 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 d9950f4ccbc..73c0f1c22a5 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 26b7f672cfa..f9d32e68e0e 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 d4e51315e92..4ac02bab9ec 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 fac6bbcfe99..7ab513c9201 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 9f13d4ab659..bc2fc387e89 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 c7d8132053c..bfae37c64e6 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 f94639efaf4..69f6b012c8b 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 bc1faa783fb..fd63dd04bf6 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 0d6816fc80d..2f003a58a69 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 9106bfdd394..f7260326857 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 1f52623461c..250f6e07718 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 b1ae61cef11..2f0734ff4d0 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 192a897238a..11c0885beef 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 84a12fd6409..7fe3628f893 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 4c1b39211cb..3e381063772 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 9d0149a24a5..b622618de53 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 71d0f13488c..714a0a35caf 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 9777672e175..42ed4674a53 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 e12bec768fb..26c712730cd 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 e3a325d9c2d..69a77dd9213 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 4f91423d769..f5eb9972af5 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 b832aeb5614..ad74906b4c9 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 6087e03b1bb..f5af3556332 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 e673e346a5f..43d1ecdeabd 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 b86a253a84d..552705d8df8 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 b541328c467..705cc3eac3e 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 c9b9c72d432..57fc56af89c 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 e4e07cfeb53..b5d3ebaa562 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 77cd701ee35..e7989c405a8 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 d6a130c0317..9cd3945d44d 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 f8810c9d14f..3938b8d7278 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 b6f9534ac51..fcb74424eb1 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 2264612f89b..8f2d0491a91 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 35d6ba91401..f5e9b6bb5b7 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 2d32e747eb1..54e2a7298ef 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 524bb442868..4bf86facbef 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 26f3ba7cff3..b9d755636cd 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 28670ad4968..3572fff63dd 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 16e36d98d33..c2f5f75f98e 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 c7e1056a3ef..d0ae90d002f 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 7e3b758d92c..cc9ef29a8e8 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 04eb99b3097..fab22b30f47 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 ead05033a35..5616eb89b07 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 8ee14d6baa9..aa51b19a659 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 2ec89ac2a26..fec0b8e0d40 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 0cd170dfba7..e9b3bea5991 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 b6e8d3c3ede..61b2837dc10 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 2acbaba1f67..e13b417215b 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 ac33880cb98..78aeaa1b41b 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 954fb66a9db..2f39a91afbe 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 f8531adeb88..30764fea2a3 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 672e1c69920..13987c983f7 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 18ad2e828f0..9876e939395 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 d55af4bac35..5f25f57addd 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 7a9760ecf80..51f7e3f840a 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 cedfed2e7c5..518baa42e97 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 3c4bbd87b3f..14436a864f9 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 8ec887ea94d..4495c044c61 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 05e793455da..c7a3f419d62 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 b6297e1705a..91bc8309b18 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 f87198834b9..db5d0997eeb 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 a6108b36c13..0f0640e3a2e 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 f3b421a4b93..cf6181f02b4 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 c50888544de..fbfd16ae1c6 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 6328eb3e2fe..3bb2ca78931 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 b8a2168b34e..b3dd3e9f01f 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 3e90e430590..e832d7cdffe 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 c825db1e1eb..22ebe6c679e 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 e8eec55ed12..fd9392fb62f 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 c758d132d6e..22cc1f1bbd0 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 15d2169fbbc..9b5e67cdfaf 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 32c10cae16f..d1b8bd66209 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 29f4b4ab7c2..82be6336dc6 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 dc6c0bb642f..5b957e00281 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 e5815a415e7..cac6e3b91ea 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 2bcb4aeb3b3..cb8cab1849d 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 31859899ce8..40bf3af5194 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 8a5ac387f19..fe618e6ece7 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 186b5d400b2..3b4f19adb0b 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 ccf8824051b..d8173aab331 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 3648fe5cde5..d914ef01108 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 d5839956e32..d075da19ebc 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 4d7b80da157..e7b6765c177 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 4f03dd37fac..542aad0ef0d 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 3f561539917..8f3d4a758f3 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 a3e458503d6..a4065fa6f82 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 f5c4375712c..a369750b0c6 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 bb22d27221e..e6896003175 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 3753f796768..e597cbff27b 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 f7491175a50..0cc075a3dde 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 e380373f4c4..e42f66c6ffb 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 ca6946554d4..e1302d48d2f 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 91eb7330dda..10dfbd511df 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 f9ccd2efd16..9f75d917aea 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 3d26f349ca5..a51c9fb16d2 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 83100d3fbec..8710100d9b3 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 b29f39809c6..ce1837fbc86 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 5668c20d6b0..04520101d15 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 4993a7484dd..4cafb651add 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 4b90a672c82..fc246898186 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 4ef4454be99..405f6fde624 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 7c2ce1a13ec..422104fedd5 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 1ddfaa4bfd8..ce1a42e6e78 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 0142cfa0e52..591f797bfee 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 c0a4b2cfead..8152508c5df 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 8bb64a454d2..2de22714a15 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 3e4b46804ff..fb051832d7b 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 7baef489865..dfb1d84c6cc 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 9fd0260ed2e..bf82b81a8b7 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 09a41fd82b5..dcf75d0c5db 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 9ad12bd0943..82904efc949 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 e7ea4bc99d7..57ea44a67bf 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 c9da1ed9635..00b8bec51c8 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 ab2e82171f1..427d4bae217 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 abeaff421cf..aeaf8a70ba5 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 68430f6f0f7..78730b535aa 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 e908d088554..65d99b022dc 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 7af550582a0..f0835135890 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 ab1450a87ea..f05fc48c074 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 992ca0b4d74..5354d1772b6 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 7c99fe40e32..d1f2be5525d 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 f5514cc51a5..79a20da9702 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 dec236e5f33..9224817b699 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 f8a7647a1d5..a639962efde 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 761e12b226c..8664acdfc57 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 fac9d8fa357..07bf6919b7a 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 f052824538e..94ec7acba1f 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 17736c7747b..0b68a45f8a5 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 ee86d8efc90..54aa815617e 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 a07905b3ae6..4be0d0eedb7 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 da50f471f1c..23a6cdee8a9 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 50195887ec2..4a60a80ee5a 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 58379e1fefa..0e5752ccd68 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 2165945d119..b68dec00da7 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 a89f5bd10d4..bd6d4c348ba 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 514b52d3dfe..e10a2331e25 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 f1ccca9b043..f0355929700 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 387fb156dee..cf33ba300f7 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 8e06c1c9ca4..5f4566f44e5 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 5f4566f44e5..65c07d56329 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 00000000000..5483d78b2ce --- /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 65c07d56329..aeeb90a0488 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 00000000000..a90442e8b5a --- /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 00000000000..fa89371371d --- /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 00000000000..7a241bafd41 --- /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 00000000000..e44acde69de --- /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 aeeb90a0488..022c38a6ff0 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 22cc1f1bbd0..b50099b9787 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 00000000000..1347b79a61b --- /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 aeeb90a0488..60d90bdfc59 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 3572fff63dd..8eae906ba87 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 00000000000..5047e4c44b7 --- /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 00000000000..9bf41b75a70 --- /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 00000000000..a02d7b25d85 --- /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 b622618de53..f29e896f050 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 00000000000..ea71a59cf1e --- /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 8e2a82dbfd3..7b145268d22 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 7fe3628f893..d3cfff74229 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 3e381063772..79832b70f52 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 5aa6ea8ea7a..f0d9d34db69 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 1a51bb2d897..f30c992f3da 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 d3cfff74229..c8a258ad386 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 591f797bfee..990b925697e 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 26c712730cd..b91f1b6eeee 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 9cd3945d44d..236675a7d29 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 990b925697e..0a45506c736 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 00000000000..a6fdcf8198c --- /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 00000000000..17fc710b804 --- /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 00000000000..c5cee6530d0 --- /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 00000000000..b5ee16e808a --- /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 00000000000..bcc71a7646a --- /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 00000000000..955588cdd52 --- /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 4b48f1f341b..7c708cb1ae9 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 4b43ac889c5..efee565e151 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 6ccc581c54e..f0e3c3caff6 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 60a4ce5e8ed..2f9b032c14c 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 ae59a4758e2..7df8c34fbe3 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 7df8c34fbe3..2810434b3b2 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 97e07cef8b3..7332bdc4cff 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 89195b699b7..f7794bd8975 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 1bbd264482f..42a842e6283 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 02352f221a0..563e18b5230 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 a61fb6331c1..0447ecaae5a 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 6a0cf71cca6..32837daf5da 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 a7ab5d00cb3..5ebafe0d0f8 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 7f6cffa520f..79b7a53cb6e 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 36fd6fbb186..c5475835fbd 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 563e18b5230..6afc949d6a9 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 6afc949d6a9..983ffee24c4 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 e6896003175..53da37bc730 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 00000000000..068255d4e0c --- /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 33fb43b6bbc..db6a7a77588 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 571b74a749d..3ac09fe99c6 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 00000000000..f2ce50fd4c6 --- /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 6494f92b522..cc5b3771e1e 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 265eb6f38ba..96a4fd42f5e 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 d67c8143996..f05d8583329 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 e6164b77005..22dc5bb0bd0 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 aa51b19a659..0293901c9e3 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 3ac09fe99c6..fe1a0ed8f1b 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 437ec221e94..1b10fa4e31d 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 00000000000..9acc58d0e26 --- /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 00000000000..d3dd352b5ca --- /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 cc5b3771e1e..b5b79a3e11d 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 5ebafe0d0f8..c76c584a0a8 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 1a51bb2d897..7c507ad59b6 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 46181011719..d22ac0ea5d5 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 2b4d5a4df5e..ad8a7b9e729 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 11c0885beef..360cfdf1ae3 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 c3a693d30d3..eeb22a064ba 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 f5af3556332..21a65440a55 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 b5d3ebaa562..e4452b84da4 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 94d0fa5697c..e798f5d98d7 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 f5e9b6bb5b7..ca974ba9a37 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 54e2a7298ef..d5fb8564b96 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 4bf86facbef..b5d8d08a6a4 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 b9d755636cd..462370001dd 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 d0ae90d002f..de0ab490e9c 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 61b2837dc10..ba22ab6aa07 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 51f7e3f840a..2eebbfc1004 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 518baa42e97..84816bf3f33 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 14436a864f9..f8d7f73e077 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 906c3017100..6d896bee26c 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 b50099b9787..7acafb3c341 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 9b5e67cdfaf..2ba5e10c82c 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 82be6336dc6..0e7f9dbb611 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 ce1837fbc86..2e61aecfb5f 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 af89adcb04e..256b856cf73 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 78c8f970f52..c960d3f3753 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 dfb1d84c6cc..21a55b1558a 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 6fa84d1bc75..fe5ae940f88 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 427d4bae217..c4ab8f76487 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 cf33ba300f7..ab132621437 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 00000000000..de63019221f --- /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 00000000000..74390f75e6d --- /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 e798f5d98d7..2646d5e6ca0 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 236675a7d29..144805b88b5 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 7acafb3c341..2af77ffdec3 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 00000000000..fd441ec05f5 --- /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 00000000000..8e6ca285c97 --- /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 00000000000..bb32607b23d --- /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 00000000000..caaa229b9c3 --- /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 00000000000..4088a33b837 --- /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 3d7c128c8dd..5248c48029c 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 3a431ab3ac0..692e6d8b589 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 00000000000..6f3e168dbbb --- /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 00000000000..090111be95b --- /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 00000000000..150d77b06e5 --- /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 00000000000..53825f25c6d --- /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 00000000000..4a5aedb13d4 --- /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 b37d505d766..9747d31952b 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 1939c96dac9..c93ed0db008 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 7c507ad59b6..46122697094 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 1e287cd5b9e..ea03a821846 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 51e1bf67f16..a89571e8197 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 636554a0ae4..76ab4736275 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 f3c59654295..87945ccf916 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 3b52e6775b2..1927b0f9829 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 8d9406adee1..ab7509c7a2b 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 6727aa69552..d6aa943123b 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 388834d1eff..52e32d3d37c 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 78730b535aa..babd444288f 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 6c512546a24..4fadc0bf8fa 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 59c28cd3a5a..6f07a88536d 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 83fd3859716..54b06260e78 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 25bf4826000..e86e907b550 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 91c796a6e69..e36930f5745 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 764cd9594ea..f044fcef5c7 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 7cc460d4548..f8c031f69e7 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 e4369f0348d..25ff1bf9536 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 00000000000..9e478ea401a --- /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 943be27943d..365e0a1588d 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 00000000000..f95cb062b82 --- /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 00000000000..680b21f77df --- /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 00000000000..dda9747be6f --- /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 00000000000..23635d91054 --- /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 00000000000..5f17920a9f5 --- /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 00000000000..95f91cd5938 --- /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 e4452b84da4..1be3c2454b2 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 e798f5d98d7..bc27e34ea1d 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 2f39a91afbe..6e8ff5547d7 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 a4ba9866064..d374c8c509a 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 09e3be690b1..208b4cf7ed9 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 f1533d57aef..4d0642d644e 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 2e61aecfb5f..85e79168b71 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 256b856cf73..1f71975cde2 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 b4a7e7a4864..1689f05966a 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 ebdd6604fef..c9056e12361 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 c9056e12361..354315ec782 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 a2b12bed235..c8aa5d69fbc 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 11444f93229..816eb4e9b98 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 2375f18d7b5..19fa0ee0acf 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 354315ec782..d90d71c5594 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 00000000000..b2c4f43997f --- /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 be3713b928b..17d703a2f8e 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 00000000000..97aa3dff7a8 --- /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 9f461eccc71..d06aa3ac8a3 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 00000000000..0850b15fbb4 --- /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 fe1a0ed8f1b..d8d2fe63b70 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 00000000000..c8d8e3211f4 --- /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 b5b79a3e11d..14e7571dd42 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 a51c9fb16d2..dbf66c6bd71 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 e9892c22edc..f7d3178978f 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 b609dfe18dd..f7634381fc9 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 d8d2fe63b70..a11e0e55f07 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 f5bcd8f23e8..f085bab165a 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 fcb74424eb1..982b931fd4f 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 c00bc429f38..3726e9ddf8f 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 53da37bc730..45a816eda9b 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 00000000000..385c5f019bf --- /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 00000000000..a03fffcd77a --- /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 a11e0e55f07..962a50c1b7f 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 962a50c1b7f..9599070a6a8 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 00000000000..633ade27863 --- /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 00000000000..6b162ee4393 --- /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 00000000000..c26303006b7 --- /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 f27f9220aaa..55d0ad0b4dc 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 f5e5b287571..810d446111a 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 68c115f9faf..2a3b107786a 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 00000000000..57dc5a2f29b --- /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 00000000000..b1bab808d96 --- /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 00000000000..5a552b76e64 --- /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 5d44f3ec696..a8cf42ea49e 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 e832d7cdffe..93dafea0413 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 c960d3f3753..aa7310e3c65 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 9747d31952b..f2d7f23bdc7 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 97aa3dff7a8..017542eb807 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 00000000000..dbad0438ed3 --- /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 db6a7a77588..494c173f5fc 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 00000000000..678e03a31e3 --- /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 8df9ce86f9a..2c9a2a7bcfd 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 0cdfff74ed2..118c49ed00f 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 10dfbd511df..e587a59858a 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 85e79168b71..169ff069de4 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 f4b442de92a..2863d2d4ede 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 44411b20aaf..9c05e4e2c08 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 00000000000..5528244f80b --- /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 00000000000..16306b08235 --- /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 0293901c9e3..8ecf86680ca 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 00000000000..17664992c98 --- /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 5528244f80b..0a9d014d762 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 00000000000..5277e7ea6e6 --- /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 5277e7ea6e6..d169863a95b 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 9599070a6a8..8ecf61f5461 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 00000000000..d7d4fb90f02 --- /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 14e7571dd42..b41ba41bcff 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 ad8a7b9e729..76e1a7f9226 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 ad8a7b9e729..09597443827 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 73c0f1c22a5..6fd25246690 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 7e8debfd24d..1509a60e15d 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 1689f05966a..40271bfee35 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 cb338cd3584..96aa1f735fc 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 1809e306a45..768def2ff4d 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 f05d8583329..45cdba361f3 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 c860d36e712..bb3ecb60838 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 e75c07d8946..7806e0b343b 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 fd63dd04bf6..368ebecba84 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 1027bd817f0..9969c00e3af 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 2f003a58a69..da3055ebaaf 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 72d80aba7e6..57192f948d5 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 360cfdf1ae3..ca808ad15a8 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 eeb22a064ba..be2cb435ac9 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 c8a258ad386..6a994d61852 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 79832b70f52..7744e30f122 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 f29e896f050..2d353fa154e 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 714a0a35caf..3d92f9e18cf 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 f850573ec5a..44c771c77c4 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 42ed4674a53..c1ec2294c3d 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 b91f1b6eeee..a744efbe1e3 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 69a77dd9213..1d2fd9b2804 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 11bff67855d..ead059030b6 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 f5eb9972af5..9a6af376e6d 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 ad74906b4c9..a268334b212 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 21a65440a55..e4d9e61bca3 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 43d1ecdeabd..c9e3d069218 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 705cc3eac3e..697ee3835f6 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 57fc56af89c..0121194e327 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 e47bf220195..85c1f83d4a7 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 1be3c2454b2..253ca5ad384 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 0c1fdd8f03d..2c3dbc331c5 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 e7989c405a8..b65584a4357 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 5bf336a9abe..c6a68ff5f41 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 144805b88b5..99459dce81e 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 c56ceb1696d..3a2d0e4a7bd 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 8f2d0491a91..9e5e7ff9990 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 eb29e463a4d..aaeaa3613ac 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 b5d8d08a6a4..db352ec80dd 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 462370001dd..cdd974fa013 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 de0ab490e9c..efbbf1abf72 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 cc9ef29a8e8..5f500156f58 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 732afce9517..b814ab08026 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 ab80a208765..b8c8157b6d9 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 737c1771c14..ec02de16bc2 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 fab22b30f47..d2fcad512bb 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 b0ea9e1f4e5..ca5ea95ee2c 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 2603a60ee0e..6a75761ded0 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 2a73d53a740..1450769c578 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 ba22ab6aa07..29761ead707 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 c7a3f419d62..952659dcea5 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 22ebe6c679e..be1b395b082 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 7d7580fd49f..35687aee66c 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 fd9392fb62f..78cd4d3692c 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 f4f155c5926..7279f691d81 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 2af77ffdec3..7ab83d51c7c 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 2ba5e10c82c..184f1f9a426 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 cac6e3b91ea..84eba74c6dc 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 c273ea7fb15..20cf8dd20ec 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 d914ef01108..9046d9e6991 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 d075da19ebc..b35147a8502 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 8f3d4a758f3..1e7826f280b 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 4ffcbe1faac..e165f9bd397 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 a369750b0c6..63006bc6ed6 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 0ece05f1d93..db5e09c5d2a 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 a226f1b7ed2..7e1751244fd 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 45a816eda9b..b4bb7541be8 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 e597cbff27b..6b1279e3e0c 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 8710100d9b3..1657b6cd028 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 5a26c10b7d8..8aedddd6b5a 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 169ff069de4..6fa9f17653a 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 fc246898186..ed7b31198db 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 405f6fde624..8714838879f 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 422104fedd5..901043980c5 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 0a45506c736..9710a7e634c 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 a735e296f59..c2b9076017a 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 fb051832d7b..0de62f805de 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 56aa6d0bf92..cb2d467f8d7 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 21a55b1558a..725fdd4c27d 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 dcf75d0c5db..8e7a1387a32 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 00b8bec51c8..9db1e5d68d8 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 c4ab8f76487..0ae870b27ee 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 79a20da9702..fccdc8098b6 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 4a60a80ee5a..f0ffbe1c7f3 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 c6a68ff5f41..887b5de58df 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 aaeaa3613ac..57f30eb4015 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 7279f691d81..f044996bd0a 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 20cf8dd20ec..d100f60c604 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 8aedddd6b5a..d0c5b90fec5 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 6fd25246690..162122ab4db 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 00000000000..c861f4d1771 --- /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 00000000000..f872ef654f2 --- /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 f872ef654f2..0679dbd96a3 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 00000000000..5b72a9af236 --- /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 00000000000..44b00fceb04 --- /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 00000000000..e91d340d043 --- /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 f085bab165a..9ced65b56c7 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 00000000000..ec17ef1061a --- /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 00000000000..5029b807055 --- /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 00000000000..b3b5b23ea30 --- /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 00000000000..2124eec2a41 --- /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 253ca5ad384..d609cb1b522 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 ba39723b19d..aa9a738b5dc 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 6fa9f17653a..730601ac7ca 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 1f71975cde2..68ab75c724a 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 40271bfee35..9926fbcdda8 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 00000000000..fcc4e6bf429 --- /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 2ef13384aca..0c9199e8c70 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 01e941cc465..660825c9d89 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 00000000000..050d198e94f --- /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 00000000000..b80f4909a3b --- /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 9a6af376e6d..19cf9beff21 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 a268334b212..1eb6530a996 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 d609cb1b522..8a500130268 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 2c3dbc331c5..524b688ba7a 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 00000000000..c519abb709c --- /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 00000000000..f6ddc034e20 --- /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 1be3c2454b2..7d817a18bc6 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 0c1fdd8f03d..e62673855b9 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 6e8ff5547d7..79539258bd5 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 d374c8c509a..de117905b3d 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 208b4cf7ed9..0ae5fe97b13 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 4d0642d644e..86737ec7da9 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 85e79168b71..56c4cdf0acf 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 1f71975cde2..5efa3ce3f46 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 1689f05966a..a885c23ab82 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 00000000000..1960d33f7d9 --- /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 0ae5fe97b13..3c157f0b17b 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 9737940dc14..bfcdb7a8f57 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 79539258bd5..2f39a91afbe 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 7c4b11769b5..a6a8eca6004 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 8a84176ade1..1c401be97c6 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 00000000000..f08469d5bd5 --- /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 d01ca041fe9..7c27e431495 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 00000000000..ed787f90f68 --- /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 00000000000..f2d3e950a90 --- /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 00000000000..e2211a704ea --- /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 00000000000..23f7ba806c1 --- /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 e587a59858a..b345c5affea 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 00000000000..d751a6e65bc --- /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 00000000000..dd5e289d2c5 --- /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 00000000000..8075c4e1b20 --- /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 efc24b94cdb..a7ac5d1227e 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 091190b6b4e..e739f5a5036 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 da3055ebaaf..259e51eb471 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 57192f948d5..ff8757a891d 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 db5e09c5d2a..f2613b0267c 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 7e1751244fd..a2024a5ccba 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 04520101d15..8d9a40d9d1f 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 8a038844ec1..ea77bc1f189 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 559a775da31..44889fccd37 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 4cafb651add..f6b355a8db7 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 ed7b31198db..67015cd7d9c 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 830e801bcef..7101b89b5fa 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 dfd0bb36755..59c919abd2b 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 8714838879f..1582d465b8c 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 78ba5a4dc74..2dc2c17bdc2 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 901043980c5..7f517d09e90 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 2887ac8c134..9f461207707 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 14f76945a80..8c73f3f41de 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 37495289149..352bce4e7f0 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 94e974bea0b..81b70603680 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 ce1a42e6e78..33fc594a4c3 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 9710a7e634c..fda9101fc3f 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 8152508c5df..054cff996f9 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 c2b9076017a..04b633f6f40 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 ad2c53415bb..e8b41309d47 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 aa7310e3c65..e51b7bcc594 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 21211afad50..d7fd4e6664c 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 2de22714a15..9287d5553e3 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 0de62f805de..a1b79a69605 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 cb2d467f8d7..ec35c5a7b62 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 922958f7222..f3c1f4d7df8 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 725fdd4c27d..b22f56ef923 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 e06159a6748..479c34dd90c 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 bf82b81a8b7..a3eed4dfd5d 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 8e7a1387a32..99c10b074a0 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 fdac9d1a35f..e3046817821 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 82904efc949..442950bca96 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 03f35e6ba65..c28aa04175f 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 2863d2d4ede..44e34b8e2a9 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 b2bccfd884a..d1c7421b761 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 57ea44a67bf..b7165ed339c 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 fe5ae940f88..e41a7d161d2 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 8e82f9980d3..9ea516f0972 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 f7634381fc9..9b771f734be 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 74a2f9f5aaf..bc6027ce3c3 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 9db1e5d68d8..b35e71dbd50 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 ad9ae28f712..3901e17f9c2 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 00000000000..ee7db3024ae --- /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 3c157f0b17b..ca0e8cc6238 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 33fc594a4c3..a810106269e 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 00000000000..ed83c4897e7 --- /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 00000000000..01d4dd4206d --- /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 00000000000..3227d9b2096 --- /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 91bc8309b18..fd7c4439c8f 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 bfcdb7a8f57..93e1b0c6181 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 00000000000..c966be415f9 --- /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 00000000000..b3f3f2e9009 --- /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 f085bab165a..f01828661a3 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 a87501e885a..dd9061603c8 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 3a431ab3ac0..1d7c7a2794a 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 459903c4c86..6795e2cc337 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 93e1b0c6181..2e163f43dea 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 00000000000..36583239a4d --- /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 00000000000..4e3986e5ca3 --- /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 00000000000..6df624989d1 --- /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 17176786085..1eda4dc636f 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 1c401be97c6..2fe286c547a 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 7c7af77d19d..6b0a63f5b2f 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 f08469d5bd5..f7d7201c56a 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 221fea12399..a48df5ae460 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 ca0e8cc6238..c76c4545643 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 f7d7201c56a..593906074c5 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 00000000000..d414c3b7fc6 --- /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 8ecf61f5461..9f32e0f6fcb 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 00000000000..9d353773a33 --- /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 b41ba41bcff..4557dcab996 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 c76c584a0a8..f920a8c3d10 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 0e44925cd57..d368b347a0f 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 08134298569..471da9846b2 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 162122ab4db..87e07e15191 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 bfcdb7a8f57..fcd7b8707c8 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 fec0b8e0d40..d4291e34df6 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 b4bb7541be8..c99346cdb74 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 1c401be97c6..6a3dafd0e10 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 7c7af77d19d..e655a64776a 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 221fea12399..13b6b22bed4 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 ca808ad15a8..b744914988e 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 be2cb435ac9..c135548bee3 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 450c605614f..5df5fa90578 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 7ab83d51c7c..a9ef590f84e 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 184f1f9a426..c658d60f08b 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 00000000000..dd80ebe8ec4 --- /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 9f32e0f6fcb..d8f3c792c2e 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 00000000000..94c9066c6ae --- /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 4557dcab996..afc8c783ca6 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 e268b376b34..14e4631548e 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 d955e9581ab..858cd33f8fc 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 092ef714145..72317a196cb 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 5df5fa90578..26f2e912725 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 db352ec80dd..b9547070a76 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 e42f66c6ffb..9313301832a 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 e1302d48d2f..4e98efe10d4 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 ca0e8cc6238..13d1c6f50b2 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 86737ec7da9..572f407da96 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 b744914988e..ea6fbd34813 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 c135548bee3..7f2608e4bf3 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 a9ef590f84e..2b60ae53c9d 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 17176786085..4cfe6a3697e 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 697ee3835f6..372a31307d9 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 2810434b3b2..be8028da024 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 9594951196f..a63eac1b935 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 a5891e9642b..c2e1aee1ff7 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 b493ec18f5f..e374da4f1b9 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 dfdb001db0a..f8bbfa4fa73 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 86ab9366c71..087abfcd09d 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 6a901a59fdf..4d46915678b 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 63c8e524542..00000000000 --- 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 087abfcd09d..7f4d76b244a 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 4d46915678b..afa9d15b264 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 e4b2f63c1a3..3de1370379b 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 26f2e912725..6730d1545f4 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 4cfe6a3697e..0fc8e716ad8 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 29761ead707..cea45039e88 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 7cf109b4070..5b9a1b1bd6c 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 8c2479d5232..eb62d8bceef 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 afc8c783ca6..31c4605902a 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 f920a8c3d10..3382430d695 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 ea6fbd34813..ce4e94b8ea6 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 6730d1545f4..669619b30e3 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 9ced65b56c7..78e65da9758 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 b9547070a76..16c96ca7425 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 cdd974fa013..b84d95973cc 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 cea45039e88..d4594be132c 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 6d896bee26c..1211a1338d8 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 1657b6cd028..43fb6c16c03 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 6a3dafd0e10..8cf3d53f551 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 e655a64776a..b8ffc946615 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 f6b355a8db7..71657d51e7b 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 1582d465b8c..230d407b71a 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 00000000000..84247a85973 --- /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 00000000000..36565638949 --- /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 d8f3c792c2e..2ebb8c25d01 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 efbbf1abf72..2c292c43785 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 54dadaefdb3..9abbcce4c30 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 c658d60f08b..0962bcc9d6c 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 2b60ae53c9d..5054ff36bfe 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 00000000000..5d9407ef620 --- /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 2ebb8c25d01..5f4258a3aeb 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 9abbcce4c30..126ebd0d0a3 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 13d1c6f50b2..07905253b0e 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 17d703a2f8e..8b1e828849f 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 07905253b0e..d2cf03dc936 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 8b1e828849f..23c378a1169 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 00000000000..3b419524c5e --- /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 78e65da9758..49c99dd035b 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 49c99dd035b..fae612af7c9 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 669619b30e3..a21960fc2bd 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 43fb6c16c03..e3a0246633d 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 d0c5b90fec5..5cdcc4b6bb8 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 31c4605902a..3e0d684a1fd 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 8f0b5067957..a6ff276aef7 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 79b7a53cb6e..3b30105e670 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 74ff060636e..3f5cd6b38cf 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 805f613155d..c184fe7f6d5 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 c99346cdb74..8f63f848f9a 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 6b1279e3e0c..af2d2d22c57 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 066a4e501be..be5e851662e 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 0f6acd0d72c..e23f41ff27a 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 8cf3d53f551..a0dd889876c 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 8f63f848f9a..b1a043c4b5b 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 be5e851662e..0448059f43d 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 3f5cd6b38cf..c520564f0fa 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 c184fe7f6d5..4acadd7f2b4 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 0448059f43d..6d7e41e8af8 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 e23f41ff27a..35941f15154 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 1989411bccb..3f588298617 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 6d7e41e8af8..1dc470744a1 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 35941f15154..f0da520cf4c 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 95e26974626..5f9af33a45d 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 98caa5eb227..022d84246ef 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 4c209f89ec8..54b735f0ca5 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 14e4631548e..806d9d46763 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 858cd33f8fc..2def7901244 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 72317a196cb..17e6067047f 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 5c24e6f938a..9ca2ce2edd7 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 a21960fc2bd..e23daeae38f 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 16c96ca7425..020028e6274 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 b84d95973cc..875b5547aef 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 d4594be132c..d2cf2d4bae7 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 4495c044c61..8c3c3e9082b 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 e3a0246633d..0a47da1c788 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 230d407b71a..65dd44f8563 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 2339399e022..7f20fe36ab6 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 00000000000..7bc4073ef62 --- /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 682a2404d96..bcd418d1d0e 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 04e11e084a0..73e661a4f48 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 e23daeae38f..f47454899f7 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 5054ff36bfe..4893b742a16 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 59c919abd2b..f45e73b7c58 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 1aac88ac602..7def0f5d95a 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 17e6067047f..dc4ad55d9c2 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 9ca2ce2edd7..c75c0fff625 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 f47454899f7..0bc9eba6538 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 0cc075a3dde..5e70d953be9 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 ea5e4c8df0b..e324f136a0d 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 cfa9877405d..ecb55b25afd 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 55d0ad0b4dc..6305d0a456f 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 8d7d43048b4..237a82cb476 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 237a82cb476..f6f6dab866d 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 42a842e6283..72364f2c034 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 d2cf2d4bae7..e5b32f548f9 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 b22f56ef923..b81d6152c03 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 54b735f0ca5..cd9301e633d 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 25d1e214260..7618a0b9156 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 0bc9eba6538..232f7cb58df 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 0fc8e716ad8..75f04cb0d7b 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 00000000000..edae60f42d6 --- /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 259e51eb471..161aefdfc67 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 f7260326857..b19b0068be6 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 232f7cb58df..e9f9fdace3b 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 aa9a738b5dc..6edc3d74a5d 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 e51b7bcc594..5651aaa12ee 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 64513fece8b..c1470d3bc47 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 8965b64767a..0a287173ada 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 87945ccf916..8aba0a15462 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 9b303fce89d..9c904dcada9 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 3df07562d50..2714d65774f 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 14be8c51bc2..a78ad740c97 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 ae327dbb874..d0f8d9eab0f 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 780cf6646a3..33b8516657a 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 d8966ec76c1..b57d1b78de0 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 463d1ee7e0b..8ccc5f0b4ce 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 f967bd6a217..8e84f1b4265 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 cfed13a8f38..d8ebfbbd743 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 7cb2c0e5178..5890b9cbec7 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 b4627d7f941..eac84d1f6c9 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 c375e5c1b95..512016c6eeb 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 db0fcee22fa..e3e89d865ff 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 c1d930cb62c..1a2ebd179fe 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 dd67f2b1ac0..3778d8d25a0 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 64403ad40ca..7e005eff303 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 94ec7acba1f..d2892541373 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 263fd8340b9..6e43cfa2d0f 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 d0e12c87a55..b16a9630335 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 d817c08d7f2..787b191e23d 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 5d967a3546f..253c601e228 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 096777163a6..7c4dbdeaab1 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 d0f8d9eab0f..c8964b2ff31 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 00000000000..b929d74becc --- /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 cd9301e633d..908cd487822 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 97308f22e5d..647916e0b0a 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 efee565e151..f79641c515a 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 b19b0068be6..2a7cdc3d50b 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 27983782bdc..ff429cdbd26 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 372a31307d9..74fffe09796 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 e9f9fdace3b..3670c1e8598 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 fae612af7c9..9c6dccaf5ef 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 875b5547aef..033ea482912 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 13987c983f7..6efaf5aab34 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 be1b395b082..b7a19a72bf5 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 35687aee66c..08cd224cd0b 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 9313301832a..1cd671aca7a 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 4e98efe10d4..3e7c1cb9d60 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 7def0f5d95a..6b96f56c538 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 e324f136a0d..6486a7eada7 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 908cd487822..7a1ea247a94 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 2a7cdc3d50b..32314d92fdc 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 ff429cdbd26..0411e421c56 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 ecb55b25afd..241e7df9544 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 32314d92fdc..129078276f5 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 0411e421c56..28c7a709832 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 129078276f5..ca18318a0eb 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 7efed2976c4..9d76ee5573d 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 647916e0b0a..26b5db3e7c8 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 f79641c515a..6a3e978e504 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 ca18318a0eb..a6af028098b 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 28c7a709832..0f60f2e3c48 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 3670c1e8598..37df45acfd7 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 9c6dccaf5ef..77615aa7047 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 6efaf5aab34..b1f46c381bf 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 f2613b0267c..c47df973692 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 a2024a5ccba..025cedd84e0 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 1cd671aca7a..93b8c3eb368 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 3e7c1cb9d60..c026d10241e 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 a6af028098b..3675d43a3b4 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 0f60f2e3c48..81fe379f0db 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 00000000000..6dfeba2116c --- /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 00000000000..776486929ff --- /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 7744e30f122..df83a2f9c0f 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 020028e6274..283323b65f3 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 1211a1338d8..153ce736946 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 a6ff276aef7..9b7bf285efc 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 00000000000..dabd7d27138 --- /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 00000000000..e6fb63ec28c --- /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 a2c5c5db057..529f7420021 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 f0835135890..f9d5a310526 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 4473d3e9cd5..4e11630259b 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 d3e11733997..4cab7d5c099 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 37df45acfd7..2f78280a409 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 283323b65f3..7a9302699b2 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 c026d10241e..76eefa0bb0e 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 00000000000..10a432bc0e0 --- /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 10a432bc0e0..40a7f50c769 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 810d446111a..f6dc75c7b3b 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 00000000000..90efdecdf4f --- /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 00000000000..77720bc0ad8 --- /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 733647fdb66..471a7adc9d6 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 37aaa639bb1..9b10fab2d62 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 6795e2cc337..6289b707411 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 a6a8eca6004..47a23dedf0c 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 c2261785782..00000000000 --- 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 83702ffb16d..00000000000 --- 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 44dbbe3f4c2..00000000000 --- 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 fdebfca7979..76e4d36e0a9 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 77720bc0ad8..f0805777177 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 00000000000..c074e6b7de8 --- /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 5f4258a3aeb..4e2d9332274 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 00000000000..b74824477be --- /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 3e0d684a1fd..45bfee5d596 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 3382430d695..7a463c73df2 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 2f78280a409..64263823caa 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 dbf66c6bd71..b4b3b8267c6 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 f7d3178978f..a90a1ec0206 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 a0dd889876c..bb4de29ad56 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 b8ffc946615..e3dc3b55681 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 9b771f734be..a9baa45f344 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 13b6b22bed4..df2b2e73c1c 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 00000000000..deb95e8e7be --- /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 d5d2eebda38..6e4a8df6f25 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 00000000000..562e70491a7 --- /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 00000000000..c4757d0d634 --- /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 9b7bf285efc..de003c2092b 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 ff8757a891d..2420331e363 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 00000000000..3ff735c734e --- /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 bcd418d1d0e..d4e3fa5d06b 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 17e3bf279eb..439495ab131 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 00000000000..dbf4559b786 --- /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 4893b742a16..db74e71e867 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 00000000000..2cb4a1bdd90 --- /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 00000000000..a72a893a652 --- /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 c47df973692..f989222c8b5 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 025cedd84e0..046c6c1a009 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 2662273697f..2bacaff496f 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 5bdaf0e661d..3aac3f080f2 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 3675d43a3b4..d9fa125b64c 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 7a9302699b2..622ed02e2b8 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 033ea482912..396be440205 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 db74e71e867..6fbef752228 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 e7b6765c177..37a380bf576 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 f989222c8b5..734a08dabcc 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 64775a05faa..ff55d2d9a27 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 734a08dabcc..1f55461f6fc 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 1f55461f6fc..3cbdf93ca54 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 2d353fa154e..e8ce0acdc86 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 cd9d06c0e6d..f21c3d26bda 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 d06aa3ac8a3..b11f5002bc7 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 4e2d9332274..69c6c990e1e 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 e2277d77a65..02318987448 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 00000000000..be8a4d21b66 --- /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 00000000000..be8a4d21b66 --- /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 00000000000..3e23e0e629b --- /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 660825c9d89..4baa1197965 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 0c9199e8c70..066249f0628 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 a3e2083fff4..69e212cf7e1 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 edf56b29136..3ceaf2c328f 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 96aa1f735fc..6f9046520b0 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 6a994d61852..4765a87f9a4 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 e4d9e61bca3..afb987f1980 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 b35147a8502..4a423a8da5b 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 2c9a2a7bcfd..50e00b24133 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 572f407da96..6a1da28f08f 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 f45e73b7c58..5252d5e368a 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 471a7adc9d6..47569a6b85f 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 5248c48029c..36e48d068b5 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 f6dc75c7b3b..106661b70bf 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 9224817b699..89f35457a44 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 500b0ae4bcb..f47e191c118 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 0dc75ff8efa..872269fd19f 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 fcfa77bc2e0..0a9f8640ad2 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 b68dec00da7..7addf8028bf 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 1eda4dc636f..46222daf869 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 c76c4545643..c822e8961b5 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 593906074c5..ae98c0eb4ab 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 00000000000..c08ebda2471 --- /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 d74fd5a03f8..1563765eb4a 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 9b10fab2d62..60999d1d883 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 6289b707411..9c5a4afba91 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 4765a87f9a4..6c48cfd650a 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 00000000000..fea6f43bc64 --- /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 00000000000..b14c62fd9f4 --- /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 b14c62fd9f4..f5642f73af4 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 00000000000..6fd5dec39b7 --- /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 00000000000..e9360cf8963 --- /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 00000000000..84c0fd423ad --- /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 622ed02e2b8..858cb79c6dc 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 97c4a78fc92..3d11e786d52 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 00000000000..9470f810fb2 --- /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 76eefa0bb0e..98267346234 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 241e7df9544..d042f926d02 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 6305d0a456f..019b9e6f4d5 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 00000000000..6e969f288f1 --- /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 00000000000..fe9c0b1b8e2 --- /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 161aefdfc67..c99fe62f11e 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 00000000000..8ff255defa4 --- /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 6c48cfd650a..9173d44ae86 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 df83a2f9c0f..9a41c8570ed 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 858cb79c6dc..046ce422cd2 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 4245bffb864..7ab7534199a 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 f9d5a310526..4a76dc667e8 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 00000000000..07393641f3f --- /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 00000000000..3c1ce85ec17 --- /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 00000000000..79c2461e5ff --- /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 022d84246ef..b3a71b8a682 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 32837daf5da..c34192592e9 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 c34192592e9..2c5e7c37e6f 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 ae98c0eb4ab..9e720455692 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 d9fa125b64c..a3e8dfb58e7 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 a3e8dfb58e7..8e8c640ccf7 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 1563765eb4a..9dcd46ec8a9 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 19cf9beff21..1b7914fd85f 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 3d11e786d52..a443f20e679 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 c9388fe56b2..f8850eedb2d 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 00000000000..bbbd1c81773 --- /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 00000000000..cfaf066bde0 --- /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 fbfd16ae1c6..53160c25c99 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 76eefa0bb0e..7c9d956edd2 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 45f130ceb3b..4c7e91a8219 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 3ceaf2c328f..9e526933acc 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 2c5e7c37e6f..c7b5d8c8fea 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 00000000000..ad2f8f641ea --- /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 00000000000..577a8ffea20 --- /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 a443f20e679..2e498958b64 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 f8850eedb2d..2a9dfc49280 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 381df373932..8619a864998 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 87e07e15191..223b71eb8c5 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 9dcd46ec8a9..50077fe9dc1 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 f8593fc8005..0dd4ff8c100 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 6a1da28f08f..db65cd50c3e 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 cd0052c24bc..88271dc7139 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 2e498958b64..2d70329fabf 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 2d70329fabf..1a9c0fbce4b 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 53160c25c99..1bb21971935 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 00000000000..99cc9e14646 --- /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 aeaf8a70ba5..cfeb31d5526 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 365e0a1588d..54c24769246 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 e3e89d865ff..f76c415ab92 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 f5843cbfd30..b2aa6dadd84 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 2fbd1293891..993fc75fcde 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 be134a06173..4c67c0a7163 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 1a2ebd179fe..d03925f734a 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 65d99b022dc..8917af0038f 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 e739f5a5036..224aa6cda45 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 5354d1772b6..718c0ebe231 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 00000000000..456a36fe882 --- /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 a1b218010aa..e29f87a5ff9 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 0dd4ff8c100..ed5c31c25c6 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 046ce422cd2..b2be5c49b91 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 00000000000..7c5fe7ea426 --- /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 7c27e431495..968d6778acf 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 968d6778acf..4b37f5e316a 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 4b37f5e316a..a97fdd2bd31 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 00000000000..2b70a2c97b6 --- /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 00000000000..ba63c72ba16 --- /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 9173d44ae86..ea10ce7988b 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 00000000000..9bf71a146d0 --- /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 00000000000..fffc4531e5e --- /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 00000000000..8432c2d14fd --- /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 00000000000..ba569d1420f --- /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 00000000000..9ef011f551e --- /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 00000000000..845eefeb7ca --- /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 00000000000..579af5a5ca1 --- /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 2b3796fb2fa..f829956b7bf 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 87d68cc7a2f..b10956b3264 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 dcaa3ba0a76..c0497a1cefb 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 936cdb72cfd..2f31b472b56 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 a0b62a85983..6547704d885 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 c6fe36a8221..b9b332f95b0 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 00000000000..0983d03e649 --- /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 95a651a2df8..580e9e43139 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 69ca5297024..ff2f72f3534 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 ced03d1dde8..432a0ee7489 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 9451e9d03ba..aa9591fba22 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 9043627994b..e525f24fced 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 6c66ae45f46..f305bf0bd48 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 557511f6d1e..3a8b3495655 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 7a12897563e..78d6e86358f 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 877f49ce371..4e0b7b97705 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 22702133b95..81e84b36d1e 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 f6f59bbc475..80dfbb97c5a 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 3d15d651e5b..ccf21cecd5f 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 00000000000..ba7810dc100 --- /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 9ced65b56c7..0de88a62f02 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 39b1c34be55..2500f327849 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 0cc075a3dde..79658032c6b 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 e1302d48d2f..0ae09913bc8 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 ff2f72f3534..0c41be65cf7 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 50077fe9dc1..13f0ad3033e 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 60999d1d883..63456e3ad11 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 9c5a4afba91..d2b99784953 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 6f9046520b0..1c4b9a51ece 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 b6ae38dc52c..73c1bf65a68 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 b1a043c4b5b..1ccd6a4151f 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 47569a6b85f..11fe5f41455 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 106661b70bf..7b3a9f8ac74 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 13f0ad3033e..5d9ef449168 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 63456e3ad11..53ce68d3efc 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 cc9af9413e5..33ffea4993b 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 1a9c0fbce4b..87eedb4b5ca 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 2a9dfc49280..8057a4ee54d 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 9cecbc31665..9af23f17dca 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 00000000000..15be2ab73ed --- /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 87eedb4b5ca..539d1d3a773 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 de117905b3d..838f8556bed 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 00000000000..632dec537dd --- /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 2bacaff496f..a6359a353eb 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 87eedb4b5ca..40a7dbccbec 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 e5b32f548f9..60ec60443d6 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 2eebbfc1004..6dcd3242a6c 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 da3504f5a0a..200e16a9666 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 40a7dbccbec..4d171f4a8d9 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 73c1bf65a68..63de39f570a 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 00000000000..0a1dd574fb4 --- /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 33c273fb05f..9f61dd12e4c 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 6a872b44a60..b748e83408b 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 019b9e6f4d5..ec616c1d4c6 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 63de39f570a..92fb04b4831 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 2500f327849..72f3a6682fa 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 00000000000..fd64b65bd02 --- /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 00000000000..cd46800c5dd --- /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 00000000000..375d0941adb --- /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 e52731d003e..5c4d0ad4560 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 92fb04b4831..4fedf80e968 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 f2871871c30..0ca4112b288 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 8e8c640ccf7..bae400adcc2 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 81fe379f0db..43454aba049 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 00000000000..ee721273bef --- /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 456a36fe882..1572245a517 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 00000000000..c2c90164a4f --- /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 ed5c31c25c6..faad54d0af7 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 00000000000..b60d4d3e88c --- /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 163620230ef..c7decd3e286 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 4fedf80e968..277ead92df7 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 72f3a6682fa..f8e45c073f2 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 30764fea2a3..9f225df8427 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 b345c5affea..b3ab72dcbff 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 ec616c1d4c6..2d990ad3ed2 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 b35e71dbd50..30ee8254f72 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 7b145268d22..9a6742b5ebc 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 7d7811d9e75..242acbcd44d 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 0121194e327..a399600d2f2 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 85c1f83d4a7..c8e95a06a2c 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 5f500156f58..4f8accee69c 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 9f75d917aea..034fe96306e 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 58bc4915d3f..a3f662f2ade 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 1ccd6a4151f..6ae63f2efa3 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 254e3a41d6b..d0a9b233454 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 08942e3393f..8bfdee067b2 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 a1703dfa78f..7ca4274bc40 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 f8e45c073f2..2ddbe398f76 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 200e16a9666..01f27a38e9c 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 0b5c3302890..96c7c5d8102 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 0abba3dfff4..d11c4a6e584 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 a95ac9aaa20..e4cc7c0e84a 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 f57de5316ab..480fd8848f5 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 2714d65774f..ce8b094bb83 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 a78ad740c97..bac4e450a03 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 ed9f7ccb6dd..c41b1d87d61 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 ba99df8cdd5..60dd27eed90 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 31ca716e0fb..77e0e680f4a 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 4d544ccdeab..e3deac506b0 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 70ecaad3d8d..c39fbc90795 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 b5d2931377f..a73a6b8d998 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 8e84f1b4265..6016893a785 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 b0800918765..fba0956ccfc 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 5890b9cbec7..240e8a7b957 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 eac84d1f6c9..3b12104a90b 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 0b8fa7459a8..6bc49de5319 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 f5843cbfd30..3a745e2c98c 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 5d9ef449168..5d3b038d41d 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 bd4fee60c42..5c852cd7f26 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 6f07a88536d..8545d5b21eb 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 4cdfa653224..6ef9abe2267 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 6e4a8df6f25..5d47e7fa4ec 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 b16a9630335..04d3a20d945 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 787b191e23d..0292ed65697 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 872269fd19f..2d99fd9bacf 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 717382a0e36..f0b6c0945c2 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 69e212cf7e1..39719e4c6a1 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 58a9626776b..aa9cd9fa045 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 00000000000..e742130b1a4 --- /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 00000000000..9e24acd91db --- /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 65533192da9..e84fef8d3b2 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 89d5af8e9c7..d2a77f8712f 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 29f433480f3..fb4399f0af4 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 86b86c741b5..1970d53c500 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 dfe95a77931..a98a166091b 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 d36871f43a3..756281a0ebd 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 722690a8b33..88bcb4f557b 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 aa9cd9fa045..f4761931c42 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 8057a4ee54d..7f72bff5211 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 00000000000..634530a62ee --- /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 634530a62ee..6ac4da31404 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 00000000000..d27bc7ff49a --- /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 a3f662f2ade..1e4bb96303e 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 00000000000..f1cdb12de02 --- /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 f1cdb12de02..dc5fd8c40b6 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 dc4ad55d9c2..a419864a194 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 c75c0fff625..e81db5924f6 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 ea10ce7988b..6ba8fb44e09 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 9a41c8570ed..966944e099f 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 277ead92df7..27f6d5f614d 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 b2be5c49b91..d8e5852b85a 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 d8e5852b85a..6f5368ed150 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 7e64fbfd27d..4890e4b47f4 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 4890e4b47f4..42f0caec974 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 42f0caec974..14d2687c298 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 768def2ff4d..20d30704c13 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 45cdba361f3..1f885837a44 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 a8f015a8749..4804aece416 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 8ecf86680ca..a9680ff69bb 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 c41caa8f955..bcfd105f3c6 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 133ac3f2386..c76b11276cc 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 7806e0b343b..423273c9904 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 c41caa8f955..93adc30f9c4 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 133ac3f2386..ed5e218b084 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 8619a864998..840b819fe99 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 00000000000..85faf4448e2 --- /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 2d990ad3ed2..debe4ac3cbf 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 1683667a02a..f94f7b227bf 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 53ce68d3efc..0e572835a51 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 d2b99784953..e4d15cf84ba 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 00000000000..534e17ccb00 --- /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 ca8c9a9ef93..b11dcbd85a6 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 00000000000..f27bb448bbd --- /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 00000000000..86fbec83c38 --- /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 00000000000..eda5c26550f --- /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 4804aece416..ceab7d06c96 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 00000000000..62d640117f7 --- /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 00000000000..73c9675e5be --- /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 00000000000..20c1ac94a39 --- /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 00000000000..8419473b203 --- /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 00000000000..3fb3e5a6e1e --- /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 00000000000..2ccc93def23 --- /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 00000000000..f590d18a8ab --- /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 00000000000..de778343a0e --- /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 00000000000..c8c3352319c --- /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 0914089f1c4..b5c3b26f1bf 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 1b10fa4e31d..604988d62e5 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 28819b89add..8b0d86603a6 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 00000000000..51f762c5fd7 --- /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 396be440205..f557c046eed 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 00000000000..52d83bb63c3 --- /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 24ed90dd36b..997336261d3 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 c905ccedf2d..9eeb6c1748a 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 225d3b7ee25..aacf563f0be 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 22dc5bb0bd0..6375b9726e6 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 bccb4519382..211344b532e 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 840b819fe99..f416e65dd9f 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 6375b9726e6..5d60b907328 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 211344b532e..a6066e9fb39 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 f416e65dd9f..5b07dde22bb 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 00000000000..02c0acbedae --- /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 00000000000..92a9d21af25 --- /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 00000000000..021dec0be80 --- /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 5d60b907328..6c5ba251053 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 00000000000..da6de123190 --- /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 00000000000..24b201b4d06 --- /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 00000000000..3bfd0ba2a25 --- /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 00000000000..f928061c269 --- /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 00000000000..22a1ee3edcf --- /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 00000000000..056ea4fe230 --- /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 7095c0e0b8d..16dc0d02960 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 00000000000..167c4c23005 --- /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 00000000000..ec71d28c787 --- /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 00000000000..ce874d7a8d2 --- /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 00000000000..d57785e8d88 --- /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 00000000000..919309dd558 --- /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 00000000000..930baf15f78 --- /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 00000000000..c065e1d6a18 --- /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 00000000000..fc182ae49fb --- /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 6ef9abe2267..7e56fd6ed4b 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 00000000000..3599a49ae78 --- /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 16dc0d02960..8e61179407a 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 00000000000..3bee62963ef --- /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 ceab7d06c96..df30a581d40 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 26944de9770..685c8115074 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 6dcd3242a6c..345202dc329 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 84816bf3f33..33a50fad1f5 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 93dafea0413..220a0950b2e 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 6fbef752228..67abf4af682 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 0962bcc9d6c..3af3bc6cc9f 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 d1b8bd66209..7e07d00fe6a 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 c385215ba76..d9983ffd73e 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 0e7f9dbb611..5d4dd04359c 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 5b957e00281..da785d8388e 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 85971396619..40d577adf98 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 00000000000..b7c310323ed --- /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 816eb4e9b98..5eeb5911ca9 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 f7cf5a1ebe6..5914118186a 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 db722f9fdb8..5c013756f09 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 9a89de0b29d..468253d6bda 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 f5b0c6a9a3b..3577428f43c 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 3acb03e7b4c..198d8c3e187 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 486cc909605..19615001307 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 074689979af..23c8385f0c8 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 f829956b7bf..7f4f1cd884c 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 37f44be7686..d3aadbe002e 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 67564ee699a..f1166c72e6d 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 e339ccb00ea..b5fed7809af 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 8f0692fc82c..cf0ac435f0a 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 e993d669d0c..1213e6b11b7 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 9aebeacd892..b21e4ca6273 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 ab6772aa031..738c010eb05 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 d91b2c202b7..7feb134bcd5 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 914ad31ad06..619ab3300c0 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 7f20fe36ab6..8dee99c65e7 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 12af680712e..bd3bebdec0a 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 3a09772c41f..0b15bd2d92f 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 60bb6a569df..222ae8b93a5 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 1de2543543d..5d2e18b1a2e 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 5e905323640..0f18bb265f8 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 b890554257c..1e64551956c 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 667b8378c56..c7012d1fb68 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 773983f81eb..edd074fc93d 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 00985e4fa1d..04b1e62399b 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 42292b76942..1a502a916dd 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 4c2750a9e5c..9c693d5d3d5 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 3067c2919d5..1a45bd5094b 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 a63eac1b935..22a6abfa28b 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 c2e1aee1ff7..722ac4935c6 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 e374da4f1b9..4d0996e1961 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 08bd5c3d3a1..63d542754c1 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 ec7b759f975..3f58b8f3516 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 581622c6b73..1e2dc1924f1 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 dbdc0554e06..39e81985731 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 17669189af5..9d8687233c1 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 45440a99666..54e5fe5c295 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 f8bbfa4fa73..d101630d1e9 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 7f4d76b244a..96ee6d2d55c 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 afa9d15b264..39787f6c664 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 1035d5307cc..0b0e15368e5 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 662dc43e9e7..a7e4149b516 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 56e3c4faaf5..308da602579 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 7a1ea247a94..e8adc55d20d 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 c7867be517b..3a436c9a0fe 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 ea426a5d33e..6ac04615315 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 5fb7cef9241..5b04212ed7c 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 d1082b39347..eea523a2090 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 16a0cb92eb9..f39e662e295 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 153726e6950..a6d00002071 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 b8913c95a2c..878391e3ce8 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 720e8e30441..3b85122ebab 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 e6a056b5baa..a5bda50dc72 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 304633cbc03..6109afe3f87 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 66cf214d9b1..29a926d5b16 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 f122888292f..9ab03d1c61a 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 0daa20c4780..df1b14b5eda 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 bd7101075de..a01bd7844ee 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 f59bdc25556..ffa02176a2d 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 bfa0337d347..18118ece649 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 4c7e91a8219..1ec66ff6d59 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 9e526933acc..38e311a6b13 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 7332bdc4cff..df3dd37b503 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 d9b292031f6..8d2764ba861 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 d19ef8cf96f..e72ea92a871 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 6382399a0b4..f0bfe423a66 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 531df266aa1..d856c57074d 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 6b30505c6bd..5d7eae36b40 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 c90c8f6ccea..20fa3dc720b 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 c2781eb1ee9..9ba5d59259c 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 57d399a9d96..4bd0487343d 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 a15bb4ad485..a90481ad5d2 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 bcd923c705e..83288716efd 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 ffdd35c3c09..618629b5423 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 3b02eb47575..75dfdcc4183 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 1aee75c5d72..67eab4295a4 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 1f4ffc97cfc..f7eab57ddda 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 3abb0f4b8bc..c6faaaf81ca 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 2a8501a0249..7119daa5030 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 96546960393..bd4c8efd32c 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 a077de3eb0b..3325a34f58b 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 58a08e5842f..3de142ebcb2 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 8c3f60afe82..b87a3f8f001 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 021dffc4940..a1aaa9af269 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 34695665443..be74d58b790 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 3d54bd6f9f2..e5eafed79b9 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 67e0100e7c8..d85523bc11f 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 801cc96cf77..1a7d65ae969 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 f1fe7ea0a21..8cf5d914128 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 c54903d7be2..cdce08caaf0 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 9f61dd12e4c..3eb901ca35d 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 b748e83408b..f72c1430370 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 05db165fe00..91a13609037 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 e89a33c4376..9a454696ca8 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 08f091d1a36..30ceaa49458 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 7a5df6d1561..cd3dbe0e1ed 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 6f9135c53ad..a7f70970695 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 7548dff99bb..92b850014ff 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 a8e35a8d9ef..c11deec39bb 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 205053c47ee..0c812ebd494 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 f5461d5f42e..53aeff6133b 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 355b92d5725..cc5c88c01f2 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 8b0d86603a6..bcb1dd3fddc 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 1151df7c2cb..d40e0852b57 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 1c93bedf1ef..fa96502663f 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 ca8fc9f031f..b8504d9228a 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 19fa0ee0acf..5a53899f4cb 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 547ff967efe..0d34b4dcfb3 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 c449e0f6e59..ab85493a14e 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 c3e11c5b98e..cc8355a1302 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 39719e4c6a1..92d8730cd12 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 d35597ba807..da92cf85a9f 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 56757ce12a0..cebd6d79a19 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 0ca476b1e66..c21a3d2a343 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 c7b5d8c8fea..d5a254647eb 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 f7794bd8975..20a42871b91 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 72364f2c034..ec9e626ee1b 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 45bfee5d596..140f3bf31c9 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 7a463c73df2..c0ff9cbbfbe 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 de003c2092b..66847f0a6a0 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 3b30105e670..69c2e758551 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 d9aad94293e..7a183d5bf78 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 c5475835fbd..6ac4ce589e3 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 10f4a7baa18..41dd61d3c3a 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 78d8d2fb5dd..a981caa607e 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 441f30cb6ec..1cfa11d7e5b 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 1938005c712..848a923c75d 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 2b8ce8aac2d..7d6c98463d0 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 2fdb3825526..b59352c72b3 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 b64da948a16..9a5a03fda42 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 983ffee24c4..f02457f67ca 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 0447ecaae5a..d4d63b5ec85 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 c5667288ec0..f0500d1f232 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 f657411f716..b4dcd212e0f 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 4fbbe1ed45b..5780c0363d9 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 9e6ab1a057c..5c0138e928b 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 50607fd8136..a6acc66b48c 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 d90d71c5594..529e236d1ed 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 c8aa5d69fbc..c9792ffe060 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 ec023928b99..fd0dbdd4b5a 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 4ff8c93bc76..22a0d08c7f8 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 9d76ee5573d..716ac13c666 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 26b5db3e7c8..55b91b6969e 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 5ff53e4819c..8d2de7bc92e 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 bd588cd4571..4f256a5de31 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 7fd1493cbde..176dd41fdae 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 f7820640068..01d54e47b9a 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 5c482120b21..5f2c1ba5c52 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 40046323964..28a73cff5de 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 c870f786af3..8acf6b9c9dc 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 89db5945c80..9f220e64bfb 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 9ab86047dc8..722be994995 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 6791e147a15..e5abaac2f00 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 57e926744e2..efcfab51bad 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 7776db37097..fdde303c7b2 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 f0d9d34db69..a3a5e7f7663 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 c93ed0db008..5dc5946b226 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 d76d106e81a..e94f5a037a3 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 a205ef16833..0a2cce723dc 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 4e11630259b..f83bdc9a8b1 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 529f7420021..a45283b3d37 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 933c20c9ee6..3189cbb6d88 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 461d4d7bcb3..e17c7501bc8 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 4cab7d5c099..c8c7838beec 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 0a2cec77daa..7c7bc705ade 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 9a6742b5ebc..f6022adf6b5 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 242acbcd44d..fec1dcb43c9 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 f1c53e2f9eb..70c44f6fe90 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 deabd1dc484..3b7428e2b9e 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 8985f722cf2..40c404933a2 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 4afe7622179..f3919ea63bc 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 5ef50380592..e5e69d97236 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 46cf934356d..30e6ae2f9ec 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 ea03a821846..cfc8fbe785d 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 7ca4274bc40..69a0f684a84 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 1c4b9a51ece..11fbc2f77b6 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 f0e3c3caff6..d56983924b4 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 2f9b032c14c..91ee0a1d1e0 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 7ec1665bffc..737e9f37195 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 3b09e51107c..40ccba1f8e5 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 c520564f0fa..a8720b66df4 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 4acadd7f2b4..1627b91d807 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 a6359a353eb..90e61826e35 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 078229ea4c8..cc3fd55bc3a 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 460311061ac..0f8d4eb907e 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 3727882ecd5..996ddf79f88 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 20d30704c13..f3c20750069 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 1f885837a44..4a2b79ab170 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 c905ccedf2d..4c4a3d8028f 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 225d3b7ee25..63641fc7da2 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 80c32cf66e7..7f05cd2efd7 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 c030731cb40..e1b6b425c48 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 22dc5bb0bd0..bcecc20c41a 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 bccb4519382..4f293e03d9a 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 d22ac0ea5d5..34326d09e2f 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 bb3ecb60838..ade3e8c9699 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 00da81fb992..e4c10d64682 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 fcc75234bc5..fabb33ae359 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 6e670e4d5dc..3c9bf40f66c 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 dcad65afa85..e5cc392cef3 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 60cc609a06a..1ccf3107a00 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 af43da8162f..863f1fc8c6f 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 742c4d09498..c2d9d18c00b 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 423273c9904..ec007df6b6c 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 2b08eaa667d..f27c3761bde 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 4fdb34e8d2f..b838131fd03 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 6e7709e0ce8..432a4ff598f 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 d368b347a0f..100e2e6c7cc 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 471da9846b2..03f138a5a8b 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 3aac3f080f2..062d4702d43 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 f732f430fc6..595745e53fb 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 223b71eb8c5..34588c7e380 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 1509a60e15d..31f108053d9 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 4348eef2c8c..428dece1c77 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 f9d32e68e0e..834151108a4 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 61b35b92321..328eb79d210 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 4ac02bab9ec..f7ee5c7f16b 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 164676151f5..7967ae06718 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 2bf2f1d5e9e..6e85e5bcfdf 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 6dd10f11e1b..224d4277a4f 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 02f9d6a32a6..22e229a1615 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 f4c88ec00e5..af1c55fdf9b 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 7ab513c9201..626bcacbf27 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 50888614aa5..ccd14a2f3bc 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 bc2fc387e89..cff02234ab6 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 e2d511e0f1f..72e9990b7c1 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 a89652a5d06..95fef007564 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 4b5551a7d15..c311967d8a8 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 0c30b557459..a55f437ca6a 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 1d15991902c..0f6b79661f9 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 316812243dd..f4a03e85cad 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 67635230633..57347ec0c75 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 bfae37c64e6..9ab96383ed1 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 118cea41a7b..b60e04e725e 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 69f6b012c8b..bc1ee3d44ea 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 35985e27d0e..b7eb7025425 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 6455e3a7e29..aae5b4874d8 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 368ebecba84..9d50b290c5e 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 9969c00e3af..59303a18324 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 07ac0c49686..0875ceefff5 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 0f2a940e3b4..26bc6989d07 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 92832b860bf..3e9a633729a 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 4d7f1354334..2cd4edc4fb1 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 c99fe62f11e..011b68a2bb3 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 2420331e363..7ce0792cdf9 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 732a770645b..3602b54bc44 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 498412b1dea..4adb61bbbf1 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 245cc77eec3..397fd59b7d1 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 005e1bf67b3..96152ed46f7 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 2ec84c946f6..588e7b1a93b 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 1926651e418..7d20e99c128 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 4127c8b55f6..e501cdaa4a2 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 bae400adcc2..d5367e919a3 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 43454aba049..35096ae18ff 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 6f77d2af66b..11c79e99b81 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 ee223aeb059..e74b7a9c319 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 104c3d3e064..f0ea5b4a5f1 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 806d9d46763..5f1de673294 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 2def7901244..41a97382b0b 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 a419864a194..d1794a0ea90 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 e81db5924f6..aade6d91d61 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 8ec638128d8..50343f3d91b 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 84a25ee49ad..73c123723b1 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 aa6916a39a4..c5d75c1b83e 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 b573e7c309e..7ae4777cd4d 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 250f6e07718..b0a1777f19a 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 90fbc36a114..90a8d802f9d 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 d7f24e72320..c89bf6f135b 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 51437f50b26..859317ca956 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 86b010a9ace..314803d1602 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 f72e9b4fd6d..ed8193ab605 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 2f0734ff4d0..79d36055870 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 8860ddf83cc..377614bc55d 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 ce4e94b8ea6..8f700cc636f 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 7f2608e4bf3..5062645eac8 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 6ba8fb44e09..97b3a0b0318 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 966944e099f..371f3c9395f 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 e8ce0acdc86..9f26c927374 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 3de1370379b..7b16585a996 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 db67f1f74f1..be8553ed47a 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 8e6ce9cd822..1e64e83c86a 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 46422444bbb..8bf3a1e2846 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 68c6cbb70e5..afca851974a 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 3d92f9e18cf..8ac0a24a08d 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 44c771c77c4..9443a5b5b89 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 c1ec2294c3d..9aabed67243 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 a744efbe1e3..7be78556a50 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 1d2fd9b2804..c9702d6ccc6 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 ead059030b6..5bfafa4238c 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 1b7914fd85f..70fa4714547 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 1eb6530a996..378d7f5e2e4 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 042d66d7f9e..a7b410bc04b 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 253903b625e..2d5c27177b1 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 8df0551dbe6..48ef9e81016 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 afb987f1980..253fed76fa5 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 c9e3d069218..419044081e3 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 9bf7fb00352..1873d912dca 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 552705d8df8..3e2bd000b6e 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 74fffe09796..44644421567 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 300d1a0bf42..7f17c6e03e5 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 06174399a03..26a23678009 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 ae559cbac3a..2412e67cf14 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 b3e474fa96b..18d356c28d4 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 ce27319de74..34e9923797d 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 236ee2a7de5..132fda9f1d9 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 96316397584..c4e45338dd3 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 1e20f9488e8..0b4e59f4f9b 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 39c88b282c4..8e7fc0d3d50 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 de69816a6e2..7c39870cbd6 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 a399600d2f2..0da63c5e500 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 c8e95a06a2c..b0863a371e6 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 5ad0e7a2fef..9b0897f8268 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 ad2f8f641ea..7ddb8f4e59d 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 577a8ffea20..08530de900c 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 df30a581d40..14b555adde9 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 685c8115074..0072ec4125f 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 b65584a4357..ffb2d8a7dd8 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 887b5de58df..8f8ed04b5fb 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 bbbd1c81773..ef425ef0259 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 cfaf066bde0..276e6f3db1c 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 85ee51aebf5..169c0e422ba 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 66fda485028..bbe7943f4b6 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 99459dce81e..5e5c6901471 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 3a2d0e4a7bd..987fbf70739 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 fb27fea7060..775a3c96c46 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 27f6d5f614d..fcd2535dad9 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 2ddbe398f76..8fc93f24351 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 982b931fd4f..9cf485322f2 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 edec4ea161c..cd28c4082d4 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 3726e9ddf8f..42d299ff9b2 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 9e5e7ff9990..b2871786034 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 57f30eb4015..b8d281dfdd7 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 ca974ba9a37..762c9b9c28e 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 d5fb8564b96..d8466dbb1bc 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 6f5368ed150..d2064092a65 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 f557c046eed..ae1258713f5 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 eb889e328cb..e7f37ebeb67 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 ea5143375c1..26ef5529b53 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 69b245e4326..7503fec7a80 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 8eae906ba87..162c39b951b 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 153a45c8ccb..b063126fd3d 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 b52f1052fad..755417d873d 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 946e2f89278..b1f2e92a840 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 7f12c7b2793..d0c01d9de6d 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 6f20e720377..9420bef4b9d 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 b6189d22fe3..b3d59da226a 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 15f3c7811cd..c48d1947eec 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 c2f5f75f98e..6edeadf6b94 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 995d330035f..04d68240ca1 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 2c292c43785..111bfdb6f48 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 126ebd0d0a3..9dc4c7e048b 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 4f8accee69c..d0e70eb3dbb 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 b814ab08026..4d2ee57c9b2 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 b8c8157b6d9..0fd2e7c7095 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 ec02de16bc2..9afdddd0f18 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 afb32e1657f..4cb9e60a268 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 0567ab652fa..b1d9d415489 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 5eded9e0594..4718dda1832 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 d2fcad512bb..87494e78a28 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 ca5ea95ee2c..2bc57a70671 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 6a75761ded0..2d4fb849fb5 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 1450769c578..a97a59cafe0 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 adb76846379..ad44e0993e4 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 7458e00180b..1e8081e0913 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 5616eb89b07..55d949c245d 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 a9680ff69bb..f23888cab03 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 8e87fc32f27..ad7e3c0489c 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 d4291e34df6..e91da35c06b 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 69e36e7328d..9d5653fc247 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 e9b3bea5991..8bd7086fc1b 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 ee1456fd4b7..976860e8cc0 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 60ec60443d6..e0d790312d2 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 e13b417215b..346adf6f091 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 78aeaa1b41b..4302e6472b5 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 2f39a91afbe..51a9f768d20 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 9f225df8427..84cbb86345d 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 ca7b4a5f8cf..e8f8372d679 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 b1f46c381bf..7f5d882a912 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 e18e7830cfb..3c89ad9d540 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 9876e939395..82fdc2e54c7 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 5f25f57addd..aaf6ca39d09 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 345202dc329..e4ee057d6ea 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 33a50fad1f5..eea5c62fbd1 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 f8d7f73e077..f272cd4a034 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 3b96ae5f937..24c3e997bbd 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 8c3c3e9082b..8bfb0070605 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 952659dcea5..781a478d751 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 153ce736946..ebc9ebde994 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 fd7c4439c8f..31ba812ab98 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 db5d0997eeb..3e602d1c342 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 5f50a7305ee..0bc90c896ae 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 0f0640e3a2e..0943d9db26a 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 a671250c17d..122534c1102 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 cf6181f02b4..a7f236890f8 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 1bb21971935..e2743f8f456 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 3bb2ca78931..b302b318528 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 e667eb4bfd9..efd664fd1f5 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 b3dd3e9f01f..9a64335e6f0 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 5e8292057a8..e3d8175cbc4 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 a8cf42ea49e..e59171bc3b0 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 220a0950b2e..189767e54bf 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 b7a19a72bf5..530bcd2902c 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 08cd224cd0b..af6f3e56707 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 78cd4d3692c..b0e8a1ebe02 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 f044996bd0a..407edf2badb 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 67abf4af682..27fb55bb4da 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 3af3bc6cc9f..01db38d9c30 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 7e07d00fe6a..74d490bf941 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 d9983ffd73e..7fa66bde06a 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 5d4dd04359c..e5f364e39f4 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 da785d8388e..51bb418bdf5 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 5f1e14b3258..09aa67d43eb 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 c479590de97..6f67bdfff93 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 20b8da796a5..b2e540bbbcf 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 16d11b2f453..3d0f0b9e7e8 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 84eba74c6dc..afbddc5e686 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 d100f60c604..0bfb5b7a410 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 fd52bdd4c14..e54c96dbb11 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 6edc3d74a5d..52b80ce92ab 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 40d577adf98..e42204b3bae 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 ac16a83e6a7..77d6f739da6 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 a55bdfea4ba..ae7f942ca96 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 29d1a2c35a6..81a1c8464da 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 16e8da107c6..2922a09bde1 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 cb8cab1849d..3fcae1398f9 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 9a8950de9f7..ce0f1f7836e 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 8098b05f03a..b0eb34d54cd 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 45fd252ddb9..56e5dc7058a 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 1fc8c73b477..341cac5ed3b 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 f0c0311280f..108276c951a 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 5b6d6c96482..4f8d7cbe1f2 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 fa17846a1ff..6cdd29986bb 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 dc42dc74991..b3e14887e22 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 7ab7534199a..77185f4f25e 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 cbb6f279c6d..9e43d9a0dc3 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 2aaaa719e94..9595777ddfe 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 30a8b9b868e..9aa778c5651 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 e233d52ecf5..38295f83859 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 5b1155507aa..f73d51db962 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 86f0e6e20eb..2e013c44ae8 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 763e3294613..0e667ad4c8f 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 40bf3af5194..d0340a4df5f 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 77a669e0738..7103eaace55 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 fe618e6ece7..48d29b3259b 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 caf76b5ea19..1dd4611d53b 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 c4fe8791362..40def87f6dd 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 059d160a519..986cda6075d 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 cf319321c7c..e0639e38e77 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 17842484bf8..d519eee4793 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 9046d9e6991..868cba9a5b9 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 4a423a8da5b..79f34ff10ea 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 37a380bf576..8296cdfb7ea 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 542aad0ef0d..8a113987882 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 1e7826f280b..12fb8a06b62 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 e165f9bd397..51e0bcb4cac 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 1e4bb96303e..4a4ee9bff9c 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 91b4a3181f5..a502fef6140 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 a4065fa6f82..fb2873f80bb 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 7d7650b858e..6f319a39b0c 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 63006bc6ed6..a01c109b9ca 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 47a23dedf0c..0b9a53649a9 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 652ef994c7a..4adb215e130 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 3cbdf93ca54..fbe5febdbb1 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 046c6c1a009..5dfc0be688a 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 742e2a1e77c..e828830ec0f 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 4f7b8f510b0..6c9fce26803 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 4b47e51fde6..0d30134aa9f 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 717192b42fd..57b76304a77 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 e23a22fe8c0..45a3f0a4655 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 0fd1f85f969..3f21a51e0fc 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 6ae63f2efa3..c380c1a5627 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 af2d2d22c57..2253b6bc684 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 1dc470744a1..a2d357cbc4d 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 f0da520cf4c..9e5b35992a6 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 da35017cc2b..529396b3966 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 2cb556a82ac..36a7d147192 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 2126445a1c4..b7fe1cdc8b2 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 50e00b24133..5213944cc90 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 118c49ed00f..2889b221600 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 9cbd280f9d1..e0daf59fcc2 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 01f27a38e9c..a4e7f61d83c 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 753d16a97e1..b400520a08a 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 93b8c3eb368..648bc5d6919 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 6abcd578411..2180f524194 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 4f3b60d6f37..cb573f4ec3d 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 6b96f56c538..e9fde234889 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 b3ab72dcbff..40bd4e3c263 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 faad54d0af7..ac08f681933 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 db65cd50c3e..00c790a670d 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 6486a7eada7..699e4857ee0 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 d042f926d02..dbbab5fb30b 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 debe4ac3cbf..e96ed8c6799 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 ee732033ebd..651a8cde938 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 95857be27dc..6876f8fa7ef 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 0916a43498a..77a993fffae 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 c61b283500a..8ea5563fd1e 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 034fe96306e..8d3ee939e2c 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 237aedd49d0..28fd98f21a8 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 b4b3b8267c6..1cf68eec9c7 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 a90a1ec0206..9cc1d20b122 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 815212aa53d..5c35e78278f 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 f5be291c10b..ecbd6d0a790 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 0a47da1c788..113fea2ea35 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 5cdcc4b6bb8..95d6ed2d04b 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 145d61fd6f3..bbe93e17656 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 6b27fbfa7e1..26cae431179 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 69facc6895b..73d6a9ca5dd 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 695c6730b27..35ee18d4c02 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 df9cd4786ad..5c4b0fc05b7 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 d01fc80a1f9..4107ccc3aff 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 8abd48bd3f7..6df1dc7561c 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 83f98a9e6e1..26a2d86524e 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 2fe11a7eeed..cd008a7da08 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 ab6ef7c8c65..4bf1af77c47 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 2a94cd26183..f774916f4a5 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 a1adb6b8537..c1f029d6264 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 ff55d2d9a27..25adb4d3615 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 61eddc0c60a..97c541fd3c0 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 2aa65324a3a..09cc9180a57 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 64ebafbd6e8..a624fd6e6a7 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 3668a2b0dac..8b62e7d55f0 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 49d71129f90..d4d75cd175f 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 8d9a40d9d1f..f25e91ee3e6 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 ea77bc1f189..ef14ca66519 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 44889fccd37..65e90394261 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 71657d51e7b..07bbe6cfa5b 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 67015cd7d9c..4a1bf71e1d8 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 7101b89b5fa..8b0af7bddb4 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 5252d5e368a..44c606a360f 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 65dd44f8563..e048aabd4d7 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 2dc2c17bdc2..0adff61c9ec 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 7f517d09e90..bfc01932061 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 9f461207707..56102c99c56 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 8c73f3f41de..54932228372 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 352bce4e7f0..c3fca441eb4 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 81b70603680..e03942bc247 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 a810106269e..b7acfb85f50 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 fda9101fc3f..729dac0ad6f 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 054cff996f9..5e8952ce881 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 04b633f6f40..98fc852b573 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 e8b41309d47..da285ee4e30 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 5651aaa12ee..a53d1f00b54 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 d7fd4e6664c..9098bc13096 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 9287d5553e3..8c06377bbfb 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 a1b79a69605..abb8af24435 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 ec35c5a7b62..4e749d33fcf 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 f3c1f4d7df8..69ff04ffb46 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 b81d6152c03..fd9247bd778 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 479c34dd90c..83f89b92182 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 a3eed4dfd5d..761b4c9e0e6 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 99c10b074a0..daf4fe5866a 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 e3046817821..4f0a179142d 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 442950bca96..be53304b8f8 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 c28aa04175f..f7c2d21c12d 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 44e34b8e2a9..56b0dbf43d0 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 d1c7421b761..05941120423 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 b7165ed339c..672db3a3ab0 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 e41a7d161d2..83bc2e47674 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 9ea516f0972..15dbde894fc 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 a9baa45f344..c5c85f5f3cc 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 bc6027ce3c3..2f5d7b8364c 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 30ee8254f72..ef61c231104 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 5218f76ee66..595ff801813 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 451384d18d9..5864e6beb7e 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 09c0a465c17..eb9b6587b6e 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 59d5250bf1d..269e115189a 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 3b038a12b54..93583364ef6 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 99d6b7c1c73..16f2c004f6f 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 9c9dfe38349..9cd724e5596 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 3deb2b153ec..0cb25d3a2a3 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 53d490c4b64..ff949ee6d00 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 ca9c6b27ef7..964c15673ad 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 114be945bde..166ccbc6dc5 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 99f46b4225c..16f2cec2076 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 2d70aacf2ea..c154c0bd5f5 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 35f3a6d9835..ced7cc203f2 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 a9109c73d94..bd489d279ae 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 b46dbb13f77..fa646d1d4ee 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 a2efad28fd3..446cc48d2f7 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 bfa4298db30..8031c2ffda2 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 ea4e4a77faa..45093ed1012 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 d8e6b838d81..244bd6e37e5 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 2199a2d4642..66369b28b76 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 c11914f006e..bcf6911bf59 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 7e51c96805f..b2a3ac13423 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 86c13ef10dc..71837ef12f1 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 7d64310fb7f..8d06a98dd35 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 e3c2b7a67ec..33f1039424e 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 215e8125a41..7b70e383866 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 d5265def9e1..817aaf0a253 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 c3788b31b0b..ace95b99146 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 439c5053cff..7e131a88d36 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 20a3f34ea28..a38ff824b6c 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 1ebee9a9327..1280caaa99b 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 635333a5886..bbe8fda37eb 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 12798833a3f..39c9d9a79a7 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 5ba933005ec..27b3ec22322 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 9a49b96e68e..ced6ad19d19 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 7a7e30f7913..1e318ed9227 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 3dcdbfe01df..28d6dd62256 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 20e69211da2..d6982e98f44 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 a89571e8197..4a6fee12098 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 1d66964ce6b..e58bded801b 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 76ab4736275..9088e059ef3 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 97646b774eb..a3ef50c3fb4 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 6a3c85f1f98..51bb314968d 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 77e9b9962f9..96f92ac103b 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 5b5456f1b40..886ccaf8362 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 04532b54543..7dc4922790e 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 779418a7f73..0c4e28d1742 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 532ef043d68..4d1ad7e61dc 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 3c2836e1597..9b487f7b5f9 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 e2202a7e526..e0cae87051f 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 77927b339cb..99ec1a2dc6c 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 d066fe980f9..cea783cedc9 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 135065e5865..98112519714 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 e4756bc7a81..de890ee3b39 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 76e4d36e0a9..8e6616347f9 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 1191497e873..541ddc0e1c8 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 c9020e46aef..45eb7d08adc 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 79121f6ef08..dff4243617e 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 9051bf252fc..80391ab2873 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 c1470d3bc47..05d964124b1 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 760f84a69e9..bbfea6a2567 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 843b28ce430..2c418692d03 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 e3efd804f44..55c9cf2baa2 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 7af7f27ec0c..9f4a31fdbbc 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 96c7c5d8102..96e05541684 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 ba45b41f929..79e36442f4b 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 0a287173ada..a460477d385 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 d8f1e2d15d7..6f5f2b8f65f 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 d11c4a6e584..2920f0787a4 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 c5440848e9a..450678a0f86 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 67f8144c6c6..7bc835dcced 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 5b9442a628a..d4d0e6fa70d 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 e3ab206ac21..b23b9e645d0 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 8aba0a15462..aa2da8cc391 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 83f3f38aaea..db68484c4a8 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 e4cc7c0e84a..b809128e731 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 2f2647f42a6..6bba0d250ff 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 480fd8848f5..05829128c5c 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 7d91a68e7ca..4be1246405c 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 665213314b4..c726461044b 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 9c904dcada9..e216a024468 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 2b1ed8fee4d..917ad0eb50b 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 f2d7f23bdc7..c65ee5482e3 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 f72180f6948..cdecb65d8f3 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 ce8b094bb83..4eb7bdc7808 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 bde379b1b88..53b6d2be8dd 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 59b1b553a07..e3462242dc8 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 c2dbd0c7245..0ffb555eb59 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 8f80344b247..4697e40702a 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 bac4e450a03..dff0a66cec0 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 911cdf90d18..c511f1cabb7 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 7bf70c4d7f1..c063204a50a 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 4098701be76..2a96478cfad 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 e9a7dd0ce18..aeb7592cbdc 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 2848b19cd04..bab5a02cc90 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 86d2c170f29..a68d7a67ac5 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 c41b1d87d61..caab177d53f 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 cbff8d50dae..aa1bcebacfc 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 65acc2d052e..7ba86d619d2 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 85e1e33c22a..49eff958d36 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 e0da7b9a440..7cbe58ecaea 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 b073f5ade73..27da16518b7 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 3d7b96a9abd..6a81132eb28 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 f09c896e0be..8e2d7253efb 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 8f780d1e2c3..67b1d292693 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 00b3beeabf0..c3dda79f728 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 72fd1a18b9d..e3aa2cecaa3 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 679fa0dc58e..3af0fd7a2bd 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 b6a3f186268..7a0e6f5fb5d 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 47e0bd80068..ffe50c5dae3 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 f555554e6c4..9a34c2194cf 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 49c3c3ba1c7..854f77e1d0d 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 0ec53105f1f..1ada609a1ce 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 a085463f7ce..3bd5220a8e0 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 f2d3a21a280..47a6c0b6a21 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 2f0de6de5e6..88edc3f1ee1 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 f6f6dab866d..f81c77838f4 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 d8f4383f614..a454be8a2dd 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 2e33865fe28..cfa830ee99b 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 3f207ef680d..161e1160b8b 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 e42662bbe0b..393747072f3 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 b094eb45dca..2c7026fd0ac 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 2dc00edac16..dbafc91d3dc 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 9ac8d9b40f9..1dca56c6439 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 0b3fa2e7caa..ffbc597ab9f 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 e3ea85a1d1f..b9cc7e4edd8 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 cbc9e3c375d..decbf53241b 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 1257808756e..d2a5328af8b 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 60dd27eed90..4ebefcf7122 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 28b0a67fa75..9237149c184 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 ca944f7037b..118d28e2142 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 97be139cefe..64ccdd11ccd 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 cf7924f80b0..3a6d867ebea 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 6ca768b2de7..936ae51f163 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 77e0e680f4a..e70d7834c75 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 c4598dda915..d9b481d7b6d 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 c8964b2ff31..3aebbedbbf0 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 e3deac506b0..c792214ae49 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 421f3d771a0..1b3996d1e69 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 9b1585ba58b..3f89e80906d 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 5be8cfab555..849710c5539 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 92d0dc9f6cc..c6b4ae753a5 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 6df7679a403..b8c9734d961 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 29002460b2a..a5fed30a6c6 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 7f0faa138ec..dce92a16cfe 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 11699d4ec43..8c78fb7ff1b 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 7cd7da771d1..622c8f0de01 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 03d638ff5c2..24fba425e48 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 30e1f5ced22..791f68bae31 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 2317582af99..2842e64ca9b 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 a9abb2c045d..cc55f758a22 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 3228fbfde1b..c6e8945900b 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 a0e4d037f8a..37505a8b74d 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 b89c825fdbb..96c0798ae05 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 f6622ffe1f4..ab182cf0848 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 1927b0f9829..972acdc3f9f 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 74162f0859d..0cd22b5a304 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 0046bc8fcd7..ac4f404bfbb 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 8ef05c3409d..53d3b8e4555 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 2469779d175..76b12dcf24d 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 4642b0af46f..58ae281a8a2 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 500bf24f3be..12ffec3ce87 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 81460e14695..7c0f9645406 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 154de685b04..364e84bce66 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 8746a024ab3..8c179af2adf 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 6b68d9e5fa0..f00d133e4fc 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 6219b62dcc5..71dfafa339e 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 654bfd54109..def7c7562c0 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 95367fc55ff..f9cbbeddb91 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 54cd1d7c606..1c4f6e298b3 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 c96fbd15b33..01e314e9ed7 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 a0e579ce4c3..89151441330 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 ac261f29287..4d8396aeba4 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 c0010991d31..9fb019d3b9e 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 f67ce07af82..df61a010f84 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 9bbaf616a6c..667faba7544 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 2f10aa858f9..ce0ebf4d129 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 3ce8d078cbc..b24c355d41f 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 e0612a5ec78..f9b7e9b0d7b 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 3f72b7353d6..f7d014ea7a7 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 56c0d99097e..151f8270c47 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 607b449552f..a30d795a48e 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 c77bf8110f0..49dfda48a69 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 d6e8e344930..7529c86d59d 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 0c13aac2864..ca7b656a910 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 b162b4f4d75..3cf09b66611 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 028eb5e8f7d..438bed21b3f 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 d7d06a2e3ab..43143748661 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 9af23f17dca..4ab9d872887 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 d41ab5776aa..d97dbdb37a8 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 0fad0276a81..1c9e5cfe8e1 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 9333508276d..4b93f5b4fbb 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 ab7509c7a2b..2b670b467e2 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 be2f526892a..ac20a305f14 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 46008244aa6..40798868ad7 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 a68558b9c2f..02eed1354b7 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 4bff75d8efc..2b0e8ccc451 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 458539f1daa..b0d6e782052 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 f74b809c814..2d1b4b49649 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 d0a9b233454..5009cce48f4 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 e82cadeccb5..b690a0ed019 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 8bfdee067b2..5616d5fd589 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 12e0ae8d194..04e24d0cbcd 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 18b4dfcc400..3fb4dc554c3 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 9ad10bdb0f5..011101ec69c 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 123a2bec400..95ec1341d02 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 28989a39c2b..26f41e3f35f 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 c044f55b306..92507fe17bc 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 a92142467e6..56894b769f7 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 963948a0430..5275c07f63a 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 3c90add442f..603808c4c0e 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 ecda065fda9..ab824a1e3e5 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 82eed1d0b94..ae448a154fa 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 c39fbc90795..a902642ac19 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 29e2af1be93..6407640c1af 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 9501197fa37..d891987f7c6 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 a73a6b8d998..074ea781838 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 44d8691bafa..1e10dec1ff5 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 23259ea2508..00324d5ff79 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 b162f332e05..ff184ccf884 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 edc19641242..d1868442662 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 8f3c5812f72..3a041c7be49 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 295d6f7f93b..a21fa08c63f 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 33b8516657a..44cbdec2cb5 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 a6e8fc896c6..f35e223045a 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 9418e209bba..8715f3ca0f6 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 0cc1f371695..f270fd260c4 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 2e067604441..2befdabe550 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 b8d2cbbaa81..2a22de15652 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 abccbf476e0..193ee55322f 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 1d85bf37f2a..cd648e34417 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 4ba22f391cf..00a622f1319 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 167f823607f..7569946016d 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 45d1d00bc70..15388e47135 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 00a2c40fd31..150458aec6d 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 be610b0f20b..9d2fc27f7a0 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 f5739901a81..8b3c2857ad8 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 65d6565ad9a..772c77bd01a 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 eb7de8c43ff..7e95af5c824 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 049819f9f76..a2ee396a156 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 e6974a4f2e0..2352fe18cc8 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 cec9a6b558e..32218742aeb 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 6fd6b115c0b..66f2f342b66 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 dfb3d1882b8..0b9bdb87bc5 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 73f93fa9ae7..b68ccf9a692 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 6347da44991..f8e107c0c59 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 d6908384a71..b579f9fc608 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 cb1b56c267a..6108d135694 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 b57d1b78de0..bea6555a416 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 f4a7e1f4185..ed683cc4af9 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 eb9115f19c7..32f5c43ae9b 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 beada0509c9..04d86a87f14 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 9dedd9da3ba..4b6622e43c2 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 2556530497e..69ae561e748 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 8ae1959a0d9..7748da21598 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 8ccc5f0b4ce..f118b3f9853 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 f421033419a..73a6234ceb6 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 d16a86f350f..106d9d0515a 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 1d9440aadc1..3455c6eaae6 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 9673ccf5165..06c4b46f386 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 6016893a785..e0241807759 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 c086489cb1a..2e67d1280f2 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 dd4be9ebc6d..3dc33103e04 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 3bbcdfdc7ad..fab2e8b7c70 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 2d9af5792ee..cc7aca1a76a 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 05ec05873f5..abfbc8162df 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 b39ce0307a5..e8bd52a809c 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 5d9c5847cbc..595eadd6d2c 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 46036765a73..8d18a0cd436 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 a06242b4b1d..3bab621bfc2 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 49b817a03c9..fa1de26ecae 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 49a3b704138..ddcdb4fbd53 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 126f79b3b93..63c56e29414 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 99b108aac88..7f77e12eeaf 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 a0aeed89747..cfb7b9090a5 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 7bd197774bc..e6e5a7ce169 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 025ba8d6bb2..440d34babb1 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 b95b2fa7558..6fd1929865c 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 b8e6bfb85e8..52a83c02a8a 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 d6aa943123b..1ed95c16a0d 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 52e32d3d37c..65a2a14c52a 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 0ae870b27ee..273e81d83c0 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 4cf5cbc9567..b1399fae0b4 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 bb17de4fd6a..621e0b0a585 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 2d1a10265c8..05caf9cca3a 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 fba0956ccfc..9df9f0b604a 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 91b9ce08010..bce9d62105c 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 20cc0ef703b..3e67a95b503 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 c7decd3e286..083662df7ba 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 bf9b736f02f..ac26aa1f811 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 34f3ff535c0..cc285ab991e 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 32b7967401a..6e374fe2c59 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 efd47bf3e4b..22b4c86cbcd 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 bb54ae08d77..852cd62c277 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 984d4fbba2c..85c3a621239 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 7ebbb52bcd5..02ea032c0c3 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 d8ead179c19..9cc7aa17525 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 53eadd4a38b..dcbc016e18b 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 fafe363e3f2..4d1be62554c 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 0dc52c29ced..d7c5731433b 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 61a48667c33..a1846094b4d 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 d8ebfbbd743..2e9c0698a0a 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 240e8a7b957..ab09dd45710 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 bb190e94cc8..e25f64f61aa 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 c482a156a91..01958f15298 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 f91ad2eb276..cc454882154 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 3b6e88b7c20..16cfb30e2dc 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 13c37f02adf..ff2588d204e 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 516bf186361..8c977e892df 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 467c6c2c11d..9c774a434ab 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 66d9021223f..1dc453ad416 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 3382eec6850..d2fdfee859a 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 63969eac354..10e67704188 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 3b12104a90b..8c1e9197fe8 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 7cb1212f75f..62c1ea96d9e 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 6ddab02487a..e53c50f0439 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 eb004505bab..590c1011d56 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 6bc49de5319..8b33269632b 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 fdca8058578..b6c6a4d96d5 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 3130bf20a0c..4f8da75d7d9 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 07f295c6810..ae4a5e2a69a 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 7daa2f68d87..69c27a22ea0 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 6d70e56edbb..15d1535fe95 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 e375a0acfd5..c10eb0f8a80 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 512016c6eeb..154f14d1fa8 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 cacef991ea6..00900d440c9 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 96dc3725ea5..4ee8dcfb74c 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 836743626e5..980da30321b 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 05f608d28ec..c89510211b9 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 f50a26eae23..1e860fb6ec5 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 10090cbf9af..2fba0c2af42 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 c56a49cb92c..5836514dcf6 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 ae5ea2c6de4..774c537ca26 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 23bfd773a9b..bcfe5e29ab9 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 974bd4672f1..0ffe74932e0 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 723a54e0c54..9bd02505d85 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 926ee6efecf..ce722e391d1 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 a3dbc11e8ad..4d83992be7f 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 055dffd534d..395ffa8409e 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 98d23c024a6..d7409732f7f 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 e45882187eb..c84771317a3 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 620eb54ffa9..e2c038f89fc 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 d5f00757039..055d0a07f41 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 96a0b856d50..322f68fa112 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 ddbc117e7fd..47a2971a69c 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 db7628ebada..cd4386a796c 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 d1bc8eb25e8..e50eaa2075a 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 d8b09bb2f3f..bf597a44936 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 12a745a34bc..e595beb10c2 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 d2f9ab5d262..14cc3696797 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 fabe54303b8..dd48f9f0155 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 141dc8415b4..13ba10d3542 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 c19af1cf79d..a5659299706 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 3e56f9a1753..8e9acd57ddf 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 a8c77423ee6..e547b84c381 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 f3b70f069c4..a39c4518a4e 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 9781bd0d124..8e2b46cba59 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 0ded2022e83..9e43228dc63 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 f6463611f3a..cc68f73b631 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 c1080a9c39f..ed2f15c77d5 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 d5751a55aec..b76a2ca0efb 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 1679e989556..9eaa86cc03c 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 35535ce4b7f..1999f84c440 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 4438c4ab199..6ec02bfbe33 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 cfeb31d5526..f59701b9c25 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 a7ac5d1227e..bb30d90feb2 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 54c24769246..98108d8fceb 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 f76c415ab92..ead4467aa5d 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 babd444288f..917cc7d6651 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 78a279b94fd..7d95491b280 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 993fc75fcde..1de3884664b 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 4c67c0a7163..31dd7de96ca 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 d03925f734a..716da8f9b66 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 8917af0038f..3f3fd53badb 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 4fadc0bf8fa..5a78490b25d 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 4a76dc667e8..1dd0d1a6814 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 f05fc48c074..1c06b355f9c 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 224aa6cda45..2af8e7f3643 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 a12e2d05285..7723a37094c 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 718c0ebe231..4e80605fc25 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 11fe5f41455..a76c1f722f0 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 dd9061603c8..39c41c935bf 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 3ef6a7c15e3..3e7de89edd9 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 fb1378f0124..9b3d0b7555b 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 3778d8d25a0..077d0887786 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 563e5ca9bbd..a1d8f6e5e02 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 36e48d068b5..74eacee9091 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 89d0e5cfe1f..47807ec28cb 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 494c173f5fc..086d21120e8 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 0d938122f28..a9ff0d245f6 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 7b3a9f8ac74..be41b1c69de 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 7c85c5f73b9..b8ce402a939 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 f94f7b227bf..1d12f64a949 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 02a7aa570e5..667258ba676 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 5d3b038d41d..9c243002c42 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 0e572835a51..69666563e93 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 e4d15cf84ba..c14ff31bb94 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 33ffea4993b..c43be98ad5d 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 d9b921b38a1..68f2928afc5 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 d1f2be5525d..6e4cd9c6a61 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 6d4f4baeace..a61b41c5c56 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 495cf85b759..75f6b63b9ca 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 b849b095ce5..ae50e854e43 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 d40f9fecc6a..6d3212e4781 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 41645a6ebb8..4ae24d61ef8 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 be9c593b313..6bcc8dc1899 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 c48c7323301..db1ed78d5e3 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 512af5d61ab..adc9ff2fbb0 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 e67a87558f6..b4dbc340066 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 e163ad5ca61..829132a80e6 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 04965bb531d..af368ba1a3e 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 737a5d5c982..817cf429655 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 3ab9814b5b5..e1a4a6ed7b8 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 08fc15c5752..9ec2dacabc8 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 a1644b07db7..1b93b611df6 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 51a036eb029..a98da2c6e3d 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 453423bd287..0843455fe3b 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 3853b0aedfc..f20de459b12 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 b1b4a3c09ca..f40cfc5798f 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 62079d7a2f2..33d4758f5a9 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 e4c4e14e02a..7cbd942ae54 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 dbd7f888f75..2ffe06f0d75 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 3bb3360433e..9eff8d17eed 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 86dbe6c16fb..9ce713dae51 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 df56aadfe22..c016513d877 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 227b9c208cc..63f4ed28952 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 7618a0b9156..457150f8813 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 60b29a9207c..833c51eee97 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 92960972652..eda40f0298e 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 b31436f656a..a587b61cf0d 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 6958b5d78a5..df5877d9220 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 7e005eff303..385f7d6a69d 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 4b60107a182..c35a5936822 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 a04b53ac495..3398d318d85 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 92c7d18a065..470ad388fff 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 5c852cd7f26..575d0d12305 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 56628ce7b97..f5337b2dca5 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 597067fd81f..f898461154a 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 4eb5c06b26f..8f01c157214 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 8545d5b21eb..ca8340a9873 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 f2edfa816a0..51e9c5adb6e 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 834ab32864f..f9f2f94d587 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 483beda43ee..b72bcbecdac 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 ff231a01296..4be4e4919da 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 52d5761a038..32dcda6f1b9 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 38fee296bec..556756f41a7 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 974ee5b054b..6c9f7e215e6 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 b776b1a8c6a..3d1b57eda86 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 acccdb2f912..1af45f3031a 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 a2b964cbe60..77b376bf7d5 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 263304488b7..6804717037a 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 cfe8f24577d..8e06c1d670c 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 c9202fd7007..910ddfbc572 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 33fc08065ad..2265bc03b03 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 96691a290b2..b89c11147b6 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 27345d0dc6d..8a316381dbd 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 9c96d7e3f49..8b52add48e3 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 68be133b67b..06ebcbdc2fb 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 72d5e8a0382..988346a282c 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 581f7707c81..d86fd580949 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 d3868b8df9c..d247c3b04d6 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 cc27bf52118..ed58d6542b9 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 3c29cc1123c..17f101b865c 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 c3b617f8199..06e41c178c4 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 41542416468..31991480d36 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 93e74aaca71..0db7cb2cf43 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 14d7b5fcd95..2ed632ca07b 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 14c3ac58b1f..868415d93b2 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 fdb4c4dc3fc..4c8afb72886 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 113a3c46ea0..314de0cd42c 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 fccdc8098b6..14d862eca39 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 7e56fd6ed4b..698fd510411 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 2fd5e6e56fa..5356276aca1 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 f1fb95a8916..03af1a6417f 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 dc5b75d425d..2ec2af80624 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 54b06260e78..0186ff4f001 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 ba69a1385d5..765490305df 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 2e426fd77cf..ec7acf0d894 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 5d47e7fa4ec..f2edccd99b5 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 e86e907b550..d29472a308a 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 e36930f5745..d7eabc3408e 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 14f7b9d371b..91ce4ce4186 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 89f35457a44..214ea537d28 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 c174c94d0ad..b605343ac05 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 a639962efde..90435e2c0b8 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 218e61b0c49..71dbd139ea0 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 8664acdfc57..c1528d782cf 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 07bf6919b7a..4ed47c42206 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 d2892541373..a0b9351fb75 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 b528dfd4daa..f28fea926fc 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 0b68a45f8a5..1cdb5119fec 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 e6421678d41..237fee3283b 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 54aa815617e..ae75a9e5281 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 4be0d0eedb7..e71fbf79280 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 eb363102223..1f05f25cbdd 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 eba6b25e8eb..77a75cd133e 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 6e43cfa2d0f..79e455500b5 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 21b5c3958d4..aded6054f7d 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 a14721fcf3c..9de5ec91fe5 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 5a7bc2f2864..60c4c0dd7d4 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 c4128c0769d..f072e0caaa1 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 ff54a0527ac..ab31ef88683 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 aaba6d67117..1db39b68a5a 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 69ec1a15c37..f4c2de1e204 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 cf6de2a7beb..267a0007a6c 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 76d59da32cc..94cc67a5177 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 a073b71f282..6d7f7fcd093 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 80cc2028cb3..2d98fb43190 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 594441ae4fc..f6e84c01dd2 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 04d3a20d945..841565d4276 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 e1371b07567..7238ca2974b 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 f984272f4d5..ac351538ee7 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 7325ba37e9f..765a3443114 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 f044fcef5c7..0bbcbc7e9a8 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 3c2aa183279..0856639f4c2 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 04fc6a58afa..9c16379c9f1 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 f8c031f69e7..8f3cbc50e6d 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 1c9db80bbab..aaf72512ae9 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 b8b101944b3..afc7d3d0fd7 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 25ff1bf9536..7e1215488e1 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 3f421683bc9..ae4d17bdad4 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 f56da23bfe9..72eb99bd7dc 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 0bc6a4f49a4..9b33ea88ca7 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 b84d2e1f70b..e074e3e840d 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 a14be544921..1521b04375b 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 42621b76941..55b0452fb0b 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 e56d63e85bd..544842b4495 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 9ec7c88d8fa..f0f5de47cd5 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 0292ed65697..e24499c3aee 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 253c601e228..8d117f7c3ef 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 7c4dbdeaab1..ee7dca668a9 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 a8d65cc096d..4c9001f66a3 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 d7ba0a34939..c7de8530d82 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 d3d449c7e8c..497f6810c6a 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 d76bd0db04b..026b9a491f6 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 e9cfc07de1f..d29692b5728 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 8974b560e2a..934c046aeff 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 4cc522c7523..bc95813e681 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 d3a74fc661a..8c0359eaaa8 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 46c2ef22c50..d4b5c4d0805 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 ee35ade3552..0900a0ce131 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 0d19ffdc49f..5a9d8b409a9 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 03feba69ad3..87a07cd1e5e 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 916ba56182c..95e6e44121e 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 adefcc041fd..3375372ab45 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 47e0769165b..4c8eda2b1a1 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 b2c76b5b227..acf542d788f 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 9a56b2e6e0c..aa519f1a8c9 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 88dbeff09f5..9868c414698 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 40ed13ad886..dad419e10d0 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 e97b004df06..9b23f458186 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 a44854a3c7b..92c8eb4ca42 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 77fe17e4831..9c277f1350f 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 1ed81f77414..f191a0c3ad7 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 454da983642..98f99877329 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 212471002b4..f021a876b81 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 364403acaa7..435c0807d39 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 749f5cbf88b..4e20e6b0953 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 774c5fcc874..41d94b60922 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 f41b76a1a0b..5624e910b06 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 4d45845c646..a41eba3a777 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 d95026faa93..f18a1022f45 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 a1bac019e7d..fd591d5f887 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 e4d9f121242..d023d5f3194 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 dfc5f5992a6..499550945c6 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 a950882eddd..83218e8f00f 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 9f7592a9ee4..4faab709e16 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 5cfae286f9b..8fc6ba084b3 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 f47e191c118..a327a02e9a2 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 894cc9c40a6..b78bb868e40 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 48508aa4790..7f3a908b830 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 ff9bdf15276..9fd1c5c7388 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 2d99fd9bacf..e5812390bd2 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 1aa7d5298e5..0c0c6e87850 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 173e0596bea..0d54d8fc22e 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 d97ef766dd7..d9f64e0ef6b 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 ca60e14e923..3df28dda895 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 ccc8cf110ae..7a18e631cf2 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 49de90e200d..9b0f154eba0 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 ec2985b7053..861436ffbb2 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 cca11f2a270..3aa2674aec6 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 6bb73d6d264..03827bcbae2 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 b2d63315029..77018c6f43c 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 6984d16af4c..b48fdbd9df4 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 9ffc151b3b9..cab5b9efbc3 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 8fb286855fa..720f845fe4a 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 6eb386f8f45..354003def5d 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 03e2154792b..f203780dbc7 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 a8025198baf..fd33b5c1da4 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 f4fc51a7efc..cb0126e96e4 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 515ede7ea60..2d8654a9b48 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 e8b9c5cc1ce..d57a780e1f4 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 4377067e56b..09967c3b353 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 1be87c9fb14..5070d9f1de9 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 8ed1166fbba..163ef657ebf 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 a918ff5cd08..856649c6c5e 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 2ee65c890cb..60864c012c9 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 efa27b8c662..71172eaf62f 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 cbef6d217c5..d4f0637c0d1 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 e6835c8865c..56313fd58b4 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 aaf006f6c5f..30bf085be43 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 0a9f8640ad2..b1ac2d4334b 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 81a31693521..40cc7bafa5a 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 8266e80e7bb..d35dedb5d27 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 318214978ae..7f5d2b95dc0 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 fa3ef9e863e..c734d000077 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 d948862431f..06a8af947b7 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 0dc12c8f4c4..48bbb7bad4a 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 a0d165f5afa..9ca268a9a3f 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 95364c5ae08..80b3a00774b 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 f11039c60d0..35455bc474b 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 1904d7ce184..321e44c8603 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 14d2687c298..8bcc1fd80d8 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 a4e780349e6..61ac54f8ac0 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 e80957f1aa3..1feec353c24 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 b434c6b76cb..7434d98cf49 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 88271dc7139..59caf4b7f7b 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 d6e5dc1a2ab..89f7d7e0d7c 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 ca8c9a9ef93..c66abf72528 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 e29f87a5ff9..94f12d8cda4 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 0ca4112b288..abf4c6c1ad8 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 f0b6c0945c2..9475da91a77 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 c45442e1f80..d08968fbf55 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 197d55486a8..9f6b4947328 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 a0664a2ea00..7393a7d3bcb 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 b5c3b26f1bf..ecf5b7b5acf 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 8af97e46dee..3121a18734d 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 23a6cdee8a9..3ca2db40d65 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 5564a8275c8..c8b0264995b 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 a2bbfdc246a..7cc6fe888e9 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 c7839a59608..d224c234cb4 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 56b8a3209ae..17b3f2d8492 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 310284a0461..a97df93bed6 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 f0ffbe1c7f3..f7ed11569a4 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 1ad09eb65b0..1ac819cc119 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 40aa759caf6..1f89720803d 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 87dba586678..cbc7845f28d 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 9e720455692..c5b53368bc8 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 f3accdf4c77..ef4a2b0e32f 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 ff0b13757ba..e44feff10c8 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 e8aa9cf1949..f4241ba0819 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 dfb7d62bc71..b3d751ea7c3 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 09f9acf5740..d4670bd5695 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 9c05e4e2c08..4dca55d562d 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 16dc0d02960..37bd4cf9c07 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 22eabd3dd65..a9fdb0d0974 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 b43abb60481..b6e5c8b1c6f 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 0e5752ccd68..c2ebbf58a1e 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 f1a93b500d3..04faa320ef9 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 1f34f6a4bf1..00b1ee54a4a 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 1cb67a4235e..b93bbdaea12 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 c218af9e947..06fd76db09a 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 1971af91419..94f67cac909 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 81b67c6f050..9dbab4f338e 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 8e3a0854a1d..4a473b0f2ac 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 1eb9368be61..9db6381c9b8 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 7addf8028bf..17ca8c24c43 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 bd6d4c348ba..c4071b76590 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 e10a2331e25..7656e0bb99b 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 f0355929700..63f1d8d372c 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 832e408db34..260e1c8ea11 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 5f9af33a45d..189a56f18b6 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 05ca99ea6a6..ac216838bce 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 3f588298617..a2f57b5029e 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 2078ae90c62..ce5bc2d8fc2 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 119aca072f2..0aa94f9d06c 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 083f1d6e329..5ebe5258a44 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 6c31ddf8f34..191dd084766 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 3e5e416b1a3..b6a1682993b 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 9d9c732cd20..3d67bfe5445 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 78f39e077a1..535383ac605 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 3901e17f9c2..9936143a88e 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 66617c515a1..0ac91bbeb16 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 ab132621437..53c5f250851 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 2d383d685a1..59e7b138c48 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 efd2106fdd1..b3271c8033c 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 18b9d07a8fd..df0819c4513 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 70d319b0670..c6871f92137 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 9af2db46ce0..a265b032bdc 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 350c8becb35..4e787eb3d7e 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 b10956b3264..e86ef6aedcb 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 c0497a1cefb..5d1c31ba2dc 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 0667f8c6330..f8e6e469ff0 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 cad773fbee4..7b3dc07ae84 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 d481a4902ef..1732c255536 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 f23d01374c9..1149c15133f 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 2f31b472b56..9d18e3a66e8 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 6547704d885..683dc5519aa 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 482e3a3abbd..8f0da9144e2 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 b9b332f95b0..97069177eb3 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 108e0830061..8e0f7a46069 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 3732fe87dba..9a3448fb0ab 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 52a7f5504d6..4eb416a106b 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 3a7326ec34f..e7cc5cfca42 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 580e9e43139..cae5f0483cd 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 0c41be65cf7..3a63f9718db 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 432a0ee7489..d4b1bdf00fc 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 aa9591fba22..ae87ef4b00f 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 992dee7d403..7bec37a64e8 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 e525f24fced..02f3fb1cf4d 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 f305bf0bd48..98fa691d4d3 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 4513bdaf316..c33b2996685 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 20fd101c4b4..efe705e8b6c 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 6685779dafe..55e66b32ea8 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 3a8b3495655..3411cbec18f 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 2ea9b647b16..5b05a614553 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 534d93e5c4f..810f8f847d7 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 00df092f048..afdbd0107bf 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 5757f44b98a..989cc0099e1 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 bc964ab4911..687f1667679 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 29230db16e8..5ae47ff7a55 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 6292bf53bf6..ad6b59ced48 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 218d07ccbb8..b09851ba543 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 f3eb3da96b6..690600867d9 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 4c8b4d376ca..97b77d4643b 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 211f5f26c72..1e042cfb426 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 78d6e86358f..d9aa8643348 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 f105b3dd9d4..8dcf01a1d55 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 4e0b7b97705..c78ea95055a 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 81e84b36d1e..2fab77f3183 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 80dfbb97c5a..2a8d053bbb6 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 8c91393c3a4..50712289472 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 a97fdd2bd31..c11cc2b074c 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 f21c3d26bda..64c754c700b 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 00000000000..38991837113 --- /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 00000000000..025f2c07f9c --- /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 00000000000..b862cc0e644 --- /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 584df5754ed..5149811cb2f 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 5149811cb2f..c982a07f5a4 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 00000000000..658b180a41a --- /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 648bc5d6919..1b7e0f1ea0d 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 89f7d7e0d7c..7b853c36075 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 00000000000..3ddb56a9c72 --- /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 00000000000..79eba012e41 --- /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 00000000000..1b1766ee557 --- /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 00000000000..ffe8eb07fd5 --- /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 00000000000..4c2fe0817f0 --- /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 c982a07f5a4..935aaced042 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 083662df7ba..fbcea958429 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 935aaced042..f107a700fea 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 14b555adde9..f9b9acea2fb 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 0072ec4125f..32a4fec27f2 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 d0e70eb3dbb..8ebc71b0146 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 4d2ee57c9b2..42fd9b582e8 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 27fb55bb4da..a2cb84359f2 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 74d490bf941..47b9b376b1e 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 00000000000..57236a6f66e --- /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 9098bc13096..9b553ca4791 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 cb573f4ec3d..0cfcf05c4b5 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 fbe5febdbb1..3fa16cf4517 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 529e236d1ed..170954a86f4 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 f9b9acea2fb..52291cb6bf5 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 00000000000..dc1064a75b9 --- /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 f107a700fea..29b3aa2e4df 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 3136730a6b4..110b2f01a64 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 00000000000..3f7f01449fc --- /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 bcb1dd3fddc..60e9b734b13 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 9aabed67243..6f0b9f89e44 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 00000000000..64909129e60 --- /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 f107a700fea..71c08edc04f 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 00000000000..d36dda80e50 --- /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 32742105d17..a200ba545d8 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 00000000000..4a15aa405ec --- /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 00000000000..7724b42ac9d --- /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 00000000000..55ed3ddf336 --- /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 afca851974a..6d058f405a8 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 52291cb6bf5..4fdf25e41c3 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 32a4fec27f2..e7af827e9c7 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 775a3c96c46..a8e13a9f7db 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 fcd2535dad9..261f4faf1a8 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 8fc93f24351..90d312f422a 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 e4ee057d6ea..758d5af83f7 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 cb573f4ec3d..c677187e3d4 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 59caf4b7f7b..193ec7cbb02 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 31dd7de96ca..fafe3113835 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 00000000000..9df781a0786 --- /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 9df781a0786..ebf4560d326 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 00000000000..28e55dfba3b --- /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 00000000000..2899c6e06eb --- /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 7f5d2b95dc0..7ea87a3c0c4 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 193ec7cbb02..3cea620559a 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 fd9247bd778..6ae509af443 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 00000000000..8ed4099450b --- /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 0b9a53649a9..2922e4ef58d 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 a200ba545d8..00000000000 --- 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 1de3884664b..66806920e77 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 00000000000..83ed21c8489 --- /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 00000000000..c79c157a1a1 --- /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 00000000000..eca8ef07849 --- /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 00000000000..5ac352ffe10 --- /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 00000000000..da6eed191ad --- /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 00000000000..468e9c6dc17 --- /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 11fbc2f77b6..e8b89a813b5 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 00000000000..c3206e70ac4 --- /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 47a6c0b6a21..94cf2825e60 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 c65ee5482e3..81044a0dbb1 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 00000000000..354d0bc129d --- /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 4ab9d872887..6cf86c3069f 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 00000000000..6ff3a769918 --- /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 94f12d8cda4..7fe1f54a594 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 be8553ed47a..711196f6a2b 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 4fdf25e41c3..95e76a25763 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 31ba812ab98..faf6677c901 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 faf6677c901..002adc19a86 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 253fed76fa5..615202f2ba1 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 169c0e422ba..5e8544246a6 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 00000000000..b758a21da9f --- /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 b758a21da9f..7cee9220060 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 b11f5002bc7..622dab24dd2 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 00000000000..c70d4c09468 --- /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 00000000000..cba5d3a18a1 --- /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 176dd41fdae..c7d618a9918 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 01d54e47b9a..63f2750a5d4 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 5f2c1ba5c52..aafde3c1d9a 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 28a73cff5de..bd72cd7fbe7 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 9f220e64bfb..9c33baa9a9f 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 efcfab51bad..10fbb00bf9d 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 fdde303c7b2..e1d1618037f 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 e94f5a037a3..8ef8940e89f 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 0a2cce723dc..3b7c489e018 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 f6022adf6b5..8a1be33cc2b 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 fec1dcb43c9..448ddc7dc73 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 70c44f6fe90..68cb8d346d0 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 3b7428e2b9e..673f3e671a0 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 40c404933a2..dc9f6d2681e 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 f3919ea63bc..d1c976b45c8 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 30e6ae2f9ec..eca327e770e 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 cfc8fbe785d..02c057247f6 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 1627b91d807..4ebd3ae7042 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 97b3a0b0318..19d64907065 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 371f3c9395f..92522a6a770 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 261f4faf1a8..06ff5d527eb 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 e59171bc3b0..20f513323c1 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 189767e54bf..8285eaa7346 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 00000000000..837a9959041 --- /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 00000000000..24a00962359 --- /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 e42204b3bae..62c2a3a1981 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 8b62e7d55f0..a15b6f8ad07 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 bfc01932061..9902b83ff63 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 bd489d279ae..5e1aad82fa5 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 a3ef50c3fb4..83b2b45851c 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 96e05541684..ced8dd8f37e 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 c726461044b..b48f0edec25 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 4eb7bdc7808..e336ff24382 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 caab177d53f..7096e60fb15 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 67b1d292693..7db477ca7e1 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 936ae51f163..2534c099169 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 3aebbedbbf0..8707c7eca27 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 c792214ae49..d86b3707606 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 1b3996d1e69..04d23cd7d4e 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 3f89e80906d..bb9d3065f64 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 c6e8945900b..0cae909558e 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 ac4f404bfbb..4eac8556dbb 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 01e314e9ed7..60cb976f17c 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 7529c86d59d..2d6d4da5aef 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 26f41e3f35f..6b2142a8095 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 92507fe17bc..55b85801652 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 00324d5ff79..17f15cf7f32 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 772c77bd01a..7da15b1fdce 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 7e95af5c824..1f4bfb1c413 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 04d86a87f14..fa8eb2b706e 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 4b6622e43c2..8a564c4974c 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 f118b3f9853..b192ff8ef4d 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 abfbc8162df..de425fbfce1 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 595eadd6d2c..9f4c2da91e2 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 fbcea958429..99a209b5f0a 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 01958f15298..36a094d2725 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 9c774a434ab..88003680ec7 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 d2fdfee859a..f0b5a02e66e 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 10e67704188..b54010b386c 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 590c1011d56..fb5642c6f3b 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 8b33269632b..9e831161598 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 4f8da75d7d9..a6cd8362db3 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 5836514dcf6..83daa6e35a2 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 774c537ca26..eb1e769c07e 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 bcfe5e29ab9..e5ac2676ad0 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 e595beb10c2..4c2b92da0ea 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 a5659299706..03f12e46bc3 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 8e9acd57ddf..96bd0aaa35e 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 e547b84c381..12845d6e2b1 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 9e43228dc63..053e38ed93e 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 6ec02bfbe33..9f90b228247 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 bb30d90feb2..bc8c7f877a9 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 98108d8fceb..7e9083115b8 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 ead4467aa5d..55cb455d037 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 917cc7d6651..9b0693ec95e 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 7d95491b280..d3cf6495aa7 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 66806920e77..056231285e2 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 fafe3113835..0f721148b72 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 716da8f9b66..683dd976b7a 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 3f3fd53badb..9bdbce81dbf 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 5a78490b25d..755bbd759e7 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 1dd0d1a6814..4f35f848927 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 1c06b355f9c..25ca99f6a20 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 4e80605fc25..388d7ff7561 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 a76c1f722f0..e8c4216b00e 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 9b3d0b7555b..ec47b0db101 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 077d0887786..c9684cf10cf 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 74eacee9091..9b9619fe5b9 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 a9ff0d245f6..9d8f1365afb 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 be41b1c69de..8ee3936dee3 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 667258ba676..68b9e252150 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 9c243002c42..7330f90e585 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 69666563e93..916bc3d0438 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 c43be98ad5d..277ca793a8f 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 6e4cd9c6a61..e87115dd8e2 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 817cf429655..2c12f62d61a 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 1b93b611df6..bc2fbe00f27 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 33d4758f5a9..37df62ac166 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 63f4ed28952..c6822235ce6 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 457150f8813..dbb00fa252e 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 a587b61cf0d..c77f5b2bce3 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 3398d318d85..cd214a0114f 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 575d0d12305..820332791c8 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 f898461154a..3f783e8201c 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 8f01c157214..8cb20eadc9f 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 ca8340a9873..7da67171b5c 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 51e9c5adb6e..ab51128a5c4 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 f9f2f94d587..58c963f9cb5 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 556756f41a7..fbcf464d8b1 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 910ddfbc572..8f2d5a61770 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 0186ff4f001..59802165a94 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 ec7acf0d894..88217cb384e 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 d29472a308a..e5263a8630a 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 94cc67a5177..cbf0d6b1ce5 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 2d98fb43190..8acd6067c0b 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 ac351538ee7..96978e92b19 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 8f3cbc50e6d..7902c585509 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 e074e3e840d..d883a48b630 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 1521b04375b..86ad7958957 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 9b23f458186..67f980cf192 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 f021a876b81..92b74c029ba 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 8fc6ba084b3..dfe11287f15 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 7f3a908b830..102d567e810 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 0c0c6e87850..46388c3a185 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 0d54d8fc22e..a751ed546ff 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 77018c6f43c..c2f93fd3910 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 2d8654a9b48..148420ad1a0 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 b1ac2d4334b..404cdc7ceb2 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 8bcc1fd80d8..fee47aa1fa2 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 61ac54f8ac0..a3110ce8f8b 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 a9fdb0d0974..16b95e555bb 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 615202f2ba1..4877ff094e1 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 468e9c6dc17..7fb021cc9dd 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 e94f5a037a3..f8744655184 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 97b3a0b0318..dd653c37a49 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 371f3c9395f..4f4bc7edf46 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 fcd2535dad9..b4ac90b9701 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 8fc93f24351..4f614314b86 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 d0340a4df5f..b595059557a 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 cb573f4ec3d..2878b2e4da6 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 e9fde234889..696d2801645 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;