diff --git a/data/sql/updates/pending_db_world/rev_1529507878019895700.sql b/data/sql/updates/pending_db_world/rev_1529507878019895700.sql new file mode 100644 index 000000000..8ca35b94c --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1529507878019895700.sql @@ -0,0 +1,709 @@ +INSERT INTO version_db_world (`sql_rev`) VALUES ('1529507878019895700'); + +-- ---------------------------- +-- Records of command +-- ---------------------------- +INSERT INTO `command`(`name`, `security`, `help`) VALUES ('reload game_graveyard', 3, 'Syntax: .reload game_graveyard\nReload game_graveyard table.'); + +-- ---------------------------- +-- Table structure for game_graveyard +-- ---------------------------- +DROP TABLE IF EXISTS `game_graveyard`; +CREATE TABLE `game_graveyard` ( + `ID` int(10) NOT NULL DEFAULT 0, + `Map` int(10) NOT NULL DEFAULT 0, + `x` float NOT NULL DEFAULT 0, + `y` float NOT NULL DEFAULT 0, + `z` float NOT NULL DEFAULT 0, + `Comment` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of game_graveyard +-- ---------------------------- +INSERT INTO `game_graveyard` VALUES (1, 0, -9115, 423, 96, 'Штормград'); +INSERT INTO `game_graveyard` VALUES (2, 0, -9194.31, -2313.26, 88.8265, 'Красногорье'); +INSERT INTO `game_graveyard` VALUES (3, 0, -10774.3, -1189.67, 33.1494, 'Сумеречный лес, Темнолесье'); +INSERT INTO `game_graveyard` VALUES (4, 0, -10546.9, 1197.24, 31.7263, 'Западный Край, Сторожевой холм'); +INSERT INTO `game_graveyard` VALUES (5, 0, -5687, -515, 398, 'Дун Морог'); +INSERT INTO `game_graveyard` VALUES (6, 0, -5351.23, -2881.58, 340.942, 'Лок Модан, Телcамар'); +INSERT INTO `game_graveyard` VALUES (7, 0, -3289.12, -2435.99, 18.5966, 'Болотина, Перекресток'); +INSERT INTO `game_graveyard` VALUES (8, 0, -6289.91, -3493.11, 251.483, 'Бесплодные земли, Северо-восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (10, 1, -592.601, -2523.49, 91.788, 'Степи, Перекресток'); +INSERT INTO `game_graveyard` VALUES (31, 1, -448.311, 2512.65, 93.0773, 'Пустоши, Этель-Ретор'); +INSERT INTO `game_graveyard` VALUES (32, 1, 233.458, -4793.73, 10.1881, 'Дуротар, Колючий Холм'); +INSERT INTO `game_graveyard` VALUES (33, 1, 1357.1, -4412.01, 28.3841, 'Дуротар, Оргриммар'); +INSERT INTO `game_graveyard` VALUES (34, 1, -2944.56, -153.215, 65.786, 'Мулгор, Плато Красного Облака'); +INSERT INTO `game_graveyard` VALUES (35, 1, 6739.19, 209.993, 23.2846, 'Темные берега, Аубердин'); +INSERT INTO `game_graveyard` VALUES (36, 0, -11110.4, -1833.24, 71.8642, 'Перевал Мертвого Ветра, Надел Моргана'); +INSERT INTO `game_graveyard` VALUES (39, 1, -4656, -1765, -41, 'Тысяча Игл, Великий Подъемник'); +INSERT INTO `game_graveyard` VALUES (49, 37, -661.528, -485.309, 385.888, 'Белое Безмолвие, старт Орды'); +INSERT INTO `game_graveyard` VALUES (70, 1, -6432.26, -278.292, 3.79411, 'Силитус, Погост Отважных'); +INSERT INTO `game_graveyard` VALUES (89, 1, -2175.19, -342.027, -5.51232, 'Мулгор, Деревня Кровавого Копыта'); +INSERT INTO `game_graveyard` VALUES (90, 1, 10054.3, 2117.12, 1329.63, 'Тельдрассил, Дарнас'); +INSERT INTO `game_graveyard` VALUES (91, 1, 9701.25, 945.62, 1291.36, 'Тельдрассил, Доланаар'); +INSERT INTO `game_graveyard` VALUES (92, 1, 2633.41, -629.735, 107.581, 'Ясеневый лес, Астранаар'); +INSERT INTO `game_graveyard` VALUES (93, 1, 10384.8, 811.531, 1317.54, 'Тельдрассил, Альдрассил'); +INSERT INTO `game_graveyard` VALUES (94, 0, 1882.94, 1629.11, 94.4175, 'Тирисфальские леса, Могильник'); +INSERT INTO `game_graveyard` VALUES (96, 0, 1822.61, 214.674, 60.1402, 'Тирисфальские леса, Подгород'); +INSERT INTO `game_graveyard` VALUES (97, 0, 516.194, 1589.81, 127.545, 'Серебряный бор, Гробница'); +INSERT INTO `game_graveyard` VALUES (98, 0, -18.6777, -981.171, 55.8377, 'Предгорья Хилсбрада, Мельница Таррен'); +INSERT INTO `game_graveyard` VALUES (99, 0, -1307.66, -3192.15, 37.7853, 'Нагорье Арати, Восточная дорога'); +INSERT INTO `game_graveyard` VALUES (100, 0, -6164.23, 336.321, 399.793, 'Дун Морог, Старая Наковальня'); +INSERT INTO `game_graveyard` VALUES (101, 0, -5680.04, -518.92, 396.274, 'Дун Морог, Каранос'); +INSERT INTO `game_graveyard` VALUES (102, 0, -5049.45, -809.697, 495.127, 'Дун Морог, Стальгорн'); +INSERT INTO `game_graveyard` VALUES (103, 0, -6805, -2287.19, 280.752, 'Бесплодные земли, Каргат'); +INSERT INTO `game_graveyard` VALUES (104, 0, -9403.25, -2037.69, 58.3687, 'Красногорье, Приозерье'); +INSERT INTO `game_graveyard` VALUES (105, 0, -8935.33, -188.646, 80.4165, 'Элвиннский лес, Североземье'); +INSERT INTO `game_graveyard` VALUES (106, 0, -9339.46, 171.408, 61.5618, 'Элвиннский лес, Златоземье'); +INSERT INTO `game_graveyard` VALUES (107, 0, -9151.98, 410.944, 92.6966, 'Элвиннский лес, Штормград'); +INSERT INTO `game_graveyard` VALUES (108, 0, -10567.8, -3377.2, 22.2532, 'Болото Печали, Каменор'); +INSERT INTO `game_graveyard` VALUES (109, 0, -14285, 288.447, 32.332, 'Тернистая долина, Пиратская Бухта'); +INSERT INTO `game_graveyard` VALUES (129, 1, 8706, 965, 13.27, 'Тельдрассил, Деревня Рут\'теран'); +INSERT INTO `game_graveyard` VALUES (149, 0, -732.799, -592.502, 22.663, 'Предгорья Хилсбрада, Южнобережье'); +INSERT INTO `game_graveyard` VALUES (169, 30, -157.409, 31.2063, 77.0506, 'Альтеракская долина, Кладбище Снегопада'); +INSERT INTO `game_graveyard` VALUES (189, 1, -3525.71, -4315.46, 6.99561, 'Пылевые топи, Остров Терамор'); +INSERT INTO `game_graveyard` VALUES (209, 1, -7190.95, -3944.65, 9.22739, 'Танарис, Прибамбасск'); +INSERT INTO `game_graveyard` VALUES (229, 1, -2517.75, -1972.64, 91.7838, 'Степи, Лагерь Таурахо'); +INSERT INTO `game_graveyard` VALUES (249, 1, -1081.4, -3478.68, 63.6066, 'Степи, Кабестан'); +INSERT INTO `game_graveyard` VALUES (269, 37, -448.189, -1027.86, 430.724, 'Белое Безмолвие, старт Альянса'); +INSERT INTO `game_graveyard` VALUES (289, 0, 2348.67, 492.027, 33.3665, 'Тирисфальские леса, Брилл'); +INSERT INTO `game_graveyard` VALUES (309, 1, -4596.4, 3229.43, 8.99376, 'Фералас, Крепость Оперенной Луны'); +INSERT INTO `game_graveyard` VALUES (310, 1, -4439.97, 370.153, 51.3566, 'Фералас, Лагерь Мохаче'); +INSERT INTO `game_graveyard` VALUES (329, 1, -5530.28, -3459.28, -45.7444, 'Тысяча Игл, Мерцающая равнина'); +INSERT INTO `game_graveyard` VALUES (349, 0, 323.513, -2227.2, 137.617, 'Внутренние земли, Заоблачный пик'); +INSERT INTO `game_graveyard` VALUES (369, 1, 2681.06, -4009.75, 107.849, 'Азшара, Застава Талрендис'); +INSERT INTO `game_graveyard` VALUES (370, 0, -10846.6, -2949.49, 13.2272, 'Выжженные земли, Форт Молота Ужаса'); +INSERT INTO `game_graveyard` VALUES (389, 0, -11542.6, -228.637, 27.8427, 'Тернистая долина, Северная Тернистая долина'); +INSERT INTO `game_graveyard` VALUES (409, 1, 898.261, 434.53, 65.7279, 'Когтистые горы, Паучий тракт'); +INSERT INTO `game_graveyard` VALUES (429, 0, 2604.52, -543.39, 88.9996, 'Тирисфальские леса, Могила Фаола'); +INSERT INTO `game_graveyard` VALUES (449, 1, 3806.54, -1600.29, 218.831, 'Оскверненный лес, Морлос\'Аран'); +INSERT INTO `game_graveyard` VALUES (450, 1, -7205.56, -2436.67, -218.161, 'Кратер Ун\'Горо, Топи'); +INSERT INTO `game_graveyard` VALUES (469, 1, 4291.28, 96.9557, 43.0753, 'Темные берега, Сумеречная долина'); +INSERT INTO `game_graveyard` VALUES (489, 0, -3347.72, -856.713, 1.05955, 'Болотина, Бухта Барадин'); +INSERT INTO `game_graveyard` VALUES (509, 0, 908.323, -1520.29, 55.0372, 'Западные Чумные земли, Лагерь Промозглого Ветра'); +INSERT INTO `game_graveyard` VALUES (510, 0, 2055.74, -5020.95, 74.8656, 'Восточные Чумные земли, Моровой овраг'); +INSERT INTO `game_graveyard` VALUES (511, 1, 6875.76, -4661.54, 701.094, 'Зимние Ключи, Круговзор'); +INSERT INTO `game_graveyard` VALUES (512, 1, 2421.72, -2953.62, 123.473, 'Ясеневый лес, Крепость Каргатия'); +INSERT INTO `game_graveyard` VALUES (529, 451, 16310.3, 16268.9, 69.4444, 'Остров Программиста'); +INSERT INTO `game_graveyard` VALUES (549, 451, 16223.8, 16278.6, 20.8913, 'Остров Программиста'); +INSERT INTO `game_graveyard` VALUES (569, 0, 1750.34, -669.79, 44.5698, 'Западные Чумные земли, Бастион'); +INSERT INTO `game_graveyard` VALUES (589, 1, 16310.3, 16268.9, 69.4444, 'Остров ГМ'); +INSERT INTO `game_graveyard` VALUES (609, 1, 2942.76, -6037.13, 5.16996, 'Азшара, Южный пляж'); +INSERT INTO `game_graveyard` VALUES (610, 30, -1437.67, -610.089, 51.1619, 'Альтеракская долина, укрытие Орды'); +INSERT INTO `game_graveyard` VALUES (611, 30, 873.002, -491.284, 96.5419, 'Альтеракская долина, укрытие Альянса'); +INSERT INTO `game_graveyard` VALUES (629, 0, 908.323, -1520.29, 55.0372, 'ТЕСТ только для ИМ - не править'); +INSERT INTO `game_graveyard` VALUES (630, 1, 4788.78, -6845, 89.7901, 'Азшара, Лагерь Легаш'); +INSERT INTO `game_graveyard` VALUES (631, 1, -3127.69, -3046.94, 33.8313, 'Пылевые Топи, Деревня Гиблотопь'); +INSERT INTO `game_graveyard` VALUES (633, 1, 7426, -2809, 464, 'Лунная поляна'); +INSERT INTO `game_graveyard` VALUES (634, 0, 1392, -3701, 77, 'Восточные Чумные земли, Дарроушир'); +INSERT INTO `game_graveyard` VALUES (635, 1, 5935.47, -1217.75, 383.202, 'Оскверненный лес, Железнолесье'); +INSERT INTO `game_graveyard` VALUES (636, 0, -6450.61, -1113.51, 308.022, 'Тлеющее ущелье, Лагерь Братства Тория'); +INSERT INTO `game_graveyard` VALUES (649, 1, -778, -4985, 19, 'Дуротар, Деревня Сен\'джин'); +INSERT INTO `game_graveyard` VALUES (669, 451, 16614.8, 16663, 21.3422, 'Остров программиста, кладбище кулачных щитов 2'); +INSERT INTO `game_graveyard` VALUES (670, 451, 16620.7, 16622.7, 21.3382, 'Остров программиста, кладбище кулачных щитов 1'); +INSERT INTO `game_graveyard` VALUES (671, 451, 16619.5, 16577.5, 43.9018, 'Остров программиста, кладбище кулачных щитов 3'); +INSERT INTO `game_graveyard` VALUES (689, 30, 676, -374, 30, 'Альтеракская долина, Кладбище Грозовой Вершины (Выс)'); +INSERT INTO `game_graveyard` VALUES (690, 30, -1090.48, -253.309, 57.6724, 'Альтеракская долина, Кладбище Северного Волка'); +INSERT INTO `game_graveyard` VALUES (709, 1, -634.635, -4296.03, 40.5254, 'Дуротар, Долина Испытаний'); +INSERT INTO `game_graveyard` VALUES (729, 30, 73.4178, -496.433, 48.7319, 'Альтеракская долина, PvP кладбище прохода Альянса (А-проход)'); +INSERT INTO `game_graveyard` VALUES (749, 30, -531.218, -405.231, 49.5514, 'Альтеракская долина, PvP кладбище прохода Орды (О-проход)'); +INSERT INTO `game_graveyard` VALUES (750, 30, -1496.07, -333.338, 101.135, 'Альтеракская долина, Приют Северного Волка (О-база)'); +INSERT INTO `game_graveyard` VALUES (751, 30, 643, 44, 69.7402, 'Альтеракская долина, Лазарет Грозовой Вершины (А-база)'); +INSERT INTO `game_graveyard` VALUES (769, 489, 1523.81, 1481.76, 352.008, 'Ущелье Песни Войны - место входа Альянса'); +INSERT INTO `game_graveyard` VALUES (770, 489, 933.331, 1433.72, 345.536, 'Ущелье Песни Войны, место входа Орды'); +INSERT INTO `game_graveyard` VALUES (771, 489, 1415.33, 1554.79, 343.156, 'Ущелье Песни Войны, зона Альянса'); +INSERT INTO `game_graveyard` VALUES (772, 489, 1029.14, 1387.49, 340.836, 'Ущелье Песни Войны, зона Орды'); +INSERT INTO `game_graveyard` VALUES (789, 0, -291, -4374, 107, 'Внутренние земли, Отвесные скалы'); +INSERT INTO `game_graveyard` VALUES (809, 1, 1035.27, -2104.28, 122.945, 'Ущелье Песни Войны, место выхода Орды'); +INSERT INTO `game_graveyard` VALUES (810, 1, 1459.17, -1858.67, 124.762, 'Ущелье Песни Войны, место выхода Альянса'); +INSERT INTO `game_graveyard` VALUES (829, 0, 101.144, -184.934, 127.344, 'Альтеракская долина, место выхода Альянса'); +INSERT INTO `game_graveyard` VALUES (830, 0, 536.495, -1085.72, 106.27, 'Альтеракская долина, место выхода Орды'); +INSERT INTO `game_graveyard` VALUES (849, 1, -4590.41, 1632.08, 93.9738, 'Фералас, Забытый Город'); +INSERT INTO `game_graveyard` VALUES (850, 1, 1177.78, -4464.24, 21.3539, 'Дуротар, Деревня Сен\'джин'); +INSERT INTO `game_graveyard` VALUES (851, 1, -981.917, -74.6465, 20.1265, 'Мулгор, Громовой Утес'); +INSERT INTO `game_graveyard` VALUES (852, 0, -5165.52, -874.664, 507.177, 'Дун Морог, Врата Стальгорна'); +INSERT INTO `game_graveyard` VALUES (853, 0, 1780.11, 221.761, 59.6169, 'Тирисфальские леса, Руины Лордерона'); +INSERT INTO `game_graveyard` VALUES (854, 0, -9552.46, -1374.05, 51.2332, 'Элвиннский лес, Лесопилка Восточной долины'); +INSERT INTO `game_graveyard` VALUES (869, 0, 1236.89, -2411.99, 60.68, 'Западные Чумные земли, Каэр Дарроу'); +INSERT INTO `game_graveyard` VALUES (889, 529, 684.014, 681.22, -12.9159, 'Arathi Basin - Horde Entrance'); +INSERT INTO `game_graveyard` VALUES (890, 529, 1313.9, 1310.74, -9.01043, 'Arathi Basin - Alliance Entrance'); +INSERT INTO `game_graveyard` VALUES (891, 0, -831.881, -3518.52, 72.4831, 'Arathi Basin - Horde Exit'); +INSERT INTO `game_graveyard` VALUES (892, 0, -1215.59, -2531.75, 21.6734, 'Arathi Basin - Alliance Exit'); +INSERT INTO `game_graveyard` VALUES (893, 529, 834.726, 784.979, -57.0819, 'Arathi Basin - Graveyard, H-Mid (Farm)'); +INSERT INTO `game_graveyard` VALUES (894, 529, 1016.59, 955.185, -42.8287, 'Arathi Basin - Graveyard, Mid (Blacksmith)'); +INSERT INTO `game_graveyard` VALUES (895, 529, 1201.87, 1163.13, -56.286, 'Arathi Basin - Graveyard, A-Mid (Stables)'); +INSERT INTO `game_graveyard` VALUES (896, 529, 1211.52, 781.557, -82.7095, 'Arathi Basin - Graveyard, ALT-N (Gold Mine)'); +INSERT INTO `game_graveyard` VALUES (897, 529, 772.756, 1213.11, 15.7974, 'Arathi Basin - Graveyard, ALT-S (Lumber Mill)'); +INSERT INTO `game_graveyard` VALUES (898, 529, 1354.7, 1270.27, -11.1291, 'Arathi Basin - Graveyard, A-Base (Trollbane Hall)'); +INSERT INTO `game_graveyard` VALUES (899, 529, 713.71, 638.364, -10.5999, 'Arathi Basin - Graveyard, H-Base (Defiler\'s Den)'); +INSERT INTO `game_graveyard` VALUES (909, 0, 2647.55, -4014.39, 105.938, 'Восточные Чумные земли, Озеро Чернолесья'); +INSERT INTO `game_graveyard` VALUES (910, 1, -6831.32, 891.437, 33.8663, 'Силитус, Крепость Кенария'); +INSERT INTO `game_graveyard` VALUES (911, 0, -10606.8, 294.048, 31.8007, 'Сумеречный лес, Вороний Холм'); +INSERT INTO `game_graveyard` VALUES (912, 530, 10458.5, -6364.61, 39.7907, 'Леса Вечной Песни, Остров Солнечного Скитальца'); +INSERT INTO `game_graveyard` VALUES (913, 1, -7991.57, 1557.8, 4.97419, 'Силитус, Стена Скарабея (только Ан\'Кираж)'); +INSERT INTO `game_graveyard` VALUES (914, 530, 8936.56, -7439.9, 82.0856, 'Леса Вечной Песни, Кладбище Приюта Странников'); +INSERT INTO `game_graveyard` VALUES (915, 530, 7694.18, -6730.11, 48.2907, 'Призрачные земли, Транквиллион'); +INSERT INTO `game_graveyard` VALUES (916, 530, 7015.23, -7300, 45.4247, 'Призрачные земли, Святилище'); +INSERT INTO `game_graveyard` VALUES (917, 530, 6730.49, -7936.89, 170.099, 'Призрачные земли, Перевал Амани'); +INSERT INTO `game_graveyard` VALUES (918, 530, -4123.14, -13660.1, 74.6, 'Остров Лазурной Дымки, Долина Аммен'); +INSERT INTO `game_graveyard` VALUES (919, 530, 158.06, 2562.73, 75.7812, 'Полуостров Адского Пламени, Траллмар'); +INSERT INTO `game_graveyard` VALUES (920, 530, -803.012, 2702.59, 106.758, 'Полуостров Адского Пламени, Оплот Чести'); +INSERT INTO `game_graveyard` VALUES (921, 530, 9407, -6847.67, 16, 'Леса Вечной Песни, Луносвет'); +INSERT INTO `game_graveyard` VALUES (922, 530, 8709.46, -6671.76, 70.336, 'Леса Вечной Песни, кладбище Деревни Легкий Ветерок'); +INSERT INTO `game_graveyard` VALUES (923, 530, -4312.78, -12441, 17.1903, 'Остров Лазурной Дымки, Кладбище Лазурной заставы'); +INSERT INTO `game_graveyard` VALUES (924, 530, -3324.31, -12089.9, 28.2748, 'Остров Лазурной Дымки, Кладбище племени Тихвой'); +INSERT INTO `game_graveyard` VALUES (925, 530, -2020.59, -11983.5, 33.248, 'Остров Кровавой Дымки, Кладбище Кровавой заставы'); +INSERT INTO `game_graveyard` VALUES (926, 530, -1754.21, -11067.3, 76.3423, 'Остров Кровавой Дымки, Кладбище Дебрей'); +INSERT INTO `game_graveyard` VALUES (927, 0, 1978.47, -3655.89, 119.795, 'Восточные Чумные земли, Кладбище башни КГ'); +INSERT INTO `game_graveyard` VALUES (928, 530, 335.886, 7625.12, 22.7486, 'Зангартопь, Кладбище Забра\'джин'); +INSERT INTO `game_graveyard` VALUES (929, 559, 4027.6, 2972.78, 12.0723, 'Арена Награнда, старт команды 1'); +INSERT INTO `game_graveyard` VALUES (930, 530, -2495.87, 6802.26, 21.3714, 'Награнд, Юго-Восточное Кладбище'); +INSERT INTO `game_graveyard` VALUES (931, 451, 16423, 16237, 71, 'Остров Программиста'); +INSERT INTO `game_graveyard` VALUES (932, 451, 16223.8, 16278.6, 20.8913, 'Остров Программиста'); +INSERT INTO `game_graveyard` VALUES (933, 530, 181.475, 4361.58, 116.885, 'Полуостров Адского Пламени, Храм'); +INSERT INTO `game_graveyard` VALUES (934, 530, -695.875, 4118.21, 64.4865, 'Полуостров Адского Пламени, Соколиный Дозор'); +INSERT INTO `game_graveyard` VALUES (935, 530, 742.628, 2887.71, 8.90098, 'Полуостров Адского Пламени, местонахождение тела 004'); +INSERT INTO `game_graveyard` VALUES (936, 559, 4085.45, 2866.83, 12.4005, 'Арена Награнда, старт команды 2'); +INSERT INTO `game_graveyard` VALUES (937, 559, 4055.85, 2921.78, 50.3394, 'Использовать повторно'); +INSERT INTO `game_graveyard` VALUES (938, 0, 101.144, -184.934, 127.344, 'Альтеракская долина, место выхода Альянса'); +INSERT INTO `game_graveyard` VALUES (939, 562, 6292.66, 288.579, 4.95929, 'Арена Острогорья, команда 1'); +INSERT INTO `game_graveyard` VALUES (940, 562, 6184.98, 236.011, 4.97687, 'Арена Острогорья, команда 2'); +INSERT INTO `game_graveyard` VALUES (941, 530, 540.31, 3932.88, 188.932, 'Полуостров Адского Пламени, тестовое местонахождение тела'); +INSERT INTO `game_graveyard` VALUES (942, 530, 540.98, 3144.23, 8.45675, 'Полуостров Адского Пламени, местонахождение тела 001'); +INSERT INTO `game_graveyard` VALUES (943, 530, 582.864, 2954.06, 4.56392, 'Полуостров Адского Пламени, местонахождение тела 002'); +INSERT INTO `game_graveyard` VALUES (944, 530, 742.628, 2887.71, 8.90098, 'Полуостров Адского Пламени, местонахождение тела 003'); +INSERT INTO `game_graveyard` VALUES (945, 530, 1148.44, 1798.14, 116.296, 'Полуостров Адского Пламени, местонахождение тела 005'); +INSERT INTO `game_graveyard` VALUES (946, 530, 851.694, 1688.06, 89.7566, 'Полуостров Адского Пламени, местонахождение тела 006'); +INSERT INTO `game_graveyard` VALUES (947, 530, 608.097, 1778.63, 104.436, 'Полуостров Адского Пламени, местонахождение тела 007'); +INSERT INTO `game_graveyard` VALUES (948, 530, 354.618, 1952.75, 23.7654, 'Полуостров Адского Пламени, местонахождение тела 008'); +INSERT INTO `game_graveyard` VALUES (949, 530, 107.712, 1841.23, 21.8838, 'Полуостров Адского Пламени, местонахождение тела 009'); +INSERT INTO `game_graveyard` VALUES (950, 530, 274.599, 1674.63, -5.7761, 'Полуостров Адского Пламени, местонахождение тела 010'); +INSERT INTO `game_graveyard` VALUES (951, 530, 60.881, 1542.69, 17.0833, 'Полуостров Адского Пламени, местонахождение тела 011'); +INSERT INTO `game_graveyard` VALUES (952, 530, -92.8317, 1350.91, -12.2025, 'Полуостров Адского Пламени, местонахождение тела 012'); +INSERT INTO `game_graveyard` VALUES (953, 530, 134.528, 1230.39, 2.39736, 'Полуостров Адского Пламени, местонахождение тела 013'); +INSERT INTO `game_graveyard` VALUES (954, 530, 298.666, 1225.23, -1.17948, 'Полуостров Адского Пламени, местонахождение тела 014'); +INSERT INTO `game_graveyard` VALUES (955, 530, 386.682, 1044.78, 26.8734, 'Полуостров Адского Пламени, местонахождение тела 015'); +INSERT INTO `game_graveyard` VALUES (956, 530, 337.84, 853.218, 13.8851, 'Полуостров Адского Пламени, местонахождение тела 016'); +INSERT INTO `game_graveyard` VALUES (957, 530, 60.3844, 725.155, 14.5849, 'Полуостров Адского Пламени, местонахождение тела 017'); +INSERT INTO `game_graveyard` VALUES (958, 530, -213.512, 730.684, -0.830688, 'Полуостров Адского Пламени, местонахождение тела 018'); +INSERT INTO `game_graveyard` VALUES (959, 530, -570.327, 675.785, -0.703824, 'Полуостров Адского Пламени, местонахождение тела 019'); +INSERT INTO `game_graveyard` VALUES (960, 530, -958.584, 803.907, 2.53478, 'Полуостров Адского Пламени, местонахождение тела 020'); +INSERT INTO `game_graveyard` VALUES (961, 530, -827.569, 1194.34, 16.2846, 'Полуостров Адского Пламени, местонахождение тела 021'); +INSERT INTO `game_graveyard` VALUES (962, 530, -465.075, 1272.1, 12.3895, 'Полуостров Адского Пламени, местонахождение тела 022'); +INSERT INTO `game_graveyard` VALUES (963, 530, -668.975, 1516.19, 17.9959, 'Полуостров Адского Пламени, местонахождение тела 023'); +INSERT INTO `game_graveyard` VALUES (964, 530, -1278.37, 1381.71, 9.10488, 'Полуостров Адского Пламени, местонахождение тела 024'); +INSERT INTO `game_graveyard` VALUES (965, 530, -1306.28, 2478.4, 56.8094, 'Полуостров Адского Пламени, местонахождение тела 025'); +INSERT INTO `game_graveyard` VALUES (966, 530, -1497.4, 2657.17, -53.1746, 'Полуостров Адского Пламени, местонахождение тела 026'); +INSERT INTO `game_graveyard` VALUES (967, 530, -1445.7, 3050.23, -16.8279, 'Полуостров Адского Пламени, местонахождение тела 027'); +INSERT INTO `game_graveyard` VALUES (968, 530, -1510.36, 3281.81, -16.8644, 'Полуостров Адского Пламени, местонахождение тела 028'); +INSERT INTO `game_graveyard` VALUES (969, 530, 248.339, 7084.93, 36.4931, 'Зангартопь, PvP - кладбище'); +INSERT INTO `game_graveyard` VALUES (970, 530, 211.315, 6200.03, 22.2988, 'Зангартопь, Кладбище Телредора'); +INSERT INTO `game_graveyard` VALUES (971, 562, 6238.93, 262.963, 0.889519, 'Острогорье, PvP, Кладбище Арены'); +INSERT INTO `game_graveyard` VALUES (972, 530, 1286.73, 7883.12, 10.2222, 'Зангартопь, местонахождение тела 006'); +INSERT INTO `game_graveyard` VALUES (973, 530, -212.452, 5579.67, 22.178, 'Зангартопь, Кенарийское кладбище'); +INSERT INTO `game_graveyard` VALUES (974, 530, 1011.16, 5039.57, -26.825, 'Зангартопь, местонахождение тела 001'); +INSERT INTO `game_graveyard` VALUES (975, 530, 781.713, 4987.82, -12.3656, 'Зангартопь, местонахождение тела 002'); +INSERT INTO `game_graveyard` VALUES (976, 530, 1001.9, 5714.57, -9.30326, 'Зангартопь, местонахождение тела 003'); +INSERT INTO `game_graveyard` VALUES (977, 530, 1394.98, 7756.5, 12.2897, 'Зангартопь, местонахождение тела 004'); +INSERT INTO `game_graveyard` VALUES (978, 530, 1412.41, 8430.12, -4.67992, 'Зангартопь, местонахождение тела 008'); +INSERT INTO `game_graveyard` VALUES (979, 530, 1398.58, 7763.03, 8.54554, 'Зангартопь, местонахождение тела 005'); +INSERT INTO `game_graveyard` VALUES (980, 530, 1317.5, 8135.39, -2.85692, 'Зангартопь, местонахождение тела 007'); +INSERT INTO `game_graveyard` VALUES (981, 530, 1706.28, 8407.81, -24.7731, 'Зангартопь, местонахождение тела 009'); +INSERT INTO `game_graveyard` VALUES (982, 530, 1348.12, 8677.57, 6.86939, 'Зангартопь, местонахождение тела 011'); +INSERT INTO `game_graveyard` VALUES (983, 530, 1838.93, 8496.51, -19.0251, 'Зангартопь, местонахождение тела 010'); +INSERT INTO `game_graveyard` VALUES (984, 530, 1347.02, 8679.23, 6.67159, 'Зангартопь, местонахождение тела 012'); +INSERT INTO `game_graveyard` VALUES (985, 530, 1104.4, 8781.98, -10.8889, 'Зангартопь, местонахождение тела 013'); +INSERT INTO `game_graveyard` VALUES (986, 530, 747.447, 8702.9, 6.10944, 'Зангартопь, местонахождение тела 014'); +INSERT INTO `game_graveyard` VALUES (987, 530, 381.31, 9113.74, -4.27206, 'Зангартопь, местонахождение тела 016'); +INSERT INTO `game_graveyard` VALUES (988, 530, 702.758, 8927.53, -2.82061, 'Зангартопь, местонахождение тела 015'); +INSERT INTO `game_graveyard` VALUES (989, 530, 223.55, 9132.74, -11.746, 'Зангартопь, местонахождение тела 017'); +INSERT INTO `game_graveyard` VALUES (990, 530, 32.157, 9120.4, -17.2552, 'Зангартопь, местонахождение тела 018'); +INSERT INTO `game_graveyard` VALUES (991, 530, -160.425, 9053.54, 5.14203, 'Зангартопь, местонахождение тела 019'); +INSERT INTO `game_graveyard` VALUES (992, 530, -1066.97, 8066.54, -39.2593, 'Награнд, Расщелина Северного Ветра'); +INSERT INTO `game_graveyard` VALUES (993, 530, -1654.37, 7938.99, -46.235, 'Награнд, Кладбище Халаа'); +INSERT INTO `game_graveyard` VALUES (994, 530, -1793.42, 4931.61, -22.2095, 'Лес Тероккар, Кладбище Шаттрата'); +INSERT INTO `game_graveyard` VALUES (995, 530, -2540.15, 3866.65, 10.0769, 'Лес Тероккар, Кладбище Дебрей'); +INSERT INTO `game_graveyard` VALUES (996, 451, 1463.22, 16470.1, 66.4858, 'Тест - программист'); +INSERT INTO `game_graveyard` VALUES (997, 451, 66.2969, 60.125, 6.44392, 'Тест - программист 001'); +INSERT INTO `game_graveyard` VALUES (998, 559, 4055.5, 2919.66, 13.6112, 'Награнд, PvP, Кладбище Арены'); +INSERT INTO `game_graveyard` VALUES (999, 530, -697.573, 8881.73, 185.45, 'Награнд, местонахождение тела 001'); +INSERT INTO `game_graveyard` VALUES (1000, 530, -999.506, 9045.62, 91.5906, 'Награнд, местонахождение тела 002'); +INSERT INTO `game_graveyard` VALUES (1001, 530, -1933.72, 9343.67, 74.7306, 'Награнд, местонахождение тела 003'); +INSERT INTO `game_graveyard` VALUES (1002, 530, -2153.3, 9323.71, 52.4346, 'Награнд, местонахождение тела 004'); +INSERT INTO `game_graveyard` VALUES (1003, 530, -2619.46, 8953.7, -11.5455, 'Награнд, местонахождение тела 005'); +INSERT INTO `game_graveyard` VALUES (1004, 530, -2799.85, 8785.75, -42.4943, 'Награнд, местонахождение тела 006'); +INSERT INTO `game_graveyard` VALUES (1005, 530, -2984.12, 8700.11, -53.1578, 'Награнд, местонахождение тела 007'); +INSERT INTO `game_graveyard` VALUES (1006, 530, -2989.35, 8445.13, -36.2434, 'Награнд, местонахождение тела 008'); +INSERT INTO `game_graveyard` VALUES (1007, 530, -3122.56, 8079.49, -49.1307, 'Награнд, местонахождение тела 009'); +INSERT INTO `game_graveyard` VALUES (1008, 530, -3155.75, 7316.31, -25.8604, 'Награнд, местонахождение тела 010'); +INSERT INTO `game_graveyard` VALUES (1009, 530, -3244.7, 7079.02, -49.572, 'Награнд, местонахождение тела 011'); +INSERT INTO `game_graveyard` VALUES (1010, 530, -2987.35, 7045.47, -54.3837, 'Награнд, местонахождение тела 012'); +INSERT INTO `game_graveyard` VALUES (1011, 530, -2962.33, 6796.88, -51.2624, 'Награнд, местонахождение тела 013'); +INSERT INTO `game_graveyard` VALUES (1012, 530, -3045.37, 6508.57, 99.6549, 'Награнд, местонахождение тела 014'); +INSERT INTO `game_graveyard` VALUES (1013, 530, -3379.58, 6206.48, -3.66373, 'Лес Тероккар, местонахождение тела 001'); +INSERT INTO `game_graveyard` VALUES (1014, 530, -3621.98, 6225.18, -18.8211, 'Лес Тероккар, местонахождение тела 002'); +INSERT INTO `game_graveyard` VALUES (1015, 530, -3898.57, 6147.65, -37.0799, 'Лес Тероккар, местонахождение тела 003'); +INSERT INTO `game_graveyard` VALUES (1016, 530, -3844.34, 5931.41, -25.0505, 'Лес Тероккар, местонахождение тела 004'); +INSERT INTO `game_graveyard` VALUES (1017, 530, -3801.34, 5618.75, -26.9166, 'Лес Тероккар, местонахождение тела 005'); +INSERT INTO `game_graveyard` VALUES (1018, 530, -3910.99, 5404.07, -35.67, 'Лес Тероккар, местонахождение тела 006'); +INSERT INTO `game_graveyard` VALUES (1019, 530, -3886.29, 5149.57, -59.6891, 'Лес Тероккар, местонахождение тела 007'); +INSERT INTO `game_graveyard` VALUES (1020, 530, -3990.14, 4869.48, -107.634, 'Лес Тероккар, местонахождение тела 008'); +INSERT INTO `game_graveyard` VALUES (1021, 530, -3904.3, 4591.4, -45.9821, 'Лес Тероккар, местонахождение тела 009'); +INSERT INTO `game_graveyard` VALUES (1022, 530, -4024.3, 4421.72, -50.0018, 'Лес Тероккар, местонахождение тела 010'); +INSERT INTO `game_graveyard` VALUES (1023, 530, -3965.06, 4128.62, 0.276609, 'Лес Тероккар, местонахождение тела 011'); +INSERT INTO `game_graveyard` VALUES (1024, 530, -2415.76, 1811.62, -1.16446, 'Призрачная Луна, местонахождение тела 001'); +INSERT INTO `game_graveyard` VALUES (1025, 530, -2319.13, 1749.94, -13.3446, 'Призрачная Луна, местонахождение тела 002'); +INSERT INTO `game_graveyard` VALUES (1026, 530, -2447.42, 1612.81, -27.2319, 'Призрачная Луна, местонахождение тела 003'); +INSERT INTO `game_graveyard` VALUES (1027, 530, -2650.24, 1666.66, 10.0941, 'Призрачная Луна, местонахождение тела 004'); +INSERT INTO `game_graveyard` VALUES (1028, 530, -4151.09, 3425.82, 293.05, 'Лес Тероккар, местонахождение тела 016'); +INSERT INTO `game_graveyard` VALUES (1029, 530, -2648.27, 3020.65, -13.2128, 'Лес Тероккар, местонахождение тела 017'); +INSERT INTO `game_graveyard` VALUES (1030, 530, -2375.42, 2848.08, -69.8786, 'Лес Тероккар, местонахождение тела 018'); +INSERT INTO `game_graveyard` VALUES (1031, 530, -2205.61, 2968.3, -69.0715, 'Лес Тероккар, местонахождение тела 019'); +INSERT INTO `game_graveyard` VALUES (1032, 530, -2098.93, 3116.51, -51.3105, 'Лес Тероккар, местонахождение тела 020'); +INSERT INTO `game_graveyard` VALUES (1033, 530, -2047.74, 3278.56, -61.8309, 'Лес Тероккар, местонахождение тела 021'); +INSERT INTO `game_graveyard` VALUES (1034, 530, -2059, 3560.39, -74.5024, 'Лес Тероккар, местонахождение тела 022'); +INSERT INTO `game_graveyard` VALUES (1035, 530, -1876.5, 3700.5, -19.7418, 'Лес Тероккар, местонахождение тела 023'); +INSERT INTO `game_graveyard` VALUES (1036, 530, 0, 0, 0, 'Использовать повторно'); +INSERT INTO `game_graveyard` VALUES (1037, 530, -1289.79, 9166.72, 218.081, 'Награнд, Плато Портала'); +INSERT INTO `game_graveyard` VALUES (1038, 530, -856.214, 6600.06, 173.753, 'Награнд, Плато Стихий'); +INSERT INTO `game_graveyard` VALUES (1039, 530, -2033.53, 8479.53, -0.312287, 'Награнд, Юго-Западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1040, 530, 700.091, 2207.99, 288.518, 'Полуостров Адского Пламени, Трон Кил\'джедена'); +INSERT INTO `game_graveyard` VALUES (1041, 530, -249.765, 1023.32, 54.3254, 'Полуостров Адского Пламени, Темный портал'); +INSERT INTO `game_graveyard` VALUES (1042, 530, -3562.41, 4666.44, -21.9864, 'Лес Тероккар, Кладбище Костяных пустошей'); +INSERT INTO `game_graveyard` VALUES (1043, 530, 874.911, 7284.72, 23.0167, 'Зангартопь, Кладбище Прибежища'); +INSERT INTO `game_graveyard` VALUES (1044, 530, 337.125, 8616.87, 24.1563, 'Зангартопь, Кладбище Спореггара'); +INSERT INTO `game_graveyard` VALUES (1045, 530, 4363.88, 3093.74, 132.97, 'Пустоверть, Кладбище Штормовой Вершины'); +INSERT INTO `game_graveyard` VALUES (1046, 530, 3032.44, 3594.28, 145.818, 'Пустоверть, кладбище зоны 52'); +INSERT INTO `game_graveyard` VALUES (1047, 530, -2999.23, 2439.06, 62.3126, 'Долина Призрачной Луны, Кладбище Деревни Призрачной Луны'); +INSERT INTO `game_graveyard` VALUES (1048, 530, -4022.99, 2048.58, 96.8944, 'Долина Призрачной Луны, Кладбище Громового Молота'); +INSERT INTO `game_graveyard` VALUES (1049, 530, 1955.9, 6768.81, 164.061, 'Острогорье, кладбище Сильванаара'); +INSERT INTO `game_graveyard` VALUES (1050, 530, 2218.9, 6017.35, 135.921, 'Острогорье, Кладбище Громоборцев'); +INSERT INTO `game_graveyard` VALUES (1051, 530, -3942.59, 3686.29, 286.76, 'Лес Тероккар, Кладбище Скеттиса'); +INSERT INTO `game_graveyard` VALUES (1052, 530, -2652.66, 1484.21, 23.2433, 'Призрачная Луна, местонахождение тела 005'); +INSERT INTO `game_graveyard` VALUES (1053, 530, -2477.69, 1386.24, 47.2643, 'Призрачная Луна, местонахождение тела 006'); +INSERT INTO `game_graveyard` VALUES (1054, 530, -2459.08, 1277.57, 33.3696, 'Призрачная Луна, местонахождение тела 007'); +INSERT INTO `game_graveyard` VALUES (1055, 530, -2464.28, 1074.65, 33.7003, 'Призрачная Луна, местонахождение тела 008'); +INSERT INTO `game_graveyard` VALUES (1056, 530, -2597.45, 1040.72, 40.0066, 'Призрачная Луна, местонахождение тела 009'); +INSERT INTO `game_graveyard` VALUES (1057, 530, -2753.67, 966.146, -3.37364, 'Призрачная Луна, местонахождение тела 010'); +INSERT INTO `game_graveyard` VALUES (1058, 530, -2721.16, 711.034, -21.3014, 'Призрачная Луна, местонахождение тела 011'); +INSERT INTO `game_graveyard` VALUES (1059, 530, -2752.54, 509.309, -25.6439, 'Призрачная Луна, местонахождение тела 012'); +INSERT INTO `game_graveyard` VALUES (1060, 530, -3004.49, 482.051, -15.3962, 'Призрачная Луна, местонахождение тела 013'); +INSERT INTO `game_graveyard` VALUES (1061, 530, -2997.38, 207.579, 3.1666, 'Призрачная Луна, местонахождение тела 014'); +INSERT INTO `game_graveyard` VALUES (1062, 530, -4084.62, 120.513, 63.0947, 'Призрачная Луна, местонахождение тела 015'); +INSERT INTO `game_graveyard` VALUES (1063, 530, -4231.62, 58.6267, 7.60376, 'Призрачная Луна, местонахождение тела 016'); +INSERT INTO `game_graveyard` VALUES (1064, 530, -4445.81, 224.844, 93.5421, 'Призрачная Луна, местонахождение тела 017'); +INSERT INTO `game_graveyard` VALUES (1065, 530, -4507.6, 553.553, 124.258, 'Призрачная Луна, местонахождение тела 018'); +INSERT INTO `game_graveyard` VALUES (1066, 530, -4445.43, 863.558, 6.45198, 'Призрачная Луна, местонахождение тела 019'); +INSERT INTO `game_graveyard` VALUES (1067, 530, -4791.52, 1082.18, -8.86698, 'Призрачная Луна, местонахождение тела 020'); +INSERT INTO `game_graveyard` VALUES (1068, 530, -4618.17, 1850.61, 153.439, 'Призрачная Луна, местонахождение тела 021'); +INSERT INTO `game_graveyard` VALUES (1069, 530, -4568.14, 2023.8, 90.0628, 'Призрачная Луна, местонахождение тела 022'); +INSERT INTO `game_graveyard` VALUES (1070, 530, -4541.32, 2281.76, 17.7953, 'Призрачная Луна, местонахождение тела 023'); +INSERT INTO `game_graveyard` VALUES (1071, 530, -4408.89, 2328.78, 31.213, 'Призрачная Луна, местонахождение тела 024'); +INSERT INTO `game_graveyard` VALUES (1072, 530, 1933, 7389.18, 364.888, 'Острогорье, местонахождение тела 000'); +INSERT INTO `game_graveyard` VALUES (1073, 530, 2356.31, 7345.09, 363.309, 'Острогорье, местонахождение тела 001'); +INSERT INTO `game_graveyard` VALUES (1074, 530, 2818.31, 7269.72, 364.234, 'Острогорье, местонахождение тела 002'); +INSERT INTO `game_graveyard` VALUES (1075, 530, 3199.99, 7264.96, 146.66, 'Острогорье, местонахождение тела 003'); +INSERT INTO `game_graveyard` VALUES (1076, 530, 3432.89, 7312.38, 138.648, 'Острогорье, местонахождение тела 004'); +INSERT INTO `game_graveyard` VALUES (1077, 530, 3753.24, 7118.03, 141.142, 'Острогорье, местонахождение тела 005'); +INSERT INTO `game_graveyard` VALUES (1078, 530, 3797.19, 6900.24, 142.429, 'Острогорье, местонахождение тела 006'); +INSERT INTO `game_graveyard` VALUES (1079, 530, 3839.15, 6586.81, 135.094, 'Острогорье, местонахождение тела 007'); +INSERT INTO `game_graveyard` VALUES (1080, 530, 3482.78, 6487.13, 134.426, 'Острогорье, местонахождение тела 008'); +INSERT INTO `game_graveyard` VALUES (1081, 530, 3656.61, 6208.11, 272.701, 'Острогорье, местонахождение тела 009'); +INSERT INTO `game_graveyard` VALUES (1082, 530, 3995.33, 6092.06, 262.343, 'Острогорье, местонахождение тела 010'); +INSERT INTO `game_graveyard` VALUES (1083, 530, 4095.11, 5811.89, 259.762, 'Острогорье, местонахождение тела 011'); +INSERT INTO `game_graveyard` VALUES (1084, 530, 4153.55, 5508.92, 272.112, 'Острогорье, местонахождение тела 012'); +INSERT INTO `game_graveyard` VALUES (1085, 530, 4120.71, 5214.15, 264.988, 'Острогорье, местонахождение тела 013'); +INSERT INTO `game_graveyard` VALUES (1086, 530, 4086.35, 4849.9, 267.429, 'Острогорье, местонахождение тела 014'); +INSERT INTO `game_graveyard` VALUES (1087, 530, 3926.2, 4825.28, 264.982, 'Острогорье, местонахождение тела 015'); +INSERT INTO `game_graveyard` VALUES (1088, 530, 3731.12, 4738.45, 240.943, 'Острогорье, местонахождение тела 016'); +INSERT INTO `game_graveyard` VALUES (1089, 530, 3455.31, 4468.35, 154.243, 'Острогорье, местонахождение тела 017'); +INSERT INTO `game_graveyard` VALUES (1090, 530, 3323.6, 4503.88, 152.405, 'Острогорье, местонахождение тела 018'); +INSERT INTO `game_graveyard` VALUES (1091, 530, 2877.52, 4738.91, 278.725, 'Острогорье, местонахождение тела 019'); +INSERT INTO `game_graveyard` VALUES (1092, 530, 2653, 5100.26, 275.459, 'Острогорье, местонахождение тела 020'); +INSERT INTO `game_graveyard` VALUES (1093, 530, 2344.62, 5072.5, 268.165, 'Острогорье, местонахождение тела 021'); +INSERT INTO `game_graveyard` VALUES (1094, 530, 2251.08, 4907.94, 140.958, 'Острогорье, местонахождение тела 022'); +INSERT INTO `game_graveyard` VALUES (1095, 530, 2274.35, 4725.43, 159.451, 'Острогорье, местонахождение тела 023'); +INSERT INTO `game_graveyard` VALUES (1096, 530, 2102.66, 4685.08, 139.953, 'Острогорье, местонахождение тела 024'); +INSERT INTO `game_graveyard` VALUES (1097, 530, 1914.58, 4677.85, 133.28, 'Острогорье, местонахождение тела 025'); +INSERT INTO `game_graveyard` VALUES (1098, 530, 1771.94, 4585.16, 144.923, 'Острогорье, местонахождение тела 026'); +INSERT INTO `game_graveyard` VALUES (1099, 530, 1621.04, 4563.14, 137.265, 'Острогорье, местонахождение тела 027'); +INSERT INTO `game_graveyard` VALUES (1100, 530, 1606.36, 4792.58, 138.085, 'Острогорье, местонахождение тела 028'); +INSERT INTO `game_graveyard` VALUES (1101, 530, 1596.31, 4948.65, 169.669, 'Острогорье, местонахождение тела 029'); +INSERT INTO `game_graveyard` VALUES (1102, 530, 1616.9, 5077.05, 174.761, 'Острогорье, местонахождение тела 030'); +INSERT INTO `game_graveyard` VALUES (1103, 566, 2523.69, 1596.6, 1269.35, 'Поле боя Пустоверти, Кладбище (старт Альянса)'); +INSERT INTO `game_graveyard` VALUES (1104, 566, 1807.74, 1539.42, 1267.63, 'Поле боя Пустоверти, Кладбище (старт Орды)'); +INSERT INTO `game_graveyard` VALUES (1105, 566, 2013.06, 1677.24, 1182.13, 'Поле боя Пустоверти, Кладбище (Сквернобот)'); +INSERT INTO `game_graveyard` VALUES (1106, 566, 2012.4, 1455.41, 1172.2, 'Поле боя Пустоверти, Кладбище (башня эльфов крови)'); +INSERT INTO `game_graveyard` VALUES (1107, 566, 2351.79, 1455.4, 1185.33, 'Поле боя Пустоверти, Кладбище (дренейская башня)'); +INSERT INTO `game_graveyard` VALUES (1108, 566, 2355.3, 1683.71, 1173.15, 'Пустоверть, Кладбище (Башня Людей)'); +INSERT INTO `game_graveyard` VALUES (1109, 566, 2626.9, 1457.85, 1225.54, 'Поле боя Пустоверти, ловец тел 000'); +INSERT INTO `game_graveyard` VALUES (1110, 566, 2603.99, 1695.96, 1229.46, 'Поле боя Пустоверти, ловец тел 001'); +INSERT INTO `game_graveyard` VALUES (1111, 566, 2495.96, 1402.39, 1204.59, 'Поле боя Пустоверти, ловец тел 002'); +INSERT INTO `game_graveyard` VALUES (1112, 566, 2541.25, 1787.24, 1187.98, 'Поле боя Пустоверти, ловец тел 003'); +INSERT INTO `game_graveyard` VALUES (1113, 566, 2353.73, 1336.66, 1192.14, 'Поле боя Пустоверти, ловец тел 004'); +INSERT INTO `game_graveyard` VALUES (1114, 566, 2368.35, 1800.79, 1166.33, 'Поле боя Пустоверти, ловец тел 005'); +INSERT INTO `game_graveyard` VALUES (1115, 566, 2253.47, 1298.66, 1188.84, 'Поле боя Пустоверти, ловец тел 006'); +INSERT INTO `game_graveyard` VALUES (1116, 566, 2227.6, 1819.58, 1151.61, 'Поле боя Пустоверти, ловец тел 007'); +INSERT INTO `game_graveyard` VALUES (1117, 566, 2047.89, 1324.84, 1170.77, 'Поле боя Пустоверти, ловец тел 008'); +INSERT INTO `game_graveyard` VALUES (1118, 566, 2057.31, 1848.26, 1192.27, 'Поле боя Пустоверти, ловец тел 009'); +INSERT INTO `game_graveyard` VALUES (1119, 566, 1914.77, 1381.5, 1175.39, 'Поле боя Пустоверти, ловец тел 010'); +INSERT INTO `game_graveyard` VALUES (1120, 566, 1918.94, 1766.3, 1194.12, 'Поле боя Пустоверти, ловец тел 011'); +INSERT INTO `game_graveyard` VALUES (1121, 566, 1796.22, 1341.52, 1188.57, 'Поле боя Пустоверти, ловец тел 012'); +INSERT INTO `game_graveyard` VALUES (1122, 566, 1808.19, 1726.82, 1206.02, 'Поле боя Пустоверти, ловец тел 013'); +INSERT INTO `game_graveyard` VALUES (1123, 566, 1724.51, 1405.74, 1208.55, 'Поле боя Пустоверти, ловец тел 014'); +INSERT INTO `game_graveyard` VALUES (1124, 566, 1692.78, 1672.57, 1225.53, 'Поле боя Пустоверти, ловец тел 015'); +INSERT INTO `game_graveyard` VALUES (1125, 566, 2121.79, 1670.5, 1169.27, 'Поле боя Пустоверти, ловец тел 016'); +INSERT INTO `game_graveyard` VALUES (1126, 566, 2111.42, 1441.82, 1163.87, 'Поле боя Пустоверти, ловец тел 017'); +INSERT INTO `game_graveyard` VALUES (1127, 566, 2213.18, 1469.54, 1175.01, 'Поле боя Пустоверти, ловец тел 018'); +INSERT INTO `game_graveyard` VALUES (1128, 566, 2226.6, 1692.81, 1161.85, 'Поле боя Пустоверти, ловец тел 019'); +INSERT INTO `game_graveyard` VALUES (1129, 566, 2174.9, 1594.51, 1126.51, 'Поле боя Пустоверти, ловец тел 020'); +INSERT INTO `game_graveyard` VALUES (1130, 566, 2173.64, 1534.45, 1129.24, 'Поле боя Пустоверти, ловец тел 021'); +INSERT INTO `game_graveyard` VALUES (1131, 566, 2213.83, 1328.19, 1178.46, 'Поле боя Пустоверти, ловец тел 022'); +INSERT INTO `game_graveyard` VALUES (1132, 566, 2113.42, 1326.88, 1153.99, 'Поле боя Пустоверти, ловец тел 023'); +INSERT INTO `game_graveyard` VALUES (1133, 566, 2117.21, 1807.68, 1171.55, 'Поле боя Пустоверти, ловец тел 024'); +INSERT INTO `game_graveyard` VALUES (1134, 530, 3491.41, 4127.39, 119.837, 'Пустоверть, ловец тел 000'); +INSERT INTO `game_graveyard` VALUES (1135, 530, 3578.56, 3957.1, 117.999, 'Пустоверть, ловец тел 001'); +INSERT INTO `game_graveyard` VALUES (1136, 530, 3586.96, 3717.31, 115.593, 'Пустоверть, ловец тел 002'); +INSERT INTO `game_graveyard` VALUES (1137, 530, 3640.77, 3522.84, 104.122, 'Пустоверть, ловец тел 003'); +INSERT INTO `game_graveyard` VALUES (1138, 530, 3520.2, 3511.7, 125.437, 'Пустоверть, ловец тел 004'); +INSERT INTO `game_graveyard` VALUES (1139, 530, 3399.31, 3400.41, 101.826, 'Пустоверть, ловец тел 005'); +INSERT INTO `game_graveyard` VALUES (1140, 530, 3271.49, 3366.92, 105.214, 'Пустоверть, ловец тел 006'); +INSERT INTO `game_graveyard` VALUES (1141, 530, 3188.37, 3257.08, 88.973, 'Пустоверть, ловец тел 007'); +INSERT INTO `game_graveyard` VALUES (1142, 530, 3022.79, 3163.7, 118.336, 'Пустоверть, ловец тел 008'); +INSERT INTO `game_graveyard` VALUES (1143, 530, 2943.66, 3056.64, 112.724, 'Пустоверть, ловец тел 009'); +INSERT INTO `game_graveyard` VALUES (1144, 530, 2846.52, 2955.54, 113.508, 'Пустоверть, ловец тел 010'); +INSERT INTO `game_graveyard` VALUES (1145, 530, 2815.3, 2830.89, 76.0171, 'Пустоверть, ловец тел 011'); +INSERT INTO `game_graveyard` VALUES (1146, 530, 2695.05, 2940.24, 94.9833, 'Пустоверть, ловец тел 012'); +INSERT INTO `game_graveyard` VALUES (1147, 530, 2570.5, 3135.96, 107.749, 'Пустоверть, ловец тел 013'); +INSERT INTO `game_graveyard` VALUES (1148, 530, 2511.98, 3275.15, 99.749, 'Пустоверть, ловец тел 014'); +INSERT INTO `game_graveyard` VALUES (1149, 530, 2449.93, 3377.49, 115.303, 'Пустоверть, ловец тел 015'); +INSERT INTO `game_graveyard` VALUES (1150, 530, 2519.66, 3538.7, 120.574, 'Пустоверть, ловец тел 016'); +INSERT INTO `game_graveyard` VALUES (1151, 530, 2479.84, 3695.68, 106.209, 'Пустоверть, ловец тел 017'); +INSERT INTO `game_graveyard` VALUES (1152, 530, 2433.44, 3835.28, 94.9401, 'Пустоверть, ловец тел 018'); +INSERT INTO `game_graveyard` VALUES (1153, 530, 2403.43, 3995.29, 99.2667, 'Пустоверть, ловец тел 019'); +INSERT INTO `game_graveyard` VALUES (1154, 530, 2477.41, 4151.27, 113.695, 'Пустоверть, ловец тел 020'); +INSERT INTO `game_graveyard` VALUES (1155, 530, 2535.26, 4396.42, 103.322, 'Пустоверть, ловец тел 021'); +INSERT INTO `game_graveyard` VALUES (1156, 530, 2710.52, 4440.32, 105.852, 'Пустоверть, ловец тел 022'); +INSERT INTO `game_graveyard` VALUES (1157, 530, 2916.15, 4444.49, 111.442, 'Пустоверть, ловец тел 023'); +INSERT INTO `game_graveyard` VALUES (1158, 530, 3069.1, 4357.14, 119.069, 'Пустоверть, ловец тел 024'); +INSERT INTO `game_graveyard` VALUES (1159, 530, 3091.8, 4146.84, 126.162, 'Пустоверть, ловец тел 025'); +INSERT INTO `game_graveyard` VALUES (1160, 530, 3221.17, 4069.1, 103.294, 'Пустоверть, ловец тел 026'); +INSERT INTO `game_graveyard` VALUES (1161, 530, 3355.79, 4149.28, 137.783, 'Пустоверть, ловец тел 027'); +INSERT INTO `game_graveyard` VALUES (1162, 530, 3980.61, 4262.21, 130.059, 'Пустоверть, ловец тел 028'); +INSERT INTO `game_graveyard` VALUES (1163, 530, 3802.7, 4204.43, 108.911, 'Пустоверть, ловец тел 029'); +INSERT INTO `game_graveyard` VALUES (1164, 530, 3766.71, 4008.23, 116.788, 'Пустоверть, ловец тел 030'); +INSERT INTO `game_graveyard` VALUES (1165, 530, 3796.27, 3772.19, 100.545, 'Пустоверть, ловец тел 031'); +INSERT INTO `game_graveyard` VALUES (1166, 530, 4049.61, 3692.78, 101.573, 'Пустоверть, ловец тел 032'); +INSERT INTO `game_graveyard` VALUES (1167, 530, 4152.53, 3886.21, 121.304, 'Пустоверть, ловец тел 033'); +INSERT INTO `game_graveyard` VALUES (1168, 530, 4235.16, 4080.62, 95.3675, 'Пустоверть, ловец тел 034'); +INSERT INTO `game_graveyard` VALUES (1169, 530, 4169.83, 4209.06, 118.711, 'Пустоверть, ловец тел 035'); +INSERT INTO `game_graveyard` VALUES (1170, 530, 3836.08, 3477.26, 75.5263, 'Пустоверть, ловец тел 036'); +INSERT INTO `game_graveyard` VALUES (1171, 530, 3994.95, 3538.27, 122.008, 'Пустоверть, ловец тел 037'); +INSERT INTO `game_graveyard` VALUES (1172, 530, 4211.4, 3632, 124.109, 'Пустоверть, ловец тел 038'); +INSERT INTO `game_graveyard` VALUES (1173, 530, 4395.24, 3708.62, 96.616, 'Пустоверть, ловец тел 039'); +INSERT INTO `game_graveyard` VALUES (1174, 530, 4580.69, 3584, 94.0002, 'Пустоверть, ловец тел 040'); +INSERT INTO `game_graveyard` VALUES (1175, 530, 4793.19, 3527.37, 102.164, 'Пустоверть, ловец тел 041'); +INSERT INTO `game_graveyard` VALUES (1176, 530, 4903.71, 3323.86, 101.089, 'Пустоверть, ловец тел 042'); +INSERT INTO `game_graveyard` VALUES (1177, 530, 4945.87, 3110.83, 98.2189, 'Пустоверть, ловец тел 043'); +INSERT INTO `game_graveyard` VALUES (1178, 530, 5156.75, 2974.21, 75.555, 'Пустоверть, ловец тел 044'); +INSERT INTO `game_graveyard` VALUES (1179, 530, 5204.7, 2868.11, 54.3042, 'Пустоверть, ловец тел 045'); +INSERT INTO `game_graveyard` VALUES (1180, 530, 5019.97, 2798.73, 52.0894, 'Пустоверть, ловец тел 046'); +INSERT INTO `game_graveyard` VALUES (1181, 530, 4885.18, 2663.13, 85.2405, 'Пустоверть, ловец тел 047'); +INSERT INTO `game_graveyard` VALUES (1182, 530, 4853.17, 2354.02, 101.279, 'Пустоверть, ловец тел 048'); +INSERT INTO `game_graveyard` VALUES (1183, 530, 4680.81, 2287.48, 129.446, 'Пустоверть, ловец тел 049'); +INSERT INTO `game_graveyard` VALUES (1184, 530, 4522.44, 2280.28, 136.924, 'Пустоверть, ловец тел 050'); +INSERT INTO `game_graveyard` VALUES (1185, 530, 4436.57, 2485.48, 90.3712, 'Пустоверть, ловец тел 051'); +INSERT INTO `game_graveyard` VALUES (1186, 530, 4448.3, 2658.15, 111.356, 'Пустоверть, ловец тел 052'); +INSERT INTO `game_graveyard` VALUES (1187, 530, 4285.06, 2837.04, 100.8, 'Пустоверть, ловец тел 053'); +INSERT INTO `game_graveyard` VALUES (1188, 530, 4136.62, 2699.33, 101.025, 'Пустоверть, ловец тел 054'); +INSERT INTO `game_graveyard` VALUES (1189, 530, 3975.24, 2807.44, 115.88, 'Пустоверть, ловец тел 055'); +INSERT INTO `game_graveyard` VALUES (1190, 530, 3931.79, 3020.67, 104.802, 'Пустоверть, ловец тел 056'); +INSERT INTO `game_graveyard` VALUES (1191, 530, 3895.88, 3257.64, 120.552, 'Пустоверть, ловец тел 057'); +INSERT INTO `game_graveyard` VALUES (1192, 530, 3629.36, 3095.11, 112.238, 'Пустоверть, ловец тел 058'); +INSERT INTO `game_graveyard` VALUES (1193, 530, 3476.45, 3293.56, 94.8662, 'Пустоверть, ловец тел 059'); +INSERT INTO `game_graveyard` VALUES (1194, 530, 3348.41, 3172.06, 91.6889, 'Пустоверть, ловец тел 060'); +INSERT INTO `game_graveyard` VALUES (1195, 530, 3216.28, 2992.53, 124.764, 'Пустоверть, ловец тел 061'); +INSERT INTO `game_graveyard` VALUES (1196, 530, 3022.81, 2892.91, 90.2431, 'Пустоверть, ловец тел 062'); +INSERT INTO `game_graveyard` VALUES (1197, 530, 2860.47, 2735.28, 86.18, 'Пустоверть, ловец тел 063'); +INSERT INTO `game_graveyard` VALUES (1198, 530, 2863.8, 2537.41, 105.193, 'Пустоверть, ловец тел 064'); +INSERT INTO `game_graveyard` VALUES (1199, 530, 2856.08, 2297.04, 98.8159, 'Пустоверть, ловец тел 065'); +INSERT INTO `game_graveyard` VALUES (1200, 530, 2834.86, 2040.24, 92.6892, 'Пустоверть, ловец тел 066'); +INSERT INTO `game_graveyard` VALUES (1201, 530, 2868.81, 1848.69, 96.8612, 'Пустоверть, ловец тел 067'); +INSERT INTO `game_graveyard` VALUES (1202, 530, 2895.75, 1708.09, 105.79, 'Пустоверть, ловец тел 068'); +INSERT INTO `game_graveyard` VALUES (1203, 530, 3110.67, 1624.43, 112.817, 'Пустоверть, ловец тел 069'); +INSERT INTO `game_graveyard` VALUES (1204, 530, 3276.02, 1726.59, 101.628, 'Пустоверть, ловец тел 070'); +INSERT INTO `game_graveyard` VALUES (1205, 530, 3332.26, 1986.97, 94.5339, 'Пустоверть, ловец тел 071'); +INSERT INTO `game_graveyard` VALUES (1206, 530, 3315.85, 2185.52, 108.392, 'Пустоверть, ловец тел 072'); +INSERT INTO `game_graveyard` VALUES (1207, 530, 3384.58, 2376.22, 73.5116, 'Пустоверть, ловец тел 073'); +INSERT INTO `game_graveyard` VALUES (1208, 530, 3492.84, 2570.84, 138.484, 'Пустоверть, ловец тел 074'); +INSERT INTO `game_graveyard` VALUES (1209, 530, 3590.41, 2677.08, 134.967, 'Пустоверть, ловец тел 075'); +INSERT INTO `game_graveyard` VALUES (1210, 530, 3740.94, 2696.99, 112.495, 'Пустоверть, ловец тел 076'); +INSERT INTO `game_graveyard` VALUES (1211, 530, 3737.85, 2894.69, 100.461, 'Пустоверть, ловец тел 077'); +INSERT INTO `game_graveyard` VALUES (1212, 530, 3862.95, 2554.46, 80.6212, 'Пустоверть, ловец тел 078'); +INSERT INTO `game_graveyard` VALUES (1213, 530, 3648.26, 2414.61, 75.8989, 'Пустоверть, ловец тел 079'); +INSERT INTO `game_graveyard` VALUES (1214, 530, 3546.97, 2219.76, 92.1654, 'Пустоверть, ловец тел 080'); +INSERT INTO `game_graveyard` VALUES (1215, 530, 3550.01, 2002.35, 92.2836, 'Пустоверть, ловец тел 081'); +INSERT INTO `game_graveyard` VALUES (1216, 530, 3509.69, 1762.49, 75.3824, 'Пустоверть, ловец тел 082'); +INSERT INTO `game_graveyard` VALUES (1217, 530, 3645.26, 1712.66, 106.519, 'Пустоверть, ловец тел 083'); +INSERT INTO `game_graveyard` VALUES (1218, 530, 3681.18, 1558.56, 103.064, 'Пустоверть, ловец тел 084'); +INSERT INTO `game_graveyard` VALUES (1219, 530, 3775.55, 1437.54, -152.872, 'Пустоверть, ловец тел 085'); +INSERT INTO `game_graveyard` VALUES (1220, 530, 3969.01, 1336.41, -143.469, 'Пустоверть, ловец тел 086'); +INSERT INTO `game_graveyard` VALUES (1221, 530, 4166.45, 1329.15, -149.744, 'Пустоверть, ловец тел 087'); +INSERT INTO `game_graveyard` VALUES (1222, 530, 4199.54, 1484.24, -127.523, 'Пустоверть, ловец тел 088'); +INSERT INTO `game_graveyard` VALUES (1223, 530, 4258.28, 1672.84, 113.502, 'Пустоверть, ловец тел 089'); +INSERT INTO `game_graveyard` VALUES (1224, 530, 4362.23, 1927.16, 95.6414, 'Пустоверть, ловец тел 090'); +INSERT INTO `game_graveyard` VALUES (1225, 530, 4347.15, 2143.36, 116.927, 'Пустоверть, ловец тел 091'); +INSERT INTO `game_graveyard` VALUES (1226, 530, 4246.96, 2450.75, 91.2951, 'Пустоверть, ловец тел 092'); +INSERT INTO `game_graveyard` VALUES (1227, 530, 4117.15, 2332.29, 103.107, 'Пустоверть, ловец тел 093'); +INSERT INTO `game_graveyard` VALUES (1228, 530, 3975.8, 2437.47, 114.278, 'Пустоверть, ловец тел 094'); +INSERT INTO `game_graveyard` VALUES (1229, 530, 2501.34, 1983.39, 84.3397, 'Пустоверть, ловец тел 095'); +INSERT INTO `game_graveyard` VALUES (1230, 530, 2573.35, 2127.1, 98.8223, 'Пустоверть, ловец тел 096'); +INSERT INTO `game_graveyard` VALUES (1231, 530, 2648.16, 2353.63, 93.2833, 'Пустоверть, ловец тел 097'); +INSERT INTO `game_graveyard` VALUES (1232, 530, 2659.25, 2547.14, 110.084, 'Пустоверть, ловец тел 098'); +INSERT INTO `game_graveyard` VALUES (1233, 530, 2587.89, 2711.6, 110.037, 'Пустоверть, ловец тел 099'); +INSERT INTO `game_graveyard` VALUES (1234, 530, 2473.63, 2964.98, 106.742, 'Пустоверть, ловец тел100'); +INSERT INTO `game_graveyard` VALUES (1235, 530, 2209.18, 2901.68, 93.6635, 'Пустоверть, ловец тел 101'); +INSERT INTO `game_graveyard` VALUES (1236, 530, 2164.32, 2667.39, 78.4479, 'Пустоверть, ловец тел 102'); +INSERT INTO `game_graveyard` VALUES (1237, 530, 2078.21, 2405.5, 65.8779, 'Пустоверть, ловец тел 103'); +INSERT INTO `game_graveyard` VALUES (1238, 530, 2079.82, 2227.04, 67.6551, 'Пустоверть, ловец тел 104'); +INSERT INTO `game_graveyard` VALUES (1239, 530, 2240.18, 2067.8, 61.7495, 'Пустоверть, ловец тел 105'); +INSERT INTO `game_graveyard` VALUES (1240, 530, 552.188, 1995.15, 103.702, 'Полуостров Адского Пламени, Военный лагерь (Альянс)'); +INSERT INTO `game_graveyard` VALUES (1241, 530, 3065, 5426.42, 148.39, 'Острогорье, Кладбище Вечной рощи'); +INSERT INTO `game_graveyard` VALUES (1242, 530, 3872.66, 5514.41, 271.977, 'Острогорье, Кладбище Северной Гряды'); +INSERT INTO `game_graveyard` VALUES (1243, 530, 2296.35, 7023.23, 364.117, 'Острогорье, Кладбище Западной Гряды'); +INSERT INTO `game_graveyard` VALUES (1244, 530, 2312.27, 5083.93, 272.449, 'Острогорье, Кладбище Восточной Гряды'); +INSERT INTO `game_graveyard` VALUES (1245, 628, 1212.04, -762.696, 48.9162, 'Icecrown BG - Horde Zone In'); +INSERT INTO `game_graveyard` VALUES (1246, 0, 101.144, -184.934, 127.344, 'Альтеракская долина, место выхода Альянса'); +INSERT INTO `game_graveyard` VALUES (1247, 530, 2980.19, 1869.82, 143.607, 'Пустоверть, Кладбище Космоворота'); +INSERT INTO `game_graveyard` VALUES (1248, 530, -1272.42, 2436.85, 64.0972, 'Полуостров Адского Пламени, Кладбище Хребтолома'); +INSERT INTO `game_graveyard` VALUES (1249, 1, -8159.51, -4628.7, -124.747, 'Танарис, Пещеры Времени'); +INSERT INTO `game_graveyard` VALUES (1250, 530, -3134.54, 719.484, -20.6363, 'Долина Призрачной Луны, Кладбище Алтаря'); +INSERT INTO `game_graveyard` VALUES (1251, 530, -4117.03, 1058.26, 31.5656, 'Долина Призрачной Луны, Кладбище Святилища'); +INSERT INTO `game_graveyard` VALUES (1252, 530, 2362.67, 2327.41, 106.18, 'Пустоверть, Деревня Кирин\'Вар'); +INSERT INTO `game_graveyard` VALUES (1253, 530, 2011.39, 5575.79, 262.717, 'Острогорье, Кладбище Тошли'); +INSERT INTO `game_graveyard` VALUES (1254, 530, 3522.84, 6821.62, 140.879, 'Острогорье, Кладбище Леса Ворона'); +INSERT INTO `game_graveyard` VALUES (1255, 530, 3447.31, 4803.82, 260.213, 'Острогорье, Кладбище Северо-восточной Гряды'); +INSERT INTO `game_graveyard` VALUES (1256, 0, -382.911, 1117.42, 84.3704, 'Серебряный бор, Южное кладбище'); +INSERT INTO `game_graveyard` VALUES (1257, 530, -1148.08, 5897.62, 188.337, 'Лес Тероккар, Кладбище Огров'); +INSERT INTO `game_graveyard` VALUES (1258, 572, 1277.87, 1744.9, 32.5, 'Лордерон, PvP, старт команды 1'); +INSERT INTO `game_graveyard` VALUES (1259, 572, 1295.13, 1586.44, 32.5, 'Лордерон, PvP, старт команды 2'); +INSERT INTO `game_graveyard` VALUES (1260, 572, 1285.81, 1667.9, 39.9576, 'Лордерон, PvP - кладбище'); +INSERT INTO `game_graveyard` VALUES (1261, 530, -3524.27, 619.528, 4.66533, 'Черный храм, Кладбище Альянса'); +INSERT INTO `game_graveyard` VALUES (1262, 530, -3624.93, 600.007, 11.669, 'Черный храм, Кладбище Орды'); +INSERT INTO `game_graveyard` VALUES (1263, 530, 3621.87, 6519.53, 124.339, 'Острогорье, местонахождение тела 031'); +INSERT INTO `game_graveyard` VALUES (1264, 1, -4032.4, -3414.03, 38.5236, 'Пылевые топи, Ферма Табеты'); +INSERT INTO `game_graveyard` VALUES (1265, 1, -4632.79, -3129.43, 34.9423, 'Пылевые топи, Шестермуть'); +INSERT INTO `game_graveyard` VALUES (1266, 571, 1958.13, -3682.22, 171.91, 'Ревущий фьорд, Северо-западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1267, 571, 728.266, -2992.27, 24.9835, 'Ревущий фьорд, Клыкаррское кладбище'); +INSERT INTO `game_graveyard` VALUES (1268, 571, 117.023, -3698.8, 0.683407, 'Ревущий фьорд, Островное кладбище'); +INSERT INTO `game_graveyard` VALUES (1269, 571, 1191.77, -4115.08, 149.689, 'Ревущий фьорд, Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1270, 571, 2243.12, -4650.64, 218.961, 'Ревущий фьорд, Северное кладбище'); +INSERT INTO `game_graveyard` VALUES (1271, 571, 1923.72, -5986.35, 9.05279, 'Ревущий фьорд, Кладбище лагеря Возмездия'); +INSERT INTO `game_graveyard` VALUES (1272, 571, 717.778, -5878.41, 287.001, 'Ревущий фьорд, Юго-восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1273, 571, 205.003, -5944.01, 7.37471, 'Ревущий фьорд, Кладбище Южного берега'); +INSERT INTO `game_graveyard` VALUES (1274, 571, 57.9178, -4649.08, 283.569, 'Ревущий фьорд, Южное кладбище'); +INSERT INTO `game_graveyard` VALUES (1275, 571, 668.024, -4931.68, 3.90933, 'Ревущий фьорд, Кладбище Валгарда'); +INSERT INTO `game_graveyard` VALUES (1276, 571, 1808.77, -5608.61, 219.419, 'Ревущий фьорд, Северо-восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1277, 1, -7351.04, -1315.89, -261.603, 'Кратер Ун\'Горо, Центральное Кладбище'); +INSERT INTO `game_graveyard` VALUES (1278, 1, -6160.06, -1142.43, -217.769, 'Кратер Ун\'Горо, Кладбище Маршалла'); +INSERT INTO `game_graveyard` VALUES (1279, 1, 475.685, 1469.87, 9.63075, 'Когтистые горы, Обугленная долина'); +INSERT INTO `game_graveyard` VALUES (1280, 1, 2729.91, 1286.64, 292.467, 'Когтистые горы, Кладбище Пика'); +INSERT INTO `game_graveyard` VALUES (1281, 1, -7754.16, -4971.9, 5.91349, 'Танарис, Пиратское кладбище'); +INSERT INTO `game_graveyard` VALUES (1282, 1, -8591.8, -3629.76, 13.5564, 'Танарис, Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1283, 1, 5633.33, -4759.59, 777.713, 'Зимние Ключи, Южное кладбище'); +INSERT INTO `game_graveyard` VALUES (1284, 1, 6499.59, -2384.34, 589.849, 'Зимние Ключи, Западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1285, 571, 5537.46, 2904.91, 517.664, 'Озеро Ледяных Оков, Крепость (Восток)'); +INSERT INTO `game_graveyard` VALUES (1286, 0, 1839.77, -2149.68, 67.4935, 'Западные Чумные земли, Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1287, 0, -6867.31, -1539.84, 241.815, 'Тлеющее ущелье, Северо-Восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1288, 0, -7100.9, -3488.39, 241.925, 'Бесплодные земли, Южное кладбище'); +INSERT INTO `game_graveyard` VALUES (1289, 1, -3973.53, -2014.49, 96.362, 'Степи, Южное кладбище'); +INSERT INTO `game_graveyard` VALUES (1290, 571, 3041.21, 4314.9, 29.0761, 'Борейская тундра, Клыкаррское кладбище'); +INSERT INTO `game_graveyard` VALUES (1291, 530, -1424.37, 4359.58, 241.566, 'Лес Тероккар, кладбище уступа Острого Шипа'); +INSERT INTO `game_graveyard` VALUES (1292, 530, 12851.8, -6854.8, 11.8612, 'Остров Кель\'Данас, Кладбище военной базы'); +INSERT INTO `game_graveyard` VALUES (1293, 530, 12851.8, -6854.8, 11.8612, 'Остров Кель\'Данас, Кладбище военной базы'); +INSERT INTO `game_graveyard` VALUES (1294, 530, 12851.8, -6854.8, 110.861, 'Остров Кель\'Данас, Кладбище военной базы'); +INSERT INTO `game_graveyard` VALUES (1295, 451, -10425.3, 7329.17, 313.967, 'Development Land, Theresa\'s Test Land GY'); +INSERT INTO `game_graveyard` VALUES (1296, 451, -10431.2, 7377.98, 313.967, 'Development Land, Theresa\'s Test Land 2 GY'); +INSERT INTO `game_graveyard` VALUES (1297, 451, -10414.7, 7414.45, 312.957, 'Development Land, Theresa\'s Test land 3 GY'); +INSERT INTO `game_graveyard` VALUES (1298, 530, -2433.64, 4660.97, 160.883, 'Лес Тероккар, кладбище озера Иорун'); +INSERT INTO `game_graveyard` VALUES (1299, 628, 347.641, -836.161, 48.9162, 'Icecrown BG - Alliance Zone In'); +INSERT INTO `game_graveyard` VALUES (1300, 571, 3100.18, -1983.4, 83.3072, 'Седые холмы, Кладбище Жестокой Травли'); +INSERT INTO `game_graveyard` VALUES (1301, 571, 3534.13, -2882.06, 204.625, 'Седые холмы, Кладбище Янтарной Сосны'); +INSERT INTO `game_graveyard` VALUES (1302, 571, 4352.78, -4247.99, 162.318, 'Седые холмы, Кладбище Западного Края'); +INSERT INTO `game_graveyard` VALUES (1303, 571, 4117.91, -4816.41, 76.0073, 'Седые холмы, Восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1304, 571, 3967.28, -2316.64, 213.873, 'Седые холмы, Северо-западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1305, 571, 2933.64, -2836.78, 73.6939, 'Седые холмы, Юго-западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1306, 571, 4323.39, -3606.85, 248, 'Седые холмы, Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1307, 571, 4604.76, -976.65, 169.54, 'Драконий Погост, Северо-восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1308, 571, 3667.91, -1044.36, 130.562, 'Драконий Погост, Кладбище Стражей Зимы'); +INSERT INTO `game_graveyard` VALUES (1309, 571, 3218.74, -700.367, 167.482, 'Драконий Погост, Восточное кладбище Отрекшихся'); +INSERT INTO `game_graveyard` VALUES (1310, 571, 3843.01, 1425.52, 90.6411, 'Драконий Погост, Кладбище Молота Агмара'); +INSERT INTO `game_graveyard` VALUES (1311, 571, 3498.38, 2100.42, 69.5025, 'Драконий Погост, Кладбище Покоя Звезд'); +INSERT INTO `game_graveyard` VALUES (1312, 571, 2772.18, 1042.4, 25.045, 'Драконий Погост, Кладбище Гавани Моа\'ки'); +INSERT INTO `game_graveyard` VALUES (1313, 571, 3599.17, 2846.07, 70.9523, 'Драконий Погост, Кладбище Борейской границы'); +INSERT INTO `game_graveyard` VALUES (1314, 571, 3538.17, 275.51, 45.6119, 'Драконий Погост, Кладбище Драконьего Покоя'); +INSERT INTO `game_graveyard` VALUES (1315, 571, 4812.89, 1022.49, 144.814, 'Драконий Погост, Кладбище Врат Гнева (Орда)'); +INSERT INTO `game_graveyard` VALUES (1316, 571, 4466.17, 1257.02, 140.79, 'Драконий Погост, Кладбище Врат Гнева (Альянс)'); +INSERT INTO `game_graveyard` VALUES (1317, 571, 2842, 5973.16, 114.196, 'Борейская тундра, Кладбище Крепости Песни Войны'); +INSERT INTO `game_graveyard` VALUES (1318, 571, 2007.96, 5936.55, 37.4033, 'Борейская тундра, Кладбище Берега Терзающего Бича'); +INSERT INTO `game_graveyard` VALUES (1319, 571, 3621.88, 6805.54, 171.706, 'Борейская тундра, Кладбище Хладарры'); +INSERT INTO `game_graveyard` VALUES (1320, 571, 3559.93, 5818.79, 128.939, 'Борейская тундра, Кладбище Янтарной Гряды'); +INSERT INTO `game_graveyard` VALUES (1321, 571, 4223.44, 5335.88, 30.6522, 'Борейская тундра, Кладбище Выкрутеня'); +INSERT INTO `game_graveyard` VALUES (1322, 571, 4514.81, 5661.56, 82.0308, 'Борейская тундра, Кладбище Бор\'Горока'); +INSERT INTO `game_graveyard` VALUES (1323, 571, 3041.14, 3843.49, 3.75779, 'Борейская тундра, Кладбище Стоянки Смерти'); +INSERT INTO `game_graveyard` VALUES (1324, 571, 3576.16, 4087.61, 22.3312, 'Борейская тундра, Кладбище Таунка\'ле'); +INSERT INTO `game_graveyard` VALUES (1325, 571, 2842.96, 6655.17, 36.4127, 'Борейская тундра, Кладбище Берега Эха'); +INSERT INTO `game_graveyard` VALUES (1326, 571, 2478.59, 5289.41, 32.3838, 'Борейская тундра, Кладбище Крепости Отваги'); +INSERT INTO `game_graveyard` VALUES (1327, 0, 791.432, -419.449, 136.572, 'Альтеракская долина'); +INSERT INTO `game_graveyard` VALUES (1328, 571, 5537.57, 2905.04, 517.724, 'Озеро Ледяных Оков, Крепость (Запад)'); +INSERT INTO `game_graveyard` VALUES (1329, 571, 5104.35, 2302.23, 368.485, 'Озеро Ледяных Оков, Завод боевых машин (СВ оборона)'); +INSERT INTO `game_graveyard` VALUES (1330, 571, 5101.04, 3461.45, 368.485, 'Озеро Ледяных Оков, Завод боевых машин (СЗ оборона)'); +INSERT INTO `game_graveyard` VALUES (1331, 571, 5031.51, 3710.43, 372.364, 'Озеро Ледяных Оков, Начальная зона Орды'); +INSERT INTO `game_graveyard` VALUES (1332, 571, 5140.35, 2182.01, 390.751, 'Озеро Ледяных Оков, Начальная зона Альянса'); +INSERT INTO `game_graveyard` VALUES (1333, 571, 4317.97, 2407.42, 392.619, 'Озеро Ледяных Оков, Завод боевых машин (ЮВ)'); +INSERT INTO `game_graveyard` VALUES (1334, 571, 4335.81, 3234.56, 390.251, 'Озеро Ледяных Оков, Завод боевых машин (ЮЗ)'); +INSERT INTO `game_graveyard` VALUES (1336, 571, 4826.36, 5467.17, -54.7747, 'Низина Шолазар, южное кладбище'); +INSERT INTO `game_graveyard` VALUES (1337, 571, 1335.47, -4785.18, 188.077, 'Ревущий фьорд, Кладбище Утгарда'); +INSERT INTO `game_graveyard` VALUES (1341, 571, 5620.52, 5840.97, -63.4727, 'Низина Шолазар, Кладбище Эрнестуэя'); +INSERT INTO `game_graveyard` VALUES (1342, 571, 5538.26, 4851.61, -196.979, 'Низина Шолазар, Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1343, 571, 6246.95, 5164.34, -83.2031, 'Низина Шолазар, Северо-западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1344, 571, 6274.77, 4409.44, -68.901, 'Низина Шолазар, Северо-восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1345, 571, 5519.07, 3593.28, -14.2186, 'Низина Шолазар, Восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1346, 607, 1388.8, 203.355, 32.1527, 'Поле боя Нордскола - Под контролем - Юг'); +INSERT INTO `game_graveyard` VALUES (1347, 607, 1396.06, -288.037, 32.0815, 'Поле боя Нордскола - Под контролем - Юго-запад'); +INSERT INTO `game_graveyard` VALUES (1348, 607, 1122.28, 4.41618, 68.9358, 'Поле боя Нордскола - Под контролем - Центр'); +INSERT INTO `game_graveyard` VALUES (1349, 607, 964.595, -189.784, 90.6605, 'Поле боя Нордскола - Защитник - Конечный пункт'); +INSERT INTO `game_graveyard` VALUES (1350, 607, 1457.19, -53.7133, 5.18109, 'Поле боя Нордскола - Нападение - Побережье'); +INSERT INTO `game_graveyard` VALUES (1351, 607, 1618.81, 31.2829, 8.34708, 'Поле боя Нордскола - Нападение - Лодка'); +INSERT INTO `game_graveyard` VALUES (1352, 571, 5703.97, -2467.94, 287.55, 'Зул\'Драк, Западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1353, 571, 5557.91, -1615.61, 242.247, 'Зул\'Драк, Северо-западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1354, 571, 5244.65, -2133.33, 244.753, 'Зул\'Драк, Юго-западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1355, 571, 4939.81, -2958.49, 289.535, 'Зул\'Драк, Южное кладбище'); +INSERT INTO `game_graveyard` VALUES (1356, 571, 5798.52, -3286.55, 363.379, 'Зул\'Драк, Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1357, 571, 5522.76, -4101.73, 364.358, 'Зул\'Драк, Юго-восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1358, 571, 6618.71, -4795.52, 450.522, 'Зул\'Драк, Кладбище Гун\'Драка'); +INSERT INTO `game_graveyard` VALUES (1359, 571, 5849.21, 763.311, 641.053, 'Лес Хрустальной Песни, Кладбище Даларана'); +INSERT INTO `game_graveyard` VALUES (1360, 609, 2364.42, -5771.32, 151.367, 'Кладбище Черного оплота - глава I'); +INSERT INTO `game_graveyard` VALUES (1361, 617, 1292.14, 790.993, 8.11463, 'Dalaran Arena - PvP Graveyard'); +INSERT INTO `game_graveyard` VALUES (1362, 617, 1218.01, 764.795, 14.7297, 'Dalaran Arena - Team 1 Spawn'); +INSERT INTO `game_graveyard` VALUES (1363, 617, 1361.76, 817.337, 14.8449, 'Dalaran Arena - Team 2 Spawn'); +INSERT INTO `game_graveyard` VALUES (1364, 618, 763.562, -273.999, 3.55343, 'Оргриммар Arena - Team 1 Spawn'); +INSERT INTO `game_graveyard` VALUES (1365, 618, 763.934, -295.01, 3.5588, 'Orgrimmar Arena - Team 2 Spawn'); +INSERT INTO `game_graveyard` VALUES (1366, 618, 762.909, -284.281, 28.2767, 'Orgrimmar Arena - Graveyard'); +INSERT INTO `game_graveyard` VALUES (1367, 607, 1623.7, -94.8278, 12.3511, 'Sands of Ulduran - Alliance Spawn'); +INSERT INTO `game_graveyard` VALUES (1368, 607, 1617.17, 67.1251, 8.05813, 'Sands of Ulduran - Horde Spawn'); +INSERT INTO `game_graveyard` VALUES (1369, 0, 2366.63, -5774.42, 151.543, 'Восточные Чумные земли, Черный оплот: кладбище'); +INSERT INTO `game_graveyard` VALUES (1370, 609, 1886.78, -5784.59, 102.861, 'Черный оплот: кладбище - Глава II/III'); +INSERT INTO `game_graveyard` VALUES (1371, 609, 2116.19, -5286.94, 81.2151, 'Черный оплот: кладбище - Глава IV'); +INSERT INTO `game_graveyard` VALUES (1372, 1, -6115.09, -1339.45, -179.578, 'Кратер Ун\'Горо, Shaper\'s Terrace'); +INSERT INTO `game_graveyard` VALUES (1373, 1, -3769.47, -4883.16, 5.5167, 'Пылевые топи, Терамор (безопасно)'); +INSERT INTO `game_graveyard` VALUES (1374, 1, 1362.55, -5394.17, -28.372, 'Дуротар, Оргриммар (безопасно)'); +INSERT INTO `game_graveyard` VALUES (1375, 0, -8290.62, 1403.52, 4.7304, 'Штормград, Штормград (безопасно)'); +INSERT INTO `game_graveyard` VALUES (1376, 571, 1103.08, -4977.5, 32.3225, 'Ревущий фьорд, Утгард 2: кладбище'); +INSERT INTO `game_graveyard` VALUES (1377, 0, 981.536, 1309.67, 45.9405, 'Великое море - (безопасно) Тирисфаль'); +INSERT INTO `game_graveyard` VALUES (1378, 1, 1342.17, -5527.75, 10.0886, 'Дуротар, Оргриммар (безопасно) 2'); +INSERT INTO `game_graveyard` VALUES (1379, 571, 6351.79, 5643.56, 70.5419, 'Низина Шолазар, уступ Ваятеля Бурь: кладбище'); +INSERT INTO `game_graveyard` VALUES (1380, 571, 5041.85, -642.724, 225.207, 'Лес Хрустальной Песни, Альянс: кладбище'); +INSERT INTO `game_graveyard` VALUES (1381, 571, 6070.45, 85.9704, 369.616, 'Ледяная Корона, Оплот Серебряного Авангарда'); +INSERT INTO `game_graveyard` VALUES (1383, 571, 7080.44, -141.224, 783.232, 'Грозовая Гряда, Valkyrion: кладбище'); +INSERT INTO `game_graveyard` VALUES (1384, 571, 9021.61, -1166.62, 1058.8, 'Грозовая Гряда, Ульдуар: кладбище'); +INSERT INTO `game_graveyard` VALUES (1385, 571, 7915.03, -2453.76, 1137.96, 'Грозовая Гряда, Temple Восток: кладбище'); +INSERT INTO `game_graveyard` VALUES (1387, 571, 8105.5, -996.581, 936.71, 'Грозовая Гряда, Храм, Запад: кладбище'); +INSERT INTO `game_graveyard` VALUES (1388, 571, 7463.99, -3320.57, 897.75, 'Грозовая Гряда, Frostfield: кладбище'); +INSERT INTO `game_graveyard` VALUES (1391, 571, 5882.89, 666.806, 169.508, 'Лес Хрустальной Песни, Запад: кладбище'); +INSERT INTO `game_graveyard` VALUES (1392, 571, 5597.15, -595.531, 190.997, 'Лес Хрустальной Песни, Орда: кладбище'); +INSERT INTO `game_graveyard` VALUES (1393, 571, 3421.2, -1280.93, 125.973, 'Драконий Погост, Наксрамас: кладбище'); +INSERT INTO `game_graveyard` VALUES (1394, 571, 3793.73, 2064.34, 93.6512, 'Драконий Погост, Icemist: кладбище'); +INSERT INTO `game_graveyard` VALUES (1395, 571, 8188.08, 2859.48, 604.076, 'Ледник Ледяной Короны, Quarry: кладбище'); +INSERT INTO `game_graveyard` VALUES (1396, 571, 7233.66, 2159.7, 564.704, 'Ледник Ледяной Короны, Врайкул: кладбище'); +INSERT INTO `game_graveyard` VALUES (1397, 571, 7886.05, 718.776, 519.196, 'Ледник Ледяной Короны, Северо-восток: кладбище'); +INSERT INTO `game_graveyard` VALUES (1398, 571, 4421.3, -1981.25, 158.166, 'Седые холмы, Драк\'Тарон: кладбище'); +INSERT INTO `game_graveyard` VALUES (1399, 607, 1232.39, -65.7293, 70.0843, 'Нордскол BG - Defender Start'); +INSERT INTO `game_graveyard` VALUES (1400, 571, 7825.23, -2023.12, 1225.4, 'Storm Peaks, Temple of the Makers GY'); +INSERT INTO `game_graveyard` VALUES (1401, 571, 8387.58, -214.278, 839.446, 'Грозовая Гряда, Snowdrift: кладбище'); +INSERT INTO `game_graveyard` VALUES (1402, 571, 6947, -545.408, 914.927, 'Грозовая Гряда, Храм Штормов: кладбище'); +INSERT INTO `game_graveyard` VALUES (1403, 571, 6422.35, -1184.35, 446.533, 'Грозовая Гряда, К-3: кладбище'); +INSERT INTO `game_graveyard` VALUES (1404, 571, 5036.33, 4494.32, -93.329, 'Низина Шолазар, Frenzyheart: кладбище'); +INSERT INTO `game_graveyard` VALUES (1405, 0, 2359.22, -5661.06, 382.262, 'Восточные Чумные земли: Акерус'); +INSERT INTO `game_graveyard` VALUES (1407, 571, 7149.75, 3691.58, 817.852, 'Ледяная Корона, Кладбище Йотунхейма'); +INSERT INTO `game_graveyard` VALUES (1408, 571, 7092.46, -1440.91, 922.636, 'Storm Peaks, Foot Steppes GY'); +INSERT INTO `game_graveyard` VALUES (1409, 0, 1773.33, 768.808, 55.6853, 'Подгород - Альянс - Врата Гнева'); +INSERT INTO `game_graveyard` VALUES (1410, 0, 791.432, -419.449, 136.572, 'AAAAA Test Port Loc'); +INSERT INTO `game_graveyard` VALUES (1411, 0, 794.763, -422.394, 135.767, 'Альтеракские горы - центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1416, 1, 7766.53, -4100.77, 697.134, 'Зимние Ключи, Кладбище ледопардов'); +INSERT INTO `game_graveyard` VALUES (1417, 1, 6619.88, -3542.4, 681.873, 'Зимние Ключи, Кладбище на перекрестке'); +INSERT INTO `game_graveyard` VALUES (1418, 1, 4460.24, -4287.7, 917.647, 'Ледяные Оковы, Кладбище Зловещего Шепота'); +INSERT INTO `game_graveyard` VALUES (1419, 1, 4320.15, -5574.72, 121.979, 'Азшара, Урсолан'); +INSERT INTO `game_graveyard` VALUES (1420, 1, 3203.82, -4947.18, 157.752, 'Азшара, Одинокая вершина'); +INSERT INTO `game_graveyard` VALUES (1421, 1, -1439.21, 1972.74, 85.7449, 'Пустоши, Застава Скитающихся Духов'); +INSERT INTO `game_graveyard` VALUES (1422, 1, -1783.51, 2857.27, 56.6694, 'Пустоши, Побережье Сар\'Терис'); +INSERT INTO `game_graveyard` VALUES (1423, 1, -1967.22, 1723.91, 61.6668, 'Пустоши, Поле Маннорок'); +INSERT INTO `game_graveyard` VALUES (1424, 1, -1553.23, 981.849, 90.2898, 'Пустоши, Деревня Маграм'); +INSERT INTO `game_graveyard` VALUES (1425, 1, -481.844, 1221.74, 97.3062, 'Пустоши, Засада на дороге'); +INSERT INTO `game_graveyard` VALUES (1426, 1, 2928.99, 380.251, 91.6667, 'Ясеневый лес, Святилище Эссины'); +INSERT INTO `game_graveyard` VALUES (1427, 1, 2291.3, -1731.71, 118.359, 'Ясеневый лес, Ночная Песня'); +INSERT INTO `game_graveyard` VALUES (1428, 1, 1284.34, -298.896, 5.50894, 'Когтистые горы, Утес Ветрорезов'); +INSERT INTO `game_graveyard` VALUES (1429, 1, 1698.13, 1043.75, 148.291, 'Когтистые горы, Мутное озеро'); +INSERT INTO `game_graveyard` VALUES (1430, 1, 161.386, -1693.86, 93.5516, 'Степи, Забытые пруды'); +INSERT INTO `game_graveyard` VALUES (1431, 1, 790.062, -2541.63, 91.6667, 'Степи, Северное кладбище'); +INSERT INTO `game_graveyard` VALUES (1432, 1, -1887.99, -3055.97, 91.6667, 'Степи, Земли Ящеров'); +INSERT INTO `game_graveyard` VALUES (1433, 1, -1480.13, -2143.87, 92.8206, 'Степи. Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1434, 1, 271.838, -3313.76, 56.0266, 'Степи, Восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1435, 1, -2725.16, -1115.49, 20.148, 'Мулгор, Юго-восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1436, 1, -1171.5, -1129.94, 27.8667, 'Мулгор, Красные скалы'); +INSERT INTO `game_graveyard` VALUES (1437, 1, -5361.55, -2363.09, -37.392, 'Тысяча Игл, Застава Вольного Ветра'); +INSERT INTO `game_graveyard` VALUES (1438, 1, -6115.81, -3849.17, -58.7501, 'Тысяча Игл, Виражи на Миражах'); +INSERT INTO `game_graveyard` VALUES (1439, 1, -9044.9, -2721.88, 37.3756, 'Танарис, Юго-западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1440, 1, -7753.64, -3009.76, 42.0979, 'Танарис, Безбрежные пески'); +INSERT INTO `game_graveyard` VALUES (1441, 1, -5526.86, 1450.52, 23.8921, 'Фералас, Руины Исильдиэна'); +INSERT INTO `game_graveyard` VALUES (1442, 1, -4336.89, -383.392, 36.5298, 'Фералас, Низинные чащобы'); +INSERT INTO `game_graveyard` VALUES (1443, 1, -3332.47, 2276.89, 27.5594, 'Фералас, Два Колосса'); +INSERT INTO `game_graveyard` VALUES (1444, 1, -7967.79, 784.502, -1.01432, 'Силитус, Улей Регал'); +INSERT INTO `game_graveyard` VALUES (1445, 1, -7051.92, 1290.27, 5.88543, 'Силитус, Сумеречный лагерь'); +INSERT INTO `game_graveyard` VALUES (1446, 0, -1343.26, -2046.73, 70.6733, 'Нагорье Арати, Стромгард'); +INSERT INTO `game_graveyard` VALUES (1447, 0, -898.726, -1473.56, 58.0803, 'Предгорья Хилсбрада, Стена Торадина'); +INSERT INTO `game_graveyard` VALUES (1448, 0, 3118.51, -4804, 101.631, 'Восточные Чумные земли, Северный Дол'); +INSERT INTO `game_graveyard` VALUES (1449, 0, 3339.8, -3229.78, 142.813, 'Восточные Чумные земли, Стратхольм'); +INSERT INTO `game_graveyard` VALUES (1450, 0, 2208.66, -2923.06, 107.93, 'Восточные Чумные земли, Западное кладбище'); +INSERT INTO `game_graveyard` VALUES (1451, 0, 2663.41, -1725.17, 123.889, 'Западные Чумные земли, Дольный Очаг'); +INSERT INTO `game_graveyard` VALUES (1452, 0, -577.414, 118.942, 53.746, 'Предгорья Хилсбрада, Хилсбрадские поля'); +INSERT INTO `game_graveyard` VALUES (1453, 0, 581.797, -3827.57, 119.915, 'Внутренние земли, Серадан'); +INSERT INTO `game_graveyard` VALUES (1454, 0, -192.387, -3043.9, 120.136, 'Внутренние земли, Шадра\'Алор'); +INSERT INTO `game_graveyard` VALUES (1455, 0, -2953.3, -1758.1, 9.41316, 'Болотина, Закатное болото'); +INSERT INTO `game_graveyard` VALUES (1456, 0, -3979.8, -2848.51, 12.4631, 'Болотина, Южная дорога'); +INSERT INTO `game_graveyard` VALUES (1457, 0, -3343.1, -3424.86, 64.4794, 'Болотина, Гряда Ящеров'); +INSERT INTO `game_graveyard` VALUES (1458, 0, -13325.5, 153.601, 17.6299, 'Тернистая долина, Арена Гурубаши'); +INSERT INTO `game_graveyard` VALUES (1459, 0, -12547.2, -586.239, 39.5295, 'Тернистая долина, Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1460, 0, -12001.2, 429.749, 2.9454, 'Тернистая долина, Гибельный берег'); +INSERT INTO `game_graveyard` VALUES (1461, 0, -10839.2, -480.764, 42.4602, 'Сумеречный лес, Центральное кладбище'); +INSERT INTO `game_graveyard` VALUES (1462, 0, -11218.7, 1711.25, 39.0291, 'Западный Край, Холмы Разбойничьих Кинжалов'); +INSERT INTO `game_graveyard` VALUES (1463, 0, -9980.25, 1758.08, 37.0801, 'Западный Край, Бескрайний берег'); +INSERT INTO `game_graveyard` VALUES (1464, 0, -11806.6, -2962.69, 7.6522, 'Выжженные земли, Темный портал'); +INSERT INTO `game_graveyard` VALUES (1465, 0, -10320.1, -4121.21, 22.355, 'Болото Печали, Озеро Слез'); +INSERT INTO `game_graveyard` VALUES (1466, 0, -10347.2, -2585.03, 23.5991, 'Болото Печали, Развилка Расщепленного Копья'); +INSERT INTO `game_graveyard` VALUES (1467, 0, -9473, -3009.03, 134.825, 'Красногорье, Крепость Каменной Стражи'); +INSERT INTO `game_graveyard` VALUES (1468, 0, -9564.74, -605.882, 58.4409, 'Элвиннский лес, Башня Азоры'); +INSERT INTO `game_graveyard` VALUES (1469, 0, -7923.56, -1353.23, 134.079, 'Пылающие степи, Черная гора'); +INSERT INTO `game_graveyard` VALUES (1470, 0, -7987.49, -2370.21, 123.923, 'Пылающие степи, Восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1471, 0, -5382.65, 36.6651, 395.442, 'Дун Морог, Заледеневшее озеро'); +INSERT INTO `game_graveyard` VALUES (1472, 0, -5475.18, -1845.84, 399.786, 'Дун Морог, Восточная дорога'); +INSERT INTO `game_graveyard` VALUES (1473, 0, -5329.98, -3779.33, 310.214, 'Лок Модан, Озеро Лок'); +INSERT INTO `game_graveyard` VALUES (1474, 571, 5463.84, 2840.68, 418.675, 'Ледяные Оковы, Кладбище крепости (интерьер)'); +INSERT INTO `game_graveyard` VALUES (1476, 1, -103.292, -694.41, 4.24112, 'Когтистые горы, юго-восточное кладбище'); +INSERT INTO `game_graveyard` VALUES (1477, 571, 4680.72, 51.0167, 73.2117, 'Драконий Погост, кладбище Порочных Кристаллов'); +INSERT INTO `game_graveyard` VALUES (1478, 571, 8466.05, 450.37, 596.072, 'Ледяная Корона, Кладбище Серебряного турнира'); +INSERT INTO `game_graveyard` VALUES (1480, 628, 635.385, -279.658, 11.3836, 'Icecrown BG - GY - Docks'); +INSERT INTO `game_graveyard` VALUES (1481, 628, 774.179, -1094.28, 135.413, 'Icecrown BG - GY - Airport'); +INSERT INTO `game_graveyard` VALUES (1482, 628, 774.839, -660.219, 8.88468, 'Icecrown BG - GY - Workshop'); +INSERT INTO `game_graveyard` VALUES (1483, 628, 455.207, -314.594, 50.991, 'Icecrown BG - GY - Alliance Default'); +INSERT INTO `game_graveyard` VALUES (1484, 628, 1141.49, -1226.22, 14.9473, 'Icecrown BG - GY - Horde Default'); +INSERT INTO `game_graveyard` VALUES (1485, 628, 278.356, -876.965, 48.9163, 'ПБ Ледяной Короны - кладбище - крепость Альянса'); +INSERT INTO `game_graveyard` VALUES (1486, 628, 1302.6, -814.651, 48.9163, 'ПБ Ледяной Короны - кладбище - крепость Орды'); +INSERT INTO `game_graveyard` VALUES (1493, 1, -647.207, -1118.61, 211.598, 'Степи, Застава Чести'); +INSERT INTO `game_graveyard` VALUES (1681, 1, -4556.28, -3599.44, 41.3195, 'Пылевые топи, Драконьи топи'); +INSERT INTO `game_graveyard` VALUES (1682, 571, 6447.49, 2060.86, 564.03, 'Ледник Ледяной Короны, Цитадель: кладбище'); +INSERT INTO `game_graveyard` VALUES (1683, 580, 1620.95, 624.701, 32.8968, 'Вход в Солнечный Колодец - Кель\'Делар'); +INSERT INTO `game_graveyard` VALUES (1691, 0, -13205.6, 272.703, 21.8571, 'AAA - Arena (Dev Test)'); +INSERT INTO `game_graveyard` VALUES (1720, 571, 2585.83, -5808.93, 296.197, 'Ревущий фьорд, Кладбище Ледяного Клинка'); \ No newline at end of file diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 8047a2b58..21b532056 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -20,6 +20,7 @@ #include "CreatureTextMgr.h" #include "GroupMgr.h" #include "Transport.h" +#include "GameGraveyard.h" Battlefield::Battlefield() { @@ -583,7 +584,7 @@ BfGraveyard* Battlefield::GetGraveyardById(uint32 id) const return NULL; } -WorldSafeLocsEntry const * Battlefield::GetClosestGraveyard(Player* player) +GraveyardStruct const * Battlefield::GetClosestGraveyard(Player* player) { BfGraveyard* closestGY = NULL; float maxdist = -1; @@ -604,7 +605,7 @@ WorldSafeLocsEntry const * Battlefield::GetClosestGraveyard(Player* player) } if (closestGY) - return sWorldSafeLocsStore.LookupEntry(closestGY->GetGraveyardId()); + return sGraveyard->GetGraveyard(closestGY->GetGraveyardId()); return NULL; } @@ -682,7 +683,7 @@ void BfGraveyard::SetSpirit(Creature* spirit, TeamId team) float BfGraveyard::GetDistance(Player* player) { - const WorldSafeLocsEntry* safeLoc = sWorldSafeLocsStore.LookupEntry(m_GraveyardId); + const GraveyardStruct* safeLoc = sGraveyard->GetGraveyard(m_GraveyardId); return player->GetDistance2d(safeLoc->x, safeLoc->y); } @@ -744,7 +745,7 @@ void BfGraveyard::GiveControlTo(TeamId team) void BfGraveyard::RelocateDeadPlayers() { - WorldSafeLocsEntry const* closestGrave = NULL; + GraveyardStruct const* closestGrave = NULL; for (GuidSet::const_iterator itr = m_ResurrectQueue.begin(); itr != m_ResurrectQueue.end(); ++itr) { Player* player = ObjectAccessor::FindPlayer(*itr); diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index 245eba7de..78f77eea4 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -285,7 +285,7 @@ class Battlefield : public ZoneScript // Graveyard methods // Find which graveyard the player must be teleported to to be resurrected by spiritguide - WorldSafeLocsEntry const * GetClosestGraveyard(Player* player); + GraveyardStruct const * GetClosestGraveyard(Player* player); virtual void AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid); void RemovePlayerFromResurrectQueue(uint64 player_guid); diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 9ee97ac8f..1c2bb1be4 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -32,6 +32,7 @@ #include "BattlegroundRV.h" #include "Transport.h" #include "ScriptMgr.h" +#include "GameGraveyard.h" #ifdef ELUNA #include "LuaEngine.h" #endif @@ -1434,7 +1435,7 @@ void Battleground::RelocateDeadPlayers(uint64 queueIndex) std::vector& ghostList = m_ReviveQueue[queueIndex]; if (!ghostList.empty()) { - WorldSafeLocsEntry const* closestGrave = NULL; + GraveyardStruct const* closestGrave = NULL; for (std::vector::const_iterator itr = ghostList.begin(); itr != ghostList.end(); ++itr) { Player* player = ObjectAccessor::FindPlayer(*itr); @@ -1914,9 +1915,9 @@ void Battleground::SetBgRaid(TeamId teamId, Group* bg_raid) old_raid = bg_raid; } -WorldSafeLocsEntry const* Battleground::GetClosestGraveyard(Player* player) +GraveyardStruct const* Battleground::GetClosestGraveyard(Player* player) { - return sObjectMgr->GetClosestGraveyard(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), player->GetBgTeamId()); + return sGraveyard->GetClosestGraveyard(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), player->GetBgTeamId()); } void Battleground::StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry) diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 01d4259f4..7f4d52cce 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -31,7 +31,7 @@ class BattlegroundRV; class BattlegroundIC; struct PvPDifficultyEntry; -struct WorldSafeLocsEntry; +struct GraveyardStruct; enum BattlegroundDesertionType { @@ -541,7 +541,7 @@ class Battleground virtual void HandlePlayerResurrect(Player* /*player*/) {} // Death related - virtual WorldSafeLocsEntry const* GetClosestGraveyard(Player* player); + virtual GraveyardStruct const* GetClosestGraveyard(Player* player); virtual void AddPlayer(Player* player); // must be implemented in BG subclass diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index 426bfa1fe..32d47992e 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -34,6 +34,7 @@ #include "DisableMgr.h" #include "Opcodes.h" #include "BattlegroundQueue.h" +#include "GameGraveyard.h" #ifdef ELUNA #include "LuaEngine.h" #endif @@ -649,7 +650,7 @@ void BattlegroundMgr::CreateInitialBattlegrounds() else { uint32 startId = fields[5].GetUInt32(); - if (WorldSafeLocsEntry const* start = sWorldSafeLocsStore.LookupEntry(startId)) + if (GraveyardStruct const* start = sGraveyard->GetGraveyard(startId)) { data.Team1StartLocX = start->x; data.Team1StartLocY = start->y; @@ -658,12 +659,12 @@ void BattlegroundMgr::CreateInitialBattlegrounds() } else { - sLog->outError("Table `battleground_template` for id %u have non-existed WorldSafeLocs.dbc id %u in field `AllianceStartLoc`. BG not created.", data.bgTypeId, startId); + sLog->outError("Table `battleground_template` for id %u have non-existed `game_graveyard` table id %u in field `AllianceStartLoc`. BG not created.", data.bgTypeId, startId); continue; } startId = fields[7].GetUInt32(); - if (WorldSafeLocsEntry const* start = sWorldSafeLocsStore.LookupEntry(startId)) + if (GraveyardStruct const* start = sGraveyard->GetGraveyard(startId)) { data.Team2StartLocX = start->x; data.Team2StartLocY = start->y; @@ -672,7 +673,7 @@ void BattlegroundMgr::CreateInitialBattlegrounds() } else { - sLog->outError("Table `battleground_template` for id %u have non-existed WorldSafeLocs.dbc id %u in field `HordeStartLoc`. BG not created.", data.bgTypeId, startId); + sLog->outError("Table `battleground_template` for id %u have non-existed `game_graveyard` table id %u in field `HordeStartLoc`. BG not created.", data.bgTypeId, startId); continue; } } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 59d481a51..76eb3d135 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -13,6 +13,7 @@ #include "Player.h" #include "Util.h" #include "WorldSession.h" +#include "GameGraveyard.h" BattlegroundAB::BattlegroundAB() { @@ -424,10 +425,10 @@ void BattlegroundAB::EndBattleground(TeamId winnerTeamId) _bgEvents.Reset(); } -WorldSafeLocsEntry const* BattlegroundAB::GetClosestGraveyard(Player* player) +GraveyardStruct const* BattlegroundAB::GetClosestGraveyard(Player* player) { - WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.LookupEntry(BG_AB_GraveyardIds[BG_AB_SPIRIT_ALIANCE + player->GetTeamId()]); - WorldSafeLocsEntry const* nearestEntry = entry; + GraveyardStruct const* entry = sGraveyard->GetGraveyard(BG_AB_GraveyardIds[BG_AB_SPIRIT_ALIANCE + player->GetTeamId()]); + GraveyardStruct const* nearestEntry = entry; float pX = player->GetPositionX(); float pY = player->GetPositionY(); @@ -437,7 +438,7 @@ WorldSafeLocsEntry const* BattlegroundAB::GetClosestGraveyard(Player* player) for (uint8 i = BG_AB_NODE_STABLES; i < BG_AB_DYNAMIC_NODES_COUNT; ++i) if (_capturePointInfo[i]._ownerTeamId == player->GetTeamId()) { - entry = sWorldSafeLocsStore.LookupEntry(BG_AB_GraveyardIds[i]); + entry = sGraveyard->GetGraveyard(BG_AB_GraveyardIds[i]); dist = (entry->x - pX)*(entry->x - pX) + (entry->y - pY)*(entry->y - pY); if (dist < minDist) { diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index f837cd8b7..ed0fea0d1 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -235,7 +235,7 @@ class BattlegroundAB : public Battleground bool SetupBattleground(); void Init(); void EndBattleground(TeamId winnerTeamId); - WorldSafeLocsEntry const* GetClosestGraveyard(Player* player); + GraveyardStruct const* GetClosestGraveyard(Player* player); void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true); void FillInitialWorldStates(WorldPacket& data); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index 9fc9a78b2..9fe959232 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -15,6 +15,7 @@ #include "SpellAuras.h" #include "GameEventMgr.h" #include "WorldSession.h" +#include "GameGraveyard.h" BattlegroundAV::BattlegroundAV() { @@ -1174,23 +1175,23 @@ void BattlegroundAV::SendMineWorldStates(uint32 mine) UpdateWorldState(BG_AV_MineWorldStates[mine][owner], 1); } -WorldSafeLocsEntry const* BattlegroundAV::GetClosestGraveyard(Player* player) +GraveyardStruct const* BattlegroundAV::GetClosestGraveyard(Player* player) { - WorldSafeLocsEntry const* pGraveyard = NULL; - WorldSafeLocsEntry const* entry = NULL; + GraveyardStruct const* pGraveyard = NULL; + GraveyardStruct const* entry = NULL; float dist = 0; float minDist = 0; float x, y; player->GetPosition(x, y); - pGraveyard = sWorldSafeLocsStore.LookupEntry(BG_AV_GraveyardIds[player->GetTeamId()+7]); + pGraveyard = sGraveyard->GetGraveyard(BG_AV_GraveyardIds[player->GetTeamId()+7]); minDist = (pGraveyard->x - x)*(pGraveyard->x - x)+(pGraveyard->y - y)*(pGraveyard->y - y); for (uint8 i = BG_AV_NODES_FIRSTAID_STATION; i <= BG_AV_NODES_FROSTWOLF_HUT; ++i) if (m_Nodes[i].OwnerId == player->GetTeamId() && m_Nodes[i].State == POINT_CONTROLED) { - entry = sWorldSafeLocsStore.LookupEntry(BG_AV_GraveyardIds[i]); + entry = sGraveyard->GetGraveyard(BG_AV_GraveyardIds[i]); if (entry) { dist = (entry->x - x)*(entry->x - x)+(entry->y - y)*(entry->y - y); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index 016107f2c..c1b1826c7 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -1591,7 +1591,7 @@ class BattlegroundAV : public Battleground void EndBattleground(TeamId winnerTeamId); - WorldSafeLocsEntry const* GetClosestGraveyard(Player* player); + GraveyardStruct const* GetClosestGraveyard(Player* player); /* achievement req. */ bool IsBothMinesControlledByTeam(TeamId teamId) const; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index b6a10ec61..812c68d3d 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -13,6 +13,7 @@ #include "Player.h" #include "Util.h" #include "WorldSession.h" +#include "GameGraveyard.h" BattlegroundEY::BattlegroundEY() { @@ -309,11 +310,11 @@ bool BattlegroundEY::SetupBattleground() AddObject(BG_EY_OBJECT_SPEEDBUFF_FEL_REAVER + i * 3 + 2, Buff_Entries[2], at->x, at->y, at->z, 0.907571f, 0, 0, 0.438371f, 0.898794f, RESPAWN_ONE_DAY); } - WorldSafeLocsEntry const* sg = NULL; - sg = sWorldSafeLocsStore.LookupEntry(BG_EY_GRAVEYARD_MAIN_ALLIANCE); + GraveyardStruct const* sg = NULL; + sg = sGraveyard->GetGraveyard(BG_EY_GRAVEYARD_MAIN_ALLIANCE); AddSpiritGuide(BG_EY_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, TEAM_ALLIANCE); - sg = sWorldSafeLocsStore.LookupEntry(BG_EY_GRAVEYARD_MAIN_HORDE); + sg = sGraveyard->GetGraveyard(BG_EY_GRAVEYARD_MAIN_HORDE); AddSpiritGuide(BG_EY_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, TEAM_HORDE); for (uint32 i = BG_EY_OBJECT_DOOR_A; i < BG_EY_OBJECT_MAX; ++i) @@ -480,7 +481,7 @@ void BattlegroundEY::EventTeamCapturedPoint(TeamId teamId, uint32 point) if (BgCreatures[point]) DelCreature(point); - WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[point].GraveYardId); + GraveyardStruct const* sg = sGraveyard->GetGraveyard(m_CapturingPointTypes[point].GraveYardId); AddSpiritGuide(point, sg->x, sg->y, sg->z, 3.124139f, teamId); UpdatePointsIcons(point); @@ -565,10 +566,10 @@ void BattlegroundEY::FillInitialWorldStates(WorldPacket& data) data << uint32(PROGRESS_BAR_STATUS) << uint32(0); } -WorldSafeLocsEntry const* BattlegroundEY::GetClosestGraveyard(Player* player) +GraveyardStruct const* BattlegroundEY::GetClosestGraveyard(Player* player) { - WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.LookupEntry(BG_EY_GRAVEYARD_MAIN_ALLIANCE + player->GetTeamId()); - WorldSafeLocsEntry const* nearestEntry = entry; + GraveyardStruct const* entry = sGraveyard->GetGraveyard(BG_EY_GRAVEYARD_MAIN_ALLIANCE + player->GetTeamId()); + GraveyardStruct const* nearestEntry = entry; float pX = player->GetPositionX(); float pY = player->GetPositionY(); @@ -579,7 +580,7 @@ WorldSafeLocsEntry const* BattlegroundEY::GetClosestGraveyard(Player* player) for (uint8 i = 0; i < EY_POINTS_MAX; ++i) if (_capturePointInfo[i].IsUnderControl(player->GetTeamId())) { - entry = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[i].GraveYardId); + entry = sGraveyard->GetGraveyard(m_CapturingPointTypes[i].GraveYardId); dist = (entry->x - pX)*(entry->x - pX) + (entry->y - pY)*(entry->y - pY) + (entry->z - pZ)*(entry->z - pZ); if (dist < minDist) { diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index 5bc1c75f7..3740147b3 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -336,7 +336,7 @@ class BattlegroundEY : public Battleground void HandleBuffUse(uint64 buff_guid); void HandleAreaTrigger(Player* player, uint32 trigger); void HandleKillPlayer(Player* player, Player* killer); - WorldSafeLocsEntry const* GetClosestGraveyard(Player* player); + GraveyardStruct const* GetClosestGraveyard(Player* player); bool SetupBattleground(); void Init(); void EndBattleground(TeamId winnerTeamId); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index c2088dfb3..fc2a6fcb1 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -15,6 +15,7 @@ #include "Transport.h" #include "WorldSession.h" #include "ScriptedCreature.h" +#include "GameGraveyard.h" BattlegroundIC::BattlegroundIC() { @@ -950,7 +951,7 @@ void BattlegroundIC::EventPlayerDamagedGO(Player* /*player*/, GameObject* /*go*/ } -WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveyard(Player* player) +GraveyardStruct const* BattlegroundIC::GetClosestGraveyard(Player* player) { // Is there any occupied node for this team? std::vector nodes; @@ -958,7 +959,7 @@ WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveyard(Player* player) if (nodePoint[i].faction == player->GetTeamId() && !nodePoint[i].needChange) // xinef: controlled by faction and not contested! nodes.push_back(i); - WorldSafeLocsEntry const* good_entry = NULL; + GraveyardStruct const* good_entry = NULL; // If so, select the closest node to place ghost on if (!nodes.empty()) { @@ -968,7 +969,7 @@ WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveyard(Player* player) float mindist = 999999.0f; for (uint8 i = 0; i < nodes.size(); ++i) { - WorldSafeLocsEntry const*entry = sWorldSafeLocsStore.LookupEntry(BG_IC_GraveyardIds[nodes[i]]); + GraveyardStruct const*entry = sGraveyard->GetGraveyard(BG_IC_GraveyardIds[nodes[i]]); if (!entry) continue; float dist = (entry->x - plr_x)*(entry->x - plr_x)+(entry->y - plr_y)*(entry->y - plr_y); @@ -982,7 +983,7 @@ WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveyard(Player* player) } // If not, place ghost on starting location if (!good_entry) - good_entry = sWorldSafeLocsStore.LookupEntry(BG_IC_GraveyardIds[player->GetTeamId()+MAX_NODE_TYPES]); + good_entry = sGraveyard->GetGraveyard(BG_IC_GraveyardIds[player->GetTeamId()+MAX_NODE_TYPES]); return good_entry; } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h index 778ce450e..c54eca52c 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h @@ -911,7 +911,7 @@ class BattlegroundIC : public Battleground void EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType); void DestroyGate(Player* player, GameObject* go); - WorldSafeLocsEntry const* GetClosestGraveyard(Player* player); + GraveyardStruct const* GetClosestGraveyard(Player* player); /* Scorekeeping */ void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index a2570e26d..b28340a9c 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -11,6 +11,7 @@ #include "ObjectMgr.h" #include "WorldPacket.h" #include "WorldSession.h" +#include "GameGraveyard.h" BattlegroundSA::BattlegroundSA() { @@ -163,8 +164,8 @@ bool BattlegroundSA::ResetObjs() //Graveyards! for (uint8 i = 0;i < BG_SA_MAX_GY; i++) { - WorldSafeLocsEntry const* sg = NULL; - sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); + GraveyardStruct const* sg = NULL; + sg = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]); if (!sg) { @@ -761,9 +762,9 @@ void BattlegroundSA::DestroyGate(Player* player, GameObject* go) } } -WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveyard(Player* player) +GraveyardStruct const* BattlegroundSA::GetClosestGraveyard(Player* player) { - WorldSafeLocsEntry const* closest = NULL; + GraveyardStruct const* closest = NULL; float mindist = 999999.0f; float x, y; @@ -774,7 +775,7 @@ WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveyard(Player* player) if (GraveyardStatus[i] != player->GetTeamId()) continue; - WorldSafeLocsEntry const* ret = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); + GraveyardStruct const* ret = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]); // if on beach if (i == BG_SA_BEACH_GY) @@ -792,7 +793,7 @@ WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveyard(Player* player) } } if (!closest && GraveyardStatus[BG_SA_BEACH_GY] == player->GetTeamId()) - return sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[BG_SA_BEACH_GY]); + return sGraveyard->GetGraveyard(BG_SA_GYEntries[BG_SA_BEACH_GY]); return closest; @@ -883,7 +884,7 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player *Source) std::vector ghost_list = m_ReviveQueue[BgCreatures[BG_SA_MAXNPC + i]]; if (!ghost_list.empty()) { - WorldSafeLocsEntry const* ClosestGrave = NULL; + GraveyardStruct const* ClosestGrave = NULL; for (std::vector::const_iterator itr = ghost_list.begin(); itr != ghost_list.end(); ++itr) { Player* player = ObjectAccessor::FindPlayer(*itr); @@ -902,7 +903,7 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player *Source) DelCreature(BG_SA_MAXNPC + i); - WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]); + GraveyardStruct const* sg = sGraveyard->GetGraveyard(BG_SA_GYEntries[i]); if (!sg) { sLog->outError("BattlegroundSA::CaptureGraveyard: non-existant GY entry: %u", BG_SA_GYEntries[i]); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index d4bb97cbe..8802d8095 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -445,7 +445,7 @@ class BattlegroundSA : public Battleground /// Called when a player kill a unit in bg void HandleKillUnit(Creature* creature, Player* killer); /// Return the nearest graveyard where player can respawn - WorldSafeLocsEntry const* GetClosestGraveyard(Player* player); + GraveyardStruct const* GetClosestGraveyard(Player* player); /// Called when a player click on flag (graveyard flag) void EventPlayerClickedOnFlag(Player* Source, GameObject* gameObject); /// Called when a player use a gamobject (relic) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index fa8cae37e..c7ca7fd35 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -12,6 +12,7 @@ #include "Player.h" #include "World.h" #include "WorldPacket.h" +#include "GameGraveyard.h" BattlegroundWS::BattlegroundWS() { @@ -401,10 +402,10 @@ bool BattlegroundWS::SetupBattleground() AddObject(BG_WS_OBJECT_DOOR_H_4, BG_OBJECT_DOOR_H_4_WS_ENTRY, 950.7952f, 1459.583f, 342.1523f, 0.05235988f, 0, 0, 0.02617695f, 0.9996573f, RESPAWN_IMMEDIATELY); - WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_ALLIANCE); + GraveyardStruct const* sg = sGraveyard->GetGraveyard(WS_GRAVEYARD_MAIN_ALLIANCE); AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, TEAM_ALLIANCE); - sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_HORDE); + sg = sGraveyard->GetGraveyard(WS_GRAVEYARD_MAIN_HORDE); AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, TEAM_HORDE); for (uint32 i = BG_WS_OBJECT_DOOR_A_1; i < BG_WS_OBJECT_MAX; ++i) @@ -495,12 +496,12 @@ void BattlegroundWS::UpdatePlayerScore(Player* player, uint32 type, uint32 value } } -WorldSafeLocsEntry const* BattlegroundWS::GetClosestGraveyard(Player* player) +GraveyardStruct const* BattlegroundWS::GetClosestGraveyard(Player* player) { if (GetStatus() == STATUS_IN_PROGRESS) - return sWorldSafeLocsStore.LookupEntry(player->GetTeamId() == TEAM_ALLIANCE ? WS_GRAVEYARD_MAIN_ALLIANCE : WS_GRAVEYARD_MAIN_HORDE); + return sGraveyard->GetGraveyard(player->GetTeamId() == TEAM_ALLIANCE ? WS_GRAVEYARD_MAIN_ALLIANCE : WS_GRAVEYARD_MAIN_HORDE); else - return sWorldSafeLocsStore.LookupEntry(player->GetTeamId() == TEAM_ALLIANCE ? WS_GRAVEYARD_FLAGROOM_ALLIANCE : WS_GRAVEYARD_FLAGROOM_HORDE); + return sGraveyard->GetGraveyard(player->GetTeamId() == TEAM_ALLIANCE ? WS_GRAVEYARD_FLAGROOM_ALLIANCE : WS_GRAVEYARD_FLAGROOM_HORDE); } void BattlegroundWS::FillInitialWorldStates(WorldPacket& data) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h index 2861e27b5..ee564162a 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h @@ -176,7 +176,7 @@ class BattlegroundWS : public Battleground bool SetupBattleground(); void Init(); void EndBattleground(TeamId winnerTeamId); - WorldSafeLocsEntry const* GetClosestGraveyard(Player* player); + GraveyardStruct const* GetClosestGraveyard(Player* player); void UpdateFlagState(TeamId teamId, uint32 value); void UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true); diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 347de8c78..4eada1a69 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -183,7 +183,6 @@ DBCStorage sVehicleSeatStore(VehicleSeatEntryfmt); DBCStorage sWMOAreaTableStore(WMOAreaTableEntryfmt); DBCStorage sWorldMapAreaStore(WorldMapAreaEntryfmt); DBCStorage sWorldMapOverlayStore(WorldMapOverlayEntryfmt); -DBCStorage sWorldSafeLocsStore(WorldSafeLocsEntryfmt); typedef std::list StoreProblemList; @@ -589,7 +588,6 @@ void LoadDBCStores(const std::string& dataPath) sWMOAreaInfoByTripple.insert(WMOAreaInfoByTripple::value_type(WMOAreaTableTripple(entry->rootId, entry->adtId, entry->groupId), entry)); LoadDBC(availableDbcLocales, bad_dbc_files, sWorldMapAreaStore, dbcPath, "WorldMapArea.dbc"); LoadDBC(availableDbcLocales, bad_dbc_files, sWorldMapOverlayStore, dbcPath, "WorldMapOverlay.dbc"); - LoadDBC(availableDbcLocales, bad_dbc_files, sWorldSafeLocsStore, dbcPath, "WorldSafeLocs.dbc"); // error checks if (bad_dbc_files.size() >= DBCFileCount) diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 5c8f4e8e9..3c64658d4 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -159,7 +159,6 @@ extern DBCStorage sVehicleSeatStore; extern DBCStorage sWMOAreaTableStore; //extern DBCStorage sWorldMapAreaStore; -- use Zone2MapCoordinates and Map2ZoneCoordinates extern DBCStorage sWorldMapOverlayStore; -extern DBCStorage sWorldSafeLocsStore; void LoadDBCStores(const std::string& dataPath); diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index c0a2f98eb..6ee68b30d 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -2044,17 +2044,6 @@ struct WorldMapOverlayEntry // 9-16 some ints }; -struct WorldSafeLocsEntry -{ - uint32 ID; // 0 - uint32 map_id; // 1 - float x; // 2 - float y; // 3 - float z; // 4 - //char* name[16] // 5-20 name, unused - // 21 name flags, unused -}; - /* struct WorldStateSounds { diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index d5441bcdd..85bde05b4 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -116,6 +116,5 @@ char const VehicleSeatEntryfmt[] = "niiffffffffffiiiiiifffffffiiifffiiiiiiiffiii char const WMOAreaTableEntryfmt[] = "niiixxxxxiixxxxxxxxxxxxxxxxx"; char const WorldMapAreaEntryfmt[] = "xinxffffixx"; char const WorldMapOverlayEntryfmt[] = "nxiiiixxxxxxxxxxx"; -char const WorldSafeLocsEntryfmt[] = "nifffxxxxxxxxxxxxxxxxx"; #endif diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ea18fe43e..4d77527b7 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -76,6 +76,7 @@ #include "SavingSystem.h" #include "TicketMgr.h" #include "ScriptMgr.h" +#include "GameGraveyard.h" #ifdef ELUNA #include "LuaEngine.h" @@ -5566,7 +5567,7 @@ void Player::RepopAtGraveyard() SpawnCorpseBones(); } - WorldSafeLocsEntry const* ClosestGrave = NULL; + GraveyardStruct const* ClosestGrave = NULL; // Special handle for battleground maps if (Battleground* bg = GetBattleground()) @@ -5576,7 +5577,7 @@ void Player::RepopAtGraveyard() if (sBattlefieldMgr->GetBattlefieldToZoneId(GetZoneId())) ClosestGrave = sBattlefieldMgr->GetBattlefieldToZoneId(GetZoneId())->GetClosestGraveyard(this); else - ClosestGrave = sObjectMgr->GetClosestGraveyard(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeamId()); + ClosestGrave = sGraveyard->GetClosestGraveyard(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeamId()); } // stop countdown until repop @@ -5586,11 +5587,11 @@ void Player::RepopAtGraveyard() // and don't show spirit healer location if (ClosestGrave) { - TeleportTo(ClosestGrave->map_id, ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, GetOrientation()); + TeleportTo(ClosestGrave->Map, ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, GetOrientation()); if (isDead()) // not send if alive, because it used in TeleportTo() { WorldPacket data(SMSG_DEATH_RELEASE_LOC, 4*4); // show spirit healer position on minimap - data << ClosestGrave->map_id; + data << ClosestGrave->Map; data << ClosestGrave->x; data << ClosestGrave->y; data << ClosestGrave->z; @@ -22564,8 +22565,8 @@ void Player::SetEntryPoint() if (GetMap()->IsDungeon()) { - if (const WorldSafeLocsEntry* entry = sObjectMgr->GetClosestGraveyard(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeamId())) - m_entryPointData.joinPos = WorldLocation(entry->map_id, entry->x, entry->y, entry->z, 0.0f); + if (const GraveyardStruct* entry = sGraveyard->GetClosestGraveyard(GetPositionX(), GetPositionY(), GetPositionZ(), GetMapId(), GetTeamId())) + m_entryPointData.joinPos = WorldLocation(entry->Map, entry->x, entry->y, entry->z, 0.0f); } else if (!GetMap()->IsBattlegroundOrArena()) m_entryPointData.joinPos = WorldLocation(GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index a804da312..8748288f8 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -5858,293 +5858,6 @@ uint32 ObjectMgr::GetTaxiMountDisplayId(uint32 id, TeamId teamId, bool allowed_a return mount_id; } -void ObjectMgr::LoadGraveyardZones() -{ - uint32 oldMSTime = getMSTime(); - - GraveyardStore.clear(); // need for reload case - - // 0 1 2 - QueryResult result = WorldDatabase.Query("SELECT id, ghost_zone, faction FROM game_graveyard_zone"); - - if (!result) - { - sLog->outString(">> Loaded 0 graveyard-zone links. DB table `game_graveyard_zone` is empty."); - sLog->outString(); - return; - } - - uint32 count = 0; - - do - { - ++count; - - Field* fields = result->Fetch(); - - uint32 safeLocId = fields[0].GetUInt32(); - uint32 zoneId = fields[1].GetUInt32(); - uint32 team = fields[2].GetUInt16(); - TeamId teamId = team == 0 ? TEAM_NEUTRAL : (team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE); - - WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.LookupEntry(safeLocId); - if (!entry) - { - sLog->outErrorDb("Table `game_graveyard_zone` has a record for not existing graveyard (WorldSafeLocs.dbc id) %u, skipped.", safeLocId); - continue; - } - - AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(zoneId); - if (!areaEntry) - { - sLog->outErrorDb("Table `game_graveyard_zone` has a record for not existing zone id (%u), skipped.", zoneId); - continue; - } - - if (areaEntry->zone != 0) - { - sLog->outErrorDb("Table `game_graveyard_zone` has a record for subzone id (%u) instead of zone, skipped.", zoneId); - continue; - } - - if (team != 0 && team != HORDE && team != ALLIANCE) - { - sLog->outErrorDb("Table `game_graveyard_zone` has a record for non player faction (%u), skipped.", team); - continue; - } - - if (!AddGraveyardLink(safeLocId, zoneId, teamId, false)) - sLog->outErrorDb("Table `game_graveyard_zone` has a duplicate record for Graveyard (ID: %u) and Zone (ID: %u), skipped.", safeLocId, zoneId); - } while (result->NextRow()); - - sLog->outString(">> Loaded %u graveyard-zone links in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); - sLog->outString(); -} - -WorldSafeLocsEntry const* ObjectMgr::GetDefaultGraveyard(TeamId teamId) -{ - enum DefaultGraveyard - { - HORDE_GRAVEYARD = 10, // Crossroads - ALLIANCE_GRAVEYARD = 4, // Westfall - }; - - return sWorldSafeLocsStore.LookupEntry(teamId == TEAM_HORDE ? HORDE_GRAVEYARD : ALLIANCE_GRAVEYARD); -} - -WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveyard(float x, float y, float z, uint32 MapId, TeamId teamId) -{ - // search for zone associated closest graveyard - uint32 zoneId = sMapMgr->GetZoneId(MapId, x, y, z); - - if (!zoneId) - { - if (z > -500) - { - sLog->outError("ZoneId not found for map %u coords (%f, %f, %f)", MapId, x, y, z); - return GetDefaultGraveyard(teamId); - } - } - - // Simulate std. algorithm: - // found some graveyard associated to (ghost_zone, ghost_map) - // - // if mapId == graveyard.mapId (ghost in plain zone or city or battleground) and search graveyard at same map - // then check faction - // if mapId != graveyard.mapId (ghost in instance) and search any graveyard associated - // then check faction - GraveyardMapBounds range = GraveyardStore.equal_range(zoneId); - MapEntry const* map = sMapStore.LookupEntry(MapId); - - // not need to check validity of map object; MapId _MUST_ be valid here - if (range.first == range.second && !map->IsBattlegroundOrArena()) - { - sLog->outErrorDb("Table `game_graveyard_zone` incomplete: Zone %u Team %u does not have a linked graveyard.", zoneId, teamId); - return GetDefaultGraveyard(teamId); - } - - // at corpse map - bool foundNear = false; - float distNear = 10000; - WorldSafeLocsEntry const* entryNear = NULL; - - // at entrance map for corpse map - bool foundEntr = false; - float distEntr = 10000; - WorldSafeLocsEntry const* entryEntr = NULL; - - // some where other - WorldSafeLocsEntry const* entryFar = NULL; - - MapEntry const* mapEntry = sMapStore.LookupEntry(MapId); - - for (; range.first != range.second; ++range.first) - { - GraveyardData const& data = range.first->second; - WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.LookupEntry(data.safeLocId); - if (!entry) - { - sLog->outErrorDb("Table `game_graveyard_zone` has record for not existing graveyard (WorldSafeLocs.dbc id) %u, skipped.", data.safeLocId); - continue; - } - - // skip enemy faction graveyard - // team == 0 case can be at call from .neargrave - if (data.teamId != TEAM_NEUTRAL && teamId != TEAM_NEUTRAL && data.teamId != teamId) - continue; - - // find now nearest graveyard at other map - if (MapId != entry->map_id) - { - // if find graveyard at different map from where entrance placed (or no entrance data), use any first - if (!mapEntry - || mapEntry->entrance_map < 0 - || uint32(mapEntry->entrance_map) != entry->map_id - || (mapEntry->entrance_x == 0 && mapEntry->entrance_y == 0)) - { - // not have any corrdinates for check distance anyway - entryFar = entry; - continue; - } - - // at entrance map calculate distance (2D); - float dist2 = (entry->x - mapEntry->entrance_x)*(entry->x - mapEntry->entrance_x) - +(entry->y - mapEntry->entrance_y)*(entry->y - mapEntry->entrance_y); - if (foundEntr) - { - if (dist2 < distEntr) - { - distEntr = dist2; - entryEntr = entry; - } - } - else - { - foundEntr = true; - distEntr = dist2; - entryEntr = entry; - } - } - // find now nearest graveyard at same map - else - { - float dist2 = (entry->x - x)*(entry->x - x)+(entry->y - y)*(entry->y - y)+(entry->z - z)*(entry->z - z); - if (foundNear) - { - if (dist2 < distNear) - { - distNear = dist2; - entryNear = entry; - } - } - else - { - foundNear = true; - distNear = dist2; - entryNear = entry; - } - } - } - - if (entryNear) - return entryNear; - - if (entryEntr) - return entryEntr; - - return entryFar; -} - -GraveyardData const* ObjectMgr::FindGraveyardData(uint32 id, uint32 zoneId) -{ - GraveyardMapBounds range = GraveyardStore.equal_range(zoneId); - for (; range.first != range.second; ++range.first) - { - GraveyardData const& data = range.first->second; - if (data.safeLocId == id) - return &data; - } - return NULL; -} - -bool ObjectMgr::AddGraveyardLink(uint32 id, uint32 zoneId, TeamId teamId, bool persist /*= true*/) -{ - if (FindGraveyardData(id, zoneId)) - return false; - - // add link to loaded data - GraveyardData data; - data.safeLocId = id; - data.teamId = teamId; - - GraveyardStore.insert(GraveyardContainer::value_type(zoneId, data)); - - // add link to DB - if (persist) - { - PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GRAVEYARD_ZONE); - - stmt->setUInt32(0, id); - stmt->setUInt32(1, zoneId); - // Xinef: DB Data compatibility... - stmt->setUInt16(2, uint16(teamId == TEAM_NEUTRAL ? 0 : (teamId == TEAM_ALLIANCE ? ALLIANCE : HORDE))); - - WorldDatabase.Execute(stmt); - } - - return true; -} - -void ObjectMgr::RemoveGraveyardLink(uint32 id, uint32 zoneId, TeamId teamId, bool persist /*= false*/) -{ - GraveyardMapBoundsNonConst range = GraveyardStore.equal_range(zoneId); - if (range.first == range.second) - { - //sLog->outError("Table `game_graveyard_zone` incomplete: Zone %u Team %u does not have a linked graveyard.", zoneId, team); - return; - } - - bool found = false; - - - for (; range.first != range.second; ++range.first) - { - GraveyardData & data = range.first->second; - - // skip not matching safezone id - if (data.safeLocId != id) - continue; - - // skip enemy faction graveyard at same map (normal area, city, or battleground) - // team == 0 case can be at call from .neargrave - if (data.teamId != TEAM_NEUTRAL && teamId != TEAM_NEUTRAL && data.teamId != teamId) - continue; - - found = true; - break; - } - - // no match, return - if (!found) - return; - - // remove from links - GraveyardStore.erase(range.first); - - // remove link from DB - if (persist) - { - PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GRAVEYARD_ZONE); - - stmt->setUInt32(0, id); - stmt->setUInt32(1, zoneId); - // Xinef: DB Data compatibility... - stmt->setUInt16(2, uint16(teamId == TEAM_NEUTRAL ? 0 : (teamId == TEAM_ALLIANCE ? ALLIANCE : HORDE))); - - WorldDatabase.Execute(stmt); - } -} - void ObjectMgr::LoadAreaTriggers() { uint32 oldMSTime = getMSTime(); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 9b622ff60..de23f81dd 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -625,16 +625,6 @@ struct QuestPOI typedef std::vector QuestPOIVector; typedef UNORDERED_MAP QuestPOIContainer; -struct GraveyardData -{ - uint32 safeLocId; - TeamId teamId; -}; - -typedef std::multimap GraveyardContainer; -typedef std::pair GraveyardMapBounds; -typedef std::pair GraveyardMapBoundsNonConst; - typedef UNORDERED_MAP CacheVendorItemContainer; typedef UNORDERED_MAP CacheTrainerSpellContainer; @@ -811,14 +801,7 @@ class ObjectMgr return _tavernAreaTriggerStore.find(Trigger_ID) != _tavernAreaTriggerStore.end(); } - GossipText const* GetGossipText(uint32 Text_ID) const; - - WorldSafeLocsEntry const* GetDefaultGraveyard(TeamId teamId); - WorldSafeLocsEntry const* GetClosestGraveyard(float x, float y, float z, uint32 MapId, TeamId teamId); - bool AddGraveyardLink(uint32 id, uint32 zoneId, TeamId teamId, bool persist = true); - void RemoveGraveyardLink(uint32 id, uint32 zoneId, TeamId teamId, bool persist = false); - void LoadGraveyardZones(); - GraveyardData const* FindGraveyardData(uint32 id, uint32 zone); + GossipText const* GetGossipText(uint32 Text_ID) const; AreaTrigger const* GetAreaTrigger(uint32 trigger) const { @@ -1304,9 +1287,6 @@ class ObjectMgr return _gossipMenuItemsStore.equal_range(uiMenuId); } - // for wintergrasp only - GraveyardContainer GraveyardStore; - static void AddLocaleString(std::string const& s, LocaleConstant locale, StringVector& data); static inline void GetLocaleString(const StringVector& data, int loc_idx, std::string& value) { diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index f02db835a..e62bf28cf 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -24,6 +24,7 @@ #include "Chat.h" #include "BattlegroundMgr.h" #include "ScriptMgr.h" +#include "GameGraveyard.h" #define MOVEMENT_PACKET_TIME_DELAY 0 @@ -487,11 +488,10 @@ void WorldSession::HandleMovementOpcodes(WorldPacket & recvData) } else if (!plrMover->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS)) { - WorldSafeLocsEntry const* grave = sObjectMgr->GetClosestGraveyard(plrMover->GetPositionX(), plrMover->GetPositionY(), plrMover->GetPositionZ(), plrMover->GetMapId(), plrMover->GetTeamId()); - + GraveyardStruct const* grave = sGraveyard->GetClosestGraveyard(plrMover->GetPositionX(), plrMover->GetPositionY(), plrMover->GetPositionZ(), plrMover->GetMapId(), plrMover->GetTeamId()); if (grave) { - plrMover->TeleportTo(grave->map_id, grave->x, grave->y, grave->z, plrMover->GetOrientation()); + plrMover->TeleportTo(grave->Map, grave->x, grave->y, grave->z, plrMover->GetOrientation()); plrMover->Relocate(grave->x, grave->y, grave->z, plrMover->GetOrientation()); } } diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index c50d49fc5..9e3c7c87d 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -25,6 +25,7 @@ #include "ScriptMgr.h" #include "CreatureAI.h" #include "SpellInfo.h" +#include "GameGraveyard.h" enum StableResultCode { @@ -446,10 +447,10 @@ void WorldSession::SendSpiritResurrect() _player->DurabilityLossAll(0.25f, true); // get corpse nearest graveyard - WorldSafeLocsEntry const* corpseGrave = NULL; + GraveyardStruct const* corpseGrave = NULL; Corpse* corpse = _player->GetCorpse(); if (corpse) - corpseGrave = sObjectMgr->GetClosestGraveyard(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetMapId(), _player->GetTeamId()); + corpseGrave = sGraveyard->GetClosestGraveyard(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetMapId(), _player->GetTeamId()); // now can spawn bones _player->SpawnCorpseBones(); @@ -457,10 +458,10 @@ void WorldSession::SendSpiritResurrect() // teleport to nearest from corpse graveyard, if different from nearest to player ghost if (corpseGrave) { - WorldSafeLocsEntry const* ghostGrave = sObjectMgr->GetClosestGraveyard(_player->GetPositionX(), _player->GetPositionY(), _player->GetPositionZ(), _player->GetMapId(), _player->GetTeamId()); + GraveyardStruct const* ghostGrave = sGraveyard->GetClosestGraveyard(_player->GetPositionX(), _player->GetPositionY(), _player->GetPositionZ(), _player->GetMapId(), _player->GetTeamId()); if (corpseGrave != ghostGrave) - _player->TeleportTo(corpseGrave->map_id, corpseGrave->x, corpseGrave->y, corpseGrave->z, _player->GetOrientation()); + _player->TeleportTo(corpseGrave->Map, corpseGrave->x, corpseGrave->y, corpseGrave->z, _player->GetOrientation()); // or update at original position //else // _player->UpdateObjectVisibility(); // xinef: not needed, called in ResurrectPlayer diff --git a/src/server/game/Misc/GameGraveyard.cpp b/src/server/game/Misc/GameGraveyard.cpp new file mode 100644 index 000000000..68f730644 --- /dev/null +++ b/src/server/game/Misc/GameGraveyard.cpp @@ -0,0 +1,371 @@ +#include "GameGraveyard.h" +#include "MapManager.h" +#include "DBCStores.h" +#include "Log.h" + +void Graveyard::LoadGraveyardFromDB() +{ + uint32 oldMSTime = getMSTime(); + + _graveyardStore.clear(); + + QueryResult result = WorldDatabase.Query("SELECT ID, Map, x, y, z, Comment FROM game_graveyard"); + if (!result) + { + sLog->outString(">> Loaded 0 graveyard. Table `game_graveyard` is empty!"); + sLog->outString(); + return; + } + + int32 Count = 0; + + do + { + Field* fields = result->Fetch(); + uint32 ID = fields[0].GetUInt32(); + + GraveyardStruct Graveyard; + + Graveyard.Map = fields[1].GetUInt32(); + Graveyard.x = fields[2].GetFloat(); + Graveyard.y = fields[3].GetFloat(); + Graveyard.z = fields[4].GetFloat(); + Graveyard.name = fields[5].GetString(); + + if (!Utf8toWStr(Graveyard.name, Graveyard.wnameLow)) + { + sLog->outErrorDb("Wrong UTF8 name for id %u in `game_graveyard` table, ignoring.", ID); + continue; + } + + wstrToLower(Graveyard.wnameLow); + + _graveyardStore[ID] = Graveyard; + + ++Count; + + } while (result->NextRow()); + + sLog->outString(">> Loaded %i graveyard in %u ms", Count, GetMSTimeDiffToNow(oldMSTime)); + sLog->outString(); +} + +GraveyardStruct const* Graveyard::GetGraveyard(uint32 ID) const +{ + GraveyardContainer::const_iterator itr = _graveyardStore.find(ID); + if (itr != _graveyardStore.end()) + return &itr->second; + + return NULL; +} + +GraveyardStruct const* Graveyard::GetDefaultGraveyard(TeamId teamId) +{ + enum DefaultGraveyard + { + HORDE_GRAVEYARD = 10, // Crossroads + ALLIANCE_GRAVEYARD = 4, // Westfall + }; + + return sGraveyard->GetGraveyard(teamId == TEAM_HORDE ? HORDE_GRAVEYARD : ALLIANCE_GRAVEYARD); +} + +GraveyardStruct const* Graveyard::GetClosestGraveyard(float x, float y, float z, uint32 MapId, TeamId teamId) +{ + // search for zone associated closest graveyard + uint32 zoneId = sMapMgr->GetZoneId(MapId, x, y, z); + + if (!zoneId) + { + if (z > -500) + { + sLog->outError("ZoneId not found for map %u coords (%f, %f, %f)", MapId, x, y, z); + return GetDefaultGraveyard(teamId); + } + } + + // Simulate std. algorithm: + // found some graveyard associated to (ghost_zone, ghost_map) + // + // if mapId == graveyard.mapId (ghost in plain zone or city or battleground) and search graveyard at same map + // then check faction + // if mapId != graveyard.mapId (ghost in instance) and search any graveyard associated + // then check faction + GraveyardMapBounds range = GraveyardStore.equal_range(zoneId); + MapEntry const* map = sMapStore.LookupEntry(MapId); + + // not need to check validity of map object; MapId _MUST_ be valid here + if (range.first == range.second && !map->IsBattlegroundOrArena()) + { + sLog->outErrorDb("Table `game_graveyard_zone` incomplete: Zone %u Team %u does not have a linked graveyard.", zoneId, teamId); + return GetDefaultGraveyard(teamId); + } + + // at corpse map + bool foundNear = false; + float distNear = 10000; + GraveyardStruct const* entryNear = NULL; + + // at entrance map for corpse map + bool foundEntr = false; + float distEntr = 10000; + GraveyardStruct const* entryEntr = NULL; + + // some where other + GraveyardStruct const* entryFar = NULL; + + MapEntry const* mapEntry = sMapStore.LookupEntry(MapId); + + for (; range.first != range.second; ++range.first) + { + GraveyardData const& data = range.first->second; + GraveyardStruct const* entry = sGraveyard->GetGraveyard(data.safeLocId); + if (!entry) + { + sLog->outErrorDb("Table `game_graveyard_zone` has record for not existing `game_graveyard` table %u, skipped.", data.safeLocId); + continue; + } + + // skip enemy faction graveyard + // team == 0 case can be at call from .neargrave + if (data.teamId != TEAM_NEUTRAL && teamId != TEAM_NEUTRAL && data.teamId != teamId) + continue; + + // find now nearest graveyard at other map + if (MapId != entry->Map) + { + // if find graveyard at different map from where entrance placed (or no entrance data), use any first + if (!mapEntry + || mapEntry->entrance_map < 0 + || uint32(mapEntry->entrance_map) != entry->Map + || (mapEntry->entrance_x == 0 && mapEntry->entrance_y == 0)) + { + // not have any corrdinates for check distance anyway + entryFar = entry; + continue; + } + + // at entrance map calculate distance (2D); + float dist2 = (entry->x - mapEntry->entrance_x)*(entry->x - mapEntry->entrance_x) + + (entry->y - mapEntry->entrance_y)*(entry->y - mapEntry->entrance_y); + if (foundEntr) + { + if (dist2 < distEntr) + { + distEntr = dist2; + entryEntr = entry; + } + } + else + { + foundEntr = true; + distEntr = dist2; + entryEntr = entry; + } + } + // find now nearest graveyard at same map + else + { + float dist2 = (entry->x - x)*(entry->x - x) + (entry->y - y)*(entry->y - y) + (entry->z - z)*(entry->z - z); + if (foundNear) + { + if (dist2 < distNear) + { + distNear = dist2; + entryNear = entry; + } + } + else + { + foundNear = true; + distNear = dist2; + entryNear = entry; + } + } + } + + if (entryNear) + return entryNear; + + if (entryEntr) + return entryEntr; + + return entryFar; +} + +GraveyardData const* Graveyard::FindGraveyardData(uint32 id, uint32 zoneId) +{ + GraveyardMapBounds range = GraveyardStore.equal_range(zoneId); + for (; range.first != range.second; ++range.first) + { + GraveyardData const& data = range.first->second; + if (data.safeLocId == id) + return &data; + } + + return NULL; +} + +bool Graveyard::AddGraveyardLink(uint32 id, uint32 zoneId, TeamId teamId, bool persist /*= true*/) +{ + if (FindGraveyardData(id, zoneId)) + return false; + + // add link to loaded data + GraveyardData data; + data.safeLocId = id; + data.teamId = teamId; + + GraveyardStore.insert(WGGraveyardContainer::value_type(zoneId, data)); + + // add link to DB + if (persist) + { + PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GRAVEYARD_ZONE); + + stmt->setUInt32(0, id); + stmt->setUInt32(1, zoneId); + // Xinef: DB Data compatibility... + stmt->setUInt16(2, uint16(teamId == TEAM_NEUTRAL ? 0 : (teamId == TEAM_ALLIANCE ? ALLIANCE : HORDE))); + + WorldDatabase.Execute(stmt); + } + + return true; +} + +void Graveyard::RemoveGraveyardLink(uint32 id, uint32 zoneId, TeamId teamId, bool persist /*= false*/) +{ + GraveyardMapBoundsNonConst range = GraveyardStore.equal_range(zoneId); + if (range.first == range.second) + { + sLog->outError("Table `game_graveyard_zone` incomplete: Zone %u Team %u does not have a linked graveyard.", zoneId, teamId); + return; + } + + bool found = false; + + for (; range.first != range.second; ++range.first) + { + GraveyardData & data = range.first->second; + + // skip not matching safezone id + if (data.safeLocId != id) + continue; + + // skip enemy faction graveyard at same map (normal area, city, or battleground) + // team == 0 case can be at call from .neargrave + if (data.teamId != TEAM_NEUTRAL && teamId != TEAM_NEUTRAL && data.teamId != teamId) + continue; + + found = true; + break; + } + + // no match, return + if (!found) + return; + + // remove from links + GraveyardStore.erase(range.first); + + // remove link from DB + if (persist) + { + PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GRAVEYARD_ZONE); + + stmt->setUInt32(0, id); + stmt->setUInt32(1, zoneId); + // Xinef: DB Data compatibility... + stmt->setUInt16(2, uint16(teamId == TEAM_NEUTRAL ? 0 : (teamId == TEAM_ALLIANCE ? ALLIANCE : HORDE))); + + WorldDatabase.Execute(stmt); + } +} + +void Graveyard::LoadGraveyardZones() +{ + uint32 oldMSTime = getMSTime(); + + GraveyardStore.clear(); // need for reload case + + // 0 1 2 + QueryResult result = WorldDatabase.Query("SELECT id, ghost_zone, faction FROM game_graveyard_zone"); + + if (!result) + { + sLog->outString(">> Loaded 0 graveyard-zone links. DB table `game_graveyard_zone` is empty."); + sLog->outString(); + return; + } + + uint32 count = 0; + + do + { + ++count; + + Field* fields = result->Fetch(); + + uint32 safeLocId = fields[0].GetUInt32(); + uint32 zoneId = fields[1].GetUInt32(); + uint32 team = fields[2].GetUInt16(); + TeamId teamId = team == 0 ? TEAM_NEUTRAL : (team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE); + + GraveyardStruct const* entry = sGraveyard->GetGraveyard(safeLocId); + if (!entry) + { + sLog->outErrorDb("Table `game_graveyard_zone` has a record for not existing `game_graveyard` table %u, skipped.", safeLocId); + continue; + } + + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(zoneId); + if (!areaEntry) + { + sLog->outErrorDb("Table `game_graveyard_zone` has a record for not existing zone id (%u), skipped.", zoneId); + continue; + } + + if (areaEntry->zone != 0) + { + sLog->outErrorDb("Table `game_graveyard_zone` has a record for subzone id (%u) instead of zone, skipped.", zoneId); + continue; + } + + if (team != 0 && team != HORDE && team != ALLIANCE) + { + sLog->outErrorDb("Table `game_graveyard_zone` has a record for non player faction (%u), skipped.", team); + continue; + } + + if (!AddGraveyardLink(safeLocId, zoneId, teamId, false)) + sLog->outErrorDb("Table `game_graveyard_zone` has a duplicate record for Graveyard (ID: %u) and Zone (ID: %u), skipped.", safeLocId, zoneId); + + } while (result->NextRow()); + + sLog->outString(">> Loaded %u graveyard-zone links in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + sLog->outString(); +} + +GraveyardStruct const* Graveyard::GetGraveyard(const std::string& name) const +{ + // explicit name case + std::wstring wname; + if (!Utf8toWStr(name, wname)) + return NULL; + + // converting string that we try to find to lower case + wstrToLower(wname); + + // Alternative first GameTele what contains wnameLow as substring in case no GameTele location found + const GraveyardStruct* alt = NULL; + for (GraveyardContainer::const_iterator itr = _graveyardStore.begin(); itr != _graveyardStore.end(); ++itr) + { + if (itr->second.wnameLow == wname) + return &itr->second; + else if (alt == NULL && itr->second.wnameLow.find(wname) != std::wstring::npos) + alt = &itr->second; + } + + return alt; +} diff --git a/src/server/game/Misc/GameGraveyard.h b/src/server/game/Misc/GameGraveyard.h new file mode 100644 index 000000000..a9cf1b649 --- /dev/null +++ b/src/server/game/Misc/GameGraveyard.h @@ -0,0 +1,58 @@ +#ifndef _GAMEGRAVEYARD_H_ +#define _GAMEGRAVEYARD_H_ + +#include "Common.h" +#include "SharedDefines.h" +#include + +struct GraveyardStruct +{ + uint32 ID; + uint32 Map; + float x; + float y; + float z; + std::string name; + std::wstring wnameLow; +}; + +struct GraveyardData +{ + uint32 safeLocId; + TeamId teamId; +}; + +typedef std::multimap WGGraveyardContainer; +typedef std::pair GraveyardMapBounds; +typedef std::pair GraveyardMapBoundsNonConst; + +class Graveyard +{ + friend class ACE_Singleton; + +public: + + typedef UNORDERED_MAP GraveyardContainer; + + GraveyardStruct const* GetGraveyard(uint32 ID) const; + GraveyardStruct const* GetGraveyard(const std::string& name) const; + GraveyardStruct const* GetDefaultGraveyard(TeamId teamId); + GraveyardStruct const* GetClosestGraveyard(float x, float y, float z, uint32 MapId, TeamId teamId); + GraveyardData const* FindGraveyardData(uint32 id, uint32 zone); + GraveyardContainer const& GetGraveyardData() const { return _graveyardStore; } + bool AddGraveyardLink(uint32 id, uint32 zoneId, TeamId teamId, bool persist = true); + void RemoveGraveyardLink(uint32 id, uint32 zoneId, TeamId teamId, bool persist = false); + void LoadGraveyardZones(); + void LoadGraveyardFromDB(); + +private: + + GraveyardContainer _graveyardStore; + + // for wintergrasp only + WGGraveyardContainer GraveyardStore; +}; + +#define sGraveyard ACE_Singleton::instance() + +#endif // _GAMEGRAVEYARD_H_ diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index c85238713..66b5b4893 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -22,6 +22,7 @@ #include "BattlefieldMgr.h" #include "InstanceScript.h" #include "Player.h" +#include "GameGraveyard.h" bool IsPrimaryProfessionSkill(uint32 skill) { @@ -6335,10 +6336,10 @@ void SpellMgr::LoadDbcDataCorrections() // Ring of Valor starting Locations - WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.LookupEntry(1364); - const_cast(entry)->z += 6.0f; - entry = sWorldSafeLocsStore.LookupEntry(1365); - const_cast(entry)->z += 6.0f; + GraveyardStruct const* entry = sGraveyard->GetGraveyard(1364); + const_cast(entry)->z += 6.0f; + entry = sGraveyard->GetGraveyard(1365); + const_cast(entry)->z += 6.0f; LockEntry* key = const_cast(sLockStore.LookupEntry(36)); // 3366 Opening, allows to open without proper key key->Type[2] = LOCK_KEY_NONE; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 1bf76bc3c..76bba9979 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -75,6 +75,7 @@ #include "WhoListCache.h" #include "AsyncAuctionListing.h" #include "SavingSystem.h" +#include "GameGraveyard.h" #include #ifdef ELUNA #include "LuaEngine.h" @@ -1413,6 +1414,9 @@ void World::SetInitialWorldSettings() LoadDBCStores(m_dataPath); DetectDBCLang(); + sLog->outString("Loading Game Graveyard..."); + sGraveyard->LoadGraveyardFromDB(); + sLog->outString("Loading spell dbc data corrections..."); sSpellMgr->LoadDbcDataCorrections(); @@ -1641,7 +1645,7 @@ void World::SetInitialWorldSettings() sLFGMgr->LoadRewards(); sLog->outString("Loading Graveyard-zone links..."); - sObjectMgr->LoadGraveyardZones(); + sGraveyard->LoadGraveyardZones(); sLog->outString("Loading spell pet auras..."); sSpellMgr->LoadSpellPetAuras(); diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index c8913b6f5..501e4c572 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -18,6 +18,7 @@ EndScriptData */ #include "Chat.h" #include "Language.h" #include "Player.h" +#include "GameGraveyard.h" class go_commandscript : public CommandScript { @@ -171,7 +172,7 @@ public: if (!graveyardId) return false; - WorldSafeLocsEntry const* gy = sWorldSafeLocsStore.LookupEntry(graveyardId); + GraveyardStruct const* gy = sGraveyard->GetGraveyard(graveyardId); if (!gy) { handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDNOEXIST, graveyardId); @@ -179,9 +180,9 @@ public: return false; } - if (!MapManager::IsValidMapCoord(gy->map_id, gy->x, gy->y, gy->z)) + if (!MapManager::IsValidMapCoord(gy->Map, gy->x, gy->y, gy->z)) { - handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, gy->x, gy->y, gy->map_id); + handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, gy->x, gy->y, gy->Map); handler->SetSentErrorMessage(true); return false; } @@ -196,7 +197,7 @@ public: else player->SaveRecallPosition(); - player->TeleportTo(gy->map_id, gy->x, gy->y, gy->z, player->GetOrientation()); + player->TeleportTo(gy->Map, gy->x, gy->y, gy->z, player->GetOrientation()); return true; } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index c41e1fa43..6fb08f45a 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -27,6 +27,7 @@ #include "GroupMgr.h" #include "BattlegroundMgr.h" #include "MapManager.h" +#include "GameGraveyard.h" class misc_commandscript : public CommandScript { @@ -1268,7 +1269,7 @@ public: else return false; - WorldSafeLocsEntry const* graveyard = sWorldSafeLocsStore.LookupEntry(graveyardId); + GraveyardStruct const* graveyard = sGraveyard->GetGraveyard(graveyardId); if (!graveyard) { @@ -1289,7 +1290,7 @@ public: return false; } - if (sObjectMgr->AddGraveyardLink(graveyardId, zoneId, teamId)) + if (sGraveyard->AddGraveyardLink(graveyardId, zoneId, teamId)) handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDLINKED, graveyardId, zoneId); else handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDALRLINKED, graveyardId, zoneId); @@ -1315,13 +1316,13 @@ public: Player* player = handler->GetSession()->GetPlayer(); uint32 zone_id = player->GetZoneId(); - WorldSafeLocsEntry const* graveyard = sObjectMgr->GetClosestGraveyard(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), teamId); + GraveyardStruct const* graveyard = sGraveyard->GetClosestGraveyard(player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetMapId(), teamId); if (graveyard) { uint32 graveyardId = graveyard->ID; - GraveyardData const* data = sObjectMgr->FindGraveyardData(graveyardId, zone_id); + GraveyardData const* data = sGraveyard->FindGraveyardData(graveyardId, zone_id); if (!data) { handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDERROR, graveyardId); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 1c5df7c65..905d09002 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -29,6 +29,7 @@ EndScriptData */ #include "TicketMgr.h" #include "WardenCheckMgr.h" #include "WaypointManager.h" +#include "GameGraveyard.h" class reload_commandscript : public CommandScript { @@ -80,6 +81,7 @@ public: { "disenchant_loot_template", SEC_ADMINISTRATOR, true, &HandleReloadLootTemplatesDisenchantCommand, "" }, { "event_scripts", SEC_ADMINISTRATOR, true, &HandleReloadEventScriptsCommand, "" }, { "fishing_loot_template", SEC_ADMINISTRATOR, true, &HandleReloadLootTemplatesFishingCommand, "" }, + { "game_graveyard", SEC_ADMINISTRATOR, true, &HandleReloadGameGraveyardCommand, "" }, { "game_graveyard_zone", SEC_ADMINISTRATOR, true, &HandleReloadGameGraveyardZoneCommand, "" }, { "game_tele", SEC_ADMINISTRATOR, true, &HandleReloadGameTeleCommand, "" }, { "gameobject_questender", SEC_ADMINISTRATOR, true, &HandleReloadGOQuestEnderCommand, "" }, @@ -1022,7 +1024,7 @@ public: { sLog->outString("Re-Loading Graveyard-zone links..."); - sObjectMgr->LoadGraveyardZones(); + sGraveyard->LoadGraveyardZones(); handler->SendGlobalGMSysMessage("DB table `game_graveyard_zone` reloaded."); @@ -1203,6 +1205,14 @@ public: handler->SendGlobalGMSysMessage("Vehicle template accessories reloaded."); return true; } + + static bool HandleReloadGameGraveyardCommand(ChatHandler* handler, const char* /*args*/) + { + sLog->outString("Reloading game_graveyard table..."); + sGraveyard->LoadGraveyardFromDB(); + handler->SendGlobalGMSysMessage("DB table `game_graveyard` reloaded."); + return true; + } }; void AddSC_reload_commandscript() diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index 27673e2f2..00647069c 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -28,6 +28,7 @@ #include "CombatAI.h" #include "Player.h" #include "PoolMgr.h" +#include "GameGraveyard.h" #include "World.h" #define GOSSIP_HELLO_DEMO1 "Build catapult." @@ -227,8 +228,8 @@ class npc_wg_spirit_guide : public CreatureScript GraveyardVect gy = wintergrasp->GetGraveyardVector(); for (uint8 i = 0; i < gy.size(); i++) if (action - GOSSIP_ACTION_INFO_DEF == i && gy[i]->GetControlTeamId() == player->GetTeamId()) - if (WorldSafeLocsEntry const* safeLoc = sWorldSafeLocsStore.LookupEntry(gy[i]->GetGraveyardId())) - player->TeleportTo(safeLoc->map_id, safeLoc->x, safeLoc->y, safeLoc->z, 0); + if (GraveyardStruct const* safeLoc = sGraveyard->GetGraveyard(gy[i]->GetGraveyardId())) + player->TeleportTo(safeLoc->Map, safeLoc->x, safeLoc->y, safeLoc->z, 0); } return true; } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp index 61c42ad37..47c177239 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp @@ -16,6 +16,7 @@ #include "Language.h" #include "World.h" #include "GossipDef.h" +#include "GameGraveyard.h" OPvPCapturePointEP_EWT::OPvPCapturePointEP_EWT(OutdoorPvP* pvp) : OPvPCapturePoint(pvp), m_TowerState(EP_TS_N), m_UnitsSummonedSideId(TEAM_NEUTRAL) @@ -419,8 +420,8 @@ void OPvPCapturePointEP_CGT::LinkGraveyard(TeamId teamId) { if (m_GraveyardSide != teamId) { - sObjectMgr->RemoveGraveyardLink(EP_GraveYardId, EP_GraveYardZone, m_GraveyardSide, false); - sObjectMgr->AddGraveyardLink(EP_GraveYardId, EP_GraveYardZone, teamId, false); + sGraveyard->RemoveGraveyardLink(EP_GraveYardId, EP_GraveYardZone, m_GraveyardSide, false); + sGraveyard->AddGraveyardLink(EP_GraveYardId, EP_GraveYardZone, teamId, false); m_GraveyardSide = teamId; } } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp index 2c62fd92a..7e4b03546 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp @@ -12,6 +12,7 @@ #include "WorldPacket.h" #include "Language.h" #include "World.h" +#include "GameGraveyard.h" OutdoorPvPNA::OutdoorPvPNA() { @@ -120,7 +121,7 @@ void OPvPCapturePointNA::DeSpawnGOs() void OPvPCapturePointNA::FactionTakeOver(TeamId teamId) { if (m_ControllingFaction != TEAM_NEUTRAL) - sObjectMgr->RemoveGraveyardLink(NA_HALAA_GRAVEYARD, NA_HALAA_GRAVEYARD_ZONE, m_ControllingFaction, false); + sGraveyard->RemoveGraveyardLink(NA_HALAA_GRAVEYARD, NA_HALAA_GRAVEYARD_ZONE, m_ControllingFaction, false); if (m_ControllingFaction == TEAM_ALLIANCE) sWorld->SendZoneText(NA_HALAA_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_NA_LOSE_A)); else if (m_ControllingFaction == TEAM_HORDE) @@ -128,7 +129,7 @@ void OPvPCapturePointNA::FactionTakeOver(TeamId teamId) m_ControllingFaction = teamId; if (m_ControllingFaction != TEAM_NEUTRAL) - sObjectMgr->AddGraveyardLink(NA_HALAA_GRAVEYARD, NA_HALAA_GRAVEYARD_ZONE, m_ControllingFaction, false); + sGraveyard->AddGraveyardLink(NA_HALAA_GRAVEYARD, NA_HALAA_GRAVEYARD_ZONE, m_ControllingFaction, false); DeSpawnGOs(); DeSpawnNPCs(); SpawnGOsForTeam(teamId); diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp index 6f4499e63..199f1c6a7 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPZM.cpp @@ -14,6 +14,7 @@ #include "WorldPacket.h" #include "GossipDef.h" #include "World.h" +#include "GameGraveyard.h" OPvPCapturePointZM_Beacon::OPvPCapturePointZM_Beacon(OutdoorPvP* pvp, ZM_BeaconType type) : OPvPCapturePoint(pvp), m_TowerType(type), m_TowerState(ZM_TOWERSTATE_N) @@ -214,8 +215,8 @@ int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, uint64 guid) m_GraveYardState = ZM_GRAVEYARD_A; DelObject(0); // only one gotype is used in the whole outdoor pvp, no need to call it a constant AddObject(0, ZM_Banner_A.entry, ZM_Banner_A.map, ZM_Banner_A.x, ZM_Banner_A.y, ZM_Banner_A.z, ZM_Banner_A.o, ZM_Banner_A.rot0, ZM_Banner_A.rot1, ZM_Banner_A.rot2, ZM_Banner_A.rot3); - sObjectMgr->RemoveGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, TEAM_HORDE); // rem gy - sObjectMgr->AddGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, TEAM_ALLIANCE, false); // add gy + sGraveyard->RemoveGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, TEAM_HORDE); // rem gy + sGraveyard->AddGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, TEAM_ALLIANCE, false); // add gy m_PvP->TeamApplyBuff(TEAM_ALLIANCE, ZM_CAPTURE_BUFF, 0, player); player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_A); sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_CAPTURE_GY_A)); @@ -227,8 +228,8 @@ int32 OPvPCapturePointZM_GraveYard::HandleOpenGo(Player* player, uint64 guid) m_GraveYardState = ZM_GRAVEYARD_H; DelObject(0); // only one gotype is used in the whole outdoor pvp, no need to call it a constant AddObject(0, ZM_Banner_H.entry, ZM_Banner_H.map, ZM_Banner_H.x, ZM_Banner_H.y, ZM_Banner_H.z, ZM_Banner_H.o, ZM_Banner_H.rot0, ZM_Banner_H.rot1, ZM_Banner_H.rot2, ZM_Banner_H.rot3); - sObjectMgr->RemoveGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, TEAM_ALLIANCE); // rem gy - sObjectMgr->AddGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, TEAM_HORDE, false); // add gy + sGraveyard->RemoveGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, TEAM_ALLIANCE); // rem gy + sGraveyard->AddGraveyardLink(ZM_GRAVEYARD_ID, ZM_GRAVEYARD_ZONE, TEAM_HORDE, false); // add gy m_PvP->TeamApplyBuff(TEAM_HORDE, ZM_CAPTURE_BUFF, 0, player); player->RemoveAurasDueToSpell(ZM_BATTLE_STANDARD_H); sWorld->SendZoneText(ZM_GRAVEYARD_ZONE, sObjectMgr->GetTrinityStringForDBCLocale(LANG_OPVP_ZM_CAPTURE_GY_H));