-- ======================================== -- КАРТА ЛЕДОВОГО ПОБОИЩА -- Настройки карты и точки возрождения -- ======================================== -- ======================================== -- ТОЧКИ ВОЗРОЖДЕНИЯ -- ======================================== -- Массив точек возрождения на карте события S66_1_Point = {} S66_1_Point[1] = {x=736, y=6887, z=326} S66_1_Point[2] = {x=600, y=6634, z=620} S66_1_Point[3] = {x=985, y=6188, z=690} S66_1_Point[4] = {x=1000, y=7018, z=1075} S66_1_Point[5] = {x=608, y=8192, z=1059} S66_1_Point[6] = {x=237, y=7842, z=1045} S66_1_Point[7] = {x=196, y=6592, z=635} S66_1_Point[8] = {x=224, y=7296, z=225} S66_1_Point[9] = {x=1103, y=8974, z=185} -- ======================================== -- НАСТРОЙКИ КАРТЫ -- ======================================== -- ID карты события S66_1_MapID = 2974623812 -- ID карты выхода (куда телепортируются игроки после события) S66_1_ExitMapID = 3424073512 S66_1_ExitPoint = {x=610, y=23094, z=669} -- Таблица для отслеживания игроков на карте Poboishe_TXZ = {} -- ======================================== -- ФУНКЦИИ КАРТЫ -- ======================================== -- Получение инстанса карты для игрока -- Возвращает ID инстанса, в котором находится игрок function s66_1_GetOnePerfectMap(MapID, InstanceID, RoleID) if Poboishe_Role[RoleID] then return Poboishe_Role[RoleID].InstanceID end return InstanceID end -- Регистрация события получения инстанса aux.RegisterMapEvent("s66_1", 14, "s66_1_GetOnePerfectMap") -- Обработка отключения игрока во время онлайн -- Возвращает координаты выхода с карты function s66_1_CanTakeOverWhenOnline(MapID, RoleID) return S66_1_ExitMapID, S66_1_ExitPoint.x, S66_1_ExitPoint.y * 51, S66_1_ExitPoint.z end -- Регистрация события отключения aux.RegisterMapEvent("s66_1", 12, "s66_1_CanTakeOverWhenOnline") -- Получение карты и координат для экспорта -- Используется при принудительном выходе с карты function s66_1_GetExporMapAndCoord(MapID, InstanceID, RoleID) return 1, S66_1_ExitMapID, S66_1_ExitPoint.x, S66_1_ExitPoint.y * 51, S66_1_ExitPoint.z end -- Регистрация события экспорта aux.RegisterMapEvent("s66_1", 13, "s66_1_GetExporMapAndCoord") -- Проверка возможности входа на карту -- Проверяет регистрацию игрока в событии function s66_1_CanEnter(MapID, InstanceID, RoleID) if Poboishe_TXZ[RoleID] == 1 or (Poboishe_Role[RoleID] and Poboishe_Role[RoleID] ~= 0) then return 1 -- Разрешить вход else return 0 -- Запретить вход end end -- Регистрация события проверки входа aux.RegisterMapEvent("s66_1", 15, "s66_1_CanEnter") -- ======================================== -- ОБЛАСТИ КАРТЫ -- ======================================== -- Обработка входа игрока в область карты -- Управляет системой флагов крови и очков function s66_1_OnRoleEnterArea(MapID, InstanceID, RoleID, ObjAreaID) local RoleObj = Poboishe_Role[RoleID] if ObjAreaID == 2236 then -- Область Кристального источника (сдача флага крови) local b = role.GetRoleItemNum(RoleID, 5300104) if b > 0 then local point = 10 -- Очки за сдачу флага -- Удаляем флаг крови у игрока role.RemoveFromRole(MapID, InstanceID, RoleID, 5300104, 1, 101) unit.CancelBuff(MapID, InstanceID, RoleID, 9995801) -- Начисляем очки команде игрока if RoleObj and RoleObj.Side == "Red" then Poboishe_Battle[RoleObj.InstanceID].RedPlayer.Point = Poboishe_Battle[RoleObj.InstanceID].RedPlayer.Point + point role.SetRoleScriptData(RoleObj.RoleID, 1, RoleDataType["Poboishe_Point"], role.GetRoleScriptData(RoleObj.RoleID, 1, RoleDataType["Poboishe_Point"]) + 2) -- Обновляем счет команды local red_war_point = map.GetMapScriptData(S66_1_MapID, InstanceID, 1, 1) map.SetMapScriptData(S66_1_MapID, InstanceID, 1, 1, red_war_point + 10) elseif RoleObj and RoleObj.Side == "Blue" then Poboishe_Battle[RoleObj.InstanceID].BluePlayer.Point = Poboishe_Battle[RoleObj.InstanceID].BluePlayer.Point + point role.SetRoleScriptData(RoleObj.RoleID, 1, RoleDataType["Poboishe_Point"], role.GetRoleScriptData(RoleObj.RoleID, 1, RoleDataType["Poboishe_Point"]) + 2) -- Обновляем счет команды local blue_war_point = map.GetMapScriptData(S66_1_MapID, InstanceID, 1, 2) map.SetMapScriptData(S66_1_MapID, InstanceID, 1, 2, blue_war_point + 10) end -- Обновляем информацию для всех игроков local BattleObj = Poboishe_Battle[InstanceID] if BattleObj then BattleObj:SendAllInfo_Poboishe() end end end if ObjAreaID == 2114 then -- Область сброса флага крови (если игрок покидает карту с флагом) local MsgID = msg.BeginMsgEvent() local b = role.GetRoleItemNum(RoleID, 5300104) if b > 0 then -- Удаляем флаг крови у игрока role.RemoveFromRole(MapID, InstanceID, RoleID, 5300104, 1, 101) unit.CancelBuff(MapID, InstanceID, RoleID, 9995801) -- Создаем флаг крови в стандартной позиции map.MapCreateCreature(MapID, InstanceID, 9010354, 181, 7239, 208, 1, "") -- Отправляем сообщение о появлении флага msg.AddMsgEvent(MsgID, 102, 900251) -- Флаг крови появился на просторах Снежного пика msg.DispatchMapMsgEvent(MsgID, S66_1_MapID, InstanceID) end end end -- Регистрация событий входа в области aux.RegisterMapEvent("s66_1", 7, "s66_1_OnRoleEnterArea") aux.RegisterMapEvent("s66_1", 6, "s66_1_OnRoleEnterArea") -- ======================================== -- ВЗАИМОДЕЙСТВИЕ С ФЛАГОМ КРОВИ -- ======================================== -- Обработка взаимодействия с флагом крови -- Позволяет игроку поднять флаг крови function c9010354_OnCheck(MapID, InstanceID, TargetID, TargetTypeID, RoleID) local FreeSize = role.GetBagFreeSize(RoleID) if FreeSize < 2 then -- Недостаточно места в инвентаре - создаем флаг в стандартной позиции map.MapCreateCreature(MapID, InstanceID, 9010354, 181, 7239, 208, 1, "") else -- Выдаем флаг крови игроку role.AddRoleItem(MapID, InstanceID, RoleID, 5300104, 1, -1, 8, 420) unit.AddBuff(MapID, InstanceID, RoleID, 9995801, RoleID) -- Получаем позицию игрока для сообщения local x, y, z = unit.GetPosition(MapID, InstanceID, RoleID) -- Отправляем сообщение о поднятии флага local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 102, 900253) -- Флаг крови был замечен в руках игрока msg.AddMsgEvent(MsgID, 2, RoleID) msg.AddMsgEvent(MsgID, 9, x) msg.AddMsgEvent(MsgID, 9, z) msg.DispatchWorldMsgEvent(MsgID, MapID, InstanceID) end end -- Регистрация события взаимодействия с флагом крови aux.RegisterCreatureEvent(9010354, 6, "c9010354_OnCheck")