function s62_Creature(curhour) -- Проверка валидности параметра if not curhour then return end -- Создание инстанса карты (3390519080 - ID карты s62) map.CreateInstance(3390519080, curhour) local mijingtemp = math.random(2) local portalID = 0 local msgX, msgZ = 0, 0 if(mijingtemp == 1) then portalID = map.MapCreateColCreature(3424071720, -1, 5600006, 1189, 10501, 1082, true, "") msgX = 1189 msgZ = 1082 else portalID = map.MapCreateColCreature(3424071720, -1, 5600006, 2642, 7400, 2557, true, "") msgX = 2642 msgZ = 2557 end -- Отправка сообщения только если портал успешно создан -- GT_INVALID = 4294967295 означает ошибку создания if portalID and portalID ~= 0 and portalID ~= 4294967295 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 102, 300091) msg.AddMsgEvent(MsgID, 9, msgX) msg.AddMsgEvent(MsgID, 9, msgZ) msg.DispatchBroadcast(MsgID, -1, -1, -1) end map.MapCreateColCreature(3390519080, curhour,5600005 ,113,2010,192, true, "") local creature = {} local id = 0 creature[1] = {115,1994,160} creature[2] = {115,1994,120} creature[3] = {135,1994,140} creature[4] = {95,2010,140} for i=1,4 do local temp = math.random(4) if(temp <= 2) then id = 1092012 + temp -1 else id = 1092016 + temp -3 end map.MapCreateColCreature(3390519080, curhour,id ,creature[i][1],creature[i][2],creature[i][3], true, "") end end function s62_delete(curhour) -- Удаление инстанса происходит через час после создания -- Инстансы создаются в 9:00, 12:00, 15:00, 18:00, 21:00 -- Удаляются в 10:00, 13:00, 16:00, 19:00, 22:00 -- Система map.DeleteInstance автоматически обрабатывает игроков в инстансе -- (телепортирует их обратно или обрабатывает ошибки) local instanceID = curhour - 1 -- Проверяем, что это валидный час удаления (через час после создания) local validDeleteHours = {10, 13, 16, 19, 22} local isValidDeleteHour = false for _, hour in ipairs(validDeleteHours) do if curhour == hour then isValidDeleteHour = true break end end -- Удаляем инстанс только если это время удаления if isValidDeleteHour then -- Получаем всех игроков в инстансе и выкидываем их перед удалением local RoleTbl = map.GetMapAllRoleID(3390519080, instanceID) if RoleTbl ~= nil then for k, v in pairs(RoleTbl) do if v ~= nil and v ~= 0 then -- Проверяем, что игрок действительно в этом инстансе local playerMap, playerInstance = role.GetRoleMapID(v) if playerMap == 3390519080 and playerInstance == instanceID then -- Выкидываем на безопасную карту выхода role.RoleGotoNewMap(3390519080, instanceID, v, 3424073512, 610, 23094, 669) end end end end map.DeleteInstance(3390519080, instanceID) end end --����ڻ�е��ߺ����� function s62_CanEnterWhenOnline(MapID, RoleID) --������ҵ����ߵ�ͼ������todo return 3424073512,610,23094,669 end aux.RegisterMapEvent("s62", 12, "s62_CanEnterWhenOnline") ------------------------------------------------------------------------------------------------------- --�ҵ���ͼ�ij��ں����� function s62_GetExporMapAndCoord(MapID, InstanceID, RoleID) return 1, 3424073512,610,23094,669 end aux.RegisterMapEvent("s62", 13, "s62_GetExporMapAndCoord") --�ҵ�����ʵĸ���ʵ�� function s62_GetOnePerfectMap(MapID, InstanceID, RoleID) local curhour = tonumber(os.date("%H")) -- Текущий час -- Инстансы создаются в 9:00, 12:00, 15:00, 18:00, 21:00 -- Удаляются через час: в 10:00, 13:00, 16:00, 19:00, 22:00 -- Проверяем, является ли текущий час временем создания нового инстанса local validHours = {9, 12, 15, 18, 21} local isValidHour = false for _, hour in ipairs(validHours) do if curhour == hour then isValidHour = true break end end -- Если текущий час - время создания инстанса, возвращаем его if isValidHour then return curhour end -- Иначе ищем последний валидный инстанс (инстанс предыдущего часа создания) -- Инстанс существует в течение часа: создается в hour:00, удаляется в (hour+1):00 -- Для целых часов инстанс активен в течение часа после создания -- Ищем максимальный час создания, который меньше текущего часа -- но инстанс еще не должен быть удален (curhour < hour + 1 не выполнится для целых часов) -- На практике: если curhour не является временем создания, инстанс либо уже удален, либо еще не создан -- В этом случае возвращаем curhour, что приведет к созданию нового инстанса при следующем вызове s62_Creature local lastValidHour = nil -- Для целых часов нет активного инстанса между временем создания и удаления -- Инстанс активен только в час создания (curhour == hour), что уже обработано выше -- Если нашли валидный инстанс, возвращаем его, иначе возвращаем текущий час -- (инстанс будет создан при следующем создании или будет ошибка, которую обработает система) return lastValidHour or curhour end aux.RegisterMapEvent("s62", 14, "s62_GetOnePerfectMap") --�������Ƿ��ܹ��������� function s62_CanEnter(MapID, InstanceID, RoleID) return 1 end aux.RegisterMapEvent("s62", 15, "s62_CanEnter") function mijingyaojing_OnDie(MapID, InstanceID, TargetID, TargetTypeID, RoleID) -- Проверка валидности параметров if not MapID or not InstanceID or not TargetID or not RoleID then return end local tbl_JXG = {} tbl_JXG[1] = 6010048 tbl_JXG[2] = 6010052 tbl_JXG[3] = 6010053 tbl_JXG[4] = 6010054 tbl_JXG[5] = 6010056 tbl_JXG[6] = 6010057 tbl_JXG[7] = 6010058 tbl_JXG[8] = 6010059 local x, y, z = unit.GetPosition(MapID, InstanceID, TargetID) if not x or not y or not z then return end local temp = math.random(2) local arraySize = #tbl_JXG if temp == 1 then -- Спавн 1 существа local randomIndex = math.random(1, arraySize) map.MapCreateCreature(MapID, InstanceID, tbl_JXG[randomIndex], x, y, z) elseif temp == 2 then -- Спавн 2 существ local randomIndex1 = math.random(1, arraySize) local randomIndex2 = math.random(1, arraySize) map.MapCreateCreature(MapID, InstanceID, tbl_JXG[randomIndex1], x, y, z) map.MapCreateCreature(MapID, InstanceID, tbl_JXG[randomIndex2], x-10, y, z+10) end end aux.RegisterCreatureEvent(1092012,4,"mijingyaojing_OnDie") aux.RegisterCreatureEvent(1092013,4,"mijingyaojing_OnDie") aux.RegisterCreatureEvent(1092016,4,"mijingyaojing_OnDie") aux.RegisterCreatureEvent(1092017,4,"mijingyaojing_OnDie")