-- ============================================================================= -- СИСТЕМА НАГРАД ЗА СМЕРТЬ БОССА МИРОВОГО БОССА -- Версия: 2.0 -- Описание: Управление наградами за победу над мировым боссом -- ============================================================================= -- ============================================================================= -- Функция награждения с коэффициентом -- Параметры: тип награды, коэффициент, время (в минутах) -- Примечание: тип награды 0=обычный, 1=премиум, коэффициент 100=100%, время в минутах -- ============================================================================= -- ============================================================================= -- Обработчик диалога с NPC "Наградный менеджер" (ID: 5610054) -- Управляет выдачей наград за победу над мировым боссом -- ============================================================================= function tianxiafuliren_OnTalk(MapID, InstanceID, TargetID, TargetTypeID, RoleID, TalkIndex) -- Получение данных игрока local playerLevel = role.GetRoleLevel(MapID, InstanceID, RoleID) local freeBagSlots = role.GetBagFreeSize(RoleID) local hasBuff = role.IsRoleHaveBuff(MapID, InstanceID, RoleID, 69371) local rewardTokens = role.GetRoleItemNum(RoleID, 4820036) -- Количество жетонов наград -- Проверка уровня игрока (минимум 50 уровень) if playerLevel >= 50 then -- Основное меню диалога if TalkIndex == -1 then local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206488) -- "Получить награды за победу, нужно оплатить налог~~~" msg.AddMsgEvent(MsgID, 24, TargetID) -- ID NPC msg.AddMsgEvent(MsgID, 21, 4) -- Получить награду msg.AddMsgEvent(MsgID, 1, 206489) msg.AddMsgEvent(MsgID, 21, 5) -- Обменять жетон наград msg.AddMsgEvent(MsgID, 1, 206490) msg.AddMsgEvent(MsgID, 21, 6) -- Отмена msg.AddMsgEvent(MsgID, 1, 100002) -- OK msg.DispatchRoleMsgEvent(RoleID, MsgID) -- Обработка: Получить награду elseif TalkIndex == 4 then if hasBuff == true then if freeBagSlots >= 1 then -- Выдача жетона наград и снятие баффа role.AddRoleItem(MapID, InstanceID, RoleID, 4820036, 1, -1, 8, 420) unit.CancelBuff(MapID, InstanceID, RoleID, 6937101) else -- Недостаточно места в инвентаре local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 26, 100003) -- Сообщение о полном инвентаре msg.AddMsgEvent(MsgID, 9, 1) msg.DispatchRoleMsgEvent(RoleID, MsgID) end else -- У игрока нет требуемого баффа local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206487) -- "У вас нет статуса награды" msg.AddMsgEvent(MsgID, 24, TargetID) -- ID NPC msg.AddMsgEvent(MsgID, 21, 6) -- Кнопка отмены msg.AddMsgEvent(MsgID, 1, 100001) -- OK msg.DispatchRoleMsgEvent(RoleID, MsgID) end -- Обработка: Обменять жетон наград elseif TalkIndex == 5 then if rewardTokens >= 1 then -- Обмен жетона на опыт и выполнение функций благосостояния role.RemoveFromRole(MapID, InstanceID, RoleID, 4820036, 1, 101) role.AddRoleExp(MapID, InstanceID, RoleID, 1000000) -- +1,000,000 опыта fuli_jifen() -- Выполнение функций благосостояния else -- У игрока нет жетонов наград local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206486) -- "У вас нет жетонов наград" msg.AddMsgEvent(MsgID, 24, TargetID) -- ID NPC msg.AddMsgEvent(MsgID, 21, 6) -- Кнопка отмены msg.AddMsgEvent(MsgID, 1, 100001) -- OK msg.DispatchRoleMsgEvent(RoleID, MsgID) end end else -- Уровень игрока ниже 50 local MsgID = msg.BeginMsgEvent() msg.AddMsgEvent(MsgID, 20, 206493) -- "Ваш уровень слишком низкий" msg.AddMsgEvent(MsgID, 24, TargetID) -- ID NPC msg.AddMsgEvent(MsgID, 21, 6) -- Кнопка отмены msg.AddMsgEvent(MsgID, 1, 100001) -- OK msg.DispatchRoleMsgEvent(RoleID, MsgID) end end -- ============================================================================= -- Функция управления счетчиком благосостояния -- Используется при обмене жетонов наград для учета статистики -- ============================================================================= function fuli_jifen() local currentValue = act.GetActScriptData(42, 1, 1) -- Увеличение счетчика до максимума 100 if currentValue < 100 then act.SetActScriptData(42, 1, 1, currentValue + 1) else -- Сброс счетчика при достижении максимума act.SetActScriptData(42, 1, 1, 0) end -- Сохранение данных активности act.SaveActScriptData(42) end -- ============================================================================= -- РЕГИСТРАЦИЯ СОБЫТИЙ -- ============================================================================= -- Регистрация обработчика диалога с NPC наградным менеджером aux.RegisterCreatureEvent(5610054, 7, "tianxiafuliren_OnTalk") -- ============================================================================= -- КОНЕЦ СИСТЕМЫ НАГРАД ЗА СМЕРТЬ БОССА -- =============================================================================