-- ======================================== -- ИВЕНТ БИТВА НЕБЕСНЫХ ИЗБРАННИКОВ (TianXuanZhe) -- ======================================== -- Основной файл системы TianXuan -- Управление глобальными переменными и обработчиками событий карты -- -- Функциональность: -- - Глобальные переменные для битв, сторон, игроков и областей -- - Обработчики событий карты S59 -- - Обработчики предметов-подарков -- - Система опыта по уровням -- -- Автор: Система -- Версия: 2.0 -- ======================================== -- ======================================== -- КОНСТАНТЫ СИСТЕМЫ -- ======================================== -- Предметы и баффы local TIANXUAN_CONSTANTS = { -- Предметы-подарки GIFT_LOW = 4820240, -- Базовый подарок GIFT_MEDIUM = 4820241, -- Средний подарок GIFT_HIGH = 4820242, -- Высокий подарок -- NPC REGISTRATION_NPC = 5610081, -- NPC регистрации EXIT_NPC = 5610080, -- NPC выхода -- ID карт MAP_ID = 3373743144, -- ID карты активности -- Время активности ACTIVITY_DURATION_HOURS = 1, -- Продолжительность в часах -- Ограничения MIN_LEVEL = 50, -- Минимальный уровень MAX_LEVEL = 100, -- Максимальный уровень MAX_KILLS_FOR_EXP = 30, -- Максимум убийств для опыта -- Очки BASE_KILL_POINTS = 1, -- Базовые очки за убийство CHOSEN_MULTIPLIER = 10, -- Множитель для избранников -- Инстансы TRAINING_INSTANCE = 9999, -- Инстанс тренировки KUAFU_INSTANCE_1 = 100, -- KuaFu PK инстанс 1 KUAFU_INSTANCE_2 = 101 -- KuaFu PK инстанс 2 } -- ======================================== -- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -- ======================================== -- Переменные для управления состоянием активности -- Глобальные переменные для TianXuan -- Глобальные переменные для битв, сторон, игроков и областей TianXuan TianXuan_Battle = {} -- Список битв TianXuan TianXuan_Side = {} -- Список сторон TianXuan TianXuan_Role = {} -- Список игроков TianXuan TianXuan_Area = {} -- Список областей TianXuan TianXuan_Roletotal = 0 -- Общее количество игроков TianXuan -- Глобальные переменные для KuaFu PK -- Глобальные переменные для битв, сторон, игроков и областей KuaFu PK KuaFuPK_Battle = {} -- Список битв KuaFu PK KuaFuPK_Side = {} -- Список сторон KuaFu PK KuaFuPK_Role = {} -- Список игроков KuaFu PK KuaFuPK_Area = {} -- Список областей KuaFu PK KuaFuPK_Roletotal = 0 -- Общее количество игроков KuaFu PK -- Список гильдий и их инстансов GuildNum = {} -- Таблица опыта для разных уровней в TianXuan TianXuan_Exp = {} TianXuan_Exp[50] = 243000 TianXuan_Exp[51] = 255000 TianXuan_Exp[52] = 265000 TianXuan_Exp[53] = 276000 TianXuan_Exp[54] = 289000 TianXuan_Exp[55] = 314000 TianXuan_Exp[56] = 327000 TianXuan_Exp[57] = 339000 TianXuan_Exp[58] = 352000 TianXuan_Exp[59] = 388000 TianXuan_Exp[60] = 507000 TianXuan_Exp[61] = 525000 TianXuan_Exp[62] = 544000 TianXuan_Exp[63] = 564000 TianXuan_Exp[64] = 582000 TianXuan_Exp[65] = 606000 TianXuan_Exp[66] = 627000 TianXuan_Exp[67] = 648000 TianXuan_Exp[68] = 670000 TianXuan_Exp[69] = 720000 TianXuan_Exp[70] = 1073000 TianXuan_Exp[71] = 1107000 TianXuan_Exp[72] = 1143000 TianXuan_Exp[73] = 1180000 TianXuan_Exp[74] = 1217000 TianXuan_Exp[75] = 1256000 TianXuan_Exp[76] = 1293000 TianXuan_Exp[77] = 1331000 TianXuan_Exp[78] = 1370000 TianXuan_Exp[79] = 2116000 TianXuan_Exp[80] = 2178000 TianXuan_Exp[81] = 2241000 TianXuan_Exp[82] = 2303000 TianXuan_Exp[83] = 2370000 TianXuan_Exp[84] = 2438000 TianXuan_Exp[85] = 2505000 TianXuan_Exp[86] = 2572000 TianXuan_Exp[87] = 2640000 TianXuan_Exp[88] = 2709000 TianXuan_Exp[89] = 2782000 TianXuan_Exp[90] = 3490000 TianXuan_Exp[91] = 3546000 TianXuan_Exp[92] = 3602000 TianXuan_Exp[93] = 3662000 TianXuan_Exp[94] = 3720000 TianXuan_Exp[95] = 3777000 TianXuan_Exp[96] = 3833000 TianXuan_Exp[97] = 3887000 TianXuan_Exp[98] = 3941000 TianXuan_Exp[99] = 3996000 TianXuan_Exp[100] = 4050000 -- ======================================== -- ОБРАБОТЧИКИ СОБЫТИЙ КАРТЫ -- ======================================== -- Обработчик входа игрока на карту S59 -- Управляет инициализацией игрока при входе на карту активности function S59_OnPlayerEnter(MapID, InstanceID, RoleID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil then return end -- Обработка в зависимости от типа инстанса if InstanceID ~= TIANXUAN_CONSTANTS.TRAINING_INSTANCE then if InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_1 or InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_2 then -- Обработка для KuaFu PK local curhour = tonumber(os.date("%H")) -- Текущий час local curmin = tonumber(os.date("%M")) -- Текущая минута -- Добавление баффа в определенное время if curhour == 19 and curmin < 30 then unit.AddBuff(MapID, InstanceID, RoleID, 6941101, RoleID) end local RoleObj = KuaFuPK_Role[RoleID] RoleObj:GetAttBuff_KuaFuPK() -- Получение атрибутного баффа RoleObj:WuDi_KuaFuPK() -- Активация неуязвимости RoleObj:SetColor_KuaFuPK() -- Установка цвета RoleObj:PlayerEnterKuaFuPK() -- Вход игрока local BattleObj = KuaFuPK_Battle[InstanceID] BattleObj:SendAllInfo_KuaFuPK() -- Отправка информации -- Обновление данных гильдии for k, v in pairs(GuildNum) do if v.guildID == KuaFuPK_Role[RoleID].Guild then if v.instanceID == nil or v.instanceID == 0 then v.instanceID = KuaFuPK_Role[RoleID].InstanceID end end end else -- Обработка для TianXuan local RoleObj = TianXuan_Role[RoleID] RoleObj:GetAttBuff_TianXuan() -- Получение атрибутного баффа RoleObj:WuDi_TianXuan() -- Активация неуязвимости RoleObj:SetColor_TianXuan() -- Установка цвета RoleObj:ShowTianXuanTime() -- Показ времени RoleObj:PlayerEnterTianXuan() -- Вход игрока local BattleObj = TianXuan_Battle[InstanceID] BattleObj:SendAllInfo_TianXuan() -- Отправка информации end end end -- Обработчик убийства игрока на карте S59 -- Начисляет опыт, очки и отправляет уведомления function s59_KillPeople(MapID, InstanceID, RoleID, KillerID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil or KillerID == nil then return end -- Проверяем, что убийца и жертва - игроки, и это не тренировочный инстанс if unit.IsPlayer(KillerID) and unit.IsPlayer(RoleID) and InstanceID ~= TIANXUAN_CONSTANTS.TRAINING_INSTANCE and RoleID ~= KillerID then if InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_1 or InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_2 then -- Обработка для KuaFu PK if KuaFuPK_Role[RoleID] ~= nil then KuaFuPK_Role[RoleID].die = 1 end local RoleObj = KuaFuPK_Role[KillerID] if RoleObj ~= nil then RoleObj:GetKillExp_KuaFuPK() -- Получение опыта за убийство local point = TIANXUAN_CONSTANTS.BASE_KILL_POINTS local guildID = guild.GetRoleGuildID(KillerID) -- Начисление очков гильдии for k1, v1 in pairs(GuildNum) do if v1.guildID == guildID then if RoleObj.Side == "Red" then if KuaFuPK_Battle[RoleObj.InstanceID] ~= nil and KuaFuPK_Battle[RoleObj.InstanceID].RedPlayer ~= nil then KuaFuPK_Battle[RoleObj.InstanceID].RedPlayer.Point = KuaFuPK_Battle[RoleObj.InstanceID].RedPlayer.Point + point end elseif RoleObj.Side == "Blue" then if KuaFuPK_Battle[RoleObj.InstanceID] ~= nil and KuaFuPK_Battle[RoleObj.InstanceID].BluePlayer ~= nil then KuaFuPK_Battle[RoleObj.InstanceID].BluePlayer.Point = KuaFuPK_Battle[RoleObj.InstanceID].BluePlayer.Point + point end end end end -- Отправка сообщения об убийстве local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 206726) -- Сообщение об убийстве msg.AddMsgEvent(MsgID, 2, RoleID) msg.DispatchRoleMsgEvent(KillerID, MsgID) -- Обновление информации битвы if KuaFuPK_Battle[InstanceID] ~= nil then local BattleObj = KuaFuPK_Battle[InstanceID] BattleObj:SendAllInfo_KuaFuPK() end end else -- Обработка для TianXuan local RoleObj = TianXuan_Role[KillerID] if RoleObj ~= nil then RoleObj:GetKillExp_TianXuan() -- Получение опыта за убийство local point = TIANXUAN_CONSTANTS.BASE_KILL_POINTS -- Дополнительные очки для избранников (небесных избранников) if role.IsRoleHaveBuff(MapID, InstanceID, RoleID, 61095) then point = TIANXUAN_CONSTANTS.CHOSEN_MULTIPLIER end -- Начисление очков стороне if RoleObj.Side == "Red" then if TianXuan_Battle[RoleObj.InstanceID] ~= nil and TianXuan_Battle[RoleObj.InstanceID].RedPlayer ~= nil then TianXuan_Battle[RoleObj.InstanceID].RedPlayer.Point = TianXuan_Battle[RoleObj.InstanceID].RedPlayer.Point + point end elseif RoleObj.Side == "Blue" then if TianXuan_Battle[RoleObj.InstanceID] ~= nil and TianXuan_Battle[RoleObj.InstanceID].BluePlayer ~= nil then TianXuan_Battle[RoleObj.InstanceID].BluePlayer.Point = TianXuan_Battle[RoleObj.InstanceID].BluePlayer.Point + point end end -- Отправка сообщения об убийстве local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 101, 206726) -- Сообщение об убийстве msg.AddMsgEvent(MsgID, 2, RoleID) msg.DispatchRoleMsgEvent(KillerID, MsgID) -- Обновление информации битвы if TianXuan_Battle[InstanceID] ~= nil then local BattleObj = TianXuan_Battle[InstanceID] BattleObj:SendAllInfo_TianXuan() end end end end end -- Обработчик выхода игрока с карты S59 -- Очищает состояния игрока и обновляет информацию битвы function s59_LeaveMap(MapID, InstanceID, RoleID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil then return end if InstanceID ~= TIANXUAN_CONSTANTS.TRAINING_INSTANCE then -- Сброс состояний цвета (красный и синий) unit.UnsetState(MapID, InstanceID, RoleID, 10) -- Красный цвет unit.UnsetState(MapID, InstanceID, RoleID, 11) -- Синий цвет if InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_1 or InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_2 then -- Обработка для KuaFu PK local RoleObj = KuaFuPK_Role[RoleID] if RoleObj ~= nil then if KuaFuPK_Battle[InstanceID] ~= nil then RoleObj:PlayerLeaveKuaFuPK() -- Выход игрока local BattleObj = KuaFuPK_Battle[InstanceID] BattleObj:SendAllInfo_KuaFuPK() -- Обновление информации end end else -- Обработка для TianXuan local RoleObj = TianXuan_Role[RoleID] if RoleObj ~= nil then RoleObj:PlayerLeaveTianXuan() -- Выход игрока if TianXuan_Battle[InstanceID] ~= nil then local BattleObj = TianXuan_Battle[InstanceID] BattleObj:SendAllInfo_TianXuan() -- Обновление информации end end end end end -- Обработчик возрождения игрока на карте S59 -- Восстанавливает HP/MP и активирует неуязвимость function s59_RoloRevive(MapID, InstanceID, RoleID, Type, ReviveHP, ReviveMP, x, y, z, RebornMapID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or RoleID == nil then return ReviveHP, ReviveMP, x, y, z, RebornMapID end -- Восстановление HP и MP до максимума ReviveHP = role.GetRoleAttValue(MapID, InstanceID, RoleID, 8) -- Максимальное HP ReviveMP = role.GetRoleAttValue(MapID, InstanceID, RoleID, 10) -- Максимальное MP -- Случайная точка возрождения (1-9) local k = math.random(9) if InstanceID ~= TIANXUAN_CONSTANTS.TRAINING_INSTANCE then if InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_1 or InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_2 then -- Обработка для KuaFu PK local RoleObj = KuaFuPK_Role[RoleID] if RoleObj ~= nil then KuaFuPK_Role[RoleID].die = 0 -- Сброс статуса смерти RoleObj:WuDi_KuaFuPK() -- Активация неуязвимости end else -- Обработка для TianXuan local RoleObj = TianXuan_Role[RoleID] if RoleObj ~= nil then RoleObj:WuDi_TianXuan() -- Активация неуязвимости end end end -- Возврат параметров возрождения return ReviveHP, ReviveMP, S59_Point[k].x, S59_Point[k].y * 51, S59_Point[k].z, MapID end -- Определение отношений между игроками (друзья/враги) -- Возвращает: isFriend, isEnemy, isNeutral, canAttack function s59_FriendEnemy(MapID, InstanceID, SrcID, TargetID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or SrcID == nil or TargetID == nil then return false, false, false, false end -- Проверяем, что оба - игроки if unit.IsPlayer(SrcID) and unit.IsPlayer(TargetID) then if InstanceID == TIANXUAN_CONSTANTS.TRAINING_INSTANCE then -- Проверка команд для тренировочной зоны local TeamID1 = role.IsRoleHaveTeam(MapID, InstanceID, SrcID) local TeamID2 = role.IsRoleHaveTeam(MapID, InstanceID, TargetID) if TeamID1 ~= 4294967295 and TeamID1 ~= nil and TeamID1 == TeamID2 then return true, false, false, true -- Друзья (в одной команде) else return false, true, false, true -- Враги (в разных командах) end else if InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_1 or InstanceID == TIANXUAN_CONSTANTS.KUAFU_INSTANCE_2 then -- Проверка сторон для KuaFu PK local RoleObj1 = GetKuaFuPKRoleObj(SrcID) local RoleObj2 = GetKuaFuPKRoleObj(TargetID) if RoleObj1 ~= nil and RoleObj2 ~= nil then if RoleObj1.Side == RoleObj2.Side then return true, false, false, true -- Друзья (одна сторона) else return false, true, false, true -- Враги (разные стороны) end end else -- Проверка сторон для TianXuan local RoleObj1 = GetTianXuanRoleObj(SrcID) local RoleObj2 = GetTianXuanRoleObj(TargetID) if RoleObj1 ~= nil and RoleObj2 ~= nil then if RoleObj1.Side == RoleObj2.Side then return true, false, false, true -- Друзья (одна сторона) else return false, true, false, true -- Враги (разные стороны) end end end end end -- По умолчанию: нейтральные отношения return false, false, false, false end --[[ Регистрация обработчиков событий карты События: 2 - Вход игрока на карту 5 - Убийство игрока 3 - Выход игрока с карты 11 - Возрождение игрока 16 - Определение друзей/врагов ]] aux.RegisterMapEvent("s59", 2, "S59_OnPlayerEnter") aux.RegisterMapEvent("s59", 5, "s59_KillPeople") aux.RegisterMapEvent("s59", 3, "s59_LeaveMap") aux.RegisterMapEvent("s59", 11, "s59_RoloRevive") aux.RegisterMapEvent("s59", 16, "s59_FriendEnemy") --[[ Обработчики событий предметов (подарки) Предметы: 4820240, 4820241, 4820242 - Подарки разных уровней ]] -- ======================================== -- ОБРАБОТЧИКИ ПРЕДМЕТОВ-ПОДАРКОВ -- ======================================== -- Обработчик использования подарка низкого уровня function I4820240_GiftBag(MapID, InstanceID, TypeID, TargetID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or TypeID == nil or TargetID == nil then return end -- Выдаем награды за подарок низкого уровня role.AddRoleItem(MapID, InstanceID, TargetID, 4600001, 30, -1, 8, 420) -- Монеты role.AddRoleItem(MapID, InstanceID, TargetID, 4820081, 40, -1, 8, 420) -- Материалы role.AddRoleItem(MapID, InstanceID, TargetID, 4800132, 1, -1, 8, 420) -- Особый предмет role.AddRoleItem(MapID, InstanceID, TargetID, 6600799, 20, -1, 8, 420) -- Медаль доблести end -- Проверка возможности использования подарка низкого уровня function I4820240_CanUseGiftBag(MapID, InstanceID, TypeID, TargetID) local bRet, bIgnore = 0, false -- Проверяем входные параметры if TargetID == nil then bRet = 1 -- Общая ошибка return bRet, bIgnore end -- Проверка свободного места в инвентаре (нужно минимум 4 слота) local FreeSize = role.GetBagFreeSize(TargetID) if FreeSize < 4 then bRet = 40 -- Недостаточно места в инвентаре end return bRet, bIgnore end -- Регистрация обработчиков для подарка низкого уровня aux.RegisterItemEvent(TIANXUAN_CONSTANTS.GIFT_LOW, 1, "I4820240_GiftBag") aux.RegisterItemEvent(TIANXUAN_CONSTANTS.GIFT_LOW, 0, "I4820240_CanUseGiftBag") -- Обработчик использования подарка среднего уровня function I4820241_GiftBag(MapID, InstanceID, TypeID, TargetID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or TypeID == nil or TargetID == nil then return end -- Выдаем награды за подарок среднего уровня role.AddRoleItem(MapID, InstanceID, TargetID, 4600001, 40, -1, 8, 420) -- Монеты (больше) role.AddRoleItem(MapID, InstanceID, TargetID, 4820081, 50, -1, 8, 420) -- Материалы (больше) role.AddRoleItem(MapID, InstanceID, TargetID, 4800132, 1, -1, 8, 420) -- Особый предмет role.AddRoleItem(MapID, InstanceID, TargetID, 6600799, 20, -1, 8, 420) -- Медаль доблести end -- Проверка возможности использования подарка среднего уровня function I4820241_CanUseGiftBag(MapID, InstanceID, TypeID, TargetID) local bRet, bIgnore = 0, false -- Проверяем входные параметры if TargetID == nil then bRet = 1 -- Общая ошибка return bRet, bIgnore end -- Проверка свободного места в инвентаре (нужно минимум 4 слота) local FreeSize = role.GetBagFreeSize(TargetID) if FreeSize < 4 then bRet = 40 -- Недостаточно места в инвентаре end return bRet, bIgnore end -- Регистрация обработчиков для подарка среднего уровня aux.RegisterItemEvent(TIANXUAN_CONSTANTS.GIFT_MEDIUM, 1, "I4820241_GiftBag") aux.RegisterItemEvent(TIANXUAN_CONSTANTS.GIFT_MEDIUM, 0, "I4820241_CanUseGiftBag") -- Обработчик использования подарка высокого уровня function I4820242_GiftBag(MapID, InstanceID, TypeID, TargetID) -- Проверяем входные параметры if MapID == nil or InstanceID == nil or TypeID == nil or TargetID == nil then return end -- Выдаем награды за подарок высокого уровня role.AddRoleItem(MapID, InstanceID, TargetID, 4600001, 50, -1, 8, 420) -- Монеты (максимум) role.AddRoleItem(MapID, InstanceID, TargetID, 4820081, 60, -1, 8, 420) -- Материалы (максимум) role.AddRoleItem(MapID, InstanceID, TargetID, 4800132, 1, -1, 8, 420) -- Особый предмет role.AddRoleItem(MapID, InstanceID, TargetID, 6600799, 20, -1, 8, 420) -- Медаль доблести end -- Проверка возможности использования подарка высокого уровня function I4820242_CanUseGiftBag(MapID, InstanceID, TypeID, TargetID) local bRet, bIgnore = 0, false -- Проверяем входные параметры if TargetID == nil then bRet = 1 -- Общая ошибка return bRet, bIgnore end -- Проверка свободного места в инвентаре (нужно минимум 4 слота) local FreeSize = role.GetBagFreeSize(TargetID) if FreeSize < 4 then bRet = 40 -- Недостаточно места в инвентаре end return bRet, bIgnore end -- Регистрация обработчиков для подарка высокого уровня aux.RegisterItemEvent(TIANXUAN_CONSTANTS.GIFT_HIGH, 1, "I4820242_GiftBag") aux.RegisterItemEvent(TIANXUAN_CONSTANTS.GIFT_HIGH, 0, "I4820242_CanUseGiftBag") -- ======================================== -- ИНФОРМАЦИЯ О СИСТЕМЕ TIANXUAN -- ======================================== -- -- ИВЕНТ "БИТВА НЕБЕСНЫХ ИЗБРАННИКОВ" (TianXuanZhe) -- ======================================== -- -- ОСНОВНЫЕ КОМПОНЕНТЫ: -- -- 1. ОСНОВНОЙ ФАЙЛ (TianXuanZhe.lua) -- - Глобальные переменные для управления состоянием -- - Обработчики событий карты S59 -- - Система опыта по уровням игроков -- - Обработчики предметов-подарков -- -- 2. ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ (TianXuanZhe_Function.lua) -- - Создание объектов игроков, сторон, битв и областей -- - Управление логикой активности -- -- 3. КАРТА И КООРДИНАТЫ (TianXuanZhe_map.lua) -- - Координаты точек входа и выхода -- - ID областей активности -- - Обработчики событий карты -- -- 4. УПРАВЛЕНИЕ АКТИВНОСТЬЮ (TianXuanZhe_Act.lua) -- - Диалоги с NPC регистрации и выхода -- - Таймеры и события активности -- - Система наград и покупок -- -- КОНСТАНТЫ СИСТЕМЫ: -- -- - GIFT_LOW (4820240): Базовый подарок -- - GIFT_MEDIUM (4820241): Средний подарок -- - GIFT_HIGH (4820242): Высокий подарок -- - REGISTRATION_NPC (5610081): NPC регистрации -- - EXIT_NPC (5610080): NPC выхода -- - MAP_ID (3373743144): ID карты активности -- - MIN_LEVEL (50): Минимальный уровень для участия -- - MAX_LEVEL (100): Максимальный уровень -- - MAX_KILLS_FOR_EXP (30): Лимит убийств для опыта -- - TRAINING_INSTANCE (9999): Инстанс тренировки -- - KUAFU_INSTANCE_1 (100): KuaFu PK инстанс 1 -- - KUAFU_INSTANCE_2 (101): KuaFu PK инстанс 2 -- -- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ: -- -- TianXuan_Battle[]: Массив объектов битв -- TianXuan_Side[]: Массив объектов сторон (Red/Blue) -- TianXuan_Role[]: Массив объектов игроков -- TianXuan_Area[]: Массив объектов областей -- TianXuan_Roletotal: Общее количество игроков -- TianXuan_Exp[]: Таблица опыта по уровням -- -- ОСНОВНЫЕ ФУНКЦИИ: -- -- 1. ОБРАБОТЧИКИ КАРТЫ: -- - S59_OnPlayerEnter: Вход игрока на карту -- - s59_KillPeople: Убийство игрока -- - s59_LeaveMap: Выход игрока с карты -- - s59_RoloRevive: Возрождение игрока -- - s59_FriendEnemy: Определение друзей/врагов -- -- 2. ОБРАБОТЧИКИ ПРЕДМЕТОВ: -- - I4820240_GiftBag: Использование базового подарка -- - I4820241_GiftBag: Использование среднего подарка -- - I4820242_GiftBag: Использование высокого подарка -- -- СИСТЕМА ОПЫТА: -- -- TianXuan_Exp[level]: Опыт, необходимый для уровня -- - Уровень 50: 243000 опыта -- - Уровень 60: 507000 опыта -- - Уровень 70: 1073000 опыта -- - Уровень 80: 2178000 опыта -- - Уровень 90: 3490000 опыта -- - Уровень 100: 4050000 опыта -- -- СТОРОНЫ В БИТВЕ: -- -- - "Red": Красная сторона -- - "Blue": Синяя сторона -- -- НЕБЕСНЫЕ ИЗБРАННИКИ: -- -- Игроки, получающие бафф 6109501, дают 10 очков вместо 1 -- при убийстве игроков противоположной стороны. -- -- ОБЛАСТИ АКТИВНОСТИ: -- -- 9 областей (S59_Area[1-9]) с различными баффами: -- - 5610077: Бафф 6109301 -- - 5610078: Бафф 6109101 -- - 5610079: Бафф 6109201 -- -- ПРОВЕРКИ БЕЗОПАСНОСТИ: -- -- - Все функции проверяют входные параметры на nil -- - Проверяется существование объектов перед использованием -- - Проверяется уровень игрока перед регистрацией -- - Проверяется место в инвентаре перед выдачей наград -- -- ЗАМЕЧАНИЯ: -- -- - Система поддерживает как TianXuan, так и KuaFu PK режимы -- - Разные инстансы обрабатываются по-разному -- - Есть тренировочный режим (инстанс 9999) -- - Система наград имеет три уровня подарков -- - Опыт за убийства ограничен 30 убийствами