Jump to content
chrispbr

Ajuda criação de software para o PokerStars

Recommended Posts

Fala galera tudo certo? Primeiramente algumas informações sobre mim e algumas considerações:

 

Estou ciente das regras do fórum sobre, bots e afins, porém não se trata disso...

 

Sou jogador profissional de poker e nem ousaria arriscar minha conta ser banida por uso de softwares não autorizados, afinal esse é meu ganha pão...

 

Na rotina de um jogador profissional usamos várias ferramentas (softwares) de apoio, todas elas autorizadas pelo PokerStars, exemplos:

 

Holdem Manager

Poker Tracker

ICMIZER

Stackandtile

Tablet Optimizer

E várias outras do gênero

 

Porém a maioria dessas ferramentas são pagas e em dólar, algumas como o Holdem Manager vc paga a licença uma única vez, outras o pagamento é mensal como o Stackandtile por exemplo e outras semestral ou anual...

 

Hoje em dia para um jogador profissional e praticamente indispensável o uso dessas ferramentas e o poker se assemelha muito a um mercado financeiro, investimos X em torneios, softwares, treinamentos para obter um retorno y...

 

Com o intuito de minimizar meus gastos com softwares, nos últimos 2 anos vim criando minhas versões de softwares em autoit, no final do ano passado o PokerStars até me questionou a procedência dos softwares que eu estava usando, expliquei pra eles a situação, enviei os códigos fontes dos programas e depois de 3 meses de espera eles me autorizaram a continuar desenvolvendo, caso seja necessário até posso postar o e-mail aqui...

 

Desculpem por essa longa explicação, mas quero deixar bem claro que não se trata de criar um software que tire vantagem de alguma forma, mas apenas criar algo semelhante ao que tem no mercado...

 

Bom vamos ao que interessa, como falei o Stackandtile eu pagava mensalmente, esse software era responsável por um gerenciamento de telas, como jogamos muitas telas(mais de 12 telas ao mesmo tempo) sem este software fica mais difícil gerenciar, o que ele faz, empilha todas as telas uma em cima da outra e só quando a ação chega até nós é que ele movimenta está tela para o lado para que possamos jogar...

 

Hoje depois de bater muita a cabeça já uso a minha versão desse software e modéstia parte acho que minha versão é até melhor, rsrs

 

Agora a parte que preciso da luz de vcs, uma dica de como posso conseguir o que quero...

 

Eu uso o Tableoptimizer,é a função dele mais importante para mim é que ele converte os valores que estão aparecendo na tela de Fichas para blinds, ou seja se eu tenho 1000 fichas e os blind está 100 eu tenho 10 blinds, então isso facilita muito ele já mostrar em blinds do que eu ter que calcular mentalmente a cada ação...

 

O que eu gostaria de fazer é isso poder converter os valores que aparecem na tela de fichas para blinds, porém com aquela ferramenta de info ela detecta como um único frame, não detecta label, botões etc, dei uma pesquisada e vi que o PokerStars usa a plataforma "chromium embedded framework" alguma idéia de como posso ter acesso a esses labels e botões para conversão?

 

Agradeço desde já a ajuda e desculpe se fui muito prolixo.

Share this post


Link to post
Share on other sites

bem...

 

Automação é algo muito legal.

Embora seu caso seja realmente bastante atipico, despertou minha curiosidade.

 

Não tenho nenhuma ideia, ainda, de que dica ou informação lhe dar, mesmo que voce tenha nos ofertado uma primeira explicacao muito boa, ainda tenho mais duvidas do que opcoes de solucao.

 

Mas tenho um questionamento:

 

*voce esta tentando automatizar um software web graficamente? coletando informacoes de botoes, combos, etc?

 

Por acaso esse site nao teria uma API?

Share this post


Link to post
Share on other sites

pensei a mesma coisa, imagino que seja "jogado" pelo navegador.. então uma api do chrome talvez seria a solução.

 

nos de mais informações.

Share this post


Link to post
Share on other sites

bem...

 

Automação é algo muito legal.

Embora seu caso seja realmente bastante atipico, despertou minha curiosidade.

 

