бот для онлайн-трейдинга

Я хочу закодировать торгового бота для Magic: The Gathering Online .Этот бот должен дождаться, пока кто-то предложит торговать, принять, просмотреть карты, доступные у другого трейдера (информация отображается на экране), и выполнить другие аналогичные функции. У меня есть несколько вопросов:

  1. Как он может знать, что кто-то предлагает сделку?
  2. Как он может узнать, что у другого трейдера есть какая-то карта (информация хранится в картинках)?

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

9
задан Ivan Machado 21 April 2012 в 17:15
поделиться

2 ответа

Во-первых, следует отметить, что некоторые онлайн-игры запрещают ботов, так как они могут дать некоторым игрокам несправедливые преимущества. Условия предоставления услуг МТГО , похоже, ничего об этом не говорят, хотя они накладывают ограничения на все, что может негативно повлиять на предоставление услуг. Они также сказали , что есть вероятность того, что они добавят API в будущем, так что они, кажется, не против идеи автоматизации, но не поддерживают ее на данный момент. Тщательно пройдитесь здесь, но, похоже, что писать бота - это нормально, если он не вредит и не оскорбляет. Это не юридическая консультация, и было бы неплохо спросить разрешения у людей, которые управляют MTGO. редактирование с тех пор как я написал это, было указано, что ботов уже много, так что проблем с написанием ботов не должно быть.

Предполагая, что это не запрещено условиями обслуживания, но у них нет API, вам придется найти способ обнаружить, что происходит, и управлять игрой автоматически. Есть довольно хорошая серия статей о написании покерных ботов (архивная копия), которая содержит некоторую хорошую информацию о том, как вставить DLL в приложение, отскаблировать экран и управлять приложением. Это может дать вам начальную точку для выполнения такого рода вещей.

Вы также можете захотеть поискать инструменты, которые другие люди уже написали для этого. Похоже, что существует несколько существующих MTGO ботов, но все они кажутся немного эскизными (было несколько сообщений о краже ими паролей), так что будьте осторожны там.

Edit

Так как этот ответ все еще, кажется, поднимает голос, я, вероятно, должен обновить его некоторой полезной информацией. С тех пор как я написал этот ответ, я нашел отличную систему автоматизации пользовательского интерфейса под названием Sikuli. Она позволяет писать программы на Python, автоматизирующие GUI. Она включает в себя функции распознавания изображений, которые очень легко распознают кнопки, карты и другие элементы пользовательского интерфейса; вы просто делаете снимок экрана, обрезаете его, чтобы включить только то, что вас интересует, и делаете нечеткое совпадение изображений (чтобы изменение фона и тому подобное не приводило к неудаче совмещения). Он даже включает в себя пользовательскую IDE, позволяющую встраивать эти скриншоты непосредственно в исходный код, чтобы вы могли увидеть, что именно ищет код. Вот пример из документации (приносим извинения за форматирование кода, делать встроенные изображения в код не просто, учитывая ограниченное подмножество HTML в StackOverflow):

def resizeApp(app, dx, dy):                      
    switchApp(app)
    corner = find(Pattern(enter image description here)).targetOffset(3,14)) 
                                                  
    drop_point = corner.getTarget().offset(dx, dy)
    dragDrop(corner, drop_point)
.                                                   
resizeApp("Safari", 50, 50)

Это гораздо проще для начала, чем методы, упомянутые в статье, ссылки на которую приведены выше, инжекции DLL в процесс отладки. Sikuli работает полностью на уровне пользовательского интерфейса, так что вам никогда не придется изменять программу, которую вы автоматизируете или беспокоиться об изменениях во внутреннем устройстве, нарушающих ваш скрипт.

Одна вещь, которую он немного бедноват в обработке текста; он имеет функции OCR, но они не все так хорошо. Однако, если текст можно выбрать, вы можете выбрать текст, скопировать его, а затем посмотреть прямо в буфер обмена.

Если бы я должен был написать бота для автоматизации чего-нибудь без хорошего API или текстового интерфейса, Sikuli, вероятно, первый инструмент, к которому я бы обратился.

.
12
ответ дан 4 December 2019 в 11:42
поделиться

Этот ответ построен на моих комментариях.

То, что вы пытаетесь сделать, очень сложно, любыми способами.
. Возможно, самый простой способ сделать это - полностью подражать пользователю. Поэтому приложение нажимает кнопки, перемещает мышь и т.д. Недостатком является то, что это зависит от способности распознавания экрана.
. Это проще, если вы можете изменить игровые файлы, так как в этом случае вы можете просто снять кожу с требуемых карт (изменить изображение (текстуру)) на один уникальный цвет
. Основным недостатком является то, что вы должны иметь игру, как окно верхнего уровня или иметь игру, запущенную в виртуальной машине. Ни то, ни другое не является идеальным.

Другой метод - это чтение памяти процессов. Вы можете найти список ячеек памяти, что упростит вам задачу, в противном случае вам придется потрудиться, отладчик выведет адреса памяти. Он также помогает (много) понять сборку.

Третий метод - перехват пакетов и их изменение. Это проще, чем метод выше, так как он (по крайней мере, для меня) легче перевернуть движок протокола, так как у вас меньше информации. Речь идет только о настройке сниффера пакетов и выполнении действия с одной переменной, отличной от другой (например, карта), и сравнении различий.

Вещь, которую вам нужно проверить, это то, что вы не нарушаете EULA. Я не знаю, как работает игра, но в большинстве игр, с которыми я сталкивался, есть EULA, которое запрещает (т.е. вам запрещают) делать что-либо из того, что я упомянул.

6
ответ дан 4 December 2019 в 11:42
поделиться