Очередная проблема с фармом

Фарм по спискам бота. Фарм через голдклуб. Оптимальные настройки фарма.
skss
Posts: 12
Joined: 30 Jan 2015, 13:55

Re: Очередная проблема с фармом

Post by skss »

Все ясно, про программирование ничего не знаете, но поучать лезете
Ваша привязка к номерам, проработает ровно до первого обновления игры, после чего будете отсчитывать номера за ново и переписывать половину бота
Программисту написавшему код с привязкой к порядковому номеру элемента, руки отрывать сразу же нужно, ну или мозги...
Есть одна проблема. Эти номера генерируются не игрой а браузером при построение модели DOM. Игрой генерируется лишь HTML.

Блин вот мне стало интересно и поглядел предложенный вами пример - страница со списком отчетов. Поехали!

Смотрим код. Ага список отчетов это обычная таблица. Смотрим как её можно опознать? Опа видим id="overview" class="row_table_data". Смотрим используются ли где еще на странице - нет не используются. У нас есть сразу 2 идентификатора именно нужной нам таблички. Идем дальше. Смотрим что у нас в <tbody>.
Одна строка таблицы представляет из себя:

Code: Select all

							
<tr>
  <td class="sel">
    <input class="check" type="checkbox" name="n1" value="98519800" />
  </td>
  <td class="sub newMessage">
    <img src="img/x.gif" class="messageStatus messageStatusUnread" alt="Не прочитано" title="Не прочитано" />
    <img src="img/x.gif" class="iReport iReport7" alt="Как защитник, вы проиграли, но без потерь" title="Как защитник, вы проиграли, но без потерь" />
    <a class="reportInfoIcon" href="build.php?id=39&tt=2&bid=98519800">
      <img title="1890/4130" alt="1890/4130" src="img/x.gif" class="reportInfo carry half" />
    </a>						
    <div>
      <a href="berichte.php?id=98519800|24f28379&t=">XXX проводит набег на YYY</a>
    </div>
    <div class="clear"> </div>
  </td>
  <td class="dat">
    сегодня 02:58					
  </td>
</tr>
Ага! С ходу видим что ссылка на сам отчет и информация о нем лежит в TD c классом "sub" а по наличию у него же класса "newMessage" можно понять прочитан отчет или нет. Хотя лучше конечно по id отчета в самой игре определять читали мы этот отчет или нет (в данном примере id отчета 98519800).
Идем дальше. Нам надо понять "а что это за отчет?". Видим интересную строку:

Code: Select all

<img src="img/x.gif" class="iReport iReport7" alt="Как защитник, вы проиграли, но без потерь" title="Как защитник, вы проиграли, но без потерь" />
Бегло сравниваем с другими отчетами и понимаем что class="iReport iReport7" указывает на тип отчета. iReport7 значит что на нас напали и мы не понесли потери а вот iReport6 значит что на нас напали и мы понесли потери. А вот iReport21 значит что это отчет о приключении.
Ссылка на подробный отчет лежит в этом же TD в блоке div. То есть TD->DIV[0]->A ([0] - это и есть идентификатор в коллекции. То есть его порядковый номер. Если там идут подряд 5 элементов div (в нашем случае 2) то и номера у них будут соответственно 0,1,2,3,4. А т.к. судя по верстке нам нужен первый из них то и обращаемся мы к [0])
Собственно это вся полезная информация которую можно получить на этой странице.
Порядок действий:
1) Находим таблицу с id=overview
2) Получаем коллекцию элементов TR из блока TBODY
3) Перебираем результат любым удобным способом. То есть на каждой итерации мы получаем следующий элемент TR пока они есть в коллекции. В каждом элементе ищем TD c классом "sub" и производим следующие действия:
а) В найденном определяем прочитано или нет сообщение по наличию класса "newMessage". Хотя лучше по ID отчета в игре т.к. пользователь может прочитать отчет и бот пропустит его.
б) Ищем элемент IMG с классом iReport. Смотрим на второй класс (например iReport7) и определяем что это за отчет и нужен ли он нам вообще.
в) Ищем первый элемент div а в нем элемент A и забираем из него значение атрибута HREF
Все! Далее переходим на страницу отчета и там уже берем нужную информацию.
User avatar
Vlad
Разработчик
Posts: 4303
Joined: 16 Aug 2010, 21:21

Re: Очередная проблема с фармом

Post by Vlad »

И успешно теряем поддержку серверов Т3.х, где инонки отчета нет и отчет об атаке, от отчета об разведке отличается только текстом внутри элемента
Fail
С постройками алгоритм будет, или опять fail?
skss
Posts: 12
Joined: 30 Jan 2015, 13:55

Re: Очередная проблема с фармом

Post by skss »

