--[[ Древняя крепость - Активность (Activity) Функции для управления активностью GvG (Guild vs Guild) Управление таймерами, созданием существ, обработкой событий ]] -- Таймер активности (выполняется каждую минуту) function GvG_OnTimerMin(actID) -- Получение данных активности local red_point = act.GetActScriptData(1228, 1, 1) -- Очки красной команды local blue_point = act.GetActScriptData(1228, 1, 2) -- Очки синей команды local done_red = act.GetActScriptData(1228, 1, 3) -- Статус завершения красной команды local done_blue = act.GetActScriptData(1228, 1, 4) -- Статус завершения синей команды local Min = tonumber(os.date("%M")) -- Текущая минута -- Проверка каждые 5 минут для красной команды if Min % 5 == 0 and done_red == 0 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 951254) -- Сообщение о прогрессе красной команды msg.AddMsgEvent(MsgID, 9, red_point) -- Количество очков msg.DispatchMapMsgEvent(MsgID, 3747797138, 1, -1) -- Отправка сообщения на карту -- Проверка каждые 6 минут для синей команды elseif Min % 6 == 0 and done_blue == 0 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 951255) -- Сообщение о прогрессе синей команды msg.AddMsgEvent(MsgID, 9, blue_point) -- Количество очков msg.DispatchMapMsgEvent(MsgID, 3747797138, 1, -1) -- Отправка сообщения на карту end end -- Начало активности function GvG_OnStart(actID) GvG_Danj_Open = 0 -- Флаг открытия активности -- Создание инстанса карты map.CreateInstance(3747797138, 1) -- Создание существ на карте map.MapCreateColCreature(3747797138, 1, 9010758, 1019, 0, 1680, 1, "") -- NPC для синей команды map.MapCreateColCreature(3747797138, 1, 9010758, 1019, 0, 366, 1, "") -- NPC для красной команды map.MapCreateColCreature(3747797138, 1, 9010775, 1024, 0, 1024, 1, "") -- Финальный босс end -- Завершение активности function GvG_OnEnd(actID) -- Очистка данных активности (слоты 21-40) for b = 1, 20 do act.SetActScriptData(1228, 1, b + 21, 0) end -- Очистка основных данных активности (слоты 0-19) for i = 0, 19 do act.SetActScriptData(1228, 1, i, act.GetActScriptData(1228, 1, i)) act.SetActScriptData(1228, 1, i, 0) end -- Сброс ключевых переменных act.SetActScriptData(1228, 1, 1, 0) -- Очки красной команды act.SetActScriptData(1228, 1, 2, 0) -- Очки синей команды act.SetActScriptData(1228, 1, 3, 0) -- Статус красной команды act.SetActScriptData(1228, 1, 4, 0) -- Статус синей команды act.SetActScriptData(1228, 1, 5, 0) -- Телепорт красной команды act.SetActScriptData(1228, 1, 6, 0) -- Телепорт синей команды act.SetActScriptData(1228, 1, 7, 0) -- Этап красной команды act.SetActScriptData(1228, 1, 8, 0) -- Этап синей команды act.SetActScriptData(1228, 1, 9, 0) -- Счетчик красной команды act.SetActScriptData(1228, 1, 10, 0) -- Счетчик синей команды act.SetActScriptData(1228, 1, 11, 0) -- Дополнительные данные act.SetActScriptData(1228, 1, 12, 0) -- Дополнительные данные act.SetActScriptData(1228, 1, 13, 0) -- Дополнительные данные act.SetActScriptData(1228, 1, 14, 0) -- Дополнительные данные act.SetActScriptData(1228, 1, 15, 0) -- Дополнительные данные -- Сохранение данных активности act.SetActScriptData(1228) -- Удаление инстанса карты map.DeleteInstance(3747797138, 1) GvG_Danj_Open = 1 -- Флаг завершения активности end -- Регистрация событий активности aux.RegisterActEvent(1228, 2, "GvG_OnStart") -- Начало активности aux.RegisterActEvent(1228, 3, "GvG_OnEnd") -- Завершение активности aux.RegisterActEvent(1228, 4, "GvG_OnTimerMin") -- Таймер активности -- Обработчик диалога с NPC (9010758) function xkAMApRIZ_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) -- Получение данных активности local red_point = act.GetActScriptData(1228, 1, 1) -- Очки красной команды local blue_point = act.GetActScriptData(1228, 1, 2) -- Очки синей команды local done_red = act.GetActScriptData(1228, 1, 3) -- Статус завершения красной команды local done_blue = act.GetActScriptData(1228, 1, 4) -- Статус завершения синей команды -- Проверка принадлежности к команде local a = role.GetRoleItemNum(RoleID, 5300105) -- Красная команда (предмет) local b = role.GetRoleItemNum(RoleID, 5300106) -- Синяя команда (предмет) if TalkIndex == -1 then local MsgID = msg.BeginMsgEvent() -- Основное сообщение диалога msg.AddMsgEvent(MsgID, 20, 951250) -- Описание активности msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID -- Показ очков команды игрока if a == 1 then msg.AddMsgEvent(MsgID, 9, red_point) -- Очки красной команды end if b == 1 then msg.AddMsgEvent(MsgID, 9, blue_point) -- Очки синей команды end -- Кнопки диалога msg.AddMsgEvent(MsgID, 21, 6) -- TalkIndex для правил msg.AddMsgEvent(MsgID, 1, 951249) -- Текст "Правила" msg.AddMsgEvent(MsgID, 21, 7) -- TalkIndex для отмены msg.AddMsgEvent(MsgID, 1, 100002) -- Текст "Отмена" msg.DispatchRoleMsgEvent(RoleID, MsgID) -- Отправка диалога игроку elseif TalkIndex == 6 then -- Обработка сдачи предметов для получения очков role.RemoveFromRole(MapID, InstanceID, RoleID, 6602136, 1, 420) -- Удаление предмета local c = role.GetRoleItemNum(RoleID, 6602136) -- Проверка количества предметов -- Обработка для красной команды if red_point < 501 then if c > 0 then if a == 1 then act.SetActScriptData(1228, 1, 1, act.GetActScriptData(1228, 1, 1) + 1) -- Увеличение очков end end end -- Обработка для синей команды if blue_point < 501 then if c > 0 then if b == 1 then act.SetActScriptData(1228, 1, 2, act.GetActScriptData(1228, 1, 2) + 1) -- Увеличение очков end end end -- Проверка достижения лимита красной команды (500 очков) if red_point > 498 then if done_red == 0 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 951264) -- Сообщение о завершении красной команды msg.DispatchMapMsgEvent(MsgID, 3747797138, 1, -1) act.SetActScriptData(1228, 1, 1, 500) -- Установка максимального значения act.SetActScriptData(1228, 1, 3, act.GetActScriptData(1228, 1, 3) + 1) -- Установка статуса завершения -- Создание существ для следующего этапа map.MapCreateColCreature(3747797138, 1, 9010759, 1090, 0, 366, 1, "") -- Портал map.MapCreateColCreature(3747797138, 1, 9010760, 1020, 0, 500, 1, "") -- Босс красной команды act.SetActScriptData(1228, 1, 7, 1) -- Установка этапа красной команды end end -- Проверка достижения лимита синей команды (500 очков) if blue_point > 498 then if done_blue == 0 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 951267) -- Сообщение о завершении синей команды msg.DispatchMapMsgEvent(MsgID, 3747797138, 1, -1) act.SetActScriptData(1228, 1, 2, 500) -- Установка максимального значения act.SetActScriptData(1228, 1, 4, act.GetActScriptData(1228, 1, 4) + 1) -- Установка статуса завершения -- Создание существ для следующего этапа map.MapCreateColCreature(3747797138, 1, 9010759, 988, 0, 1680, 1, "") -- Портал map.MapCreateColCreature(3747797138, 1, 9010769, 1020, 0, 1548, 1, "") -- Босс синей команды act.SetActScriptData(1228, 1, 8, 1) -- Установка этапа синей команды end end end end -- Регистрация обработчика диалога aux.RegisterCreatureEvent(9010758, 7, "xkAMApRIZ_OnTalk") -- Обработчик диалога с порталом (9010759) function xPortalRev_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) local r = math.random(1, 9) -- Случайный индекс для телепортации -- Координаты телепортации для синей команды local blue_map = {} blue_map[1] = {1056, 1613} blue_map[2] = {917, 1487} blue_map[3] = {1100, 1287} blue_map[4] = {715, 1100} blue_map[5] = {1317, 1345} blue_map[6] = {1610, 1315} blue_map[7] = {1875, 1735} blue_map[8] = {1880, 1330} blue_map[9] = {1575, 1140} teleport_num = 0 -- Счетчик телепортаций -- Координаты телепортации для красной команды local red_map = {} red_map[1] = {1105, 455} red_map[2] = {1315, 445} red_map[3] = {1615, 720} red_map[4] = {1272, 850} red_map[5] = {880, 851} red_map[6] = {305, 950} red_map[7] = {365, 685} red_map[8] = {205, 410} red_map[9] = {650, 351} -- Получение данных активности local teleport = act.GetActScriptData(1228, 1, 5) -- Счетчик телепортаций красной команды local teleport2 = act.GetActScriptData(1228, 1, 6) -- Счетчик телепортаций синей команды local etap1 = act.GetActScriptData(1228, 1, 7) -- Этап красной команды local etap2 = act.GetActScriptData(1228, 1, 8) -- Этап синей команды -- Проверка принадлежности к команде local a = role.GetRoleItemNum(RoleID, 5300105) -- Красная команда local b = role.GetRoleItemNum(RoleID, 5300106) -- Синяя команда -- Определение лимита телепортаций в зависимости от этапа if etap1 == 1 then teleport_num = 2 elseif etap1 == 2 then teleport_num = 6 end if etap2 == 1 then teleport_num = 2 elseif etap2 == 2 then teleport_num = 6 end if TalkIndex == -1 then local MsgID = msg.BeginMsgEvent() -- Основное сообщение диалога msg.AddMsgEvent(MsgID, 20, 951251) -- Описание портала msg.AddMsgEvent(MsgID, 24, TargetID) -- NPC ID -- Кнопки диалога msg.AddMsgEvent(MsgID, 21, 6) -- TalkIndex для телепортации msg.AddMsgEvent(MsgID, 1, 951252) -- Текст "Телепортация" msg.AddMsgEvent(MsgID, 21, 7) -- TalkIndex для отмены msg.AddMsgEvent(MsgID, 1, 100002) -- Текст "Отмена" msg.DispatchRoleMsgEvent(RoleID, MsgID) -- Отправка диалога игроку elseif TalkIndex == 6 then -- Телепортация красной команды if a == 1 then if teleport < teleport_num then role.RoleGotoNewMap(MapID, InstanceID, RoleID, 3747797138, blue_map[r][1], 40, blue_map[r][2]) act.SetActScriptData(1228, 1, 5, act.GetActScriptData(1228, 1, 5) + 1) -- Увеличение счетчика end end -- Телепортация синей команды if b == 1 then if teleport2 < teleport_num then role.RoleGotoNewMap(MapID, InstanceID, RoleID, 3747797138, red_map[r][1], 40, red_map[r][2]) act.SetActScriptData(1228, 1, 6, act.GetActScriptData(1228, 1, 6) + 1) -- Увеличение счетчика end end end end -- Регистрация обработчика диалога с порталом aux.RegisterCreatureEvent(9010759, 7, "xPortalRev_OnTalk") -- Обработчик смерти босса красной команды (9010760) function G9010760_OnDie(MapID, InstanceID, TargetID, TargetTypeID, RoleID) local etap1 = act.GetActScriptData(1228, 1, 7) -- Этап красной команды local etap2 = act.GetActScriptData(1228, 1, 8) -- Этап синей команды if etap1 == 1 then -- Создание множества существ для следующего этапа map.MapCreateColCreature(3747797138, 1, 9010761, 1300, 0, 450, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1380, 0, 495, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1450, 0, 460, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1490, 0, 410, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1440, 0, 330, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1370, 0, 310, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1370, 0, 400, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1390, 0, 435, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1440, 0, 425, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1320, 0, 485, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1300, 0, 450, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1380, 0, 495, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1450, 0, 460, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1490, 0, 410, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1440, 0, 330, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1370, 0, 310, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1370, 0, 400, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1390, 0, 435, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1440, 0, 425, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1320, 0, 485, 1, "") act.SetActScriptData(1228, 1, 7, 2) -- Переход к следующему этапу end end -- Регистрация обработчика смерти босса красной команды aux.RegisterCreatureEvent(9010760, 4, "G9010760_OnDie") -- Обработчик смерти босса синей команды (9010769) function G9010769_OnDie(MapID, InstanceID, TargetID, TargetTypeID, RoleID) local etap2 = act.GetActScriptData(1228, 1, 8) -- Этап синей команды if etap2 == 1 then act.SetActScriptData(1228, 1, 8, 2) -- Переход к следующему этапу -- Создание множества существ для следующего этапа map.MapCreateColCreature(3747797138, 1, 9010761, 1060, 0, 1465, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1100, 0, 1665, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1080, 0, 1585, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1050, 0, 1520, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1005, 0, 1480, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 935, 0, 1495, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1092, 0, 1580, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1090, 0, 1666, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 970, 0, 1568, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1020, 0, 1520, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1060, 0, 1465, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1100, 0, 1665, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1080, 0, 1585, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1050, 0, 1520, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1005, 0, 1480, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 935, 0, 1495, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1092, 0, 1580, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1090, 0, 1666, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 970, 0, 1568, 1, "") map.MapCreateColCreature(3747797138, 1, 9010761, 1020, 0, 1520, 1, "") end end -- Регистрация обработчика смерти босса синей команды aux.RegisterCreatureEvent(9010769, 4, "G9010769_OnDie") -- Обработчик диалога с существами (9010761) function x9010761_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) -- Получение данных активности local rag1 = act.GetActScriptData(1228, 1, 9) -- Счетчик красной команды local rag2 = act.GetActScriptData(1228, 1, 10) -- Счетчик синей команды local sm1 = act.GetActScriptData(1228, 1, 12) -- Статус красной команды local sm2 = act.GetActScriptData(1228, 1, 13) -- Статус синей команды -- Проверка принадлежности к команде local a = role.GetRoleItemNum(RoleID, 5300105) -- Красная команда local b = role.GetRoleItemNum(RoleID, 5300106) -- Синяя команда if TalkIndex == -1 then -- Удаление существа при взаимодействии map.MapDeleteCreature(MapID, InstanceID, TargetID) -- Обработка для красной команды if a == 1 then act.SetActScriptData(1228, 1, 9, act.GetActScriptData(1228, 1, 9) + 1) -- Увеличение счетчика local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 951265) -- Сообщение о прогрессе красной команды msg.AddMsgEvent(MsgID, 9, act.GetActScriptData(1228, 1, 9) + 1) -- Количество собранных предметов msg.DispatchMapMsgEvent(MsgID, 3747797138, 1, -1) end -- Обработка для синей команды if b == 1 then act.SetActScriptData(1228, 1, 10, act.GetActScriptData(1228, 1, 10) + 1) -- Увеличение счетчика local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 951268) -- Сообщение о прогрессе синей команды msg.AddMsgEvent(MsgID, 9, act.GetActScriptData(1228, 1, 10) + 1) -- Количество собранных предметов msg.DispatchMapMsgEvent(MsgID, 3747797138, 1, -1) end -- Проверка завершения этапа красной команды (9+ предметов) if rag1 > 8 and sm1 == 0 then act.SetActScriptData(1228, 1, 7, 1) -- Установка этапа act.SetActScriptData(1228, 1, 9, 10) -- Установка счетчика act.SetActScriptData(1228, 1, 12, 1) -- Установка статуса -- Создание финального босса красной команды map.MapCreateColCreature(3747797138, 1, 9010764, 1022, 0, 1248, 1, "") local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 951266) -- Сообщение о появлении босса msg.DispatchMapMsgEvent(MsgID, 3747797138, 1, -1) end -- Проверка завершения этапа синей команды (9+ предметов) if rag2 > 8 and sm2 == 0 then act.SetActScriptData(1228, 1, 8, 1) -- Установка этапа act.SetActScriptData(1228, 1, 10, 10) -- Установка счетчика act.SetActScriptData(1228, 1, 13, 1) -- Установка статуса -- Создание финального босса синей команды map.MapCreateColCreature(3747797138, 1, 9010773, 1022, 0, 800, 1, "") local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 951269) -- Сообщение о появлении босса msg.DispatchMapMsgEvent(MsgID, 3747797138, 1, -1) end end end -- Регистрация обработчика диалога с существами aux.RegisterCreatureEvent(9010761, 7, "x9010761_OnTalk") -- Обработчик смерти финального босса красной команды (9010764) function G9010764_OnDie(MapID, InstanceID, TargetID, TargetTypeID, RoleID) map.OpenCloseDoor(MapID, InstanceID, 2330, 1) -- Открытие двери end -- Регистрация обработчика смерти финального босса красной команды aux.RegisterCreatureEvent(9010764, 4, "G9010764_OnDie") -- Обработчик смерти финального босса синей команды (9010773) function G9010773_OnDie(MapID, InstanceID, TargetID, TargetTypeID, RoleID) map.OpenCloseDoor(MapID, InstanceID, 2339, 1) -- Открытие двери end -- Регистрация обработчика смерти финального босса синей команды aux.RegisterCreatureEvent(9010773, 4, "G9010773_OnDie") -- Обработчик смерти финального босса (9010775) - общий для всех команд function G9010775_OnDie(MapID, InstanceID, TargetID, TargetTypeID, RoleID) -- Удаление инстанса карты map.DeleteInstance(3747797138, 1) -- Получение данных гильдии и времени local GuildID = guild.GetRoleGuildID(RoleID) -- ID гильдии local curmon = tonumber(os.date("%m")) -- Текущий месяц local curday = tonumber(os.date("%d")) -- Текущий день -- Сохранение данных о победителе act.SetActScriptData(1229, 1, 1, GuildID) -- ID гильдии-победителя act.SetActScriptData(1229, 1, 2, curday) -- День победы act.SetActScriptData(1229, 1, 3, curmon) -- Месяц победы act.SetActScriptData(1229, 1, 4, RoleID) -- ID игрока-победителя GvG_Danj_Open = 1 -- Флаг завершения активности end -- Регистрация обработчика смерти финального босса aux.RegisterCreatureEvent(9010775, 4, "G9010775_OnDie")