101

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Анахроник, подскажи какой из external-ов говорит что чар в бою или не в бою.

И блин, потестите кто-то уже плагин, интересно ведь, полностью ли он работает?

Отредактировано gorlum (2011-06-29 18:20:50)

102

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Чтобы плагин в бою не грузил бота.

if (external.inBattle)return;

Я б потестил, но ща в БК лень даже бота запускать smile

Отредактировано ZhEkA_BK (2011-06-29 18:49:24)

У меня все работает, что я делаю не так ?

103

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

ZhEkA_BK пишет:

Чтобы плагин в бою не грузил бота.

if (external.inBattle)return;

Я б потестил, но ща в БК лень даже бота запускать smile

Забудьте про external.inBattle smile
100%-но рабочее решение -  if(top.Battle.bInBattle) return;

Оставь надежду всяк сюда входящий ©

104

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Вот с  if(top.Battle.bInBattle) return; и проверкой на подземку

var uspeh=false;
var room ='';
var randomValue;
var min = 360000;
var max = 400000;
 
function zadanie(enabled)
{
    if(enabled)
    {
        zadanieTimer = setInterval("zadanieHandler()",2000);
        proverkaTimer = setInterval("proverkaHandler()",1000);
    }
    else
    {
        clearInterval(zadanieTimer);
        clearInterval(proverkaTimer);
    }
}
 
function proverkaHandler()
{   
    clearInterval(proverkaTimer);
    randomValue = Math.floor(Math.random()*(max - min) + min);
    proverkaTimer = setInterval("proverkaHandler()", randomValue);
    var tempstr = '';
    var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
    if(external.SCity.Text == "suncity")
        tempstr = "Suncity - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "sandcity")
        tempstr = "Sandcity - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "angelscity")
        tempstr = "Angels city - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "demonscity")
        tempstr = "Demons city - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "mooncity")
        tempstr = "Mooncity - Рыцарь первого круга, 24999 / 24999";
    if(temp_inf.indexOf(tempstr) > -1 )
    {
        uspeh = true;
        return;
    }
    if(!temp_inf.toLowerCase().match(external.SCity.Text + " - ")) uspeh = false;
    else uspeh = true;
    top.Chat.Self.AddMessage("Проверяю наличие задания");
}
 
