Re: Приемы в Combots 8+
if(parseInt(top.Battle.oBattle.arrRes["krit"].innerHTML) > 9) && if(parseInt(top.Battle.oBattle.arrRes["block"].innerHTML) > 4)
_name = "multi_hiddendodge";
помогите с условием. что я напутал ?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
if(parseInt(top.Battle.oBattle.arrRes["krit"].innerHTML) > 9) && if(parseInt(top.Battle.oBattle.arrRes["block"].innerHTML) > 4)
_name = "multi_hiddendodge";
помогите с условием. что я напутал ?
спасибо, попоробую.
Петро и снова косяк - всё идет почти так как я хотел. Но если хп жёлтые и дух есть, бот использует удачный удар, а в основном всё правильно...
Попробуй вот такой вариант. У меня работает.
if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) < 33 && (top.Battle.oBattle.arrRes["spirit"].innerHTML) > 0)
_name = "hit_willpower";
else
_name = "hit_empower";
Тут если хп меньше 33 И дух больше 0 юзается "воля к победе", если хп больше 33 и дух меньше 0 (т.е. собственно 0) юзаются усиленные удары, которые ты можешь заменить на удачный удар (hit_luck), к примеру. Пробуй.
Вх, вот так должно работать
if((parseInt(top.Battle.oBattle.arrRes["krit"].innerHTML) > 9) && (parseInt(top.Battle.oBattle.arrRes["block"].innerHTML) > 4))
_name = "multi_hiddendodge";
У меня так не сработало, начал искать причину, оказалось "(parseInt" писать не требуется, обрезаем сразу до "(top.Battle".
Отредактировано boltman (2010-01-07 22:57:36)
У меня вот другой финт ушами не выходит..
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["block_activeshield"]) != "object") && (top.Battle.oBattle.arrRes["spirit"].innerHTML) > 10)
_name = "spirit_block25";
Не хочет вот так юзать приём. Если убрать второе условие про дух >10, всё работает. Подскажите, что не так?
PS. Нужно, чтобы призрачка юзалась только при условии, что не висит активная защита И духа больше 10.
Отредактировано boltman (2010-01-08 00:58:04)
Дело не в скобочке. Во-первых в шапке темы многие условия даны с одной скобкой, а во-вторых вот так
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["block_activeshield"]) != "object")
_name = "spirit_block25";
всё работает, а вот так
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["block_activeshield"]) != "object") && (top.Battle.oBattle.arrRes["spirit"].innerHTML) > 10)
_name = "spirit_block25";
нет.
а помоему тут лишняя скобочка
!= "object")
Т.е. попробуй так :
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["block_activeshield"]) != "object" && (top.Battle.oBattle.arrRes["spirit"].innerHTML) > 10)
_name = "spirit_block25";
Отредактировано d1sc0nn3ct (2010-01-08 01:28:52)
boltman, ну незнаю, в этой же теме в 1м посте ParseInt есть, но спорить не буду.
Говоря проще ParseInt это команда "округлить до целого". При чём округление в меньшую сторону, то есть просто отбрасывается всё что после запятой. В большинстве ситуаций в нашем боте используются сравнения "больше" или "меньше" поэтому на результат отсутствие округления не повлияет. Но по человеческой логике проще оперировать целыми значениями. Тем более если вы вдруг где-то начнёте равенство искать. Сервер БК выдаёт весьма кривые числа количества того же духа, например, поэтому чтобы вычислять наверняка лучше перестраховаться и округлить. Хотя необходимости в этом я не вижу.
P.S. это моё ИМХО, я не программист, о чём сознаюсь в стотысячный раз
Это....как сказать....
ParseInt - это не округлить.....это вытащить из строки число. Т.е. напишешь ему строку "bxc13zgf" - он тебе 13 и вернёт.
Parse - разобрать. Int - целое.
Если надо с плавающей точкой значение вытаскивать, то вроде есть функция parseFloat.
Где косяк?
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) < 0.01) || (top.Battle.oBattle.oMySlot.nHP < 60)
_name = "block_fullshield";
Приём перестал работать когда я добавил условие про хп.
Отредактировано SnaF (2010-01-08 14:58:43)
ZhEkA_BK какой еще общей скобки? Можно поподробней?
ZhEkA_BK какой еще общей скобки? Можно поподробней?
самая первая и последняя скобочка в условии ,добавленом ZhEkA_BK. Их нехватало
Кстати , что означает " || " ?
А если не сработает попробуй так :
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) < 0.01 || (top.Battle.oBattle.oMySlot.nHP < 60))
_name = "block_fullshield";
Отредактировано d1sc0nn3ct (2010-01-08 15:41:59)
Кстати , что означает " || " ?
Это значит "или".
2ZhEkA_BK
Может так:
if(parseInt(top.Battle.oBattle.arrRes["krit"].innerHTML) > 24 && parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 19)
_name = "spirit_survive";
else
_name = "krit_blindluck";
Суть в следующем: Если капель 25 и духа 20 (или сколько у тебя макс?), то юзается выжить, как только сбрасываются капли и духа становится на 10ед меньше, начинает юзаться слепая, т.к. духа уже меньше 19 и капель меньше 24. Только при таком рсакладе нельзя юзать другие приёмы, отнимающие дух до приёма Выжить.
Ну мне кажется, что условие if надо выделять одной общей скобкой, т.е. после if скобка открывается, потом пишется ВСЕ условие, и потом скобка закрывается....как я привел выше.
Не обязательно. Работает как такой вариант:
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["block_activeshield"]) != "object" && parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 10)
_name = "spirit_block25";
Так и такой:
if((typeof(top.Battle.oBattle.oMySlot.arrEffects["block_activeshield"]) != "object" && parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 10))
_name = "spirit_block25";
Отредактировано boltman (2010-01-08 15:49:44)
Не обязательно.
Он не то имел в виду. Всё правильно он сказал)) Посмотри приемы которые люди выше выкладывали... слишком много закрывающих скобок + ещё одно условие после... типа:
if((...)...) && ...
Хочу приемы на танка 8), я не шарю как их делать))).. у кого добрая душа помлгите)) плз..
Можно что-то подобное сделать - если количество союзников больше в 2 раза чем количество противников , то... ?
if(top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[0].sList.split(", ").length>=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.split(", ").length*2){
...
}
Или внести изменения из (Please log in or register to see this URL)
и написать
if(SoratnikiCount>=EnemiesCount*2){
...
}
Отредактировано anahronik (2010-01-08 22:02:45)
Пишу "на ощупь" взяв за основу приём "Серое мастерство". Синтаксис многих команд не понимаю Так что всё нуждается в проверке.
BlockPathCount = top.Battle.oBattle.oMySlot.oEffects.innerHTML.match(/<br><span[^>]*>.(\d)?<\/span><\/div><img[^"]*".+\/block_path\.gif">/i);
if(BlockPathCount != null)
{
if(parseInt(BlockPathCount[1]) < 3)
{
_name = "block_path";
}
else
{
_name = "block_activeshield";
}
}
else
_name = "block_path";
Я потестил чуть-чуть. Вроде бы работает. Но мне, играющему танком, такое решение, без Глухой защиты, не нужно. Поэтому окончательные тесты и доклад о результатах с тебя, boltman
Спасибо, будем тестить.
upd. Всё работает отлично.
PS. Кстати, как дело обстоит с карманами? Они тоже как приём используются? Подскажите как прописать пжл.
Пока сделал так. Посмотрим, что будет.
if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) < 20)
_name = "invoke_kar1_heal10";
Отредактировано boltman (2010-01-09 09:55:09)
При "меньше 20".
Ребят,тут сижу и думаю...Можно как-то прописать,что пока не набрано 3 раза Жажды крови-не юзать Удачный удар?
Ребят,тут сижу и думаю...Можно как-то прописать,что пока не набрано 3 раза Жажды крови-не юзать Удачный удар?
То же самое как и выше. По аналогии:
bloodlustCount = top.Battle.oBattle.oMySlot.oEffects.innerHTML.match(/<br><span[^>]*>.(\d)?<\/span><\/div><img[^"]*".+\/krit_bloodlust\.gif">/i);
if(bloodlustCount != null)
{
if(parseInt(bloodlustCount[1]) < 3)
{
_name = "krit_bloodlust";
}
else
{
_name = "hit_luck";
}
}
else
_name = "krit_bloodlust";
Но советую поставить ещё приём о переборе количества тактик. Ну например если у тебя 20 мечей набралось, то бить удачным в любом случае. Мало ли на какого антикрита нарвёшься. Чисто теоретически. Ты же вроде не крит, а критотанк? Или я ошибаюсь? В любом случае тестируй приём и смотри на излишки тактик в бою.
Гип,да перестал юзать мечи,но как соберется 3 капли-юзает дикую,хотя она стоит последней в списке.Попытался добавить else дикую-вообще стоит...