Кто нибуть писал покерный бот или хотя бы пробывал? Поделитесь как лучше считывать инфу с рума???? Или любые размышления сюда пишите!!!!!!!!
недавно делал для покерстарса, только там qt прикручен с ssh. поэтому самое очевидное - реверс вверх от recv\send. вообщем тот кому это надо было - пропал, а я - забил. и кстати археология тут не поможет.
писал для class1casino, полностью был отреверсен клиент и изучен протокол. sn0w прав, не костыльный метод это реверсить протокол и писать эмулятор. а тыкать по кнопочкам не наше)
Это ещё вопрос, что лучше. Протоколы меняются, а вот внешний вид стола нет. Так что, имхо, лучше делать распознавалку стола и кликер.
WIN32 клиенты очень часто обновляются, в связи с чем у меня есть предположение, что протокол тоже регулярно меняется, чтобы противостоять попыткам несанкционированного перехвата информации. После обновлений зачастую весь спектр сопутствующих программ (разрешённых румом , как то: калькуляторы, сборщики статистики) тоже дружно обновляется. Можно предположить, что это реакция на изменившийся протокол. В связи с чем есть сомнения в целесообразности реверса протокола. Его придется реверсить заново после каждого обновления. Я делал иначе: читал информацию со стола путем распознавания карт. Все тонкости протокола оставались за бортом. Конечно, есть минус - стол должен быть на виду не перекрыт другими окнами. Тыкать по кнопочкам думаю, что проще, чем постоянно переделывать программу. Имхо.
Да не обезательно перехватывать send/recv, там из логов можно всю инфу получить. Можно перехватить WriteFile
если память не изменяет, PrintWindow отсылает окну WM_PRINT и получает в ответ содержимое device context'а. Маловероятно, что WM_PRINTв клиенте пущена на самотёк (DefWindowProc). Во всяком случае, я бы сам обрабатывал WM_PRINT и возвращал какую-нибудь хрень (на месте клиента).
asd В смысле окна, скрытые под другими? Я делал (для простоты) столы определенного размера (чтобы влезало 4 стола на экран), ставил их топмост, картинки распознавал, ставки, ходы и пр. данные розыгрыша руки грабил из текстового окошка путем распознавания текста с экрана (т.к. текстовое окошко - нестандартный контрол и на WM_GETTEXT, GetWindowText etc он не реагировал). Это для покерстарс. Кстати, так делают многие калькуляторы: меняют шрифт в текстовом окошке на моноширинный (обычно это System) и распознование с экрана. На фултилте распознавание карт тоже работало на ура, но там надо было ходы анализировать как и карты, со стола и я забил на это. В конечном итоге я пришёл к выводу, что какой бы ты бот не построил, у него нет шансов против "ГСЧ" рума. Рум тебя обует с любым ботом. После просмотра большого количества графов разных игроков (на PokerStrategy) ясно видно, что жизнь подавляющего большинства игроков состоит из четко выраженных чередующихся с определенным периодом полос апстриков и даунстриков. В конечном итоге народ тупо гоняет бабло от одних игроков к другим и обратно, а рейк потихоньку капает. Возможно, что с ботом можно будет просто долго и нудно сидеть в руме, не пролетая окончательно, и делать бабки на рейкбэке, но имхо, время, затраченное на получение рейкбэка, можно потратить и с большей пользой. Поэтому я и забил на эти боты. P.S. Как вариант заработка - делать бота на продажу и впаривать новичкам/лохам за хорошую копейку
вполне себе четкие. Незначительные флуктуации имеются, но общей картины не нарушают. HoldemManager показывал (у меня) пилу с периодом около 10тыс. рук. Ярко выраженная пила с минимумом возле 30-50 баксов и максимумом возле 500-550. После прохождения пятого пика я понял, что это будет бесконечно, и вывел деньги.
cresta а как можно статистику собрать? мне даже интересно стало. Как раз пару дней назад, сел поиграть в покер.
софта такого полно: наиболее известны holdem manager и pokertracker. Устанавливаешь и собираешь себе на здоровье Будет всевозможная статистика игр, в которых ты принял участие. Каждый рум высылает тебе handhistory для всех рук, что ты сыграл, и программа их анализирует, выводя тучу всякой информации как касательно тебя, так и по соперникам, встретившимся на тяжком пути пополнения кассы рума Можно поискать в сети базы других игроков, но это не приветствуется румами и их аффилиатами. Приравнивается к использованию запрещённых программ. P.S. Вдобавок ко всему они выводят прямо на игровой стол статистику по каждому сопернику, если она имеется в базе
spa поиграй какой-то продолжительный отрезок времени на покерстарс, а потом переключись на фуллтилт. Сразу бросается в глаза разница в выкладываемых дилером картах, точнее в их склонности к образованию тех или иных комбинаций. Иначе говоря текстура флопа. На покерстарс в большом проценте случаев структура флопа жутко дровяная, провоцирующая дикие зарубы и переезды, а на тилте наоборот, сухая. Но ведь и там и там ГСЧ. Казалось бы какая разница... Если рассуждать, отрешась от мании преследования, то я представляю себе общую картину так: 1. Рум организовывает всю канитель для получения прибыли. Прибыль исключительно идёт с рейка. 2. Чем больше игроков, тем больше рейк, следовательно, необходимо поддерживать определенный минимум количества играющих, который обеспечит доходность рума. 3. Игроки разные по своему уровню, по своим целям и т.д. Если пустить дело на самотёк, то сильные игроки будут в подавляющем большинстве случаев доминировать, слабые будут регулярно проигрывать (с небольшими вариациями). Слабый игрок, проиграв какую-то определенную сумму (критическую для него), сделает для себя выводы и просто покинет рум, лишая его возможности стричь рейк. А слабых игроков там большинство, как ни крути. 4. Что может сделать рум, чтобы большая часть рыбы не разбежалась, (поняв свою несостоятельность) унося с собой потенциальный рейк? Поставив себя на место рума, я бы периодически вмешивался в игру, помогая нужной картой слабому игроку. Чтобы он не терял веру в удачу и продолжал играть. Посадил бы его на иглу надежды и время от времени выдавал бы порцию удачи. Чтобы помочь рыбе, достаточно один раз на 20-30 раздач подсобить. Из общей картины одна раздача не выбивается (мало ли могло просто повезти, почему бы и нет). В результате слабый игрок дольше держится на плаву и дольше приносит рейк. 5. Есть ещё другой вспомогательный способ помощи слабому игроку - огромное количество курсов, литературы, обучающих видео. Спонсируется это естественно румами, и естественно не из побуждений поднятия уровня мыслительных способностей игрока. Способности конечно развиваются, но это не цель, а средство, цель в данном случае опять же в том, чтобы игрок, повысив свою состоятельность, мог дольше бодаться с другими игроками и дольше приносить рейк. Заодно снижается необходимость слишком часто вмешиваться в процесс игры, помогая слабым и вызывая подозрения остальных игроков. 6. На маленьких лимитах, там где большинство слабых игроков, провокационных ситуаций, перерастающих в переезды, значительно больше, чем на высоких лимитах, где играют более продвинутые игроки. На высоких лимитах народ не профукает бездарно деньги и не покинет рум, поэтому здесь вмешательство рума минимально, мне во всяком случае гораздо легче было играть на средних уровнях среди более продвинутых соперников, чем на малых лимитах с новичками. Всё это моё имхо, не претендующее на истину в последней инстанции, но если бы я был управляющим покеррума, то для получения устойчивой прибыли действовал бы именно в таком русле. P.S. то, что программа ГСЧ тестировалась кем-то и получила какой-то там сертификат, меня ни в чем не убеждает, скорее наоборот (нет дыма без огня). И не факт, что используется именно тот код, который тестировался. Пломбу же на нём никто не ставил
cresta да я вот думаю, набрать тысячи 4-5 рук, и проверить ГСЧ, только вот как) там все не так просто как кажется. Можно конечно отталкиваться от среднего выигрыша, но имхо это может быть и реальностью я сам ( как новичок) могу сказать что на таком уровне пытаешься не выиграть много, а добиться стабильной игры.
4-5 тысяч маловато. Применительно к тебе этого может и достаточно, но для игры против реальных оппонентов, нужно иметь статистику и по оппонентам, а она важнее, чем твоя статистика. Учитывая количество соперников, чтобы по большинству из них иметь какой-то минимум достоверной информации, придётся сыграть не один десяток тысяч раздач. Поставь PokerTracker (он триальный) и набирай статистику. Параметров, которые можно анализировать - море, главное не утонуть в них Сделай отдельный раздел, чистую хрюшу, только с клиентом, избегай использования на этом разделе запрещённых программ (в сети есть информация, что клиенты мониторят процессы, впоследствии могут быть проблемы с выводом денег из рума). Полноценную статистику можно набрать только в играх на деньги, на фантики совсем другая игра, никакой полезной информации из статов не получишь. Давай свои реальные данные руму, если будет малейшие подозрения, что регистрировался не на своё имя, или имеешь два аккаунта, или указал другие неточные данные - денег вывести не удастся. Причём, пока будешь вбухивать деньги - будут молчать, а если захочешь забрать - тут и начнутся проблемы. Если будешь пользоваться вебманями, кошелёк не теряй, тот кошелёк, который указал в первый раз - он же и последний, сменить канал ввода-вывода вариантов практически ноль. Мне во всяком случае поменять номер кошелька в руме не удалось. В общем, игра в руме - это работа, которая не терпит невнимательности и расхлябанности.
Тож делаю для покерстарса, граблю с экрана, и анализирую массив пикселей , все вроде бы работает но когда все это в цикле (количество итераций переваливает за 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 то работает но не долго переполнение идет какое-то? Помгите плз!!!, застопорился на одном месте