-- ============================================================================= -- Система восставшего духа (Rebellious Spirit) -- Управляет спавном специальных NPC и наградами за их убийство -- ============================================================================= -- Функция запуска события восставшего духа function rebellious_spirit_OnStart(actID) -- Отправка сообщения о начале события local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 102, 300099) msg.DispatchWorldMsgEvent(MsgID) -- Выбор случайных позиций для спавна local i = math.random(1, 4) -- Случайная позиция local k = math.random(1, 4) -- Случайный тип NPC -- Таблица конфигурации восставших духов -- Структура: {ID существ, MapID, {позиции}} local rebellious_spirit = { { {3041154, 3041155, 3041156, 3041157}, -- ID существ (60-84 уровень) 3424072488, -- ID карты { {1032, 3800, 1349}, -- Позиция 1 {1555, 3100, 408}, -- Позиция 2 {2013, 5886, 1168}, -- Позиция 3 {1886, 5828, 1873} -- Позиция 4 } }, { {3041158, 3041158, 3041158, 3041158}, -- ID существ (85-99 уровень) 3424075048, -- ID карты { {1486, 5500, 2404}, -- Позиция 1 {1680, 9600, 1575}, -- Позиция 2 {2241, 5127, 1440}, -- Позиция 3 {2090, 7758, 830} -- Позиция 4 } }, { {3041159, 3041159, 3041159, 3041159}, -- ID существ (100-105 уровень) 3424074792, -- ID карты { {634, 7162, 1681}, -- Позиция 1 {728, 7085, 1420}, -- Позиция 2 {570, 5999, 1411}, -- Позиция 3 {929, 9759, 1685} -- Позиция 4 } }, { {3041160, 3041160, 3041160, 3041160}, -- ID существ (106-120 уровень) 3440849960, -- ID карты { {1203, 3701, 423}, -- Позиция 1 {1526, 2703, 718}, -- Позиция 2 {850, 2109, 1183}, -- Позиция 3 {356, 2699, 1513} -- Позиция 4 } } } -- Спавн восставших духов на всех картах for j = 1, 4 do map.MapCreateColCreature( rebellious_spirit[j][2], -- ID карты -1, -- InstanceID (-1 для глобальной карты) rebellious_spirit[j][1][k], -- ID существа rebellious_spirit[j][3][i][1], -- X координата rebellious_spirit[j][3][i][2], -- Y координата rebellious_spirit[j][3][i][3], -- Z координата 1, -- Направление "" -- Скрипт данных ) end end -- Регистрация событий запуска aux.RegisterActEvent(1123, 2, "rebellious_spirit_OnStart") aux.RegisterActEvent(1124, 2, "rebellious_spirit_OnStart") -- Таблица диапазонов уровней существ и соответствующих наград -- Структура: [CreatureID] = {min = минимальный уровень, max = максимальный уровень, prize_index = индекс награды} local creature_level_ranges = { [3041154] = {min = 60, max = 84, prize_index = 1}, -- Восставший дух 1 [3041155] = {min = 60, max = 84, prize_index = 1}, -- Восставший дух 2 [3041156] = {min = 60, max = 84, prize_index = 1}, -- Восставший дух 3 [3041157] = {min = 60, max = 84, prize_index = 1}, -- Восставший дух 4 [3041158] = {min = 85, max = 99, prize_index = 2}, -- Восставший дух 5 [3041159] = {min = 100, max = 105, prize_index = 3}, -- Восставший дух 6 [3041160] = {min = 106, max = 120, prize_index = 4} -- Восставший дух 7 } -- Таблица наград за убийство восставших духов -- Структура: {ItemID, Quantity} - ID предмета и количество local prizes = { -- Награды за существ уровней 60-84 { {3500206, 10}, -- Предмет 3500206, 10 шт {3500041, 9}, -- Предмет 3500041, 9 шт {3540103, 1}, -- Предмет 3540103, 1 шт {3560002, 23}, -- Предмет 3560002, 23 шт {3500039, 2} -- Предмет 4810057, 1 шт }, -- Награды за существ уровней 85-99 { {3500207, 5}, -- Предмет 3500207, 5 шт {3500048, 10}, -- Предмет 3500048, 10 шт {3540103, 1}, -- Предмет 3540103, 1 шт {3560002, 23}, -- Предмет 3560002, 23 шт {3500039, 2} -- Предмет 4810057, 1 шт }, -- Награды за существ уровней 100-105 { {3500208, 2}, -- Предмет 3500208, 2 шт {3500061, 3}, -- Предмет 3500061, 3 шт {3540103, 1}, -- Предмет 3540103, 1 шт {3560002, 23}, -- Предмет 3560002, 23 шт {3500039, 2} -- Предмет 4810057, 1 шт }, -- Награды за существ уровней 106-120 { {3500208, 3}, -- Предмет 3500208, 3 шт {3500061, 5}, -- Предмет 3500061, 5 шт {3540103, 1}, -- Предмет 3540103, 1 шт {3560002, 23}, -- Предмет 3560002, 23 шт {3500039, 2} -- Предмет 4810057, 1 шт }, } -- Таблица редких предметов и шанс их выпадения local rare_reward_chance = 0.05 -- 5% local rare_rewards = { {4810156, 1}, {4810157, 1} } -- Функция обработки смерти восставшего духа -- Вызывается при убийстве существа игроком function rebellious_spirit_Die(MapID, InstanceID, CreatureID, CreatureTypeID, KillerID) -- Получение уровня игрока-убийцы local lev = role.GetRoleLevel(MapID, InstanceID, KillerID) -- Получение данных о существе из таблицы диапазонов local creature_data = creature_level_ranges[CreatureTypeID] -- Проверка соответствия уровня игрока диапазону существа if creature_data and lev >= creature_data.min and lev <= creature_data.max then local prize_index = creature_data.prize_index -- Выдача всех предметов из соответствующей таблицы наград for i = 1, #prizes[prize_index] do role.AddRoleItem( MapID, -- ID карты InstanceID, -- ID инстанса KillerID, -- ID игрока prizes[prize_index][i][1], -- ID предмета prizes[prize_index][i][2], -- Количество предметов -1, -- Слот (-1 для автоматического выбора) 8, -- Тип награды 420 -- ID события ) end -- Проверяем выпадение редкого предмета if math.random() < rare_reward_chance then local rare = rare_rewards[math.random(1, #rare_rewards)] role.AddRoleItem(MapID, InstanceID, KillerID, rare[1], rare[2], -1, 8, 420) end end end -- Регистрация событий смерти для всех типов восставших духов -- Параметр 4 означает событие смерти существа aux.RegisterCreatureEvent(3041154, 4, "rebellious_spirit_Die") -- Восставший дух 1 aux.RegisterCreatureEvent(3041155, 4, "rebellious_spirit_Die") -- Восставший дух 2 aux.RegisterCreatureEvent(3041156, 4, "rebellious_spirit_Die") -- Восставший дух 3 aux.RegisterCreatureEvent(3041157, 4, "rebellious_spirit_Die") -- Восставший дух 4 aux.RegisterCreatureEvent(3041158, 4, "rebellious_spirit_Die") -- Восставший дух 5 aux.RegisterCreatureEvent(3041159, 4, "rebellious_spirit_Die") -- Восставший дух 6 aux.RegisterCreatureEvent(3041160, 4, "rebellious_spirit_Die") -- Восставший дух 7