-- ==================================================================== -- ОПТИМИЗИРОВАННЫЙ СКРИПТ S02 (PRODUCTION READY) -- Цель: Уменьшение времени инициализации с 53ms до <10ms -- ==================================================================== -- Константы для оптимизации local MAP_INSTANCES = { 3390518568, 52648950, 52648182, 52648438, 52649974, 52649206, 52649462, 52646646, 52646902, 3373743400 } local TELEPORT_LOCATIONS = { [3695] = {mapId = 3000521423, x = 233, y = 16030, z = 1064}, -- Начальная лока [3696] = {mapId = 3424073256, x = 532, y = 3988, z = 1266}, -- Пандора [3697] = {mapId = 3424071976, x = 229, y = 13351, z = 887} -- Долина Грома } -- Кеш времени для оптимизации local timeCache = { lastUpdate = 0, month = 0, day = 0, year = 0, hour = 0, minute = 0 } -- ==================================================================== -- ФУНКЦИЯ: Оптимизированная телепортация -- ==================================================================== function s02_OnEnterArea(MapID, InstanceID, RoleID, ObjID) local location = TELEPORT_LOCATIONS[ObjID] if location then role.RoleGotoNewMap(MapID, InstanceID, RoleID, location.mapId, location.x, location.y, location.z) end end aux.RegisterMapEvent("s02", 7, "s02_OnEnterArea") -- ==================================================================== -- ФУНКЦИЯ: Обновление кеша времени -- ==================================================================== local function updateTimeCache() local currentTime = os.time() if currentTime - timeCache.lastUpdate >= 60 then -- Обновляем раз в минуту local dateTable = os.date("*t", currentTime) timeCache.month = dateTable.month timeCache.day = dateTable.day timeCache.year = dateTable.year timeCache.hour = dateTable.hour timeCache.minute = dateTable.min timeCache.lastUpdate = currentTime end end -- ==================================================================== -- ФУНКЦИЯ: Пакетное создание инстансов карт -- ==================================================================== local function createMapInstancesBatch(instances, S59_MapID) -- Создаем обычные инстансы for i, instanceId in ipairs(instances) do map.CreateInstance(instanceId, 1) end -- Создаем специальный инстанс S59 if S59_MapID then map.CreateInstance(S59_MapID, 9999) end end -- ==================================================================== -- ГЛАВНАЯ ФУНКЦИЯ: Инициализация (ОПТИМИЗИРОВАННАЯ) -- ==================================================================== function s02_OnInit(MapID, InstanceID, CreatureID, CreatureTypeID) aux.MultiRateReward(0, 1000, 203333400) aux.MultiRateReward(1, 200, 203333400) --- Драконий остров map.MapCreateColCreature(3373741864, -1, 6040328, 247, 2989, 172, 1, "") if JBZDY_Open == 1 then map.MapCreateColCreature(MapID, InstanceID, 6011030, 371, 23510, 732, 1, "") end -- Оптимизированное получение времени updateTimeCache() local curmon = timeCache.month local curday = timeCache.day local curyear = timeCache.year local curhour = timeCache.hour local curmin = timeCache.minute -- Пакетное создание инстансов карт createMapInstancesBatch(MAP_INSTANCES, S59_MapID) if BattlePass_Open == 1 then map.MapCreateColCreature(MapID, InstanceID, 9010676, 820, 23801, 771, 1, "") --Мирамонд Battle_pass end map.MapCreateColCreature(3424073512, 1, 5610043, 228, 23088, 375, "") --[[if yangguangdashi == 1 then map.MapCreateColCreature(MapID, InstanceID, 9010444, 710, 23510, 635, 1, "") --Охотник end]]-- end aux.RegisterMapEvent("s02", 0, "s02_OnInit") -- function q51010_OnComplete(MapID, InstanceID, QuestID, RoleID, NPCID) -- role.AddSkill(RoleID, 5944101) -- КАСТОР навык призыва духа!!!!!!!!!!!! -- end -- aux.RegisterQuestEvent(51010, 1, "q51010_OnComplete") function Shenqi_FriendEnemy(MapID, InstanceID, SrcID, TargetID) if unit.IsPlayer(SrcID) then local roleID = cre.GetCreatureScriptData(MapID, InstanceID, TargetID, 1, 1) local creID = cre.GetCreatureScriptData(MapID, InstanceID, TargetID, 1, 0) if roleID ~= nil and roleID == SrcID then return false, true, false, true elseif creID ~= nil and (creID >= 3040380 and creID <= 3040383) then return true, false, false, true else return false, false, false, false end end end aux.RegisterMapEvent("s02", 16, "Shenqi_FriendEnemy")