Não tenho nenhuma ideia, ainda, de que dica ou informação lhe dar, mesmo que voce tenha nos ofertado uma primeira explicacao muito boa, ainda tenho mais duvidas do que opcoes de solucao.

 

Mas tenho um questionamento:

 

*voce esta tentando automatizar um software web graficamente? coletando informacoes de botoes, combos, etc?

 

Por acaso esse site nao teria uma API?

 

Muito agradecido por sua resposta e fico feliz que consegui passar que não sou um "Gamer", que não se trata de fazer um bot e sim criar um software de auxilo para o Pokerstars...

 

Vou passa as informações que tenho e tentar ilustrar a situação....

 

Este foi o e-mail que recebi do pokerstars, apos minha conta passar por uma avaliação de 3 meses e eles acabarem autorizando que eu continuasse desenvolvendo, desculpe minha ignorância, não sei muito bem o que é API, mas como pode ver pelo email eles não fornecem esta facilidade por motivo de segurança.

 

Email%20Ps.png

 

Agora vou mostrar o que o programa Table Optimizer faz....

 

Na imagem abaixo vemos em azul todos os valores representados por fichas que é o padrao

 

ps%20fichas.png

 

Na próxima imagem vemos todos os valores representados por blinds que é a conversão que o Table Optimizer faz

 

ps%20blinds.png

 

Parece uma coisa simples, mas vou tentar ilustrar para vcs, Blind a grosso modo é a aposta minima inicial que um jogador pode fazer, então imaginemos que o valor da blind esta $1.800 e o Jogador X Tem $24.786 quantos blinds ele tem? $24.786 / $1.800 = ele tem 13.7 Blinds, se ele faz uma aposta de $4.500, quantos blinds ele apostou? $4.500 / $1.800 = ele apostou 2.5 blinds, agora imagine que vc esta jogando mais de 10 telas ao mesmo tempo e tem que fazer essa calculo simples a cada ação em uma fração se segundos, é possível e com o tempo vc pega a pratica, mas a conversão traz precisão e rapidez.

 

Agora o que eu sei sobre o software do pokerstars, dando uma pesquisada eu encontrei esse conteúdo

 

Originalmente, o software da PokerStars foi escrito, usando o C ++ puro, mas agora ele usa o Chromium Embedded Framework (CEF), que é uma estrutura de código aberto para incorporar um mecanismo de navegador da Web baseado no núcleo do Chromium . É uma maneira conveniente de adicionar o controle do navegador da Web e implementar uma GUI de layout baseada em HTML5 em uma aplicação de desktop ou fornecer recursos de navegador da Web para uma aplicação ou jogo de software e fornece aos desenvolvedores da infraestrutura que precisam adicionar renderização HTML e JavaScript a um Projeto C ++. Ele também vem com ligações para C, C ++, Delphi, Go, Java, .NET / Mono e Python e é executado no Linux, Mac OS X e Windows.

 

Pelo que entendi ele não funciona em um navegador, ele cria seu proprio navegador, como ele vem com essas ligações para C, C++ imaginei que com autoit eu também conseguiria acesso as informações que preciso

 

Quero salientar que não quero que ninguém faça a aplicação para min, gostaria de apenas uma luz de como acessar esses dados e se ha alguma forma de integração com o Chromium Embedded Framework

 

Agradeço todas as respostas.

Share this post


Link to post
Share on other sites

bem...

 

Automação é algo muito legal.

Embora seu caso seja realmente bastante atipico, despertou minha curiosidade.

 

Não tenho nenhuma ideia, ainda, de que dica ou informação lhe dar, mesmo que voce tenha nos ofertado uma primeira explicacao muito boa, ainda tenho mais duvidas do que opcoes de solucao.

 

Mas tenho um questionamento:

 

*voce esta tentando automatizar um software web graficamente? coletando informacoes de botoes, combos, etc?

 

Por acaso esse site nao teria uma API?

 

Desculpe Luigi, acabei não respondendo sua pergunta

 

"voce esta tentando automatizar um software web graficamente? coletando informacoes de botoes, combos, etc"

 

