-- $Id: bot_Wkrofdor.lua,v 1.14 2009-04-15 08:47:39 vadim_b Exp $ --[[ AKEB (c) 27.02.2009 12:35 Бот Крофдорша G - количество жизни у бота, в %% G = hp/hp_max Перед ударом: Если на боте уже 24 секунд висит абилка А1 (портал1) , применить на себя все абилки из набора B1 Если на боте уже 24 секунд висит абилка А2 (портал2), применить на себя все абилки из набора B2 Если на боте уже 24 секунд висит абилка А3 (портал3), применить на себя все абилки из набора B3 Если на боте уже 24 секунд висит абилка А4 (портал4), применить на себя все абилки из набора B4 Если G<Н2 и абилки А5, А6 не применялись, то с вероятностью R=(H2-G)/(H2-H1), применить на себя абилку А5 (элик маны) либо А6 (травилка) на текущего противника. Если G<Н4 и абилки А5, А6 применялись не более 1 раза, то с вероятностью R6=(H4-G)/(H4-H3), применить на себя абилку А5 (элик маны) либо А6 на текущего противника (травилка). Если G<Н5 и абилки А1, А2, А3, А4 не применялись, применить на себя одну из абилок: А1, А2, А3, А4 (порталы). Если G<Н6 и абилки А1, А2, А3, А4 применялись не более 1 раза, применить на себя одну из абилок: А1, А2, А3, А4 (порталы). Вместо удара: -При наличии манны М1 применяет на текущего противника абилку А7 (урон). После применения абилки А7 уходит в блок и применяет абилку А8 (декоративная.). После удара: Вероятность СРЕДНЕГО удара = P. Вероятность остальных ударов =(1-Р)/2. После среднего удара применить на текущего противника абилку А9 (кровотечение). Расшифровка абилок: local artifacts = {4066, 4067, 4074, 4075, 2297, 2269, 2296, 4077, 3332, 4068, 4069, 4070, 4071} local HP = {0.8, 0.7, 0.4, 0.3, 0.99, 0.6} local B = {{4068,4069},{4069,4070},{4070,4071},{4071,4068}} Скрипт: bot_Wkrofdor.lua Управляющая функция: bot_Wkrofdor Управляющая функция для теста: bot_Wkrofdor_t --]] function bot_Wkrofdor_r(A,M,P,HP,B,seconds) if my.status ~= FS_PS_ACTIVE then -- если наш статус неактивный, ничего не делаем return end TOGGLE_DEFENCE(false) local bot = PERS(my.persPtr) local G = bot.hp / bot.hpMax bot_Wkrofdor_table(bot.id) if bot_WkrofdorTable[bot.id]['time'][A[1]] == nil then bot_WkrofdorTable[bot.id]['time'][A[1]] = 0 end if #aux.activeEffects(my.persPtr,{artId = A[1]}) > 0 and bot_WkrofdorTable[bot.id]['art'][A[1]] and bot_WkrofdorTable[bot.id]['time'][A[1]] > 0 and my.stime >= bot_WkrofdorTable[bot.id]['time'][A[1]] then for _, t_art in pairs(B[1]) do aux.useEffect({artId = t_art}) end bot_WkrofdorTable[bot.id]['time'][A[1]] = 0 end if bot_WkrofdorTable[bot.id]['time'][A[2]] == nil then bot_WkrofdorTable[bot.id]['time'][A[2]] = 0 end if #aux.activeEffects(my.persPtr,{artId = A[2]}) > 0 and bot_WkrofdorTable[bot.id]['art'][A[2]] and bot_WkrofdorTable[bot.id]['time'][A[2]] > 0 and my.stime >= bot_WkrofdorTable[bot.id]['time'][A[2]] then for _, t_art in pairs(B[2]) do aux.useEffect({artId = t_art}) end bot_WkrofdorTable[bot.id]['time'][A[2]] = 0 end if bot_WkrofdorTable[bot.id]['time'][A[3]] == nil then bot_WkrofdorTable[bot.id]['time'][A[3]] = 0 end if #aux.activeEffects(my.persPtr,{artId = A[3]}) > 0 and bot_WkrofdorTable[bot.id]['art'][A[3]] and bot_WkrofdorTable[bot.id]['time'][A[3]] > 0 and my.stime >= bot_WkrofdorTable[bot.id]['time'][A[3]] then for _, t_art in pairs(B[3]) do aux.useEffect({artId = t_art}) end bot_WkrofdorTable[bot.id]['time'][A[3]] = 0 end if bot_WkrofdorTable[bot.id]['time'][A[4]] == nil then bot_WkrofdorTable[bot.id]['time'][A[4]] = 0 end if #aux.activeEffects(my.persPtr,{artId = A[4]}) > 0 and bot_WkrofdorTable[bot.id]['art'][A[4]] and bot_WkrofdorTable[bot.id]['time'][A[4]] > 0 and my.stime >= bot_WkrofdorTable[bot.id]['time'][A[4]] then for _, t_art in pairs(B[4]) do aux.useEffect({artId = t_art}) end bot_WkrofdorTable[bot.id]['time'][A[4]] = 0 end if bot_WkrofdorTable[bot.id]['art'][A[5]] == nil then bot_WkrofdorTable[bot.id]['art'][A[5]] = 0 end if bot_WkrofdorTable[bot.id]['art'][A[6]] == nil then bot_WkrofdorTable[bot.id]['art'][A[6]] = 0 end if G= M) then aux.useEffect({artId =A[7]}, my.oppPtr) TOGGLE_DEFENCE(true) aux.useEffect({artId = A[8]}) else local r = math.random() local part = 3 if r < P then part = 2 elseif r< P+((1-P)/2) then part = 1 end ATTACK(part) if part == 2 then aux.useEffect({artId =A[9]}, my.oppPtr) end end end function bot_Wkrofdor_table(botId) if bot_WkrofdorTable == nil then bot_WkrofdorTable={} end if botId == nil then return; end if bot_WkrofdorTable[botId] == nil then bot_WkrofdorTable[botId]={} end if bot_WkrofdorTable[botId]['art'] == nil then bot_WkrofdorTable[botId]['art']={} end if bot_WkrofdorTable[botId]['time'] == nil then bot_WkrofdorTable[botId]['time']={} end end -------------------------------------------------------------------------------- function bot_Wkrofdor() local artifacts = {4066, 4067, 4074, 4075, 2297, 2269, 2296, 4077, 3332, 4068, 4069, 4070, 4071} local HP = {0.7, 0.8, 0.3, 0.4, 0.99, 0.6} local B = {{4068,4069},{4069,4070},{4070,4071},{4071,4068}} return bot_Wkrofdor_r(artifacts,50,0.3,HP,B,24) end function bot_Wkrofdor_t() local artifacts = {4066, 4067, 4074, 4075, 2297, 2269, 2702, 2296, 3332, 4068, 4069, 4070, 4071} local HP = {0.7, 0.8, 0.3, 0.4, 0.99, 0.6} local B = {{4068,4069},{4069,4070},{4070,4071},{4071,4068}} return bot_Wkrofdor_r(artifacts,50,0.3,HP,B,24) end function bot_Wkrofdor_self() local artifacts = {4066, 4066, 4066, 4066, 2297, 4098, 4096, 4077, 4095, 4068, 4068, 4068, 4068} local HP = {0.7, 0.8, 0.3, 0.4, 0.99, 0.6} local B = {{4068},{4068},{4068},{4068}} return bot_Wkrofdor_r(artifacts,50,0.14,HP,B,24) end