Тема: Призрачка и пауза в начале боя
Подскажите, можно ли осуществить следующее. В зависимости от тайма выбранной заявки бот в начале боя садится под призрачку и выжидает указанный период времени. По его истечении начинает бой как обычно.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Чтобы отправить ответ, вы должны вход или регистрация
Подскажите, можно ли осуществить следующее. В зависимости от тайма выбранной заявки бот в начале боя садится под призрачку и выжидает указанный период времени. По его истечении начинает бой как обычно.
Не помню такого
Вот сейчас сел за пол часика набросал...есественно не проверено
Это плагин. Файл его назвать waiting.js и положить в папку Plugins.
var waitingStatus = false; //Не трогать.
var priem = "spirit_block25" ; //Сюда вписать приём, используемый в начале боя. Пофиг, маг или воин указаны в настройках бота.
var bt = 2; //Количество минут для условия >= таймаут боя.
var btDo = 72000; //Время ожидания(колличество секунд * 1000). Не забываем оставлять значительный временной резерв для действий бота.
function waiting(enabled)
{
if(enabled)
{
PluginsOnLoad["waiting"] = "waitingHandler";
}
else
{
PluginsOnLoad["waiting"] = "";
}
}
function waitingHandler(){
if (!external.inBattle) waitingStatus = false;
else{
if(!waitingStatus){
BattleTimeout = top.document.all[0].innerHTML.match(/Бой идет с таймаутом \<B\>([0-9]+)\<\/B\>/)[1];
if(BattleTimeout>=bt){
external.Stop();
setTimeout("external.Start();", btDo);
waitingStatus = true;
if(external.SCharType.SelectedIndex == 0)
top.Battle.oBattle.Send( { special: priem } );
esle
top.Battle.oBattle.Send( { special: priem, enemy: top.Battle.oBattle.sEnemy, login: top.Battle.oBattle.sEnemy } );
}else{
waitingStatus = true;
}
}
}
}
Алгоритм работы:
1) Если мы в бою, то сперва вычисляется таймаут в бою.
2) Если таймаут больше или равен указанным в начале файла настройкам(bt), то бот останавливается(полностью) и прописывается, чтоб он запустился через указанный также в начале файла интервал(btDo).
3) Сразу после этого происходит применение приёма, который вы укажите в начале файла(priem).
Переменая waitingStatus является контролирующей процесс и не допускает прогона этого скрипта чаще, чем 1 раз за бой(в соответствии с поставленной задачей).
Работать может исключительно под 8.2. Не ниже. Только в 8.2 появился "external.Stop();".
Отредактировано anahronik (2010-01-08 15:12:48)
А зачем?
Если тайм-аут мизерный, то народ там будет сливаться со скоростью, близкой к скорости бота и это даже более идеальные условия, чем с большим тайм-аутом.
А если большой - то первый ход выжидать будет через этот плагин...
Такс.. Создал файл, кинул в плагинс, забил содержимым. Подправил list.txt, вписал туда новый плагин, отметил true. Перезапустил бота. В итоге в начале боя как обычно юзается активный приём "прикрыться", затем призрачка, затем делается удар и бот останавливается.. Короче всё не так как нужно. Буду ещё тестить.
Простите за наглость, у меня вопрос, а можно сделать не плагин, а прост как прием прописать - т.е. допустим, если больше 15 духа, то ждать 30 секунд? Наверняка это очень просто, но моих сверхскромных познаний в яве не хватает((
<Priem1>if(top.Battle.oBattle.arrRes["spirit"].innerHTML > 15) // если больше 15 духа
_name = "spirit_13_prot_100"; //юзнуть призрачку чтобы меньше 16 стало
_name = "ждать 30 секунд";
</Priem1>
Отредактировано pop-corn (2010-01-08 23:50:23)
Простите за наглость, у меня вопрос, а можно сделать не плагин, а прост как прием прописать - т.е. допустим, если больше 15 духа, то ждать 30 секунд? Наверняка это очень просто, но моих сверхскромных познаний в яве не хватает((
Ты понимаешь что приём срабатывает не в тот момент когда исполняется его код, а после. То есть если ты прождёшь 30 секунд в приёме, то сделаешь это без призрачки. Потом призрачка и размен. Тебе так надо?
if(top.Battle.oBattle.arrRes["spirit"].innerHTML > 15) // если больше 15 духа
_name = "spirit_13_prot_100"; //юзнуть призрачку чтобы меньше 16 стало
_name = "ждать 30 секунд";
И какое значение по итогам примет переменная "name"? Тут вообще нет приёма призрачки
забудем о призрачке)
Можно просто сделать - если один из параметров (например дух) имеет какие-либо значение (например больше 15) - то ждать определенное время (например 30 секунд), а потом - в обычном порядке вести бой?
Для 8.2 можно написать.
Для младших - влом заморачивать на то, чтоб остановить бота.
Вписать приём в первый слот:
if(...тут условие...){
external.Stop();
setTimeout("external.Start();", 30000);//30000=30секунд
}
Спасибо!
Понял - если духа больше 29, юзаем призрачку и на 30 сек останавливаемся. Затем продолжаем как обычно.
Не понял - куда в этом приёме прописать юз призрачки?
Так?
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 29)){
_name="spirit_block25"
external.Stop();
setTimeout("external.Start();", 30000);
}
Или так?
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 29))
_name="spirit_block25"
{
external.Stop();
setTimeout("external.Start();", 30000);
}
Отредактировано boltman (2010-01-09 00:41:53)
Первый вариант, но у тебя в первой строке лишняя закрывающая скобочка.
После 29 только одна ")"
Откуда мне знать, что ты прописал туда, если ты это сюда не скопировал в последний мессаг
Как я могу искать косяк в воздухе?
И вобще, после _name="spirit_block25" у тебя ещё и ; оказалась пропущена
Отредактировано anahronik (2010-01-09 01:46:37)
Вы на верном пути.
Одно не учтено, после приема призрачки и остановки бота,
в том же слоте приема нужно прописать
_break = "true";
для того чтобы бот не использовал остальные приемы и не кастовал.
Будет работать только для мага. Для воина надо реализовать _break в Main.js.
Я просто предположил, что ему не критично будет 1 круг приёмов пробежать и можно будет без брэйка обойтись
Откуда мне знать, что ты прописал туда, если ты это сюда не скопировал в последний мессаг
Как я могу искать косяк в воздухе?
Ты же мне сказал - первый вариант, я его и имел в виду,а что ещё я мог прописать? Просто не видел смысла его дублировать в очередном посте.
Сейчас попробую, учитывая ";" и совет zergnm
PS. Не хочет. Прописав следующее в приём
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 29)){
_name="spirit_block25";
external.Stop();
_break = "true";
setTimeout("external.Start();", 30000);
}
бот в бою перестал подавать признаки жизни. Или _break = "true"; нужно было прописать после setTimeout, так?
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 29)){
_name="spirit_block25";
external.Stop();
setTimeout("external.Start();", 30000);
_break = "true";
}
Отредактировано boltman (2010-01-09 22:58:09)
Ты скобочку снова забыл убрать:
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 29){
_name="spirit_block25";
external.Stop();
_break = "true";
setTimeout("external.Start();", 30000);
}
anahronik пишет:Откуда мне знать, что ты прописал туда, если ты это сюда не скопировал в последний мессаг
Как я могу искать косяк в воздухе?Ты же мне сказал - первый вариант, я его и имел в виду,а что ещё я мог прописать? Просто не видел смысла его дублировать в очередном посте.
Сейчас попробую, учитывая ";" и совет zergnm
PS. Не хочет. Прописав следующее в приём
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 29)){
_name="spirit_block25";
external.Stop();
_break = "true";
setTimeout("external.Start();", 30000);
}бот в бою перестал подавать признаки жизни. Или _break = "true"; нужно было прописать после setTimeout, так?
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 29)){
_name="spirit_block25";
external.Stop();
setTimeout("external.Start();", 30000);
_break = "true";
}
Будет работать только если в программе выбран тип персонажа Маг.
Для воина нужно добавить _break в Modules\Main.js
А spirit_block25 - это приём чей хоть?
маг или воин?
вобще трудно писать что-то, в чём не разбираешься
А spirit_block25 - это приём чей хоть?
маг или воин?вобще трудно писать что-то, в чём не разбираешься
Это общий приём. Призрачная защита...
Зашибись
А я то думаю, зачем Зерг дважды акцентирова внимание на Брэйке
boltman, у тебя в настройках бой в качестве мага или воина выставлен?
Будет работать только если в программе выбран тип персонажа Маг.
Для воина нужно добавить _break в Modules\Main.js
В какой части main.js, если не секрет?
Нашёл такое на мага:
function DoWizardPriem(index)
{
_name = "";
_break = false;
_target = top.Battle.oBattle.sEnemyLogin;
eval("_priemCode = external.SPriem" + index + ".Text");
И такое на воина:
function DoWarriorPriem(index)
{
_name = "";
eval("_priemCode = external.SPriem" + index + ".Text");
Т.е. во втором варианте после _name в строке ниже вставить "_break = true;" ?
boltman, у тебя в настройках бой в качестве мага или воина выставлен?
В кач. воина, коим чар и является.
PS. Внимание! Бой закончен. Всего вами нанесено урона: 3482 HP. Получено опыта: 21477 (250%).
Не знаю, верно ли чар использовал прописанный приём, но во всяком случае ходы не пропускал, хотя _break я ещё не прописывал.
Отредактировано boltman (2010-01-10 05:43:03)
Чтобы отправить ответ, вы должны вход или регистрация