O Table Optimizer é um software que eu uso e pago por esse uso que converte automaticamente os valores de fichas para blinds

Eu quero conseguir fazer a mesma conversão, podendo assim deixar de utilizar o Table Optimizer e usar o meu software, consegui fazer isso com o stackantile hoje uso minha versão escrita totalmente em autoit, para fazer isso enfrentei uma serie de limitações e tive que automatizar o movimento das telas baseado em comparação de pixels, uso uma função que criei em cima de alguns retalhos de codigos:

 

Win Get Pixel Color = _WGPC(posição x, Posição y, Handle da Janela, 0 = Reverente a WinArea ou 1 = Referente a ClientArea) ele retorna o pixel mesmo que a janela esteja sobreposta, repare pelo codigo que sou bem amador no assunto, rsrs

#include <WinAPI.au3>


Func _WGPC($x, $y, $handle, $cw = 0)

    If $cw = 1 Then

    $clientArea = WinGetClientSize(HWnd(String($handle)))
    $winsize = WinGetPos(HWnd(String($handle)))

    $border = ($winsize[2] - $clientArea[0]) / 2
    $titleBar = ($winsize[3] - $clientArea[1] - $border)

    $x = $x + $border
    $y = $y + $titleBar

    EndIf

    Local $hDC
    Local $iColor
    Local $sColor

    $hDC = _WinAPI_GetWindowDC($handle)
    $iColor = DllCall("gdi32.dll", "int", "GetPixel", "int", $hDC, "int", $x, "int", $y)
    $sColor = Hex($iColor[0], 6)
    _WinAPI_ReleaseDC($handle, $hDC)

    $color = Hex("0x" & StringRight($sColor, 2) & StringMid($sColor, 3, 2) & StringLeft($sColor, 2))

    Return "0x" & StringRight($color, 6)

EndFunc
Edited by chrispbr

Share this post


Link to post
Share on other sites

Passei o dia quebrando a cabeça, e acabei pensando em uma solução que talvez seja mais fácil de vcs me ajudarem...

 

no lugar de eu converter as fichas como faz o Table optimizer eu criar popups com as Fichas convertidas veja o exemplo da imagem abaixo

 

popup.png

 

Para isso eu teria que extrair os valores enviar para uma variável, converter essa variável e depois passar essa variável para o popup, pois bem nesse chat do lado inferior esquerdo correm todas as informações sobre as ações tomadas e a quantidade de fichas de cada jogador...

 

eu consigo identificar o handle, id, instance do chat "[CLASS:PokerStarsChatClass; INSTANCE:1]", porem não consigo extrair o conteudo...

 

Tentei o

$sText = ControlGetText(WinGetTitle("[CLASS:PokerStarsTableFrameClass]"), "", "[CLASS:PokerStarsChatClass; INSTANCE:1]")

mas não me retorna nada

 

tive alguns problemas com "WinMove" por exemplo e consegui contornar com "_WinAPI_SetWindowPos", vcs conhecem algo em WinAPI que possa retornar o texto do controle? Se eu conseguir "Ler" esse chat dai fica simples, converto e passo para popup e problema resolvido.

 

Obrigado novamente pela atenção de todos.

Share this post


Link to post
Share on other sites

Poxa, é uma pena...

Q. Do you provide an API to developers to pass game state data to third party tools?

A. Unfortunately not. Extracting relevant information is a programming challenge developers need to overcome independently

 

O PDF de apoio é extenso, vou ler com calma, depois retorno.

https://www.pokerstars.com/assets/common/downloads/tpt-reference-guide.pdf

Share this post


Link to post
Share on other sites

Poxa, é uma pena...

Q. Do you provide an API to developers to pass game state data to third party tools?

A. Unfortunately not. Extracting relevant information is a programming challenge developers need to overcome independently

 

O PDF de apoio é extenso, vou ler com calma, depois retorno.

https://www.pokerstars.com/assets/common/downloads/tpt-reference-guide.pdf

 

Vlw Luigi obrigado pela atenção.

Share this post


Link to post
Share on other sites