function zadanieHandler()
{       if(top.Battle.bInBattle) return;
        if(get_mainframe().document.all[0].innerHTML.match(/смотрим на/)) return;
    try
    {
        var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])
        external.battleWeared = false;
 
        if(uspeh==false)
        {       
            if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибная лужайка");
            else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Странное Место");
            else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибная поляна");
            else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибница");
            else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центральная грибница");
            else if(room == "Зал воинов" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(room == "Зал воинов 2" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(room == "Зал воинов 3" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(top.frames[external.mainFrameIndex].document.getElementsByName("pass").length > 0 && uspeh == false)
            {
                if(!top.frames[external.mainFrameIndex].location.toString().match(/ql=/))
                {
                    var btn = get_mainframe().document.getElementsByTagName("INPUT");
                    for(i = 0;i<btn.length;i++)
                    {
                        if(btn[i].outerHTML.match(/Задания/) && btn[i].style.visibility!="hidden")
                        {
                            btn[i].click();
                            break;
                        }
                    }
                }
 
                top.Chat.Self.AddMessage("Проверяю условие");
                if(top.frames[external.mainFrameIndex].document.getElementsByName("finishquest").length > 0)
                {
                    top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
                    top.Chat.Self.AddMessage("Работает завершение задания");
                }
                if(!get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity: 0/) && top.frames[external.mainFrameIndex].document.getElementsByName("getquest").length > 0)
                {                   
                    top.frames[external.mainFrameIndex].document.getElementsByName("getquest")[0].click();
                    uspeh=true;
                    top.Chat.Self.AddMessage("Работает взятие задания");
                }
                if(get_mainframe().document.all[0].innerHTML.match(/Вы получили новое задание/)) uspeh=true;
                if(uspeh == true)
                {
                    top.Chat.Self.AddMessage("Работает выход из комнаты");
                    btn = get_mainframe().document.getElementsByTagName("INPUT");
                    for(i = 0;i<btn.length;i++)
                    {
                        if(btn[i].outerHTML.match(/Вернуться/) && btn[i].style.visibility!="hidden")
                        {
                            btn[i].click();
                            break;
                        }
                    }
                }           
            }     
        }
        else
        {       
            if(room == "Грибница" && top.frames[external.mainFrameIndex].is_accessible)
            {
                var tmp = get_mainframe().document.getElementsByTagName("a");
                for(i = 0;i<tmp.length;i++)
                {
                    if(tmp[i].outerHTML.match(/Грибная поляна/) && tmp[i].style.visibility!="hidden" && tmp[i].onclick)
                    {
                        tmp[i].click();
                        break;
                    }
                }
            }
            else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Странное Место");
            else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибная лужайка");
            else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центральная грибница");
            else if(room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Зал воинов");
        }
    }
    catch(err)
    {
        alert("err");
    }
}
 
function Walk(name)
{
    var imgs = get_mainframe().document.getElementsByTagName("IMG");
    for(i = 0;i<imgs.length;i++)
    {
        if(imgs[i].outerHTML.match(name) && imgs[i].style.visibility != "hidden" && imgs[i].onclick && (imgs[i].height*imgs[i].width)>60)
        {
            top.Chat.Self.AddMessage("Иду в " + name);
            imgs[i].click();
            break;
        }
    }
}
 
function doLoad(url)
{
    if (window.XMLHttpRequest)
        req = new XMLHttpRequest();
    else
        req = new ActiveXObject("Microsoft.XMLHTTP");
 
       req.open("GET", url, false); // задать параметры методу open
       req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
       req.send(null); // отправить запрос     
    return req.responseText;
}

Отредактировано gorlum (2011-06-29 20:44:33)

105

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

А что делают эти строки?

else if(top.frames[external.mainFrameIndex].document.getElementsByName("pass").length > 0 && uspeh == false)
            {
                if(!top.frames[external.mainFrameIndex].location.toString().match(/ql=/))

Хочу сделать функцию по взятию задания, чтобы потом не долбаться с другими городами, вот и не уверен с какой строки начинать.

Отредактировано gorlum (2011-06-29 20:56:28)

106

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

После последнего изменения перестал брать задание(

107

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

И не может выйти из зв в бк, ссылка походу не та.

108

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Вернулся к старому варианту

else if(external.room_name == "Грибница" && uspeh==false){
 
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
            if(top.frames[external.mainFrameIndex].document.getElementsByName("finishquest").length > 0)
                {
                    top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
                    top.Chat.Self.AddMessage("Работает завершение задания");
                }       
            if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в/)&& !get_mainframe().document.all[0].innerHTML.match(/24999/))
            {
            get_mainframe().document.getElementsByName("getquest")[0].click();
            top.Chat.Self.AddMessage("Работает взятие задания");
            }
            proverkaHandler(uspeh);
        if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../)||get_mainframe().document.all[0].innerHTML.match(/Время до смены задания:/)||get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/))
 
            {
            uspeh=true;
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
            top.Chat.Self.AddMessage("Работает выход из комнаты");
            }
 
       }

он работает.

109

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

gorlum пишет:

После последнего изменения перестал брать задание(

Наверное, не ту последнюю версию смотришь. Последняя рабочая - на предыдущей странице под спойлером.

Оставь надежду всяк сюда входящий ©

110

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Как-то тему неграмотно сделали smile
Вопрос то бл конкретный: сделать конкретный плагин smile
Так и надо было назвать "Плагин ... от Gorlum" и в первом посте всегда держать последнюю версию smile

Сам плагин я не читал и не знаю, как он работает(плохо у меня со временем), поэтому просто пару советов дам:
1) Я недоумеваю по поводу одновременного использования и "top.frames[external.mainFrameIndex]", и "get_mainframe()" smile
2) "top.Chat.Self.AddMessage"... а чем external.AddToChat не устраивает? Мне казалось, что с меткой времени сообщения выглядят более информативно.
3)

var imgs = get_mainframe().document.getElementsByTagName("IMG");
и
var tmp = get_mainframe().document.getElementsByTagName("a");
заменил бы на
var imgs = get_mainframe().document.images;
и
var tmp = get_mainframe().document.links;
Software is like sex: it's better when it's free! © LinusTorvalds

111

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Поправил) Насчёт чата - Exile походу старается всеми возможными путями избегать екстерналов)

1) Я недоумеваю по поводу одновременного использования и "top.frames[external.mainFrameIndex]", и "get_mainframe()"

А где такое в плагине? Только что пытался найти - не увидел, хотя мб потому что только проснулся)

Отредактировано gorlum (2011-06-30 10:17:30)

112

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Не, ты не понял smile
Записи "get_mainframe()" и "top.frames[external.mainFrameIndex]" эквивалентны (правда в случае экстернала там руками определяется название главного фрэйма один раз при старте, а get_mainframe() - это функция используемая в БК).
Под "одновременно" я имел ввиду "в одном плагине разные записи одного и того же" smile

