Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Как организовать клик по скриптовой ссылке в онлайн игре? (http://forum.oszone.net/showthread.php?t=170846)

Kobrados 22-03-2010 00:56 1374139

Как организовать клик по скриптовой ссылке в онлайн игре?
 
Вложений: 1
Здравствуйте, я только начал осваивать Autoit, вот пытаюсь сделать что то вроде бота для онлайн игры и столкнулся с проблемкой. Нужно выбрать определенный ресурс (игровой) из предлагаемых (они генерируются в случайном порядке). Для этого нужно как то сэмулировать клик мыши по нужному названию. Причем диалог вроде ява скрипт. Адреса для кликов всегда одинаковы (http://haddan.ru/room/func/qa.php?id=21 или http://haddan.ru/room/func/qa.php?id=22 и т.д.) только значения ресурсов тусуются. Игра идет с клиента и с ИЕ.
Вот ИЕ Анализером стянул скрипт т.к. в ХТМЛе игры ниче полезного не нашел. Все участки страницы (фрэймы) имеют один титл. В общем если подскажете как организовать клик буду очень рад а если удасться выбрать желаемый ресурс – то эт была б бомба.


HTML код:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"><title>Хаддан // Вопрос-ответ</title>
<link href="/@!style/haddan.css" rel="stylesheet" type="text/css">
<link href="/@!style/dialog.css" rel="stylesheet" type="text/css">
<script language="javascript">var g_eh_version='3.7.1.7345'</script>
<script language="javascript" charset="windows-1251" src="/@!script/eh.js"></script>
<script language="javascript" charset="windows-1251" src="/@!script/dialog.js"></script>
<script language="javascript">ehge(); eh_check_inc('dialog'); ehgx()</script>
</head>
<body class="dialogbody"><!--
-->
<script language="JavaScript">
ehgh('init');

var g_dlg = {
npcid: -82,
npcname: 'Фея Поляны',
npcsex: 0,
npcrace: 'elf',
changed: true,
question: 'Приветствую тебя, странник! Я могу дать тебе следующие травы: <ul><li>Зеленая массивка - 2 шт.</li><li>Мухожор - 13 шт.</li><li>Подсолнух - 6 шт.</li><li>Капустница - 4 шт.</li><li>Мандрагора - 3 шт.</li></ul><br>Выбери себе.',
answers: [[21,'Зеленая массивка'],
[22,'Мухожор'],
[23,'Подсолнух'],
[24,'Капустница'],
[25,'Мандрагора']],
close: false,
color: '#000000',
goto: ''
};
function dlgScript(){
  var _c = eh_enter('dlgScript', arguments);
 
  eh_exit(_c);
}

ehgx();
</script><!--
-->
<div class="talksayBIG" id="dlgq">
<script language="JavaScript">ehge(); writeQuestion(); ehgx()</script>
</div>
<div id="dlga" style="margin-top: 10px">
<script language="JavaScript">ehge(); writeAnswers(); ehgx()</script>
</div></body>
<script language="JavaScript">ehge(); processDlg(); ehgx()</script>
</html>


madmasles 22-03-2010 04:42 1374198

Цитата:

Цитата Kobrados
Для этого нужно как то сэмулировать клик мыши по нужному названию. »

А нужное название какое?

Kobrados 22-03-2010 11:11 1374325

Зеленая массивка; Мандрагора; Капустница; Подсолнух; Мухожор - в этом списке Масивка более желаемый ресурс а дальше по уменьшению стоимости т.е. Мухожор самый не желаемый. Предлагаться могут минимум 2 - максимум все ресурсы.

madmasles 22-03-2010 11:40 1374340

Kobrados,
В этой теме Получить адрес для перехода посмотрите.

Kobrados 23-03-2010 12:28 1375235

madmasles,
Спасибо за ссылку, код четко работает на главной странице игры а если зайти в игру и присоединить ИЕ то ни одной ссылки не находит. Т.е я понимаю надо както подключиться к нужному ява скрипту?
Вот основная часть кода страницы, дальше идут данные по персонажу.
HTML код:

<html>
<head>
<title>Хаддан: Имя персонажа</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script language="javascript">var g_eh_version='3.7.1.7345'</script>
<script language="javascript" charset="windows-1251" src="/@!script/eh.js"></script>
<script type="text/javascript" charset="windows-1251" src="/@!script/talknick.js"></script>
<script type="text/javascript" charset="windows-1251" src="/@!script/talk.js"></script>
<script type="text/javascript" charset="windows-1251" src="/@!script/thing.js"></script>
<script type="text/javascript" charset="windows-1251" src="/@!script/wear.js"></script>
<script type="text/javascript" charset="windows-1251" src="/@!script/pers.js"></script>
<script type="text/javascript" charset="windows-1251" src="/@!script/cook.js"></script>
<script type="text/javascript" charset="windows-1251" src="/@!script/smile.js"></script>
<script type="text/javascript" charset="windows-1251" src="/@!script/slot.js"></script>
<object id="xPersistanceObject" style="behavior:url(#default#userdata)"></object>
<script language="JavaScript">ehge(); eh_check_inc('talknick','talk','thing','wear','pers','cook','smile','slot'); ehgx()</script>
<script language='JavaScript'>
ehge(null, 'persistance');


Kobrados 23-03-2010 17:42 1375470

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

HORRIBLE 23-03-2010 20:49 1375582

Kobrados, тут можно играть не в одном окне, а загрузив различные части игры в отдельные окна......неудобно, но зато работает ).

К примеру проверьте, откройте игру и зайдите куда нибуть, где есть с кем поговорить, нажмите на персонажа чтобы с ним поговорить, загрузится окно в котором вам нужно кликнуть на ссылку. Теперь откройте окно http://haddan.ru/room/func/qa.php , если открыв окно по этой ссылке увидите надпись ошибка обновите ..
А дальше пользуясь скриптом который вам предложил madmasles, жмите на то что вам нужно и все.

Kobrados 24-03-2010 01:09 1375746

HORRIBLE, спасиб, да, работает, но както не стабильно, через раз.
А иначе никак нельзя прописать уже открытое окно?

HORRIBLE 24-03-2010 12:29 1375977

Kobrados, у меня не получилось в самой игре нажать на ссылки в диалоге.

Я вам предлагал не что такое попробовать:
Код:

#include <IE.au3>
$oIE = _IECreate("http://haddan.ru/main.php")
MsgBox(0,"","вдруг вы вышли из игры") ; вдруг вы вышли из игры, чтоб заново авторизоваться.
$oIE_dialog = _IECreate("http://haddan.ru/room/func/qa.php")

while 1
        sleep(100)
$sText = _IEBodyReadText ($oIE_dialog)
ToolTip($sText ,10,10)
$text = StringReplace($sText, "Пожалуйста, попытайтесь начать диалог ещё раз.", "-")
$num_replace = @extended
if $num_replace >= 1 then
_IEAction($oIE_dialog, 'refresh')
_IELoadWait($oIE_dialog)
EndIf

if $sText = '0' then
_IEAction($oIE_dialog, 'refresh')
_IELoadWait($oIE_dialog)
; необходимо чтобы увидеть результат разговора в основном окне.
_IEAction($oIE , 'refresh')
_IELoadWait($oIE )

ToolTip('Диалог окончен', 100,100)

Else

if $num_replace = 0 then
        $oLinks = _IELinkGetCollection($oIE_dialog)
        local $link_text = ''
        local $i = 1
        For $oLink In $oLinks
                $link_text &= @CRLF& 'Номер: '& $i &'. Текст: '& _IEPropertyGet($oLink, "innerText") & @CRLF
                $i +=1
        Next
        $answer = InputBox("Номер ссылки на которую жмем", $link_text, '1' , "",-1, -1, 10, 200)
        ;MsgBox(0,'',$iNumLinks)
        $i = 1
                For $oLink In $oLinks
                ;        MsgBox(0,'',$i)
                        if number($answer) = $i then
                        ;$sLinkText = _IEPropertyGet($oLink, "innerText")
                        ;If StringInStr($sLinkText, 'Расскажи мне о магии.') Then
                        ;if $oLink.innertext == 'Расскажи мне о магии.' Then
                                _IEAction($oLink,'click')
                                _IELoadWait($oIE_dialog)
                        ;EndIf
                        EndIf
                        $i += 1
                Next
EndIf

EndIf
wend

Скрипт загрузит два окна, одно окно полная игра, второе это диалог. Как только у вас в основном окне отобразится окно диалога оно несомненно появится во втором окне после того как его перезагрузить.

Kobrados 25-03-2010 22:06 1377259

HORRIBLE, спасиб большое, интересное решение.
Может кто то еще подскажет возможно ли сравнить текст из буфера (после нажатия Ctrl+C) с текстом в условии скрипта?

madmasles 25-03-2010 23:30 1377311

Kobrados,
В справке ClipGet(), ClipPut() посмотрите.

Kobrados 26-03-2010 00:13 1377330

madmasles, просматривал хелп - незаметил, спасибо работает.


Время: 05:27.

Время: 05:27.
© OSzone.net 2001-