-- $Id: bot_Zombie.lua,v 1.10 2009-04-15 08:47:39 vadim_b Exp $ --[[ AKEB (c) 06.03.2009 13:27 Бот «Зомби» Перед ударом: Если НУЖНО_ПРОПУСТИТЬ_ХОДОВ > 0, то НУЖНО_ПРОПУСТИТЬ_ШАГОВ-- и заканчиваем скрипт С вероятностью Р1 кладем на текущего противника А1, НУЖНО_ПРОПУСТИТЬ_ШАГОВ =2 и заканчиваем скрипт Если на боте 0 шт А2 с вероятностью (Н2-G)/(H2-H1) применяем на себя А2 Если на боте 1 шт А2 с вероятностью (Н4-G)/(H4-H3) применяем на себя А2 Если на боте 2 шт А2 с вероятностью (Н6-G)/(H6-H5) применяем на себя А2 Если На боте еще нет А3 И ( живых и мертвых ботов Б1 в команде бота меньше N1 ) И ( союзников < 1,5 врагов ИЛИ с вероятностью (Н8-G)/(H8-H7) То применяем на себя А3 Если На боте уже есть А3 И ( союзников < 1,5 врагов ИЛИ (с вероятностью (Н10-G)/(H10-H9) при 0 ранее использованных А4) ИЛИ (с вероятностью (Н12-G)/(H12-H11) при 1 ранее использованных А4) ) То применяем на себя А4 Удар – нижний, если этим ходом применялось А3 или А4, иначе верхний или средний СМЫСЛ А1 – травилка, которая снимается эликом жизни. Бот применяет ее, потом тянет А2 – медленная лечилка, которую бот постоянно на себе поддерживает. Причем чем меньше у него жизни, тем больше одновременных лечилок он юзает А3 – заклинание, призывающее еще одного Зомби-босса. Всего их в бою может быть 13. Каждый босс за свою жизнь призывает еще одного босса. Зомби-боссы всегда поддерживают 1,5 кратное численное превосходство своей команды. А4 – заклинание, призывающее еще одного Зомби-трешака. Трешаки призываются, только если уже призван Зомби-босс, не менее 2 за жизнь Зомби-босса. Зомби-боссы всегда поддерживают 1,5 кратное численное превосходство своей команды. Расшифровка абилок: Бой: A1=4104 A2=4105 A3=4107 A4=4106 Тест: А1=169 А2=167 А3=4070 А4=4069 Скрипт: bot_Zombie.lua Управляющая функция: bot_ZombieBoss Управляющая функция: bot_ZombieTrash Управляющая функция для теста: bot_ZombieBoss_t Управляющая функция для теста: bot_ZombieTrash_t --]] function bot_Zombie_r(A,H,N,B,P) if my.status ~= FS_PS_ACTIVE then -- если наш статус неактивный, ничего не делаем return end local bot = PERS(my.persPtr) local G = bot.hp / bot.hpMax local part = false bot_ZombieInitArtikulUsed(bot.id) if bot_ZombieNeedPass[bot.id] > 0 then bot_ZombieNeedPass[bot.id] = bot_ZombieNeedPass[bot.id] - 1 return end if aux.randRoll(P) then aux.useEffect({artId = A[1]}, my.oppPtr) bot_ZombieNeedPass[bot.id] = 2 return end if #aux.activeEffects(my.persPtr,{artId = A[2]}) == 2 and H[6] > G and aux.randRoll((H[6]-G)/(H[6]-H[5])) then aux.useEffect({artId = A[2]}) end if #aux.activeEffects(my.persPtr,{artId = A[2]}) == 1 and H[4] > G and aux.randRoll((H[4]-G)/(H[4]-H[3])) then aux.useEffect({artId = A[2]}) end if #aux.activeEffects(my.persPtr,{artId = A[2]}) < 1 and H[2] > G and aux.randRoll((H[2]-G)/(H[2]-H[1])) then aux.useEffect({artId = A[2]}) end local cnt_myTeam = 0 local cnt_oppTeam = 0 if A[3] > 0 then local cnt_bot = 0 for _,persPtr in pairs(PERS_LIST(my.teamNum)) do local pers = PERS(persPtr) if pers.artId == B and B>0 then cnt_bot = cnt_bot+1 end end cnt_myTeam = PERS_COUNT(my.teamNum,true) cnt_oppTeam = PERS_COUNT(aux.oppTeamNum(),true) if bot_ZombieArtikulUsed2[bot.id] == 0 and cnt_bot < N and (cnt_myTeam < (1.5*cnt_oppTeam) or aux.randRoll((H[8]-G)/(H[8]-H[7]))) then aux.useEffect({artId = A[3]}) bot_ZombieArtikulUsed2[bot.id] = 1 part = true cnt_myTeam = cnt_myTeam+1 end end if A[4] > 0 then if cnt_myTeam < 1 then cnt_myTeam = PERS_COUNT(my.teamNum,true) end cnt_oppTeam = PERS_COUNT(aux.oppTeamNum(),true) if bot_ZombieArtikulUsed2[bot.id] == 1 and (cnt_myTeam < (1.5*cnt_oppTeam) or (aux.randRoll((H[10]-G)/(H[10]-H[9])) and bot_ZombieArtikulUsed3[bot.id] == 0) or (aux.randRoll((H[12]-G)/(H[12]-H[11])) and bot_ZombieArtikulUsed3[bot.id] == 1)) then aux.useEffect({artId = A[4]}) bot_ZombieArtikulUsed3[bot.id] = bot_ZombieArtikulUsed3[bot.id]+1 part = true end end if part then ATTACK(3) else ATTACK(math.random(2)) end end function bot_ZombieInitArtikulUsed(botId) if bot_ZombieArtikulUsed == nil then bot_ZombieArtikulUsed={} end if botId == nil then return; end if bot_ZombieArtikulUsed[botId] == nil then bot_ZombieArtikulUsed[botId]=0 end if bot_ZombieArtikulUsed2 == nil then bot_ZombieArtikulUsed2={} end if botId == nil then return; end if bot_ZombieArtikulUsed2[botId] == nil then bot_ZombieArtikulUsed2[botId]=0 end if bot_ZombieArtikulUsed3 == nil then bot_ZombieArtikulUsed3={} end if botId == nil then return; end if bot_ZombieArtikulUsed3[botId] == nil then bot_ZombieArtikulUsed3[botId]=0 end if bot_ZombieNeedPass == nil then bot_ZombieNeedPass={} end if botId == nil then return; end if bot_ZombieNeedPass[botId] == nil then bot_ZombieNeedPass[botId]=0 end end -------------------------------------------------------------------------------- function bot_ZombieBoss_t() local artifacts = {169, 167, 4070, 4069} local H = {0.7,0.8, 0.45,0.55, 0.2,0.3, 0.6,0.8, 0.4,0.6, 0.2,0.4} return bot_Zombie_r(artifacts,H,12,722,0.07) end function bot_ZombieTrash_t() local artifacts = {169, 167, 0, 0} local H = {0.62,0.72, 0.28,0.38, 0,0, 0,0, 0,0, 0,0} return bot_Zombie_r(artifacts,H,0,0,0.07) end function bot_ZombieBoss() local artifacts = {4104, 4105, 4107, 4106} local H = {0.7,0.8, 0.45,0.55, 0.2,0.3, 0.6,0.8, 0.4,0.6, 0.2,0.4} return bot_Zombie_r(artifacts,H,12,741,0.07) end function bot_ZombieTrash() local artifacts = {4104, 4105, 0, 0} local H = {0.62,0.72, 0.28,0.38, 0,0, 0,0, 0,0, 0,0} return bot_Zombie_r(artifacts,H,0,0,0.07) end