Эктерналы использовать можно, нужно и вобще полезно. Исключение - то, что должно изменяться оперативно.

Software is like sex: it's better when it's free! © LinusTorvalds

113

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

anahronik пишет:

Не, ты не понял smile
Записи "get_mainframe()" и "top.frames[external.mainFrameIndex]" эквивалентны (правда в случае экстернала там руками определяется название главного фрэйма один раз при старте, а get_mainframe() - это функция используемая в БК).
Под "одновременно" я имел ввиду "в одном плагине разные записи одного и того же" smile

Эктерналы использовать можно, нужно и вобще полезно. Исключение - то, что должно изменяться оперативно.

Ну тут есть нормально работающие и херовоработающие.
Так, например, inBattle и room_name могут фэйлить, проверено лично (
По поводу get_mainframe и top.frames[external.mainFrameIndex]:
я копипастил некоторые строки из наработок по плагину молитв, вот и получалась каша.
А в целях экономии ресурсов конечно лучше использовать последнее.

var imgs = get_mainframe().document.images;
и
var tmp = get_mainframe().document.links;

Мое кунг-фу еще очень слабое smile

Отредактировано Exile (2011-06-30 16:52:00)

Оставь надежду всяк сюда входящий ©

114

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

В 9.1.3 эти два фэйлить не будут.
Да и остальные тоже не должны smile

Software is like sex: it's better when it's free! © LinusTorvalds

115

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

С учетом замечаний:

SPOILER Show

var uspeh=false;
var questIsActive = false;
var room ='';
var randomValue;
var min = 360000;
var max = 400000;
 
function zadanie(enabled)
{
    if(enabled)
    {
        zadanieTimer = setInterval("zadanieHandler()",2000);
        proverkaTimer = setInterval("proverkaHandler()",1000);
    }
    else
    {
        clearInterval(zadanieTimer);
        clearInterval(proverkaTimer);
    }
}
 
function proverkaHandler()
{   
    clearInterval(proverkaTimer);
    randomValue = Math.floor(Math.random()*(max - min) + min);
    proverkaTimer = setInterval("proverkaHandler()", randomValue);
    if(top.Battle.bInBattle) return;
    var tempstr = '';
    var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
    if(external.SCity.Text == "suncity")
        tempstr = "Suncity - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "sandcity")
        tempstr = "Sandcity - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "angelscity")
        tempstr = "Angels city - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "demonscity")
        tempstr = "Demons city - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "mooncity")
        tempstr = "Mooncity - Рыцарь первого круга, 24999 / 24999";
    if(temp_inf.indexOf(tempstr) > -1 )
    {
        external.AddToChat("Задания не требуется");
        uspeh = true;
        questIsActive = false;
        return;
    }
    if(!temp_inf.toLowerCase().match(external.SCity.Text + " - "))
    {
        external.AddToChat("Требуется взять задание");
        uspeh = false;
    }
    else
    {
        external.AddToChat("Задания не требуется");
        uspeh = true;
        questIsActive = false;
    }
 
}
 
function zadanieHandler()
{
    try
    {
        if(top.Battle.bInBattle) return;
        var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])
        //external.battleWeared = false;
        if(uspeh==false || questIsActive)
        {       
            if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибная лужайка");
            else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Странное Место");
            else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибная поляна");
            else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибница");
            else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центральная грибница");
            else if(room == "Зал воинов" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("\'Бойцовский Клуб\'");
            else if(room == "Зал воинов 2" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("\'Бойцовский Клуб\'");
            else if(room == "Зал воинов 3" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("\'Бойцовский Клуб\'");
            else if(room == "Грибница" && uspeh == false)
            {
                var btn = top.frames[external.mainFrameIndex].document.getElementsByTagName("INPUT");
                for(i = 0;i<btn.length;i++)
                {
                    if(btn[i].outerHTML.match(/Задания/) && btn[i].style.visibility!="hidden")
                    {
                        btn[i].click();
                        break;
                    }
                }               
            }
            else if(top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0 && uspeh == false)
            {
                if(top.frames[external.mainFrameIndex].document.getElementsByName("finishquest").length > 0)
                {
                    top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
                    uspeh = false;
                    questIsActive = false;
                    external.AddToChat("Завершаем задание");
                }
                if(!top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Репутация в Suncity: 0/))
                {
                    if(top.frames[external.mainFrameIndex].document.getElementsByName("getquest").length > 0)
                    {
                        top.frames[external.mainFrameIndex].document.getElementsByName("getquest")[0].click();
                        external.AddToChat("Работает взятие задания");
                    }
                    uspeh=true;
                    questIsActive = true;
                }
 
                if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Вы получили новое задание/))
                {
                    uspeh=true;
                    questIsActive = true;
                }
                else if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Для вас нет заданий/))
                    {
                        uspeh = true;
                        questIsActive = false;
                    }
 
                if(uspeh == true)
                {
                    external.AddToChat("Работает выход из комнаты");
                    btn = top.frames[external.mainFrameIndex].document.getElementsByTagName("INPUT");
                    for(i = 0;i<btn.length;i++)
                    {
                        if(btn[i].outerHTML.match(/Вернуться/) && btn[i].style.visibility!="hidden")
                        {
                            btn[i].click();
                            break;
                        }
                    }
                }           
            }     
        }
        if(!questIsActive && uspeh)
        {       
            if(room == "Грибница" && top.frames[external.mainFrameIndex].is_accessible)
            {
                var tmp = top.frames[external.mainFrameIndex].document.anchors;
                for(i = 0;i<tmp.length;i++)
                {
                    if(tmp[i].outerHTML.match(/Грибная поляна/) && tmp[i].style.visibility!="hidden" && tmp[i].onclick)
                    {
                        tmp[i].click();
                        break;
                    }
                }
            }
            else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Странное Место");
            else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибная лужайка");
            else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центральная грибница");
            else if(room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Зал воинов");
        }
    }
    catch(err)
    {
        external.AddToChat("Ошибка! Ебем гусей!");
    }
}
 
