--[[ Древняя крепость - Карта PvP режима Функции для управления игровым процессом на карте GvG (Guild vs Guild) ]] -- Вход на локацию function GvG_OnPlayerEnter(MapID, InstanceID, RoleID) -- Восстановление хп и маны при входе на карту local ReviveHP = role.GetRoleAttValue(MapID, InstanceID, RoleID, 8) -- Максимальное HP local ReviveMP = role.GetRoleAttValue(MapID, InstanceID, RoleID, 10) -- Максимальное MP role.ModRoleAttValue(MapID, InstanceID, RoleID, 9, ReviveHP) -- Восстановление HP role.ModRoleAttValue(MapID, InstanceID, RoleID, 11, ReviveMP) -- Восстановление MP -- Проверка принадлежности к команде (красная или синяя) local a = role.GetRoleItemNum(RoleID, 5300105) -- Красная команда (предмет) local b = role.GetRoleItemNum(RoleID, 5300106) -- Синяя команда (предмет) if a == 1 then unit.SetState(MapID, InstanceID, RoleID, 8) -- Установка состояния красной команды unit.AddBuff(MapID, InstanceID, RoleID, 9817601, RoleID) -- Бафф красной команды elseif b == 1 then unit.SetState(MapID, InstanceID, RoleID, 9) -- Установка состояния синей команды unit.AddBuff(MapID, InstanceID, RoleID, 9817701, RoleID) -- Бафф синей команды end -- Отмена баффа питомцев при входе на карту unit.CancelBuff(MapID, InstanceID, RoleID, 9999601) end -- Убийство персонажа function GvG_KillPeople(MapID, InstanceID, RoleID, KillerID) -- Добавление баффа смерти unit.AddBuff(MapID, InstanceID, RoleID, 7009101, RoleID) -- Установка состояния смерти для убитого role.SetRoleState(RoleID, 4, 1) -- Установка состояния убийцы role.SetRoleState(KillerID, 4, 1) -- Проверка что убийца и жертва - разные игроки if unit.IsPlayer(KillerID) and unit.IsPlayer(RoleID) and RoleID ~= KillerID then -- Здесь можно добавить логику начисления очков или других наград -- Пока оставляем пустым для будущего расширения end end -- Игрок покидает поле боя function GvG_LeaveMap(MapID, InstanceID, RoleID) -- Сброс состояний команд при выходе с карты unit.UnsetState(MapID, InstanceID, RoleID, 8) -- Сброс красной команды unit.UnsetState(MapID, InstanceID, RoleID, 9) -- Сброс синей команды end -- Воскрешение игрока function GvG_RoloRevive(MapID, InstanceID, RoleID, Type, ReviveHP, ReviveMP, x, y, z, RebornMapID) -- Координаты точек возрождения для команд local mapgoto = {} mapgoto[1] = {1036, 0, 386} -- Красная команда mapgoto[2] = {1036, 0, 1662} -- Синяя команда -- Восстановление HP и MP при возрождении ReviveHP = role.GetRoleAttValue(MapID, InstanceID, RoleID, 8) -- Максимальное HP ReviveMP = role.GetRoleAttValue(MapID, InstanceID, RoleID, 10) -- Максимальное MP -- Проверка принадлежности к команде для определения точки возрождения local a = role.GetRoleItemNum(RoleID, 5300105) -- Красная команда local b = role.GetRoleItemNum(RoleID, 5300106) -- Синяя команда if a == 1 then -- Красная команда return ReviveHP, ReviveMP, mapgoto[1][1], mapgoto[1][2], mapgoto[1][3], MapID elseif b == 1 then -- Синяя команда return ReviveHP, ReviveMP, mapgoto[2][1], mapgoto[2][2], mapgoto[2][3], MapID else -- Возврат к точке входа если команда не определена return ReviveHP, ReviveMP, x, y, z, MapID end end -- Получение идеальной карты (всегда возвращает 1) function GvG_GetOnePerfectMap(MapID, InstanceID, RoleID) return 1 end -- Проверка возможности входа при онлайн режиме function GvG_CanTakeOverWhenOnline(MapID, RoleID) -- Сброс состояний команд unit.UnsetState(MapID, InstanceID, RoleID, 8) -- Сброс красной команды unit.UnsetState(MapID, InstanceID, RoleID, 9) -- Сброс синей команды -- Возврат координат выхода (исправлена ошибка с неопределенными переменными) return n6_ExitMapID, n6_ExitPoint.x, n6_ExitPoint.y * 51, n6_ExitPoint.z end -- Получение координат выхода с карты function GvG_GetExporMapAndCoord(MapID, InstanceID, RoleID) -- Сброс состояний команд unit.UnsetState(MapID, InstanceID, RoleID, 8) -- Сброс красной команды unit.UnsetState(MapID, InstanceID, RoleID, 9) -- Сброс синей команды -- Возврат координат выхода (исправлена ошибка с неопределенными переменными) return 1, n6_ExitMapID, n6_ExitPoint.x, n6_ExitPoint.y * 51, n6_ExitPoint.z end -- Проверка возможности входа на карту (уровень 31+) function GvG_CanEnter(MapID, InstanceID, RoleID) if role.GetRoleLevel(MapID, InstanceID, RoleID) >= 31 then return 1 -- Разрешено else return 0 -- Запрещено end end -- Определение друзей и врагов (система команд) function GvG_FriendEnemy(MapID, InstanceID, SrcID, TargetID) -- Проверка баффов команд для источника local scr = role.IsRoleHaveBuff(MapID, InstanceID, SrcID, 98176) -- Красная команда local scr1 = role.IsRoleHaveBuff(MapID, InstanceID, SrcID, 98177) -- Синяя команда -- Проверка баффов команд для цели local targ = role.IsRoleHaveBuff(MapID, InstanceID, TargetID, 98176) -- Красная команда local targ1 = role.IsRoleHaveBuff(MapID, InstanceID, TargetID, 98177) -- Синяя команда -- Если оба в красной команде - друзья if (scr == true) and (targ == true) then return true, false, false, true end -- Если оба в синей команде - друзья if (scr1 == true) and (targ1 == true) then return true, false, false, true end -- В остальных случаях - враги return false, false, false, false end --[[ Регистрация функций для обработки событий карты События: 2 - Вход игрока на карту 5 - Убийство игрока 3 - Выход игрока с карты 11 - Возрождение игрока 14 - Получение идеальной карты 12 - Проверка входа при онлайн режиме 13 - Получение координат выхода 15 - Проверка возможности входа 16 - Определение друзей/врагов ]] aux.RegisterMapEvent("gvg", 2, "GvG_OnPlayerEnter") aux.RegisterMapEvent("gvg", 5, "GvG_KillPeople") aux.RegisterMapEvent("gvg", 3, "GvG_LeaveMap") aux.RegisterMapEvent("gvg", 11, "GvG_RoloRevive") aux.RegisterMapEvent("gvg", 14, "GvG_GetOnePerfectMap") aux.RegisterMapEvent("gvg", 12, "GvG_CanTakeOverWhenOnline") aux.RegisterMapEvent("gvg", 13, "GvG_GetExporMapAndCoord") aux.RegisterMapEvent("gvg", 15, "GvG_CanEnter") aux.RegisterMapEvent("gvg", 16, "GvG_FriendEnemy")