Покерный бот

Тема в разделе "WASM.WIN32", создана пользователем Naruto, 17 янв 2011.

  1. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Кто нибуть писал покерный бот или хотя бы пробывал? Поделитесь как лучше считывать инфу с рума????
    Или любые размышления сюда пишите!!!!!!!!
     
  2. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    hxxp://www.codingthewheel.com/archives/how-i-built-a-working-poker-bot
     
  3. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    недавно делал для покерстарса, только там qt прикручен с ssh. поэтому самое очевидное - реверс вверх от recv\send. вообщем тот кому это надо было - пропал, а я - забил. и кстати археология тут не поможет.
     
  4. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    писал для class1casino, полностью был отреверсен клиент и изучен протокол.
    sn0w прав, не костыльный метод это реверсить протокол и писать эмулятор.
    а тыкать по кнопочкам не наше)
     
  5. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Это ещё вопрос, что лучше. Протоколы меняются, а вот внешний вид стола нет. Так что, имхо, лучше делать распознавалку стола и кликер.
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    WIN32
    клиенты очень часто обновляются, в связи с чем у меня есть предположение, что протокол тоже регулярно меняется, чтобы противостоять попыткам несанкционированного перехвата информации. После обновлений зачастую весь спектр сопутствующих программ (разрешённых румом , как то: калькуляторы, сборщики статистики) тоже дружно обновляется. Можно предположить, что это реакция на изменившийся протокол. В связи с чем есть сомнения в целесообразности реверса протокола. Его придется реверсить заново после каждого обновления. Я делал иначе: читал информацию со стола путем распознавания карт. Все тонкости протокола оставались за бортом. Конечно, есть минус - стол должен быть на виду не перекрыт другими окнами. Тыкать по кнопочкам думаю, что проще, чем постоянно переделывать программу. Имхо.
     
  7. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Да не обезательно перехватывать send/recv, там из логов можно всю инфу получить. Можно перехватить WriteFile
     
  8. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    точно не вспомню, но кажется PrintWindow может заслонённые окна грабить
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    если память не изменяет, PrintWindow отсылает окну WM_PRINT и получает в ответ содержимое device context'а. Маловероятно, что WM_PRINTв клиенте пущена на самотёк (DefWindowProc). Во всяком случае, я бы сам обрабатывал WM_PRINT и возвращал какую-нибудь хрень (на месте клиента).
     
  10. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    cresta
    Уже не помню как, но покерстарс я грабил... вроде:)
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    asd
    В смысле окна, скрытые под другими?

    Я делал (для простоты) столы определенного размера (чтобы влезало 4 стола на экран), ставил их топмост, картинки распознавал, ставки, ходы и пр. данные розыгрыша руки грабил из текстового окошка путем распознавания текста с экрана (т.к. текстовое окошко - нестандартный контрол и на WM_GETTEXT, GetWindowText etc он не реагировал). Это для покерстарс. Кстати, так делают многие калькуляторы: меняют шрифт в текстовом окошке на моноширинный (обычно это System) и распознование с экрана. На фултилте распознавание карт тоже работало на ура, но там надо было ходы анализировать как и карты, со стола и я забил на это.
    В конечном итоге я пришёл к выводу, что какой бы ты бот не построил, у него нет шансов против "ГСЧ" рума. Рум тебя обует с любым ботом. После просмотра большого количества графов разных игроков (на PokerStrategy) ясно видно, что жизнь подавляющего большинства игроков состоит из четко выраженных чередующихся с определенным периодом полос апстриков и даунстриков. В конечном итоге народ тупо гоняет бабло от одних игроков к другим и обратно, а рейк потихоньку капает.
    Возможно, что с ботом можно будет просто долго и нудно сидеть в руме, не пролетая окончательно, и делать бабки на рейкбэке, но имхо, время, затраченное на получение рейкбэка, можно потратить и с большей пользой. Поэтому я и забил на эти боты.

    P.S.
    Как вариант заработка - делать бота на продажу и впаривать новичкам/лохам за хорошую копейку
     
  12. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    прям даже четко выраженных?
     
  13. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    вполне себе четкие. Незначительные флуктуации имеются, но общей картины не нарушают. HoldemManager показывал (у меня) пилу с периодом около 10тыс. рук. Ярко выраженная пила с минимумом возле 30-50 баксов и максимумом возле 500-550. После прохождения пятого пика я понял, что это будет бесконечно, и вывел деньги.
     
  14. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    cresta
    а как можно статистику собрать? мне даже интересно стало.
    Как раз пару дней назад, сел поиграть в покер.
     
  15. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    софта такого полно: наиболее известны holdem manager и pokertracker.
    Устанавливаешь и собираешь себе на здоровье :) Будет всевозможная статистика игр, в которых ты принял участие. Каждый рум высылает тебе handhistory для всех рук, что ты сыграл, и программа их анализирует, выводя тучу всякой информации как касательно тебя, так и по соперникам, встретившимся на тяжком пути пополнения кассы рума :)
    Можно поискать в сети базы других игроков, но это не приветствуется румами и их аффилиатами. Приравнивается к использованию запрещённых программ.

    P.S.
    Вдобавок ко всему они выводят прямо на игровой стол статистику по каждому сопернику, если она имеется в базе
     
  16. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    cresta
    http://www.pokerstars.com/ru/poker/rng/
    Говорят все чисто)
     
  17. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    spa
    поиграй какой-то продолжительный отрезок времени на покерстарс, а потом переключись на фуллтилт. Сразу бросается в глаза разница в выкладываемых дилером картах, точнее в их склонности к образованию тех или иных комбинаций. Иначе говоря текстура флопа. На покерстарс в большом проценте случаев структура флопа жутко дровяная, провоцирующая дикие зарубы и переезды, а на тилте наоборот, сухая. Но ведь и там и там ГСЧ. Казалось бы какая разница...

    Если рассуждать, отрешась от мании преследования, то я представляю себе общую картину так:
    1. Рум организовывает всю канитель для получения прибыли. Прибыль исключительно идёт с рейка.
    2. Чем больше игроков, тем больше рейк, следовательно, необходимо поддерживать определенный минимум количества играющих, который обеспечит доходность рума.
    3. Игроки разные по своему уровню, по своим целям и т.д. Если пустить дело на самотёк, то сильные игроки будут в подавляющем большинстве случаев доминировать, слабые будут регулярно проигрывать (с небольшими вариациями). Слабый игрок, проиграв какую-то определенную сумму (критическую для него), сделает для себя выводы и просто покинет рум, лишая его возможности стричь рейк. А слабых игроков там большинство, как ни крути.
    4. Что может сделать рум, чтобы большая часть рыбы не разбежалась, (поняв свою несостоятельность) унося с собой потенциальный рейк? Поставив себя на место рума, я бы периодически вмешивался в игру, помогая нужной картой слабому игроку. Чтобы он не терял веру в удачу и продолжал играть. Посадил бы его на иглу надежды и время от времени выдавал бы порцию удачи. Чтобы помочь рыбе, достаточно один раз на 20-30 раздач подсобить. Из общей картины одна раздача не выбивается (мало ли могло просто повезти, почему бы и нет). В результате слабый игрок дольше держится на плаву и дольше приносит рейк.
    5. Есть ещё другой вспомогательный способ помощи слабому игроку - огромное количество курсов, литературы, обучающих видео. Спонсируется это естественно румами, и естественно не из побуждений поднятия уровня мыслительных способностей игрока. Способности конечно развиваются, но это не цель, а средство, цель в данном случае опять же в том, чтобы игрок, повысив свою состоятельность, мог дольше бодаться с другими игроками и дольше приносить рейк. Заодно снижается необходимость слишком часто вмешиваться в процесс игры, помогая слабым и вызывая подозрения остальных игроков.
    6. На маленьких лимитах, там где большинство слабых игроков, провокационных ситуаций, перерастающих в переезды, значительно больше, чем на высоких лимитах, где играют более продвинутые игроки. На высоких лимитах народ не профукает бездарно деньги и не покинет рум, поэтому здесь вмешательство рума минимально, мне во всяком случае гораздо легче было играть на средних уровнях среди более продвинутых соперников, чем на малых лимитах с новичками.

    Всё это моё имхо, не претендующее на истину в последней инстанции, но если бы я был управляющим покеррума, то для получения устойчивой прибыли действовал бы именно в таком русле.

    P.S.
    то, что программа ГСЧ тестировалась кем-то и получила какой-то там сертификат, меня ни в чем не убеждает, скорее наоборот (нет дыма без огня). И не факт, что используется именно тот код, который тестировался. Пломбу же на нём никто не ставил :)
     
  18. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    cresta
    да я вот думаю, набрать тысячи 4-5 рук, и проверить ГСЧ, только вот как) там все не так просто как кажется. Можно конечно отталкиваться от среднего выигрыша, но имхо это может быть и реальностью я сам ( как новичок) могу сказать что на таком уровне пытаешься не выиграть много, а добиться стабильной игры.
     
  19. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    4-5 тысяч маловато. Применительно к тебе этого может и достаточно, но для игры против реальных оппонентов, нужно иметь статистику и по оппонентам, а она важнее, чем твоя статистика. Учитывая количество соперников, чтобы по большинству из них иметь какой-то минимум достоверной информации, придётся сыграть не один десяток тысяч раздач.
    Поставь PokerTracker (он триальный) и набирай статистику. Параметров, которые можно анализировать - море, главное не утонуть в них :) Сделай отдельный раздел, чистую хрюшу, только с клиентом, избегай использования на этом разделе запрещённых программ (в сети есть информация, что клиенты мониторят процессы, впоследствии могут быть проблемы с выводом денег из рума). Полноценную статистику можно набрать только в играх на деньги, на фантики совсем другая игра, никакой полезной информации из статов не получишь. Давай свои реальные данные руму, если будет малейшие подозрения, что регистрировался не на своё имя, или имеешь два аккаунта, или указал другие неточные данные - денег вывести не удастся. Причём, пока будешь вбухивать деньги - будут молчать, а если захочешь забрать - тут и начнутся проблемы. Если будешь пользоваться вебманями, кошелёк не теряй, тот кошелёк, который указал в первый раз - он же и последний, сменить канал ввода-вывода вариантов практически ноль. Мне во всяком случае поменять номер кошелька в руме не удалось.
    В общем, игра в руме - это работа, которая не терпит невнимательности и расхлябанности.
     
  20. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Тож делаю для покерстарса, граблю с экрана, и анализирую массив пикселей , все вроде бы работает
    но когда все это в цикле (количество итераций переваливает за 50-100) то функция bitblt спустя какое то
    время возвращает битмап с масивом черных пикселей. Может кто знает почему??
    Или как еще можно подругому добраться до массива пикселей с помощью АпиФнукций, чет пытался но так
    и не получилось, пришлось Делфийские использовать??????
    По поводу ГСЧ согласен, возможно вовсе этот ГСЧ не ГСЧ. Тож долгое время на покерстарс и фуллтилт играл.

    Function TRD:bool;
    begin
    EventStop:=false;
    WaitForSingleObject(hEventStart,INFINITE);
    bmp:=TBitmap.Create;
    bmp.Height:=13;
    bmp.Width:=90;
    DC:=GetDCEx(0,0,DCX_WINDOW);
    repeat
    bitblt(bmp.Canvas.Handle,0,0,90,11,DC,249,326, SRCCOPY);
    Form2.Edit16.Text:=floatToStr(RATE(90,11,bmp.ScanLine[11])/100);
    until EventStop=true;
    ReleaseDC(0, DC);
    end;
    Или может контекст устройства постоянно меняется? Каждый раз надо освобождать и новый получать?
    Хотя пробывал в цикле ставить все равно тож самое!

    Если в цикле ставить bmp.Create и bmp.Destroy то работает но не долго переполнение идет какое-то?
    Помгите плз!!!, застопорился на одном месте