--[[ a.abolishin Эльдив-рыцарь[14] ]] function bot_Eldiv14_r(A, C, portals, summons) local bot = PERS(my.persPtr) -- оставшееся кол-во вторых бафов if bot_Eldiv14Baf2 == nil then bot_Eldiv14Baf2 = {} end if bot_Eldiv14Baf2[bot.id] == nil then bot_Eldiv14Baf2[bot.id] = 2 end -- текущие порталы if bot_Eldiv14Portals == nil then bot_Eldiv14Portals = {} end if bot_Eldiv14Portals[bot.id] == nil then bot_Eldiv14Portals[bot.id] = {} end -- Магический абсорб. aux.useEffect({artId = A[1]}) -- Если наш статус неактивный, ничего не делаем if my.status ~= FS_PS_ACTIVE then return end local hpC = bot.hp / bot.hpMax local portalCount = #bot_Eldiv14Portals[bot.id] -- Проверка текущих порталов: local summonTime = false for portalIdx, portal in ipairs(bot_Eldiv14Portals[bot.id]) do if portal and (portal[1] > 0) and (portal[2] <= my.stime) then summonTime = true break end end if summonTime then -- Активные эффекты на разных персах local activeEffects = {} -- Проходим список порталов (с конца!) for portalIdx=portalCount, 1, -1 do local portal = bot_Eldiv14Portals[bot.id][portalIdx] local portalPersPtr = portal[3] local persId = PERS_ID(portalPersPtr) -- если записи для такого перса еще нет - заводим if not activeEffects[persId] then activeEffects[persId] = aux.activeEffects(portalPersPtr, {activatorId = bot.id}) end -- если портал валиден и по нему еще не было призыва if portal and (portal[1] > 0) then -- пытаемся найти абилку для текущего портала local portalAbil = nil for effIdx = #activeEffects[persId], 1, -1 do local eff = EFF(activeEffects[persId][effIdx]) if eff.id == portals[portal[1]] then -- если нашли, то запоминаем ее и выкидываем из списка portalAbil = activeEffects[persId][effIdx] table.remove(activeEffects[persId], effIdx) break end end -- если время портала пришло if (portal[2] <= my.stime) then -- если он все еще открыт, то призываем if portalAbil then DROP_EFFECT(portalAbil) for _, summonArtId in pairs(summons[portal[1]]) do aux.useEffect({artId = summonArtId}) end end -- закрываем bot_Eldiv14Portals[bot.id][portalIdx][1] = 0 end end end end -- Болевой шок и мана local thresholdHP = bot_Eldiv14Baf2[bot.id] * C[1] if hpC < thresholdHP then local p = math.max(0, math.min(1, (thresholdHP-hpC)*10)) if aux.randRoll(p) then -- если висит портал или прошел рандом --if bot_Eldiv14Baf2[bot.id] or aux.randRoll(0.5) then if aux.randRoll(0.5) then aux.useEffect({artId = A[3]}) -- юзаем ману на себя else aux.useEffect({artId = A[2]}, my.oppPtr) -- в противном случае кидаем Шок на противника end bot_Eldiv14Baf2[bot.id] = bot_Eldiv14Baf2[bot.id] - 1 end end -- прикосновение силы if (bot.mp >= C[2]) and (#aux.activeEffects(my.oppPtr, {artId = A[5]}) < 1) then aux.useEffect({artId = A[4]}, my.oppPtr) aux.useEffect({artId = A[5]}, my.oppPtr) -- метка elseif hpC < (C[5] - portalCount) * C[3] then -- выбираем призыв, вешаем портал и запоминаем local portalId = math.random(#portals) aux.useEffect({artId = portals[portalId]}, my.oppPtr) table.insert(bot_Eldiv14Portals[bot.id], { portalId, my.stime + C[4], my.oppPtr }) -- атакуем в ноги ATTACK(3) else -- или обычный удар ATTACK(1) end end -- botId = 859 function bot_Eldiv14() -- абсорб, болевой шок, мана, стун, прикосновение силы local A = {5350, 5351, 2297, 4072, 5354} -- шаг для шока и маны, стоимость прикосновения, шаг для призыва, время призыва, общее кол-во local C = {0.4, 50, 0.45, 24, 2} -- метка и призыв: 11, 14 local portals = {5807, 5352} local summons = {{5808, 5808}, {5353}} bot_Eldiv14_r(A, C, portals, summons) end function bot_Eldiv14_t() -- абсорб, болевой шок, мана, стун, прикосновение силы local A = {5350, 5351, 2297, 4072, 5354} -- шаг для шока и маны, стоимость прикосновения, шаг для призыва, время призыва, общее кол-во local C = {0.4, 50, 0.45, 24, 2} -- метка и призыв local portals = {4157, 4156, 5352} local summons = {{4170}, {4171}, {5353}} bot_Eldiv14_r(A, C, portals, summons) end