Тема: Проба пера. Пишу приёмы для мага огня.
В новой версии бота будут новый способ описания приёмов.
Вот попробовал написать приёмы для мага огня [9] с четырьмя умениями в серой магии.
Пока что протестировать это не удалось. Но в ближайшем будущем, я надеюсь, получится опробовать.
Набор приёмов для простой пещеры, типа Бездны:
Знак земли (wis_earth_sign),
Силовое поле[9] (wis_gray_forcefield09),
Испепеление[9] (wis_fire_incenerate09),
Очиститься кровью (hp_cleance),
Магический барьер[9] (wis_gray_manabarrier9),
Ярость (hp_enrage),
медидация (wis_gray_meditation),
вспышка[9] (wis_fire_burst09),
тепло жизни[9] (wis_fire_heal09),
Жертва огню (wis_fire_sacrifice)
Пишем приёмы.
Для мага характерно то что мы будем прописывать приёмы не по доступности, а по потребностям. Исходя из состояния персонажа. Нам нельзя нажимать всё что есть, в отличии от воина.
В первую очередь отталкиваемся от трёх основных событий, по нисходящей по важности: нет защиты, мало HP, мало маны.
Выставляем первый приём:
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["wis_gray_forcefield09"]) != "object")
_name = "wis_gray_forcefield09";
Если на боте нет силового поля, то ставим силовое поле.
Второй приём защиты это магический барьер.
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["wis_gray_forcefield09"]) != "object" && typeof(top.Battle.oBattle.oMySlot.arrEffects["wis_gray_manabarrier"]) != "object")
_name = "wis_gray_manabarrier9";
если на боте нет ни силового ни магбарьера, то ставим магбарьер.
!!! обратите внимание что название эффекта ["wis_gray_manabarrier"] без девятки в конце! Это "фича" БК, название приёма и название эффекта не всегда совпадает!
В противном случае условие будет удовлетворять заданному даже если на вас уже есть барьер и бот всякий размен будет начинать с магбарьера, что разумеется не айс. Если подобная ошибка видна в логе сразу ищем подобные несоответствия.
Знак земли описываем просто. Если его нет то ставим.
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["wis_earth_sign"]) != "object")
_name = "wis_earth_sign";
С защитой разобрались.
Теперь пошли второстепенные приёмы. Это отхил и восстановление маны.
Сначала тепло жизни. С условием что HP у нас меньше половины. При этом параметр цели (target) меняем чтобы каст шёл в себя, а не во врага.
if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) < 50)
{
_target = mylogin;
_name = "wis_fire_heal09";
}
Потом не требующий духа приём "жертва огню". Если маны менее 80% и нет силового (пусть лучше в барьер жертвует, безопаснее).
if(top.Battle.oBattle.oMySlot.nMagic * 100 / top.Battle.oBattle.oMySlot.nMaxMagic < 80 && typeof(top.Battle.oBattle.oMySlot.arrEffects["wis_gray_forcefield09"]) != "object")
_name = "wis_fire_sacrifice";
Потом жёсткая медитация жрущая дух. Если маны совсем мало, в данной настройке менее 30%.
if((top.Battle.oBattle.oMySlot.nMagic * 100 / top.Battle.oBattle.oMySlot.nMaxMagic) < 30)
_name = "wis_gray_meditation";
Теперь приёмы третьего приоритета. Это всякая прочая муть. Тут могут быть цели стихий, ярости, стойкости и т.п.
Вот у меня ярость тут будет:
if(top.Battle.oBattle.arrRes["hp"].innerHTML > 5)
_name = "hp_enrage";
И наконец только в концовке идут ударные приёмы. Для мага огня это сначала вспышка, потом испепеление. Не наоборот! Иначе вспышка никогда не пройдёт.
_name = "wis_fire_burst09";
_name = "wis_fire_incenerate09";
Сейчас думаю как использовать пылающий ужас (wis_fire_flameshock) и Пожирающее пламя[9] (wis_fire_flamming09). Но как их грамотно настроить пока в голову не пришло Надо чтобы они кастовались именно на ботов-магов, тем самым шеломили их. Может быть через имена ботов? Только я пока не знаю каким параметром описывается имя соперника и есть ли оно вообще. Вобщем это пока в далёких планах
В мечтах также остаются пока идеи научить бота стрелять в сильных соперников через слабых. Не всё сразу
Делитесь мыслями, комрады.
Отредактировано hyppo (2009-07-05 13:47:16)