function Walk(name)
{
    var imgs = top.frames[external.mainFrameIndex].document.images;
    for(i = 0;i<imgs.length;i++)
    {
        if(imgs[i].outerHTML.match(name) && imgs[i].style.visibility != "hidden" && imgs[i].onclick && (imgs[i].height*imgs[i].width)>60)
        {
            external.AddToChat("Иду в " + name);
            imgs[i].click();
            break;
        }
    }
}
 
function doLoad(url)
{
    if (window.XMLHttpRequest)
        req = new XMLHttpRequest();
    else
        req = new ActiveXObject("Microsoft.XMLHTTP");
 
       req.open("GET", url, false); // задать параметры методу open
       req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
       req.send(null); // отправить запрос     
    return req.responseText;
}

В 9.1.3 эти два фэйлить не будут.
Да и остальные тоже не должны

А можно будет потом огласить список всех доступных external-ов?

Отредактировано Exile (2011-06-30 17:12:15)

Оставь надежду всяк сюда входящий ©

116

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

А как надо написать, чтобы бот не ломился в бой когда у него хп полное при выполнении плагина?

117

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Exile пишет:

А можно будет потом огласить список всех доступных external-ов?


Да, это было бы отлично)

118

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Обновил. В сане кто-то тестил?

119

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Долго пытался понять что делает questIsActive. Думал что баг какой-то) Только вот ещё понять как при questIsActive==true - запускать режим подземки. Анахроник, можно такое реализовать?

120

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

gorlum пишет:

Долго пытался понять что делает questIsActive. Думал что баг какой-то) Только вот ещё понять как при questIsActive==true - запускать режим подземки. Анахроник, можно такое реализовать?

Это наработки по состоянию задания.
Когда берем задание - questIsActive==true. И пока оно - тру, ходим в пещеру. Как только сделали - фолс, и идем по своим делам.

Оставь надежду всяк сюда входящий ©

121

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Exile пишет:
gorlum пишет:

Долго пытался понять что делает questIsActive. Думал что баг какой-то) Только вот ещё понять как при questIsActive==true - запускать режим подземки. Анахроник, можно такое реализовать?

Это наработки по состоянию задания.
Когда берем задание - questIsActive==true. И пока оно - тру, ходим в пещеру. Как только сделали - фолс, и идем по своим делам.

Та я понял, но вот только надо теперь научить его включить режим подземки, чтобы если questIsActive==true включал модуль, выполнял задание, а когда questIsActive==фолс, ты выключал и шел в хаоты.

122

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

external.dungeonEnabled = true / false и возвращает значение, если надо. Только в меню галочку не ставит - в остальном работает.

Software is like sex: it's better when it's free! © LinusTorvalds

123

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Спасибо, сегодня попробую)

124

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

В пещеру заходит) И как ещё сделать, что бы в бой не лез?

125

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

со времен 7-й версии я решил, что чтобы не лез в бой, надо выставлять %ХП для подачи заявки = 101%

external.SBattleAbovePercent = 101;

smile

Software is like sex: it's better when it's free! © LinusTorvalds