И успешно теряем поддержку серверов Т3.х, где инонки отчета нет и отчет об атаке, от отчета об разведке отличается только текстом внутри элемента
Fail
Во первых определить Т3.х или Т4.х не проблема. Я не помню как выглядят отчеты на Т3.х но уверен что проблем с ними не будет. Более того ничего не мешает открыть отчет и поглядеть подробности. Так же ничего не мешает сделать 2 алгоритма и применять в зависимости от версии игры - также не проблема. Реально то что вы сейчас написали это высосанное из пальца оправдание...
Во вторых если уж выбирать между двумя вариантами:
1) сделать 2 разных алгоритма для 2х версий игры при этом бот будет поддерживать ВСЕ сервера на ЛЮБОМ языке. Так же будет работать более надежно т.к. структура документа не меняется.
2) остановится на парсинге и поддерживать ограниченное количество серверов. И косяки (как у меня с отчетами вообще не понятный косяк.).
Я бы наверное остановился на первом.

По поводу центра деревни. Опять же поглядел и увидел классы вида gX где Х = числу. Посмотрел в CSS - не нашел таких. А вот в JS нашел подстановку изображений. Причем изображения выбирались согласно классу gХ. Выдернул рисунок и получилось что g13 ни что иное как кузница:
Image
Image
быстрым перебором определил что максимальный g41
А вот что бы сопоставить что где надо следующее:
1) понять как отображаются HTML документы.
2) вообразить/нарисовать/построить таблицу иерархии HTML чтобы четко видеть что является дочерним а что родительскими элементами.
3) понять что делает тот или иной элемент уникальным (id, class, name или другой любой атрибут за который можно зацепится) а дальше по логике искать его потомков и брать из них информацию.
Вообще никто не говорит что это все просто и весело. Я уже писал в одном из предыдущих постов что много нюансов и т.д. Тут требуется анализ документа и понимание что в нем зачем и как это вообще все работает. Вот центр деревни хороший пример т.к. тут надо именно понять как это все работает и как происходит подстановка изображений. Если это понять то становится ясно что где находится по самим изображениям.
skss
Posts: 12
Joined: 30 Jan 2015, 13:55

Re: Очередная проблема с фармом

Post by skss »

С постройками алгоритм будет, или опять fail?
И я не собираюсь тут писать готовых решений :) мне за это никто не платит. Разработчик бота (то есть вы) должен "придумывать алгоритмы" а не я подсказывать. Да и с отчетами я алгоритмов не предлагал - это был логический ход действий. :D
User avatar
Vlad
Разработчик
Posts: 4303
Joined: 16 Aug 2010, 21:21

Re: Очередная проблема с фармом

Post by Vlad »

skss wrote:сделать 2 разных алгоритма для 2х версий игры при этом бот будет поддерживать ВСЕ сервера на ЛЮБОМ языке
НЕ получится, поэтому бессмысленно плодить алгоритмы под кучу версий игры
skss wrote:Опять же поглядел и увидел классы вида gX где Х = числу.
Пальцем ткните, где вы это увидели
Стройплощадка на финском сервере

Code: Select all

<area alt="Mylly <span class="level">taso 2</span>||Tasolle 3 laajentamisen rakennuskustannukset:<br />
               <div class="showCosts">
            <span class="resources r1">
            <img class="r1" src="img/x.gif" />1620
            </span> 
            <span class="resources r2">
            <img class="r2" src="img/x.gif" />1425
            </span> 
            <span class="resources r3">
            <img class="r3" src="img/x.gif" />1230
            </span> 
            <span class="resources r4">
            <img class="r4" src="img/x.gif" />4020
            </span> <div class="clear"></div>" title="Mylly <span class="level">taso 2</span>||Tasolle 3 laajentamisen rakennuskustannukset:<br />
               <div class="showCosts">
            <span class="resources r1">
            <img class="r1" src="img/x.gif" />1620
            </span> 
            <span class="resources r2">
            <img class="r2" src="img/x.gif" />1425
            </span> 
            <span class="resources r3">
            <img class="r3" src="img/x.gif" />1230
            </span> 
            <span class="resources r4">
            <img class="r4" src="img/x.gif" />4020
            </span> <div class="clear"></div>" shape="poly" coords="110,95,132,80,132,81,160,82,179,96,179,151,158,163,128,163,109,150" href="build.php?id=19" />
User avatar
Vlad
Разработчик
Posts: 4303
Joined: 16 Aug 2010, 21:21

Re: Очередная проблема с фармом

Post by Vlad »

skss wrote:Да и с отчетами я алгоритмов не предлагал - это был логический ход действий. :D
Вы просто ерунду невыполнимую предложили, и упорствуете
skss
Posts: 12
Joined: 30 Jan 2015, 13:55

Re: Очередная проблема с фармом

Post by skss »

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

