--[[ v.mezhinsky Квестовый босс УйаррМО - квест цепочки на легендарное кольцо. Автолевельный. Логика босса: - В начале боя вешает на себя бафф-счетчик. Когда счетчик доходит до 0 - убивает всех игроков. - В начале боя призывает бота на помощь игроку - Перед атакой, если у него меньше 60% хп, восстанавливает 20% хп и вешает на себя дот на 20% хп за 5 ходов (стакается до 4 раз) - ВМЕСТО атаки - атакует игрока, нанося ему 2% от максимального хп игрока и вешая дот на 1% максимального хп игрока за 2 хода (стакается до 2 раз) Автоатаки НЕТ ]] ------------------------------------------------ Boss --------------------------------------------------------- function boss_quest_init() -- Инициализация, выполняется однажды при создании боя local botId = PERS_ID(my.persPtr) if sbot_state == nil then sbot_state = {} end if sbot_state[botId] == nil then sbot_state[botId] = {} end -- Инициализация признака первого хода if (sbot_state[botId].Summoned == nil) then sbot_state[botId].Summoned = 0 end -- Здесь число призванных миньонов if (sbot_state[botId].nextCheck == nil) then sbot_state[botId].nextCheck = os.time() end -- Переменная для синхронных проверок end function boss_quest_run_once(markerId, allyId) -- Выполняется один раз local state = sbot_state[PERS_ID(my.persPtr)] if (state.FirstRun == nil) and (my.oppPtr) then aux.useEffect(markerId, my.persPtr) --вешает на себя бафф-счетчик aux.useEffect(allyId, my.oppPtr) --призывает бота на помощь игроку state.FirstRun = true end end function boss_quest_before_hit(healId, healThr, markerId, selfdotId, enrage) --[[ -- Логика: - Если бафф-счетчик спал с бота - убивает всех игроков - Если у бота меньше 60% хп - хилится и вешает на себя дот Иначе - переходит в атаку. ]] if (my.status == FS_PS_ACTIVE) then local bot = PERS(my.persPtr) local hpC = bot.hp/bot.hpMax -- Gamelogic Start if (#aux.activeEffects(my.persPtr, {artId = markerId}) == 0) then aux.useEffect(enrage, my.oppPtr) end if (hpC <= healThr) then aux.useEffect(selfdotId, my.persPtr) --aux.useEffect(ArtId, my.persPtr) aux.useEffect(healId, my.persPtr) --aux.useEffect(ArtId, my.persPtr) end -- Gamelogic Stop end end function boss_quest_hit(atkdmg,atkdot) --[[ -- Логика: - Запускаем атаку ]] if (my.status == FS_PS_ACTIVE) then aux.useEffect(atkdmg, my.oppPtr) aux.useEffect(atkdot, my.oppPtr) end -- if FS_PS_ACTIVE end function boss_quest() -- Инициализируем. boss_quest_init() ----------------------------------------подстраиваем свой лвл под игрока - начало----------------------------------------------------------------------------- if not bot_nerfer_const then bot_nerfer_const = { {0, 0}, {15890, 15976}, {15892, 15977}, {15893, 15978}, {15894, 15979}, {15961, 15980}, {15962, 15981}, {15963, 15982}, {15964, 15983}, --весь хлам из этого массива нужно выдать боту в карман {15965, 15984}, {15966, 15985}, {15967, 15986}, {15968, 15987}, {15969, 15988}, {15970, 15989}, {15971, 15990}, {15972, 15991}, {15973, 15992}, {15974, 15993}, {15975, 15994}, } end if not bot_universalnerfer_level then bot_universalnerfer_level = {} end --to keep level of given fight if not bot_universalnerfer_state then bot_universalnerfer_state = {} end --to keep flag if given nerfer buffed itself local f = FIGHT(my.fightPtr) if not bot_universalnerfer_level[f.id] then --Get highest enemy level local eteam = aux.getPersList(aux.oppTeamNum()) local maxlevel = 1 if eteam then for _,ptr in pairs(eteam) do maxlevel = math.max(maxlevel , PERS_LEVEL(ptr)) end else return end bot_universalnerfer_level[f.id] = maxlevel end --Check if we need to buff ourselves local bot = PERS(my.persPtr) if not bot_universalnerfer_state[bot.id] then bot_universalnerfer_state[bot.id] = true aux.useEffect(bot_nerfer_const[bot_universalnerfer_level[f.id]][1], my.persPtr) aux.useEffect(bot_nerfer_const[bot_universalnerfer_level[f.id]][2], my.persPtr) end local oppList = aux.getPersList(aux.oppTeamNum(), true, nil, false) if oppList then bot_CheckHiLevelPers(oppList, bot_universalnerfer_level[f.id], bot_HiLevel2LowLevel) end -- и своих (для честного pvp) local myList = aux.getPersList(my.teamNum, true, true, false) if myList then bot_CheckHiLevelPers(myList, bot_universalnerfer_level[f.id], bot_HiLevel2LowLevel) end ---------------------------------------подстраиваем свой лвл под игрока - конец---------------------------------------------------------------------------------------- -- Выполняется один раз при входе в бой local markerId = 33643 -- Маркер истекающий по ходам, когда он спадает - убиваем всех игроков local allyId = 33655 --ид арта, который призовет бота игроку на помощь boss_quest_run_once(markerId, allyId) -- Перед ударом. local healId = 33641 -- Хилка local selfdotId = 33642 -- Урон себе от хилки (дот) local healThr = 0.6 -- Сколько должно остаться ХП максимум чтобы хилиться local atkdmg = 33639 -- Урон в лицо (% от хп, на врага) local atkdot = 33640 -- дот от атаки (на врага) local enrage = 33638 --энрейдж, убивает всех игроков --перед тем, как атаковать, проверяем - есть ли бафф, сильно ли пробили boss_quest_before_hit(healId, healThr, markerId, selfdotId, enrage) -- Бьем boss_quest_hit(atkdmg,atkdot) end ------------------------------------------------ Boss --------------------------------------------------------