-- $Id: bot_GunglOficer.lua,v 1.4 2009-04-15 08:22:23 vadim_b Exp $ --[[ AKEB (c) 12.08.2008 14:58 Гунгл Лейтинант G - количество оставшейся жизни у бота, в %% G = hp/hp_max Каждый ход Если G < 40%, и количество лежащих на боте абилок (А) равно количеству применненных им ранее абилок (А), и это количество меньше N, то Применить абилку А на себя Если количество лежащих на боте абилок (А) равно N, то разыгрывается событие 1. - с вероятностью p1 дважды применяется абилка на себя (B) - с вероятностью p2 один раз применяется абилка на себя (B) - с вероятностью 1-p1-p2 ничего разыгрывается событие 2. - с вероятностью p3 дважды применяется абилка на себя (C) - с вероятностью p4 один раз применяется абилка на себя (C) - с вероятностью 1-p3-p4 ничего применяется абилка (D) на себя конец Если. СМЫСЛ: Когда у бота остается мало жизни, он начинает готовиться к саморазделению. Если ему не помешать, он распадется на несколько других ботов (B и С), а потом исчезнет (D) Для теста А = 170 B = 167 C = 167 D = 167 N = 5 p1 = 16% p2 = 48% P3 = 64% p4 = 20% Скрипт: bot_GunglOficer.lua Управляющая функция: bot_GunglOficer bot_GunglOficer_t bot_GunglSolder bot_GunglSolder_t --]] function bot_GunglOficer_r(artikulId1,artikulId2,artikulId3,artikulId4,N,p1,p2,p3,p4) if my.status ~= FS_PS_ACTIVE then -- если наш статус неактивный, ничего не делаем return end if #aux.activeEffects(my.persPtr,{artId = artikulId4}) > 0 then return true end local bot = PERS(my.persPtr) -- Берем данные о боте local G = bot.hp/bot.hpMax bot_GunglOficerInitArtikulUsed(bot.id) if #aux.activeEffects(my.persPtr,{artId = artikulId1}) == N then local r = math.random() if r <= p1 then aux.useEffect({artId = artikulId2}) aux.useEffect({artId = artikulId2}) elseif r <= p1+p2 then aux.useEffect({artId = artikulId2}) end local r = math.random() if r <= p3 then aux.useEffect({artId = artikulId3}) aux.useEffect({artId = artikulId3}) elseif r <= p3+p4 then aux.useEffect({artId = artikulId3}) end aux.useEffect({artId = artikulId4}) return true end if G < 0.4 then local cnt = #aux.activeEffects(my.persPtr,{artId = artikulId1}) if cnt < N and cnt == bot_GunglOficerArtikulUsed[bot.id] then local status = aux.useEffect({artId = artikulId1}) if status == 0 then bot_GunglOficerArtikulUsed[bot.id] = bot_GunglOficerArtikulUsed[bot.id] + 1 end end end ATTACK(math.random(3)) end function bot_GunglOficerInitArtikulUsed(botId) if bot_GunglOficerArtikulUsed == nil then bot_GunglOficerArtikulUsed={} end -- Если глобальная переменная не существует создаем ее if botId == nil then return; end -- если не задан ID бота, ничего не делаем if bot_GunglOficerArtikulUsed[botId] == nil then bot_GunglOficerArtikulUsed[botId]=0 end -- Если нет глобальной переменной с Этим ботом создаем ее со значением 0 end function bot_GunglOficer() return bot_GunglOficer_r(2828,2836,2826,2829,3,0.16,0.48,0.64,0.20) end function bot_GunglOficer_t() return bot_GunglOficer_r(170,167,167,167,3,0.16,0.48,0.64,0.20) end function bot_GunglSolder() return bot_GunglOficer_r(2828,2836,2826,2829,3,0,0,0.16,0.48) end function bot_GunglSolder_t() return bot_GunglOficer_r(170,167,167,167,3,0,0,0.64,0.20) end