--[[ a.abolishin Волшебники. ]] -- Кол-во элементалей для призыва магом/волшебницей против игроков высоких уровней bot_Mage_HiLvlTable = {{4, 7, 9, 13}, -- нападение 11ых ботов игроками 12, 13, 14, 15 {5, 7, 11}, -- на 12ых - игроками 13, 14, 15 {4, 8}, -- на 13ых - игроками 14, 15 {6} -- на 14ых - игроками 15 } -- Возвращает случайного противника function bot_Mage_GetRandOpp() local oppList = aux.getPersList(aux.oppTeamNum(), true, true, false) if oppList then return aux.getRandVal(oppList) else return nil end end -- Обычная магическая атака function bot_Mage_MagicAttack(A, baf3) local r = math.random() if r <= 0.33 then aux.useEffect({artId = A[1]}, my.oppPtr) -- магическая атака номер раз elseif r <= 0.66 then aux.useEffect({artId = A[3]}, my.oppPtr) -- магическая атака номер два else aux.useEffect({artId = baf3}, bot_Mage_GetRandOpp()) end end -- Получить уровень противника function bot_Mage_GetOppLevel() local oppList = aux.getPersList(aux.oppTeamNum(), true) if oppList and (#oppList > 0) then table.sort(oppList, function(p1, p2) -- сортируем по убыванию return PERS_LEVEL(p1) > PERS_LEVEL(p2) end) return PERS_LEVEL(oppList[1]) else return 0 end end -- Проверка на частоту мощного удара против игроков высокого уровня function bot_Mage_CheckPowerAttackRate() local oppLevel = bot_Mage_GetOppLevel() if oppLevel > 0 then return math.max(5 - (oppLevel - PERS_LEVEL(my.persPtr)), 0) else return 0 end end -- Войти в блок / выйти из блока function bot_Mage_ToggleBlock(state, mage) if mage then TOGGLE_DEFENCE(state) end end -- Маг / Волшебница function bot_Mage_r(A, C, R, attackA, dragons, mage, summonA) local bot = PERS(my.persPtr) local fight = FIGHT(my.fightPtr) if bot_MageActions == nil then bot_MageActions = {} end if bot_MageActions[fight.id] == nil then bot_MageActions[fight.id] = {} end -- считалка if bot_MageBaf == nil then bot_MageBaf = {} end if bot_MageBaf[bot.id] == nil then bot_MageBaf[bot.id] = 0 end -- считалка призванных элементалей if bot_MageElems == nil then bot_MageElems = {} end if bot_MageElems[bot.id] == nil then bot_MageElems[bot.id] = 3 end -- считалка призванных элементалей против игроков высоких уровней if bot_MageElemsHi == nil then bot_MageElemsHi = {} end if bot_MageElemsHi[fight.id] == nil then bot_MageElemsHi[fight.id] = 0 end -- считалка для мощного удара против игроков высоких уровней if bot_MageCrit == nil then bot_MageCrit = {} end if bot_MageCrit[bot.id] == nil then bot_MageCrit[bot.id] = {0, 0} end -- считалка дохлых драконов if bot_DeadDragons == nil then bot_DeadDragons = {} end if bot_DeadDragons[fight.id] == nil then bot_DeadDragons[fight.id] = 0 end -- вешаем абсорб / пустую абилку "маг в блоке" и призываем ботов if bot_MageBaf[bot.id] == 0 then aux.useEffect({artId = A[8]}) if summonA then -- Призываем 3ех драконов for i=1, 3 do aux.useEffect({artId = summonA[1]}) end -- Призываем случайного мага aux.useEffect({artId = aux.getRandVal(summonA[2])}) end bot_MageBaf[bot.id] = 1 end -- 5. проверяем смерть дракона local deadDragons = 0 local botGrpLevel = bot.level -- уровень группы ботов, создается здесь, чтобы позже не крутить лишний цикл local persList = aux.getPersList(my.teamNum) for _, persPtr in pairs(persList) do local pers = PERS(persPtr) -- если бот - дракон if aux.inTable(pers.artId, dragons) then botGrpLevel = pers.level -- если бот - дохлый дракон if pers.status == FS_PS_DEAD then -- считаем его deadDragons = deadDragons + 1 end end end botGrpLevel = math.max(botGrpLevel, 11) -- иначе есть шанс слететь в невалидные индексы -- если помер еще один дракон... if (deadDragons > bot_DeadDragons[fight.id]) and (my.status ~= FS_PS_DEAD) then -- ... восстанавливаем ману, кастуем дот и меняем стейт мага aux.useEffect({artId = A[6]}) aux.useEffect({artId = A[9]}, bot_Mage_GetRandOpp()) table.insert(bot_MageActions[fight.id], 1) table.insert(bot_MageActions[fight.id], 2) -- запоминаем текущее кол-во дохлых драконов в данном бою bot_DeadDragons[fight.id] = deadDragons end -- призыв дополнительных элементалей против игроков высоких уровней local oppLevel = bot_Mage_GetOppLevel() -- уровень противника (по самому сильному игроку) local lvlDiff = oppLevel - botGrpLevel -- разница в уровнях if lvlDiff > 0 then -- надо призывать local needCount = bot_Mage_HiLvlTable[botGrpLevel-10][lvlDiff] -- сколько должно быть local needToSummon = math.max(needCount - bot_MageElemsHi[fight.id], 0) -- сколько еще надо призвать if needToSummon > 0 then local status = aux.useEffect({artId = A[4]}) -- пытаемся призвать if status == 0 then bot_MageElemsHi[fight.id] = bot_MageElemsHi[fight.id] + 1 -- запоминаем сколько призвали end end end -- можем ли ходить? if (my.status ~= FS_PS_ACTIVE) or (not my.oppPtr) then return end -- 2. выходим из блока bot_Mage_ToggleBlock(false, mage) -- проверяем стек действий мага if #bot_MageActions[fight.id] > 0 then local action = table.remove(bot_MageActions[fight.id]) if action == 1 then -- призвать элементаль aux.useEffect({artId = A[4]}) aux.useEffect({artId = A[7]}) -- сдать ход elseif action == 2 then aux.useEffect({artId = A[9]}, my.oppPtr) aux.useEffect({artId = A[4]}) aux.useEffect({artId = A[7]}) -- сдать ход end else -- нет запланированных действий -- 6. проверяем кол-во хитов у союзников local persList = aux.getPersList(my.teamNum) for _, persPtr in pairs(persList) do local pers = PERS(persPtr) local hpC = pers.hp/pers.hpMax if (hpC < C[2]) and (pers.status ~= FS_PS_DEAD) then if #aux.activeEffects(persPtr, {artId = A[5]}) < C[3] then aux.useEffect({artId = A[5]}, persPtr) break end end end -- 2. 3 раза за бой призыв элементалей local hpC = bot.hp/bot.hpMax if hpC < (bot_MageElems[bot.id] * C[1]) then aux.useEffect({artId = A[4]}) bot_MageElems[bot.id] = bot_MageElems[bot.id] - 1 end -- 7. ядовитое облако if aux.randRoll(R[1]) then aux.useEffect({artId = A[9]}, my.oppPtr) aux.useEffect({artId = A[7]}) -- сдать ход -- 2. возвращаемся в блок bot_Mage_ToggleBlock(true, mage) return end -- 3. смотрим на противника, обновляем счетчик мощного удара... bot_MageCrit[bot.id][1] = bot_MageCrit[bot.id][1] + 1 if bot_MageCrit[bot.id][2] ~= 1 then bot_MageCrit[bot.id][2] = bot_Mage_CheckPowerAttackRate() end -- ...и дамажим если пришло время if (bot_MageCrit[bot.id][1] >= bot_MageCrit[bot.id][2]) and (bot_MageCrit[bot.id][2] > 0) then aux.useEffect({artId = A[3]}) aux.useEffect({artId = attackA[2]}, my.oppPtr) bot_MageCrit[bot.id][1] = 0 -- 2. возвращаемся в блок bot_Mage_ToggleBlock(true, mage) return end -- 8. мощная магическая атака (если игрок в блоке и у нас хватает маны) if PERS_ISDEFENDED(my.oppPtr) then local status = aux.useEffect({artId = A[1]}) if status ~= 0 then bot_Mage_MagicAttack(attackA, A[2]) end else bot_Mage_MagicAttack(attackA, A[2]) end end -- 2. возвращаемся в блок bot_Mage_ToggleBlock(true, mage) end -- 11 -- botID = 879 function bot_Mage_Light_11() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4715, 4676, 4672, 4695, 4674, 4675, 4681, 4811, 4732} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4679} local dragons = {878, 882} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 911 -- OBSOLETE!!! function bot_Mage_Light_11_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4715, 4676, 4672, 4695, 4674, 4675, 4681, 4811, 4732} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4679} local dragons = {878, 882} -- дракон 11, 11ые маги local summonA = {4812, {4817, 4818, 4819, 4820, 4821, 4822}} bot_Mage_r(A, C, R, attackA, dragons, true, summonA) end function bot_Mage_Light_11_t() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4715, 4676, 4672, 4695, 4674, 4675, 4681, 4811, 4732} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4645, 4646, 4647} local dragons = {874} -- дракон 11, 11ые маги local summonA = {4812, {4817, 4818}} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 880 function bot_Sorcerer_Shadow_11() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4715, 4799, 4672, 4697, 4674, 4675, 4681, 4808, 4733} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4741} local dragons = {878, 882} bot_Mage_r(A, C, R, attackA, dragons, false) end -- botID = 886 function bot_Mage_Ground_11() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4714, 4723, 4672, 4698, 4674, 4675, 4681, 4811, 4732} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4679} local dragons = {878, 882} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 887 function bot_Sorcerer_Water_11() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4714, 4800, 4672, 4696, 4674, 4675, 4681, 4808, 4733} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4741} local dragons = {878, 882} bot_Mage_r(A, C, R, attackA, dragons, false) end -- botID = 912 -- OBSOLETE!!! function bot_Sorcerer_Water_11_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4714, 4800, 4672, 4696, 4674, 4675, 4681, 4808, 4733} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4741} local dragons = {878, 882} -- дракон 11, 11ые маги local summonA = {4812, {4817, 4818, 4819, 4820, 4821, 4822}} bot_Mage_r(A, C, R, attackA, dragons, false, summonA) end -- botID = 888 function bot_Mage_Fire_11() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4716, 4801, 4672, 4680, 4674, 4675, 4681, 4811, 4732} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4679} local dragons = {878, 882} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 913 -- OBSOLETE!!! function bot_Mage_Fire_11_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4716, 4801, 4672, 4680, 4674, 4675, 4681, 4811, 4732} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4679} local dragons = {878, 882} -- дракон 12, 13ые маги local summonA = {4813, {4823, 4824, 4825, 4826, 4827, 4828}} bot_Mage_r(A, C, R, attackA, dragons, true, summonA) end -- botID = 889 function bot_Sorcerer_Air_11() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4716, 4724, 4672, 4699, 4674, 4675, 4681, 4808, 4733} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4677, 4678, 4741} local dragons = {878, 882} bot_Mage_r(A, C, R, attackA, dragons, false) end -- 13 -- botID = 890 function bot_Mage_Light_13() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4718, 4725, 4672, 4695, 4700, 4675, 4681, 4811, 4734} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4740} local dragons = {882, 883, 884} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 891 function bot_Sorcerer_Shadow_13() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4718, 4802, 4672, 4697, 4700, 4675, 4681, 4809, 4735} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4742} local dragons = {882, 883, 884} bot_Mage_r(A, C, R, attackA, dragons, false) end -- botID = 914 -- OBSOLETE!!! function bot_Sorcerer_Shadow_13_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4718, 4802, 4672, 4697, 4700, 4675, 4681, 4809, 4735} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4742} local dragons = {882, 883, 884} -- дракон 12, 11ые маги local summonA = {4813, {4817, 4818, 4819, 4820, 4821, 4822}} bot_Mage_r(A, C, R, attackA, dragons, false, summonA) end -- botID = 892 function bot_Mage_Ground_13() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4717, 4726, 4672, 4698, 4700, 4675, 4681, 4811, 4734} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4740} local dragons = {882, 883, 884} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 915 -- OBSOLETE!!! function bot_Mage_Ground_13_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4717, 4726, 4672, 4698, 4700, 4675, 4681, 4811, 4734} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4740} local dragons = {882, 883, 884} -- дракон 13, 13ые маги local summonA = {4814, {4823, 4824, 4825, 4826, 4827, 4828}} bot_Mage_r(A, C, R, attackA, dragons, true, summonA) end -- botID = 893 function bot_Sorcerer_Water_13() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4717, 4803, 4672, 4696, 4700, 4675, 4681, 4809, 4735} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4742} local dragons = {882, 883, 884} bot_Mage_r(A, C, R, attackA, dragons, false) end -- botID = 894 function bot_Mage_Fire_13() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4719, 4804, 4672, 4680, 4700, 4675, 4681, 4811, 4734} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4740} local dragons = {882, 883, 884} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 895 function bot_Sorcerer_Air_13() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4719, 4727, 4672, 4699, 4700, 4675, 4681, 4809, 4735} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4742} local dragons = {882, 883, 884} bot_Mage_r(A, C, R, attackA, dragons, false) end -- botID = 916 -- OBSOLETE!!! function bot_Sorcerer_Air_13_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4719, 4727, 4672, 4699, 4700, 4675, 4681, 4809, 4735} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4738, 4739, 4742} local dragons = {882, 883, 884} -- дракон 14, 15ые маги local summonA = {4815, {4829, 4830, 4831, 4832, 4833, 4834}} bot_Mage_r(A, C, R, attackA, dragons, false, summonA) end -- 15 -- botID = 896 function bot_Mage_Light_15() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4721, 4728, 4672, 4695, 4701, 4675, 4681, 4811, 4736} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4749} local dragons = {884, 885} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 917 -- OBSOLETE!!! function bot_Mage_Light_15_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4721, 4728, 4672, 4695, 4701, 4675, 4681, 4811, 4736} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4749} local dragons = {884, 885} -- дракон 14, 13ые маги local summonA = {4815, {4823, 4824, 4825, 4826, 4827, 4828}} bot_Mage_r(A, C, R, attackA, dragons, true, summonA) end -- botID = 897 function bot_Sorcerer_Shadow_15() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4721, 4805, 4672, 4697, 4701, 4675, 4681, 4810, 4737} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4743} local dragons = {884, 885} bot_Mage_r(A, C, R, attackA, dragons, false) end -- botID = 898 function bot_Mage_Ground_15() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4720, 4729, 4672, 4698, 4701, 4675, 4681, 4811, 4736} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4749} local dragons = {884, 885} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 918 -- OBSOLETE!!! function bot_Mage_Ground_15_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4720, 4729, 4672, 4698, 4701, 4675, 4681, 4811, 4736} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4749} local dragons = {884, 885} -- дракон 15, 15ые маги local summonA = {4816, {4829, 4830, 4831, 4832, 4833, 4834}} bot_Mage_r(A, C, R, attackA, dragons, true, summonA) end -- botID = 899 function bot_Sorcerer_Water_15() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4720, 4806, 4672, 4696, 4701, 4675, 4681, 4810, 4737} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4743} local dragons = {884, 885} bot_Mage_r(A, C, R, attackA, dragons, false) end -- botID = 919 -- OBSOLETE!!! function bot_Sorcerer_Water_15_Summoner() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4720, 4806, 4672, 4696, 4701, 4675, 4681, 4810, 4737} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4743} local dragons = {884, 885} -- дракон 15, 15ые маги local summonA = {4816, {4829, 4830, 4831, 4832, 4833, 4834}} bot_Mage_r(A, C, R, attackA, dragons, false, summonA) end -- botID = 900 function bot_Mage_Fire_15() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4722, 4807, 4672, 4680, 4701, 4675, 4681, 4811, 4736} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4749} local dragons = {884, 885} bot_Mage_r(A, C, R, attackA, dragons, true) end -- botID = 901 function bot_Sorcerer_Air_15() -- мощный маг удар, дот на рандомного противника, мощный удар с антивампом, призыв элементали, лечилка, восстановление маны, сдать ход, аое дот local A = {4722, 4730, 4672, 4699, 4701, 4675, 4681, 4810, 4737} local C = {0.3, 0.2, 3} local R = {0.3} local attackA = {4747, 4748, 4743} local dragons = {884, 885} bot_Mage_r(A, C, R, attackA, dragons, false) end