Code: Select all

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>Travian ru19</title>
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="content-type"	content="text/html; charset=UTF-8" />
<meta name="content-language" content="ru" />
<link href="gpack/travian_gpack_49/lang/ru/compact.css?8c5fd" rel="stylesheet" type="text/css" /><link href="gpack/travian_gpack_49/lang/ru/lang.css?8c5fd" rel="stylesheet" type="text/css" /><link href="img/travian_basics.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="crypt.js?1422601800"></script>
<script type="text/javascript">
Travian.Translation.add(
{
	'allgemein.anleitung':	'Справка',
	'allgemein.cancel':	'Отменить',
	'allgemein.ok':	'ОК',
	'allgemein.close':	'Закрыть',
	'cropfinder.keine_ergebnisse': 'Ничего не было найдено'
});
[b]Travian.applicationId = 'T4.4 Game';[/b]
[b]Travian.Game.version = '4.4';[/b]
Travian.Game.worldId = 'ru1919';
Travian.Game.speed = 2;

Пальцем показать?

Code: Select all

<span class="resources r4">
            <img class="r4" src="img/x.gif" />675
            </span> <div class="clear"></div>" />[b]<img style="left:227px; top:230px; z-index:32" src="img/x.gif" class="building g18" title="L&auml;hetyst&ouml; <span class="level">taso 1</span>||Tasolle 2 laajentamisen rakennuskustannukset:<br />[/b]
               <div class="showCosts">
            <span class="resources r1">
            <img class="r1" src="img/x.gif" />230
            </span> 
            <span class="resources r2">
            <img class="r2" src="img/x.gif" />165
            </span> 
            <span class="resources r3">
            <img class="r3" src="img/x.gif" />190
            </span> 
            <span class="resources r4">
Ах да я же забыл обратить внимание на то что блоки с инфой о постройках в верстке дублируются.
skss
Posts: 12
Joined: 30 Jan 2015, 13:55

Re: Очередная проблема с фармом

Post by skss »

Vlad wrote:
skss wrote:Да и с отчетами я алгоритмов не предлагал - это был логический ход действий. :D
Вы просто ерунду невыполнимую предложили, и упорствуете
"ерунду невыполнимую" для вас?))
C++ - компонент TXMLDocument
DELPHI - WebBrowser вроде отлично работает с DOM (но не уверен т.к. с delphi особо не работал)
skss
Posts: 12
Joined: 30 Jan 2015, 13:55

Re: Очередная проблема с фармом

Post by skss »

А это что бы хотя бы понимали о чем речь:
DOM (от англ. Document Object Model — «объектная модель документа») — это не зависящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому HTML, XHTML и XML-документов, а также изменять содержимое, структуру и оформление таких документов.

Модель DOM не накладывает ограничений на структуру документа. Любой документ известной структуры с помощью DOM может быть представлен в виде дерева узлов, каждый узел которого представляет собой элемент, атрибут, текстовый, графический или любой другой объект. Узлы связаны между собой отношениями "родительский-дочерний".

Изначально различные браузеры имели собственные модели документов (DOM), несовместимые с остальными. Для обеспечения взаимной и обратной совместимости, специалисты международного консорциума W3C классифицировали эту модель по уровням, для каждого из которых была создана своя спецификация. Все эти спецификации объединены в общую группу, носящую название W3C DOM.

Еще один интерфейс прикладного программирования, называемый JDOM, обеспечивает более высокий, чем W3C DOM, уровень для работы с XML-документами на Java.

Я в шоке если честно. Вы пишите бот для БРАУЗЕРНОЙ игры. При этом вы еще и продаете его хоть и не за большие но все же ДЕНЬГИ.
Вы как минимум должны отлично знать те технологии на которых работает игра ( в на нашем случае front-end) а это HTML+JS+CSS. Вы как минимум должны знать как работать с этими стандартами при помощи того языка на котором вы пишете бот. Вы как минимум должны отлично знать возможности используемы вами компонентов и доступных компонентов для работы с данными стандартами. Но вы этого, к сожалению, не знаете....
User avatar
Vlad
Разработчик
Posts: 4303
Joined: 16 Aug 2010, 21:21

Re: Очередная проблема с фармом

Post by Vlad »

skss wrote: Travian.applicationId = 'T4.4 Game';
Travian.Game.version = '4.4';
Я надеюсь, вы не думаете всерьез, что это версия игры?
Скрипты игры меняются примерно раз в 2-3 недели, если что
HTML страниц и того чаще
И все это не синхронно по языковым зонам, а с разницей до месяца
skss wrote:Ах да я же забыл обратить внимание на то что блоки с инфой о постройках в верстке дублируются.
Ок, сейчас дублируются, реньше небыло второго блока, но бот то, не сегодня возник
Теперь, при желании, можно выкинуть из локализации названия построек
skss wrote: Не получится что написать несколько алгоритмов или определить версию?
Не получится, уйти от файлов локализации полностью
А без этого, смысла переделывать 0

ЗЫ
Я прекрасно знаю что такое DOM и как с ним работать
С чего вы взяли, что бот не работает через DOM где это возможно/было возможно на момент добавления функции и упорно это повторяете?
Post Reply