Fala Pessoal, consegui resolver meu problema com reconhecimento de caracteres, eu faço o reconhecimento de cada numero comparo com um array que serve como mapa de caracteres e a função me retorna o valor em fichas, dai converto as fichas para blinds e mando para um popup, como meu nivel de programação e bem baixo meu código ficou bem simples, se tiverem sugestão para melhorar agradeço, segue o código.

 

agradeço a todos que dedicaram seu tempo para me responder

#include <WinAPIGdi.au3>
#include <Array.au3>
#include <File.au3>

Local $chartsArray
_FileReadToArray(@ScriptDir & "\Charts\Chart", $chartsArray, $FRTA_NOCOUNT, ",")


Func Charts( $x, $y, $w, $h, $handle, $fontColor )

    $hDC = _WinAPI_GetWindowDC($handle)
    Local $nc = 0, $chart
    Local $baseChartarray[0]
    Local $chartArray = $baseChartarray
    Local $result = ""

    For $i = $x To $w

        $yy = $y

        For $pt = 1 To $h - $y

            $px = _WinAPI_GetPixel($hDC, $x, $yy)
            If $px = $fontColor Then $nc +=1
            $yy +=1

        Next

        If $nc = 0 Then

            If $chart <> "" Then

                _ArrayAdd($chartArray, $chart)
                $chart = ""

            EndIf

        ElseIf $nc > 0 Then

            $chart = $chart & $nc & "."
            $nc = 0

        EndIf

        $x +=1

    Next

    For $a = 0 To UBound($chartArray) - 1

        $idx = _ArraySearch($chartsArray, $chartArray[$a], 0, 0, 0, 0, 1, 1)
        If $idx >= 0 Then

            $result = $result & $chartsArray[$idx][0]

        EndIf

    Next

    Return $result

EndFunc
  • Like 1

Share this post


Link to post
Share on other sites

@Chrispbr, para um iniciante, você tem um código limpo e claro, parabéns.

 

Se aceita uma sugestão, veja Best Practices para nomear as variáveis.

No começo eu achava bobagem, mas depois que o código passa de uma certa quantidade de linhas, fica difícil lembrar o que cada variável é, posso dizer que seguindo essas regrinhas me ajudou muito.

 

Um outro detalhe que é muito particular, mas vou compartilhar, eu adoro o recurso do Scite de você clicar 2x na variável e ele 'iluminar' as outras variáveis iguais que estão próximas, isso me ajuda muito!

Mas se a variável tem somente uma letra, esse recurso não funciona.

 

Então em vez de usar um:

For $i = 0 To 2

Eu uso

For $ii = 0 To 2

Como eu disse, é bobo... mas me ajuda até na hora de localizar os outros $ii que estão próximos.

 

Outra coisa positiva, foi sua atitude, mesmo ninguém tendo publicado um código, você compartilhou sua solução, isso é o ideal, compartilhar conhecimento.

Share this post


Link to post
Share on other sites

@Chrispbr, para um iniciante, você tem um código limpo e claro, parabéns.

 

Se aceita uma sugestão, veja Best Practices para nomear as variáveis.

No começo eu achava bobagem, mas depois que o código passa de uma certa quantidade de linhas, fica difícil lembrar o que cada variável é, posso dizer que seguindo essas regrinhas me ajudou muito.

 

Um outro detalhe que é muito particular, mas vou compartilhar, eu adoro o recurso do Scite de você clicar 2x na variável e ele 'iluminar' as outras variáveis iguais que estão próximas, isso me ajuda muito!

Mas se a variável tem somente uma letra, esse recurso não funciona.

 

Então em vez de usar um:

For $i = 0 To 2

Eu uso

For $ii = 0 To 2

Como eu disse, é bobo... mas me ajuda até na hora de localizar os outros $ii que estão próximos.

 

Outra coisa positiva, foi sua atitude, mesmo ninguém tendo publicado um código, você compartilhou sua solução, isso é o ideal, compartilhar conhecimento.

Valeu a dica Luigi, vou seguir seus conselhos, tenho varias pequenas funções em relação a pixels e arrays que fui adaptando para minhas necessidades, com tempo vou postando aqui minhas soluções, vai que serve pra alguém também, rsrs, vlw, abs.

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×