-- ======================================== -- ИВЕНТ БИТВА НЕБЕСНЫХ ИЗБРАННИКОВ - КАРТА -- ======================================== -- TianXuanZhe_map.lua -- Управление картой S59 для активности TianXuan -- Координаты точек входа, области, события карты -- -- Функциональность: -- - Координаты точек входа на карту -- - ID областей активности -- - Обработчики событий карты -- - Управление тренировочными зонами -- -- Автор: Система -- Версия: 2.0 -- ======================================== -- ======================================== -- КОНСТАНТЫ КАРТЫ -- ======================================== -- Константы для карты S59 local TIANXUAN_MAP_CONSTANTS = { -- Точки входа (9 точек) SPAWN_POINTS = 9, -- Области активности (9 областей) AREAS_COUNT = 9, -- ID областей AREA_1 = 450, AREA_2 = 451, AREA_3 = 452, AREA_4 = 453, AREA_5 = 454, AREA_6 = 455, AREA_7 = 456, AREA_8 = 457, AREA_9 = 476, -- Инстансы TRAINING_INSTANCE = 9999, KUAFU_INSTANCE_1 = 100, KUAFU_INSTANCE_2 = 101, -- События карты EVENT_PLAYER_ENTER = 2, -- Вход игрока EVENT_PLAYER_KILL = 5, -- Убийство игрока EVENT_PLAYER_LEAVE = 3, -- Выход игрока EVENT_PLAYER_REVIVE = 11, -- Возрождение игрока EVENT_FRIEND_ENEMY = 16, -- Определение друзей/врагов EVENT_ENTER_AREA = 7, -- Вход в область EVENT_GET_INSTANCE = 14, -- Получение инстанса EVENT_CHECK_ENTER = 15, -- Проверка входа EVENT_OFFLINE_HANDLE = 12, -- Обработка отключения EVENT_EXPORT_COORDS = 13 -- Экспорт координат } -- ======================================== -- КООРДИНАТЫ И ОБЛАСТИ КАРТЫ -- ======================================== -- Координаты точек входа на карту S59 (9 точек для случайного распределения) S59_Point = {} S59_Point[1] = {x=184, y=67, z=857} -- Точка входа 1 (северо-запад) S59_Point[2] = {x=557, y=34, z=842} -- Точка входа 2 (север) S59_Point[3] = {x=791, y=66, z=809} -- Точка входа 3 (северо-восток) S59_Point[4] = {x=850, y=35, z=492} -- Точка входа 4 (восток) S59_Point[5] = {x=490, y=66, z=567} -- Точка входа 5 (центр) S59_Point[6] = {x=189, y=30, z=568} -- Точка входа 6 (запад) S59_Point[7] = {x=204, y=64, z=197} -- Точка входа 7 (юго-запад) S59_Point[8] = {x=515, y=44, z=255} -- Точка входа 8 (юг) S59_Point[9] = {x=806, y=67, z=186} -- Точка входа 9 (юго-восток) -- ID карт активности S59_MapID = 3373743144 -- ID основной карты активности S59_ExitMapID = 3424073512 -- ID карты выхода после активности S59_ExitPoint = {x=610, y=23094, z=669} -- Координаты точки выхода -- Глобальные переменные для тренировочных зон Xunlianchang_TXZ = Xunlianchang_TXZ or {} -- Тренировочная зона TianXuan Xunlianchang_KuaFu = Xunlianchang_KuaFu or {} -- Тренировочная зона KuaFu -- ID областей активности (9 областей с баффами) S59_Area = {} S59_Area[1] = TIANXUAN_MAP_CONSTANTS.AREA_1 -- Область 1: Бафф 6109301 S59_Area[2] = TIANXUAN_MAP_CONSTANTS.AREA_2 -- Область 2: Бафф 6109101 S59_Area[3] = TIANXUAN_MAP_CONSTANTS.AREA_3 -- Область 3: Бафф 6109201 S59_Area[4] = TIANXUAN_MAP_CONSTANTS.AREA_4 -- Область 4: Бафф 6109301 S59_Area[5] = TIANXUAN_MAP_CONSTANTS.AREA_5 -- Область 5: Бафф 6109101 S59_Area[6] = TIANXUAN_MAP_CONSTANTS.AREA_6 -- Область 6: Бафф 6109201 S59_Area[7] = TIANXUAN_MAP_CONSTANTS.AREA_7 -- Область 7: Бафф 6109301 S59_Area[8] = TIANXUAN_MAP_CONSTANTS.AREA_8 -- Область 8: Бафф 6109101 S59_Area[9] = TIANXUAN_MAP_CONSTANTS.AREA_9 -- Область 9: Бафф 6109201 -- Координаты точек предметов в областях (где появляются существа с баффами) S59_ItemPoint = {} S59_ItemPoint[S59_Area[1]] = {x=502, y=2222, z=228} -- Точка предмета в области 1 S59_ItemPoint[S59_Area[2]] = {x=573, y=3326, z=495} -- Точка предмета в области 2 S59_ItemPoint[S59_Area[3]] = {x=815, y=3378, z=214} -- Точка предмета в области 3 S59_ItemPoint[S59_Area[4]] = {x=161, y=3358, z=880} -- Точка предмета в области 4 S59_ItemPoint[S59_Area[5]] = {x=173, y=3386, z=210} -- Точка предмета в области 5 S59_ItemPoint[S59_Area[6]] = {x=214, y=1438, z=525} -- Точка предмета в области 6 S59_ItemPoint[S59_Area[7]] = {x=837, y=1751, z=512} -- Точка предмета в области 7 S59_ItemPoint[S59_Area[8]] = {x=820, y=3333, z=834} -- Точка предмета в области 8 S59_ItemPoint[S59_Area[9]] = {x=541, y=1723, z=855} -- Точка предмета в области 9 -- Получение подходящего инстанса карты для игрока -- Определяет, в какой инстанс должен попасть игрок function s59_GetOnePerfectMap(MapID, InstanceID, RoleID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil then return 0 -- Возврат в основной мир при ошибке end local temp = false -- Проверка тренировочной зоны TianXuan if Xunlianchang_TXZ ~= nil and Xunlianchang_TXZ[RoleID] ~= nil and Xunlianchang_TXZ[RoleID] == 1 then Xunlianchang_TXZ[RoleID] = nil return TIANXUAN_MAP_CONSTANTS.TRAINING_INSTANCE -- Инстанс тренировки else -- Проверка участия в KuaFu PK if KuaFuPK_Role ~= nil then for k, v in pairs(KuaFuPK_Role) do if v ~= nil and v.RoleID == RoleID then temp = true break end end end if temp == true and KuaFuPK_Role[RoleID] ~= nil then return KuaFuPK_Role[RoleID].InstanceID -- Инстанс KuaFu PK else -- Проверка TianXuan if TianXuan_Role ~= nil and TianXuan_Role[RoleID] ~= nil then return TianXuan_Role[RoleID].InstanceID -- Инстанс TianXuan else return 0 -- Возврат в основной мир, если игрок не найден end end end end -- ======================================== -- ОБРАБОТЧИКИ СОБЫТИЙ КАРТЫ -- ======================================== -- Регистрация обработчиков событий карты S59 aux.RegisterMapEvent("s59", TIANXUAN_MAP_CONSTANTS.EVENT_GET_INSTANCE, "s59_GetOnePerfectMap") -- Получение координат выхода при отключении игрока -- Возвращает координаты для телепортации при отключении function s59_CanTakeOverWhenOnline(MapID, RoleID) -- Проверяем входные параметры if MapID == nil or RoleID == nil then return nil, 0, 0, 0 end -- Проверяем существование данных выхода if S59_ExitMapID == nil or S59_ExitPoint == nil then return nil, 0, 0, 0 end -- Возврат координат выхода с корректировкой Y координаты return S59_ExitMapID, S59_ExitPoint.x, S59_ExitPoint.y * 51, S59_ExitPoint.z end -- Регистрация обработчика события отключения игрока aux.RegisterMapEvent("s59", TIANXUAN_MAP_CONSTANTS.EVENT_OFFLINE_HANDLE, "s59_CanTakeOverWhenOnline") -- Получение координат экспорта карты -- Определяет, куда телепортировать игрока при выходе с карты function s59_GetExporMapAndCoord(MapID, InstanceID, RoleID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil then return 1, nil, 0, 0, 0 end -- Проверяем существование данных выхода if S59_ExitMapID == nil or S59_ExitPoint == nil then return 1, nil, 0, 0, 0 end return 1, S59_ExitMapID, S59_ExitPoint.x, S59_ExitPoint.y * 51, S59_ExitPoint.z end -- Регистрация обработчика события экспорта aux.RegisterMapEvent("s59", TIANXUAN_MAP_CONSTANTS.EVENT_EXPORT_COORDS, "s59_GetExporMapAndCoord") -- Проверка возможности входа игрока на карту -- Определяет, может ли игрок войти на карту активности function s59_CanEnter(MapID, InstanceID, RoleID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil then return 0 -- Запретить вход при ошибке end -- Проверка различных условий входа local canEnter = false -- Проверка тренировочной зоны TianXuan if Xunlianchang_TXZ ~= nil and Xunlianchang_TXZ[RoleID] == 1 then canEnter = true end -- Проверка участия в TianXuan if not canEnter and TianXuan_Role ~= nil and TianXuan_Role[RoleID] ~= nil and TianXuan_Role[RoleID] ~= 0 then canEnter = true end -- Проверка участия в KuaFu PK if not canEnter and KuaFuPK_Role ~= nil and KuaFuPK_Role[RoleID] ~= nil and KuaFuPK_Role[RoleID] ~= 0 then canEnter = true end if canEnter then return 1 -- Разрешить вход else return 0 -- Запретить вход end end -- Регистрация обработчика события проверки входа aux.RegisterMapEvent("s59", TIANXUAN_MAP_CONSTANTS.EVENT_CHECK_ENTER, "s59_CanEnter") -- Обработчик входа игрока в область -- Обрабатывает получение баффов при входе в специальную область function s59_OnRoleEnterArea(MapID, InstanceID, RoleID, ObjAreaID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil or ObjAreaID == nil then return end -- Обработка только для активных инстансов (не тренировочных) if InstanceID ~= TIANXUAN_MAP_CONSTANTS.TRAINING_INSTANCE then if InstanceID == TIANXUAN_MAP_CONSTANTS.KUAFU_INSTANCE_1 or InstanceID == TIANXUAN_MAP_CONSTANTS.KUAFU_INSTANCE_2 then -- Обработка для KuaFu PK if KuaFuPK_Battle ~= nil and KuaFuPK_Battle[InstanceID] ~= nil then local AreaObj = GetKuaFuPKAreaObjFromBattle(KuaFuPK_Battle[InstanceID]) if AreaObj ~= nil then AreaObj:IntoKuaFuPKArea(ObjAreaID, RoleID) end end else -- Обработка для TianXuan if TianXuan_Battle ~= nil and TianXuan_Battle[InstanceID] ~= nil then local AreaObj = GetTianXuanAreaObjFromBattle(TianXuan_Battle[InstanceID]) if AreaObj ~= nil then AreaObj:IntoTianXuanArea(ObjAreaID, RoleID) end end end end end -- Регистрация обработчика события входа в область aux.RegisterMapEvent("s59", TIANXUAN_MAP_CONSTANTS.EVENT_ENTER_AREA, "s59_OnRoleEnterArea") -- ======================================== -- ИНФОРМАЦИЯ О СИСТЕМЕ КАРТЫ -- ======================================== -- -- TianXuanZhe_map.lua - Система карты активности -- ======================================== -- -- ОСНОВНЫЕ КОМПОНЕНТЫ: -- -- 1. КООРДИНАТЫ КАРТЫ: -- - S59_Point[]: 9 точек входа для случайного распределения игроков -- - S59_ItemPoint[]: Координаты существ в областях -- - S59_ExitPoint: Координаты выхода с карты -- -- 2. ОБЛАСТИ АКТИВНОСТИ: -- - S59_Area[]: 9 областей с различными баффами -- - Каждая область имеет существо, дающее бафф при взаимодействии -- -- 3. ОБРАБОТЧИКИ СОБЫТИЙ: -- - s59_GetOnePerfectMap: Определение инстанса для игрока -- - s59_CanTakeOverWhenOnline: Обработка отключения игрока -- - s59_GetExporMapAndCoord: Координаты выхода -- - s59_CanEnter: Проверка возможности входа -- - s59_OnRoleEnterArea: Вход в область с баффом -- -- КОНСТАНТЫ КАРТЫ: -- -- - SPAWN_POINTS: 9 точек входа -- - AREAS_COUNT: 9 областей активности -- - TRAINING_INSTANCE: Инстанс тренировки (9999) -- - KUAFU_INSTANCE_1: KuaFu PK инстанс 1 (100) -- - KUAFU_INSTANCE_2: KuaFu PK инстанс 2 (101) -- -- ОБЛАСТИ АКТИВНОСТИ: -- -- ID областей соответствуют баффам: -- - 450, 453, 456: Бафф 6109301 (синий) -- - 451, 454, 457: Бафф 6109101 (зеленый) -- - 452, 455, 476: Бафф 6109201 (красный) -- -- СУЩЕСТВА В ОБЛАСТЯХ: -- -- - 5610077: Бафф 6109301 -- - 5610078: Бафф 6109101 -- - 5610079: Бафф 6109201 -- -- РАСПРЕДЕЛЕНИЕ ИГРОКОВ: -- -- Игроки распределяются по 9 точкам входа случайным образом -- для равномерного распределения по карте. -- -- ПРОВЕРКИ БЕЗОПАСНОСТИ: -- -- - Все функции проверяют входные параметры на nil -- - Проверяется существование необходимых массивов -- - Безопасная обработка отсутствующих данных -- - Возврат безопасных значений при ошибках -- -- ЗАМЕЧАНИЯ: -- -- - Карта поддерживает как TianXuan, так и KuaFu PK режимы -- - Координаты Y умножаются на 51 для правильного позиционирования -- - Система автоматически определяет подходящий инстанс для игрока -- - Все магические числа заменены на константы