-- ======================================== -- ИВЕНТ БИТВА НЕБЕСНЫХ ИЗБРАННИКОВ - АКТИВНОСТЬ -- ======================================== -- TianXuanZhe_Act.lua -- Управление активностью TianXuanZhe (Небесные избранники) -- Регистрация, таймеры, диалоги NPC и система наград -- -- Функциональность: -- - Регистрация игроков на активность -- - Таймеры и события активности -- - Диалоги с NPC регистрации и выхода -- - Система наград и покупок -- -- Автор: Система -- Версия: 2.0 -- ======================================== -- ======================================== -- КОНСТАНТЫ АКТИВНОСТИ -- ======================================== -- Константы для активности TianXuan local TIANXUAN_ACTIVITY_CONSTANTS = { -- Время активности REGISTRATION_TIME_HOUR = 20, -- Час регистрации REGISTRATION_TIME_MIN_1 = 50, -- Минута регистрации 1 REGISTRATION_TIME_MIN_2 = 51, -- Минута регистрации 2 ACTIVITY_START_HOUR = 21, -- Час начала активности ACTIVITY_START_MIN_1 = 0, -- Минута начала 1 ACTIVITY_START_MIN_2 = 1, -- Минута начала 2 -- Дни активности ACTIVITY_DAY_1 = "Wednesday", -- Среда ACTIVITY_DAY_2 = "Sunday", -- Воскресенье -- Статусы активности REGISTRATION_OPEN = 1, -- Регистрация открыта REGISTRATION_CLOSED = 0, -- Регистрация закрыта -- TalkIndex для диалогов TALK_REGISTER = 4, -- Регистрация TALK_GET_REWARDS = 5, -- Получение наград TALK_RULES = 6, -- Правила TALK_REWARDS_INFO = 7, -- Информация о наградах TALK_TRAINING = 8, -- Тренировочная зона TALK_ENTER_ACTIVITY = 9, -- Вход в активность TALK_CONFIRM_REWARDS = 11, -- Подтверждение получения наград TALK_BUY_REWARD_1 = 12, -- Покупка награды 1 TALK_BUY_REWARD_2 = 13, -- Покупка награды 2 TALK_BUY_REWARD_3 = 14, -- Покупка награды 3 TALK_BUY_REWARD_4 = 15, -- Покупка награды 4 -- NPC REGISTRATION_NPC_ID = 5610081, -- ID NPC регистрации EXIT_NPC_ID = 5610080, -- ID NPC выхода -- Предметы и материалы REWARD_ITEM_LOW = 4820240, -- Низкий уровень награды REWARD_ITEM_MEDIUM = 4820241, -- Средний уровень награды REWARD_ITEM_HIGH = 4820242, -- Высокий уровень награды MATERIAL_ITEM = 4820081, -- Материал для покупки -- Количества MATERIAL_COST = 40, -- Стоимость материалов SILVER_COST = 1000000, -- Стоимость серебра -- Ограничения MIN_LEVEL = 50, -- Минимальный уровень MAX_LEVEL = 100, -- Максимальный уровень -- Таймеры TIMER_MINUTE = 4, -- Событие каждую минуту TIMER_START = 2, -- Событие начала TIMER_END = 3, -- Событие завершения -- ID активностей ACTIVITY_ID_1 = 47, -- ID активности 1 ACTIVITY_ID_2 = 48 -- ID активности 2 } -- ======================================== -- ОБРАБОТЧИКИ АКТИВНОСТИ -- ======================================== -- Обработчик клика по активности Tianxuanzhe -- Управляет регистрацией и входом в активность function Tianxuanzhe_OnClick(MapID, InstanceID, RoleID, TOMsgID, ToMapID, x, y, z) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil or TOMsgID == nil then return end -- Получаем текущее время local curhour = tonumber(os.date("%H")) -- Текущий час local curmin = tonumber(os.date("%M")) -- Текущая минута local day = os.date("%A") -- Текущий день недели -- Проверяем существование необходимых функций и переменных if curhour == nil or curmin == nil or day == nil then return end if TOMsgID == 206701 then -- Регистрация на активность if (day == TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_DAY_1 or day == TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_DAY_2) and curhour == TIANXUAN_ACTIVITY_CONSTANTS.REGISTRATION_TIME_HOUR and (curmin == TIANXUAN_ACTIVITY_CONSTANTS.REGISTRATION_TIME_MIN_1 or curmin == TIANXUAN_ACTIVITY_CONSTANTS.REGISTRATION_TIME_MIN_2) then -- Создание объекта игрока для активности if CreatTianXuanRoleObj ~= nil then CreatTianXuanRoleObj(RoleID) end else -- Отправка сообщения о неправильном времени local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 71, 100006) -- Сообщение о времени активности msg.DispatchRoleMsgEvent(RoleID, MsgID) end else -- Вход в активность if (day == TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_DAY_1 or day == TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_DAY_2) and curhour == TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_START_HOUR and (curmin == TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_START_MIN_1 or curmin == TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_START_MIN_2) then -- Отмена торгового состояния если игрок в торговле if role.IsRoleInStatus(RoleID, 1024) then role.CancelRoleStallState(MapID, InstanceID, RoleID) end -- Случайная точка входа (1-9) local k = math.random(1, 9) local Target_MapID, Target_InstanceID = role.GetRoleMapID(RoleID) -- Проверяем существование данных и телепортируем игрока if Target_MapID ~= nil and Target_InstanceID ~= nil and S59_MapID ~= nil and S59_Point ~= nil and S59_Point[k] ~= nil then role.RoleGotoNewMap(Target_MapID, Target_InstanceID, RoleID, S59_MapID, S59_Point[k].x, S59_Point[k].y, S59_Point[k].z) end else -- Отправка сообщения о неправильном времени local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 71, 100006) -- Сообщение о времени активности msg.DispatchRoleMsgEvent(RoleID, MsgID) end end end -- Обработчик начала активности Tianxuanzhe -- Инициализирует активность и отправляет уведомления игрокам function Tianxuanzhe_OnStart(actID) -- Проверяем входные параметры if actID == nil then return end -- Сброс флага регистрации if Tianxuanzhe_baoming ~= nil then Tianxuanzhe_baoming = TIANXUAN_ACTIVITY_CONSTANTS.REGISTRATION_CLOSED end -- Выбор стороны для игроков if TianXuan_ChooseSide ~= nil then TianXuan_ChooseSide() end -- Отправка сообщений всем зарегистрированным игрокам if TianXuan_Role ~= nil then for k, v in pairs(TianXuan_Role) do if k ~= nil then local Target_MapID, Target_InstanceID = role.GetRoleMapID(k) if Target_MapID ~= nil and Target_InstanceID ~= nil then msg.SendRoleSwitchMsg(4, Target_MapID, Target_InstanceID, k, 1, TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_1) end end end end end -- Обработчик таймера активности Tianxuanzhe (каждую минуту) -- Управляет событиями активности по времени function Tianxuanzhe_OnTimerMin(actID) -- Проверяем входные параметры if actID == nil then return end local Min = tonumber(os.date("%M")) -- Проверяем корректность времени if Min == nil then return end -- Обратный отсчет в последние 3 минуты (57, 58, 59) if Min == 57 or Min == 58 or Min == 59 then if TianXuan_Battle ~= nil then for k, v in pairs(TianXuan_Battle) do if k ~= nil and S59_MapID ~= nil then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 206703) -- Обратный отсчет msg.AddMsgEvent(MsgID, 9, 60 - Min) msg.DispatchMapMsgEvent(MsgID, S59_MapID, k) end end end end -- Обновление каждые 2 минуты if Min % 2 == 0 then if TianXuan_Battle ~= nil then for k, v in pairs(TianXuan_Battle) do if k ~= nil and S59_MapID ~= nil then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 206704) -- Обновление активности msg.DispatchMapMsgEvent(MsgID, S59_MapID, k) local BattleObj = TianXuan_Battle[k] if BattleObj ~= nil then -- Выбор небесных избранников if BattleObj.ChooseTianXuanZhiRen ~= nil then BattleObj:ChooseTianXuanZhiRen() end -- Сброс области активности if BattleObj.Area ~= nil and BattleObj.Area.ReSetTianXuanArea ~= nil then BattleObj.Area:ReSetTianXuanArea() end end end end end end -- Обновление очков игроков if TianXuan_Battle ~= nil then for k, v in pairs(TianXuan_Battle) do if k ~= nil then local BattleObj = TianXuan_Battle[k] if BattleObj ~= nil then -- Установка очков игроков if BattleObj.SetPlayerPoint_TianXuan ~= nil then BattleObj:SetPlayerPoint_TianXuan() end -- Сброс игроков внутри области if BattleObj.ResetInSidePlayer_TianXuan ~= nil then BattleObj:ResetInSidePlayer_TianXuan() end end end end end end -- Обработчик завершения активности Tianxuanzhe -- Финализирует результаты и очищает ресурсы function Tianxuanzhe_OnEnd(actID) -- Проверяем входные параметры if actID == nil then return end -- Установка финальных очков и удаление инстансов if TianXuan_Battle ~= nil then for k, v in pairs(TianXuan_Battle) do if k ~= nil then local BattleObj = TianXuan_Battle[k] if BattleObj ~= nil then -- Установка финальных очков if BattleObj.SetPlayerFinalPoint_TianXuan ~= nil then BattleObj:SetPlayerFinalPoint_TianXuan() end end -- Удаление инстанса карты if S59_MapID ~= nil then -- Получаем всех игроков в инстансе и выкидываем их перед удалением local RoleTbl = map.GetMapAllRoleID(S59_MapID, k) if RoleTbl ~= nil then for i, playerID in pairs(RoleTbl) do if playerID ~= nil and playerID ~= 0 then -- Проверяем, что игрок действительно в этом инстансе local playerMap, playerInstance = role.GetRoleMapID(playerID) if playerMap == S59_MapID and playerInstance == k then -- Выкидываем на безопасную карту выхода if S59_ExitMapID ~= nil and S59_ExitPoint ~= nil then role.RoleGotoNewMap(S59_MapID, k, playerID, S59_ExitMapID, S59_ExitPoint.x, S59_ExitPoint.y, S59_ExitPoint.z) else -- Стандартные координаты выхода role.RoleGotoNewMap(S59_MapID, k, playerID, 3424073512, 610, 23094, 669) end end end end end map.DeleteInstance(S59_MapID, k) end end end end -- Очистка глобальных переменных TianXuan_Battle = {} -- Очистка списка битв TianXuan_Side = {} -- Очистка списка сторон TianXuan_Role = {} -- Очистка списка игроков TianXuan_Area = {} -- Очистка списка областей TianXuan_Roletotal = 0 -- Сброс общего количества игроков end --[[ Регистрация обработчиков событий активности События: 8 - Клик по активности 2 - Начало активности 3 - Завершение активности 4 - Таймер активности (каждую минуту) ]] aux.RegisterActEvent(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_1, 8, "Tianxuanzhe_OnClick") aux.RegisterActEvent(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_1, 3, "Tianxuanzhe_OnEnd") aux.RegisterActEvent(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_2, 3, "Tianxuanzhe_OnEnd") aux.RegisterActEvent(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_1, 2, "Tianxuanzhe_OnStart") aux.RegisterActEvent(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_1, 4, "Tianxuanzhe_OnTimerMin") aux.RegisterActEvent(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_2, 2, "Tianxuanzhe_OnStart") aux.RegisterActEvent(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_2, 4, "Tianxuanzhe_OnTimerMin") -- ======================================== -- ОБРАБОТЧИКИ ДИАЛОГОВ С NPC -- ======================================== -- Обработчик диалога с NPC регистрации -- Управляет регистрацией, наградами и информацией об активности function x5610081_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or TargetID == nil or TargetTypeID == nil or RoleID == nil or TalkIndex == nil then return end -- Получаем текущую дату local curmon = tonumber(os.date("%m")) -- Текущий месяц local curday = tonumber(os.date("%d")) -- Текущий день local curyear = tonumber(os.date("%Y")) -- Текущий год -- Проверяем корректность даты if curmon == nil or curday == nil or curyear == nil then return end local curtime = curyear * 10000 + curmon * 100 + curday -- Текущая дата в формате YYYYMMDD local rolelevel = role.GetRoleLevel(MapID, InstanceID, RoleID) -- Уровень игрока -- Ограничение уровня от 50 до 100 if rolelevel == nil then rolelevel = TIANXUAN_ACTIVITY_CONSTANTS.MIN_LEVEL elseif rolelevel < TIANXUAN_ACTIVITY_CONSTANTS.MIN_LEVEL then rolelevel = TIANXUAN_ACTIVITY_CONSTANTS.MIN_LEVEL elseif rolelevel > TIANXUAN_ACTIVITY_CONSTANTS.MAX_LEVEL then rolelevel = TIANXUAN_ACTIVITY_CONSTANTS.MAX_LEVEL end if TalkIndex == -1 then -- Основное меню NPC local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206705) -- Приветственное сообщение msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID -- Показ кнопки регистрации если регистрация открыта if Tianxuanzhe_baoming == TIANXUAN_ACTIVITY_CONSTANTS.REGISTRATION_OPEN then msg.AddMsgEvent(MsgID, 21, TIANXUAN_ACTIVITY_CONSTANTS.TALK_REGISTER) -- TalkIndex для регистрации msg.AddMsgEvent(MsgID, 1, 206706) -- "Зарегистрироваться для участия в активности" end -- Показ кнопки входа если активность началась if act.GetActIsStart(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_1) == true or act.GetActIsStart(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_2) == true then msg.AddMsgEvent(MsgID, 21, TIANXUAN_ACTIVITY_CONSTANTS.TALK_ENTER_ACTIVITY) -- TalkIndex для входа msg.AddMsgEvent(MsgID, 1, 206707) -- "Войти в активность" elseif act.GetActIsStart(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_1) ~= true and act.GetActIsStart(TIANXUAN_ACTIVITY_CONSTANTS.ACTIVITY_ID_2) ~= true then -- Показ кнопки получения наград если есть очки local playerPoints = role.GetRoleScriptData(RoleID, 1, RoleDataType["Tianxuanzhe_Point"]) if playerPoints ~= nil and playerPoints ~= 0 then msg.AddMsgEvent(MsgID, 21, TIANXUAN_ACTIVITY_CONSTANTS.TALK_GET_REWARDS) -- TalkIndex для получения наград msg.AddMsgEvent(MsgID, 1, 206708) -- "Получить награды" end end msg.AddMsgEvent(MsgID, 21, TIANXUAN_ACTIVITY_CONSTANTS.TALK_RULES) -- TalkIndex для правил msg.AddMsgEvent(MsgID, 1, 206709) -- "Правила активности" msg.DispatchRoleMsgEvent(RoleID, MsgID) elseif TalkIndex == 4 then -- Обработка регистрации if Tianxuanzhe_baoming == 1 then if TianXuan_Role[RoleID] ~= nil then -- Игрок уже зарегистрирован local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206711) -- "Добро пожаловать в активность Tianxuanzhe: \n Вы уже зарегистрированы для участия в активности." msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 21, -1) -- TalkIndex ID msg.AddMsgEvent(MsgID, 1, 100001) -- "Ок" msg.DispatchRoleMsgEvent(RoleID, MsgID) else -- Проверка уровня игрока if rolelevel < 50 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206712) -- "Добро пожаловать в активность Tianxuanzhe: \n Ваш уровень должен быть не менее 50 для участия в активности." msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 21, -1) -- TalkIndex ID msg.AddMsgEvent(MsgID, 1, 100001) -- "Ок" msg.DispatchRoleMsgEvent(RoleID, MsgID) else -- Регистрация игрока CreatTianXuanRoleObj(RoleID) local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206713) -- "Добро пожаловать в активность Tianxuanzhe: \n Регистрация завершена, пожалуйста, войдите в активность в 20:50." msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 21, -1) -- TalkIndex ID msg.AddMsgEvent(MsgID, 1, 100001) -- "Ок" msg.DispatchRoleMsgEvent(RoleID, MsgID) end end end elseif TalkIndex == 5 then -- Получение наград if act.GetActIsStart(47) ~= true and act.GetActIsStart(48) ~= true then local point = role.GetRoleScriptData(RoleID, 1, RoleDataType["Tianxuanzhe_Point"]) local exp1 = math.floor(TianXuan_Exp[rolelevel] * 2.5 * point / 60) -- Опыт (предпросмотр) local exp2 = 8 * point -- Очки духа local item = 0 local count = 0 -- Определение награды в зависимости от очков if point > 80 then item = 4820242 count = 150 elseif point > 40 then item = 4820241 count = 100 else item = 4820240 count = 75 end local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206714) -- "Добро пожаловать в активность Tianxuanzhe: \n Ваши полученные награды: XXXX опыт, XXX очки духа." msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 9, exp1) -- Опыт msg.AddMsgEvent(MsgID, 9, exp2) -- Очки духа msg.AddMsgEvent(MsgID, 4, item) -- Предмет msg.AddMsgEvent(MsgID, 21, 11) -- TalkIndex для получения msg.AddMsgEvent(MsgID, 1, 100001) -- "Получить награды" msg.DispatchRoleMsgEvent(RoleID, MsgID) end elseif TalkIndex == 6 then -- Показ правил активности local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206715) -- "Добро пожаловать в активность Tianxuanzhe: \n Хотите узнать правила PK активности?" msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 21, 8) -- TalkIndex для правил msg.AddMsgEvent(MsgID, 1, 206709) -- "Правила активности" msg.AddMsgEvent(MsgID, 21, -1) -- TalkIndex ID msg.AddMsgEvent(MsgID, 1, 100002) -- "Отмена" msg.DispatchRoleMsgEvent(RoleID, MsgID) elseif TalkIndex == 8 then -- Вход в тренировочную зону if Xunlianchang_TXZ == nil then Xunlianchang_TXZ = {} end Xunlianchang_TXZ[RoleID] = 1 local k = math.random(1, 9) role.RoleGotoNewMap(MapID, InstanceID, RoleID, S59_MapID, S59_Point[k].x, S59_Point[k].y, S59_Point[k].z) -- Телепортация на карту активности elseif TalkIndex == 9 then -- Вход в активность if GetTianXuanRoleObj(RoleID) == nil then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206721) -- "Добро пожаловать в активность Tianxuanzhe: \n Вы не зарегистрированы для участия в активности." msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 21, -1) -- TalkIndex ID msg.AddMsgEvent(MsgID, 1, 100001) -- "Ок" msg.DispatchRoleMsgEvent(RoleID, MsgID) else local k = math.random(1, 9) role.RoleGotoNewMap(MapID, InstanceID, RoleID, S59_MapID, S59_Point[k].x, S59_Point[k].y, S59_Point[k].z) -- Телепортация на карту активности end elseif TalkIndex == 11 then -- Получение наград local num = role.GetRoleScriptData(RoleID, 1, RoleDataType["Tianxuanzhe_time"]) if num ~= curtime then local FreeSize = role.GetBagFreeSize(RoleID) if FreeSize < 1 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 100003) -- "Добро пожаловать в активность Tianxuanzhe: \n В вашем инвентаре недостаточно места." msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 9, 1) -- Количество msg.AddMsgEvent(MsgID, 21, -1) -- TalkIndex ID msg.AddMsgEvent(MsgID, 1, 100001) -- "Ок" msg.DispatchRoleMsgEvent(RoleID, MsgID) else if act.GetActIsStart(47) ~= true and act.GetActIsStart(48) ~= true then local point = role.GetRoleScriptData(RoleID, 1, RoleDataType["Tianxuanzhe_Point"]) local exp1 = math.floor(TianXuan_Exp[rolelevel] * 2.5 * point / 60) -- Опыт local exp2 = 8 * point -- Очки духа local item = 0 local count = 0 -- Определение награды в зависимости от очков if point > 80 then item = 4820242 count = 150 elseif point > 40 then item = 4820241 count = 100 else item = 4820240 count = 75 end -- Выдача наград role.AddRoleExp(MapID, InstanceID, RoleID, exp1) -- Добавление опыта role.SetRoleScriptData(RoleID, 1, RoleDataType["Tianxuanzhe_Point"], 0) -- Сброс очков role.ModRoleAttValue(MapID, InstanceID, RoleID, 80, exp2) -- Добавление очков духа role.AddRoleItem(MapID, InstanceID, RoleID, item, 1, -1, 8, 420) -- Добавление предмета role.AddRoleItem(MapID, InstanceID, RoleID, 6600141, 20, -1, 8, 420) -- Добавление дополнительного предмета role.SetRoleScriptData(RoleID, 1, RoleDataType["Tianxuanzhe_time"], curtime) -- Установка времени получения end end else local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206732) -- "Добро пожаловать в активность Tianxuanzhe: \n Вы уже получили награды сегодня." msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 21, -1) -- TalkIndex ID msg.AddMsgEvent(MsgID, 1, 100001) -- "Ок" msg.DispatchRoleMsgEvent(RoleID, MsgID) end end end -- Регистрация обработчика диалога с NPC регистрации aux.RegisterCreatureEvent(5610081, 7, "x5610081_OnTalk") -- Обработчик диалога с NPC выхода (5610080) function x5610080_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) if TalkIndex == -1 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206725) -- "Добро пожаловать в активность: \n Хотите выйти из активности?" msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID msg.AddMsgEvent(MsgID, 21, 4) -- TalkIndex для выхода msg.AddMsgEvent(MsgID, 1, 100001) -- "Выйти из активности" msg.AddMsgEvent(MsgID, 21, 5) -- TalkIndex для отмены msg.AddMsgEvent(MsgID, 1, 100002) -- "Отмена" msg.DispatchRoleMsgEvent(RoleID, MsgID) elseif TalkIndex == 4 then -- Выход из активности if InstanceID == 100 or InstanceID == 101 then -- Удаление временных предметов при выходе local num1 = role.GetRoleItemNum(RoleID, 4800283) local num2 = role.GetRoleItemNum(RoleID, 4800284) if num1 > 0 then role.RemoveFromRole(MapID, InstanceID, RoleID, 4800283, num1, 101) end if num2 > 0 then role.RemoveFromRole(MapID, InstanceID, RoleID, 4800284, num2, 101) end end role.RoleGotoNewMap(MapID, InstanceID, RoleID, S59_ExitMapID, S59_ExitPoint.x, S59_ExitPoint.y, S59_ExitPoint.z) -- Телепортация на карту выхода end end