cryptotwinsbr / bomberland-bot

This is a free python bot program that crosses you to farm with auto click in space crypto NFT game, having fun :) Creator: Marlon Zanardi
169 stars 62 forks source link

Reiniciar quando a tela trava. #26

Closed diegomustafamarino closed 2 years ago

diegomustafamarino commented 2 years ago

O bot está perfeito, mas para funcionamento 100% AFK, só falta 1 função: Reiniciar o bot quando a tela trava, porque as vezes ele trava no meio da partida e não volta nunca mais.

diegomustafamarino commented 2 years ago

Eu pensei em uma Daemon thread que captura imagem a cada x minutos e compara se a tela continua igual, mas não sei se existe opção melhor e mais leve, alguma sugestão?

MadsonSousa commented 2 years ago

Já aconteceu comigo tbm. das vezes que aconteceu eu percebi que a tela do jogo fica preta travada, uma sugestão seria criar um print dessa tela preta e de tempos em tempos verificar se está preta, caso sim inicia uma contagem de 60 segundos e depois de 60 segundos verificar se ainda está preta. caso sim dar um refresh na tela e sempre que não estiver preta zerar a contagem. apenas uma sugestão, não sei se seria a melhor opção. Outra opção seria fazer uma verificação se o bot está muito tempo só retornando "nenhuma ação encontrada" atualizar a pagina.

diegomustafamarino commented 2 years ago

Já aconteceu comigo tbm. das vezes que aconteceu eu percebi que a tela do jogo fica preta travada, uma sugestão seria criar um print dessa tela preta e de tempos em tempos verificar se está preta, caso sim inicia uma contagem de 60 segundos e depois de 60 segundos verificar se ainda está preta. caso sim dar um refresh na tela e sempre que não estiver preta zerar a contagem. apenas uma sugestão, não sei se seria a melhor opção. Outra opção seria fazer uma verificação se o bot está muito tempo só retornando "nenhuma ação encontrada" atualizar a pagina.

Gostei da segunda opção, da pra gerar uma contagem de quantas vezes ele fez isso seguidas, e quando executar uma ação, zerar a contagem, mas se ele atingir um limite de tentativas nao sucedidas, ele executar a funcao refresh page. Acho que assim fica mais leve do que executar em daemon.

diegomustafamarino commented 2 years ago

Já aconteceu comigo tbm. das vezes que aconteceu eu percebi que a tela do jogo fica preta travada, uma sugestão seria criar um print dessa tela preta e de tempos em tempos verificar se está preta, caso sim inicia uma contagem de 60 segundos e depois de 60 segundos verificar se ainda está preta. caso sim dar um refresh na tela e sempre que não estiver preta zerar a contagem. apenas uma sugestão, não sei se seria a melhor opção. Outra opção seria fazer uma verificação se o bot está muito tempo só retornando "nenhuma ação encontrada" atualizar a pagina.

Adiciona no código:

cont_noaction = 1

embaixo do cont_boss

na função def_main(), adiciona:

global cont_noaction

e lá embaixo, na mesma função, procura por essa linha:

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')

e substitui por isso:

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')
        cont_noaction = cont_noaction + 1

    if action_found == True:
        cont_noaction = 1

    if cont_noaction > 100:
        refreshPage()

Coloquei para ele usar o refresh acima de 99x (cont_noaction > 100), não sei se é muito ou se é pouco, vou testar agora. Testa ai tbm, veja se acha um intervalo melhor.

Não testei ainda, vou testar agora.

MadsonSousa commented 2 years ago

Já aconteceu comigo tbm. das vezes que aconteceu eu percebi que a tela do jogo fica preta travada, uma sugestão seria criar um print dessa tela preta e de tempos em tempos verificar se está preta, caso sim inicia uma contagem de 60 segundos e depois de 60 segundos verificar se ainda está preta. caso sim dar um refresh na tela e sempre que não estiver preta zerar a contagem. apenas uma sugestão, não sei se seria a melhor opção. Outra opção seria fazer uma verificação se o bot está muito tempo só retornando "nenhuma ação encontrada" atualizar a pagina.

Adiciona no código:

cont_noaction = 1

embaixo do cont_boss

na função def_main(), adiciona:

global cont_noaction

e lá embaixo, na mesma função, procura por essa linha:

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')

e substitui por isso:

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')
        cont_noaction = cont_noaction + 1

    if action_found == True:
        cont_noaction = 1

    if cont_noaction > 100
        refreshPage()

Coloquei para ele usar o refresh acima de 99x (cont_noaction > 100), não sei se é muito ou se é pouco, vou testar agora. Testa ai tbm, veja se acha um intervalo melhor.

Não testei ainda, vou testar agora.

Parece ser uma boa implementação. mais tarde quando sair do serviço irei testar tbm.

diegomustafamarino commented 2 years ago

Já aconteceu comigo tbm. das vezes que aconteceu eu percebi que a tela do jogo fica preta travada, uma sugestão seria criar um print dessa tela preta e de tempos em tempos verificar se está preta, caso sim inicia uma contagem de 60 segundos e depois de 60 segundos verificar se ainda está preta. caso sim dar um refresh na tela e sempre que não estiver preta zerar a contagem. apenas uma sugestão, não sei se seria a melhor opção. Outra opção seria fazer uma verificação se o bot está muito tempo só retornando "nenhuma ação encontrada" atualizar a pagina.

Adiciona no código: cont_noaction = 1

embaixo do cont_boss

na função def_main(), adiciona: global cont_noaction e lá embaixo, na mesma função, procura por essa linha:

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')

e substitui por isso:

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')
        cont_noaction = cont_noaction + 1

    if action_found == True:
        cont_noaction = 1

    if cont_noaction > 100
        refreshPage()

Coloquei para ele usar o refresh acima de 99x (cont_noaction > 100), não sei se é muito ou se é pouco, vou testar agora. Testa ai tbm, veja se acha um intervalo melhor. Não testei ainda, vou testar agora.

Parece ser uma boa implementação. mais tarde quando sair do serviço irei testar tbm.

ok. Eu editei, inseri um : que estava faltando, note isso.

diegomustafamarino commented 2 years ago

deu errado, vou ver o porque.

ceiferking commented 2 years ago

Já aconteceu comigo tbm. das vezes que aconteceu eu percebi que a tela do jogo fica preta travada, uma sugestão seria criar um print dessa tela preta e de tempos em tempos verificar se está preta, caso sim inicia uma contagem de 60 segundos e depois de 60 segundos verificar se ainda está preta. caso sim dar um refresh na tela e sempre que não estiver preta zerar a contagem. apenas uma sugestão, não sei se seria a melhor opção. Outra opção seria fazer uma verificação se o bot está muito tempo só retornando "nenhuma ação encontrada" atualizar a pagina.

Adiciona no código: cont_noaction = 1

embaixo do cont_boss

na função def_main(), adiciona: global cont_noaction e lá embaixo, na mesma função, procura por essa linha:

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')

e substitui por isso:

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')
        cont_noaction = cont_noaction + 1

    if action_found == True:
        cont_noaction = 1

    if cont_noaction > 100
        refreshPage()

Coloquei para ele usar o refresh acima de 99x (cont_noaction > 100), não sei se é muito ou se é pouco, vou testar agora. Testa ai tbm, veja se acha um intervalo melhor. Não testei ainda, vou testar agora.

Parece ser uma boa implementação. mais tarde quando sair do serviço irei testar tbm.

ok. Eu editei, inseri um : que estava faltando, note isso.

Já conseguirao dar 1 olhada na função de contagen de boss? aparentem,ente nao esta adicionando +1 quando clica em corfirm estou tentando corrigir esta parte da função do bot se alguem conseguir ai avisa. qualquer coisa q eu altere no codigo faz ele parar de funcionar inclusive essas alterações q vcs colocarao n importa se estiver correto o codigo se inutiliza sempre q ocorre qualquer alteração

diegomustafamarino commented 2 years ago

talvez seja suas capturas de imagem, aqui nao tem esse problema, veja na issue resolvida que eu postei de ajustes, esta contando boss e inclusive trocando todas as naves na fase 9, 14 e 19. mas recomendo tirar da 19 pra frente a opção de resetar todas as naves, tem mais chance de vencer, lá eu explico td. No seu caso, o problema não é com o bot, mas sim com suas capturas.

diegomustafamarino commented 2 years ago

deu errado, vou ver o porque.

a função está assim def refreshPage(): pass

Procure no find por refreshPage e na função endFight ( ): substitua refreshPage() por pass

Volte na função refreshPage ( )

e substitua pass por: clickBtn(images['refresh-page']) time.sleep(4)

Vou testar agora, aviso se der certo é só fazer o que fiz acima e mais e ta resolvido.

ceiferking commented 2 years ago

negativo revis todas as imagens funciona corretamnete oq n funciona eh o add +1 da funçao kkk

diegomustafamarino commented 2 years ago

deu errado, vou ver o porque.

a função está assim def refreshPage(): pass

Procure no find por refreshPage e na função endFight ( ): substitua refreshPage() por pass

Volte na função refreshPage ( )

e substitua pass por: clickBtn(images['refresh-page']) time.sleep(4)

Vou testar agora, aviso se der certo é só fazer o que fiz acima e mais e ta resolvido.

Deu certo, e pra finalizar, insere no comando que criei:

    if cont_noaction > 100:
        refreshPage()

        a linha a seguir:
        cont_noaction = 1

Resultado:

    if cont_noaction > 100:
        refreshPage()
        cont_noaction = 1

Se puderem determinar um valor melhor para esse 100 através de teste, me avisem, mas até então está resolvido.

diegomustafamarino commented 2 years ago

negativo revis todas as imagens funciona corretamnete oq n funciona eh o add +1 da funçao kkk

o código não está com esse problema, vc precisa printar exatemente todas as imagens corretamente, e iniciar o bot no boss 1, sem mudar a tela, por que assim o bot vai conferir as imagens de victory, de Lose... Você inseriu todas as prints corretamente?

ceiferking commented 2 years ago

negativo revis todas as imagens funciona corretamnete oq n funciona eh o add +1 da funçao kkk

o código não está com esse problema, vc precisa printar exatemente todas as imagens corretamente, e iniciar o bot no boss 1, sem mudar a tela, por que assim o bot vai conferir as imagens de victory, de Lose... Você inseriu todas as prints corretamente?

sim ele identifica todas imagens corretamente clica de forma corretamente mas a funçao nunca adiciona na contagen de boss ja fiz esses testes ela ate msm me retorna o resultado da fução victory com o numero do boss tudo normal oq n cocorre eh adicionar na contagen. sera q msm assim o erro eh nas imagens?

diegomustafamarino commented 2 years ago

vc usa qual resolução ?

ceiferking commented 2 years ago

1600x900 todos os assets forao refeitos para o funcionamento adequado a minha resolução.

diegomustafamarino commented 2 years ago

1600x900 todos os assets forao refeitos para o funcionamento adequado a minha resolução.

certo...

vc modificou algo no comando ?

ceiferking commented 2 years ago

1600x900 todos os assets forao refeitos para o funcionamento adequado a minha resolução.

certo...

vc modificou algo no comando ?

negativo ocorre ate com o codigo limpo de fabrica.

diegomustafamarino commented 2 years ago

1600x900 todos os assets forao refeitos para o funcionamento adequado a minha resolução.

certo... vc modificou algo no comando ?

negativo ocorre ate com o codigo limpo de fabrica.

sim, tem problema na imagem, vc deve ter printado com zoom, ou com a aba de download aberto, algo que mudou o tamanho das suas imagens.

diegomustafamarino commented 2 years ago

veja se você instalou todos os módulos tbm

diegomustafamarino commented 2 years ago

spacecrypto-bot-main.zip

Se quiser meu código ta aí, tem algumas edições para maximizar o resultado nele. Lembrando que eu não recomendo ninguém baixar conteúdo desconhecido na net, e se arriscar passa no virus total. Mas todas as edições que eu fui fazendo, você encontra nas issues. estou fechando essa porque está resolvida.

ceiferking commented 2 years ago

1600x900 todos os assets forao refeitos para o funcionamento adequado a minha resolução.

certo... vc modificou algo no comando ?

negativo ocorre ate com o codigo limpo de fabrica.

sim, tem problema na imagem, vc deve ter printado com zoom, ou com a aba de download aberto, algo que mudou o tamanho das suas imagens.

achei o erro o arquivo de asstet OK estava com o nome de ok1 e o ok nomral era uma imagen de confir obrigado por me ajudar kkk esqueci de renomear esse asset kkk vlw man kk

ceiferking commented 2 years ago

veja se você instalou todos os módulos tbm

sabe me dizer pq qualquer tipo de alteraçao q eu faça inutiliza o codigo?

ceiferking commented 2 years ago

spacecrypto-bot-main.zip

Se quiser meu código ta aí, tem algumas edições para maximizar o resultado nele. Lembrando que eu não recomendo ninguém baixar conteúdo desconhecido na net, e se arriscar passa no virus total. Mas todas as edições que eu fui fazendo, você encontra nas issues. estou fechando essa porque está resolvida.

Pow vlw man vo testar aqui com as suas alteraçoes pra ver cm q vai.

diegomustafamarino commented 2 years ago

veja se você instalou todos os módulos tbm

sabe me dizer pq qualquer tipo de alteraçao q eu faça inutiliza o codigo?

Quem falou isso? É codigo aberto, eu mesmo fiz modificações, vc pode estar fazendo alteracoes que nao estao funcionando. Quando for fazer uma alteracao de codigo, é interessante você usar o mesmo padrao, quando faço isso costuma dar certo.

ceiferking commented 2 years ago

veja se você instalou todos os módulos tbm

sabe me dizer pq qualquer tipo de alteraçao q eu faça inutiliza o codigo?

Quem falou isso? É codigo aberto, eu mesmo fiz modificações, vc pode estar fazendo alteracoes que nao estao funcionando. Quando for fazer uma alteracao de codigo, é interessante você usar o mesmo padrao, quando faço isso costuma dar certo.

pse kkk so muito meme ainda mechendo com python mas obrigado por ajudar perguntei msm pra tentar saber oq to fazendo errado q faz isso acontecer. mas agr com seu codigo ta funiconando 100% ta o drin do drin man muito bom parabéns. e vlw pela dica tbm vou tentar fazer isso.

diegomustafamarino commented 2 years ago

veja se você instalou todos os módulos tbm

sabe me dizer pq qualquer tipo de alteraçao q eu faça inutiliza o codigo?

Quem falou isso? É codigo aberto, eu mesmo fiz modificações, vc pode estar fazendo alteracoes que nao estao funcionando. Quando for fazer uma alteracao de codigo, é interessante você usar o mesmo padrao, quando faço isso costuma dar certo.

pse kkk so muito meme ainda mechendo com python mas obrigado por ajudar perguntei msm pra tentar saber oq to fazendo errado q faz isso acontecer. mas agr com seu codigo ta funiconando 100% ta o drin do drin man muito bom parabéns. e vlw pela dica tbm vou tentar fazer isso.

Suave... Eu nao ativei a funcao do 100% lá. Talvez seja uma opção também. Testar com as maquinas só no 100%. Mas na realidade eu pensei que o bot pode ficar fazendo muita procura nas fases de nivel mais alto, entao por um lado é uma ideia boa, por outra n faz mt sentido, acho que vou deixar assim, mas se puder testar e me falar o resultado eu agradeço.

diegomustafamarino commented 2 years ago

veja se você instalou todos os módulos tbm

sabe me dizer pq qualquer tipo de alteraçao q eu faça inutiliza o codigo?

Quem falou isso? É codigo aberto, eu mesmo fiz modificações, vc pode estar fazendo alteracoes que nao estao funcionando. Quando for fazer uma alteracao de codigo, é interessante você usar o mesmo padrao, quando faço isso costuma dar certo.

pse kkk so muito meme ainda mechendo com python mas obrigado por ajudar perguntei msm pra tentar saber oq to fazendo errado q faz isso acontecer. mas agr com seu codigo ta funiconando 100% ta o drin do drin man muito bom parabéns. e vlw pela dica tbm vou tentar fazer isso.

Suave... Eu nao ativei a funcao do 100% lá. Talvez seja uma opção também. Testar com as maquinas só no 100%. Mas na realidade eu pensei que o bot pode ficar fazendo muita procura nas fases de nivel mais alto, entao por um lado é uma ideia boa, por outra n faz mt sentido, acho que vou deixar assim, mas se puder testar e me falar o resultado eu agradeço.

Tem uma lista de super raro antes dos comuns 100% kkk, ainda mais se estiverem carregando ate 100%

MadsonSousa commented 2 years ago

@Diglee147 abri um pull request com implementação que fiz, fiz com base em tempo, se o jogo ficar 5 min sem nenhuma ação ele da refresh na página. aqui para mim está funcionando bem até o momento, vamos ver se os cara irão aceitar as modificações.

diegomustafamarino commented 2 years ago

@Diglee147 abri um pull request com implementação que fiz, fiz com base em tempo, se o jogo ficar 5 min sem nenhuma ação ele da refresh na página. aqui para mim está funcionando bem até o momento, vamos ver se os cara irão aceitar as modificações.

Legal mano! Desse modo que fiz ficou bom, só recomendo colocar na imagem do refresh, um link de play.spacecrypto.io na barra de favoritos para garantir.... Mas ta tranquilao, eu olhei o log, o bot costuma ficar na faixa dos 20, 20 e poucos no action seguidos, eu exagerei colocando 100 por seguranca, mas minha versao do bot esta excelente, ate entao estou satisfeito porque depois de todas as edicoes durante o dia, o resultado foi um farm de 300 SPE com 90 naves, das 8 da manha ate agr meia noite. nao sei se é o melhor resultado, mas estou bem satisfeito.

diegomustafamarino commented 2 years ago

@Diglee147 abri um pull request com implementação que fiz, fiz com base em tempo, se o jogo ficar 5 min sem nenhuma ação ele da refresh na página. aqui para mim está funcionando bem até o momento, vamos ver se os cara irão aceitar as modificações.

De qualquer forma agradeço man, quando atualizar novas funçoes vou acabar usando seu modo. Eu fiz uma forma bem simples mesmo para quebrar galho, nem se compara, ate porque sou engenheiro e nao programador, apenas tenho conhecimento empirico de alguns bots de python que fiz no passado kkk tmj

diegomustafamarino commented 2 years ago

@Diglee147 abri um pull request com implementação que fiz, fiz com base em tempo, se o jogo ficar 5 min sem nenhuma ação ele da refresh na página. aqui para mim está funcionando bem até o momento, vamos ver se os cara irão aceitar as modificações.

minha função nao funciona na verdade, nao adianta atualizar a pagina, tem que fechar e abrir o chrome de novo, que é o que a sua faz acho, vou baixar pra dar uma olhada!

diegomustafamarino commented 2 years ago

a sua também é uma tentativa de refresh, não vai funcionar, tem que encerrar o navegador, abrir de novo, colocar um nome totalmente aleatorio na barra de favoritos com a pagina play.spacecrypto.io, entao a funcao refresh tem que ser isso, já mando aqui como ficou.

diegomustafamarino commented 2 years ago

Ficou assim, daquilo que tinha editado: def refreshPage(): clickBtn(images['close-chrome']) time.sleep(4) clickBtn(images['open-chrome']) time.sleep(4) clickBtn(images['refresh-page']) time.sleep(4)

close-chrome open-chrome refresh-page

Indo testar. Se der certo, já reposto o código para quem quiser.

MadsonSousa commented 2 years ago

a sua também é uma tentativa de refresh, não vai funcionar, tem que encerrar o navegador, abrir de novo, colocar um nome totalmente aleatorio na barra de favoritos com a pagina play.spacecrypto.io, entao a funcao refresh tem que ser isso, já mando aqui como ficou.

ué aqui quando dava erro eu simplesmente dava resfreh no navegador eu logava de novo normal e voltava a farmar. talvez estamos falando de prblemas diferentes então kkk

diegomustafamarino commented 2 years ago

a sua também é uma tentativa de refresh, não vai funcionar, tem que encerrar o navegador, abrir de novo, colocar um nome totalmente aleatorio na barra de favoritos com a pagina play.spacecrypto.io, entao a funcao refresh tem que ser isso, já mando aqui como ficou.

ué aqui quando dava erro eu simplesmente dava resfreh no navegador eu logava de novo normal e voltava a farmar. talvez estamos falando de prblemas diferentes então kkk

Quando deixa muitas horas farmando sobrecarrega o navegador e trava a tela. Nao tem refresh que aguente. Mas eu misturei sua implementacao com as minhas e ficou excelente. Vou upar aqui se tiver interesse.

diegomustafamarino commented 2 years ago

spacecrypto-bot-main.zip

Upei com as imagens em 1920 x 1080p, lembrando que se vc olhar pelo site tem tudo que eu fui mexendo, essa é apenas a versão final, se alguém puder sugerir as modificações que achar conveniente para os devs, eu agradeço, acredito que fiz um bom trabalho.

diegomustafamarino commented 2 years ago

.py :

`# -- coding: utf-8 --
from cv2 import cv2 from os import listdir from random import randint from random import random import numpy as np import mss import pyautogui import time import sys from debug import Debug import yaml

VERSAO_SCRIPT = "1.06"

Tempo entre ações

pyautogui.PAUSE = 0.2

Load config file.

stream = open("settings.yaml", 'r') c = yaml.safe_load(stream) st = c['ship_settings'] th = c['threshold']

ships_clicks = 0 cont_boss = 1 dbg = Debug('debug.log')

str_in = """ ░░░░░░░█▐▓▓░████▄▄▄█▀▄▓▓▓▌█ ░░░░░▄█▌▀▄▓▓▄▄▄▄▀▀▀▄▓▓▓▓▓▌█ ░░░▄█▀▀▄▓█▓▓▓▓▓▓▓▓▓▓▓▓▀░▓▌█ ░░█▀▄▓▓▓███▓▓▓███▓▓▓▄░░▄▓▐█▌ ░█▌▓▓▓▀▀▓▓▓▓███▓▓▓▓▓▓▓▄▀▓▓▐█ ▐█▐██▐░▄▓▓▓▓▓▀▄░▀▓▓▓▓▓▓▓▓▓▌█▌ █▌███▓▓▓▓▓▓▓▓▐░░▄▓▓███▓▓▓▄▀▐█ █▐█▓▀░░▀▓▓▓▓▓▓▓▓▓██████▓▓▓▓▐█ ▌▓▄▌▀░▀░▐▀█▄▓▓██████████▓▓▓▌█▌ ▌▓▓▓▄▄▀▀▓▓▓▀▓▓▓▓▓▓▓▓█▓█▓█▓▓▌█▌ █▐▓▓▓▓▓▓▄▄▄▓▓▓▓▓▓█▓█▓█▓█▓▓▓▐█ +++++++++++++++++++++++++++++++++++++++++++++++ +++ 🌙 Melhorando nossas noites de sono 🌙 +++ +++ Se te ajudamos, por favor contribua 😊🚀++ ++++++++++++ SPG SPE BCOIN BUSD BNB +++++++++++

def addRandomness(n, randomn_factor_size=None): if randomn_factor_size is None: randomness_percentage = 0.1 randomn_factor_size = randomness_percentage n random_factor = 2 random() * randomn_factor_size if random_factor > 5: random_factor = 5 without_average_random_factor = n - randomn_factor_size randomized_n = int(without_average_random_factor + random_factor) return int(randomized_n)

def moveToWithRandomness(x,y,t): pyautogui.moveTo(addRandomness(x,10),addRandomness(y,10),t+random()/2)

def remove_suffix(input_string, suffix): if suffix and input_string.endswith(suffix): return input_string[:-len(suffix)] return input_string

def load_images(dir_path='./img_compare/'): file_names = listdir(dir_path) targets = {} for file in file_names: path = 'img_compare/' + file targets[remove_suffix(file, '.png')] = cv2.imread(path) return targets

def show(rectangles, img = None): if img is None: with mss.mss() as sct: monitor = sct.monitors[0] img = np.array(sct.grab(monitor)) for (x, y, w, h) in rectangles: cv2.rectangle(img, (x, y), (x + w, y + h), (255,255,255,255), 2) cv2.imshow('img',img) cv2.waitKey(0)

def clickBtn(img,name=None, timeout=3, threshold = th['default']): if not name is None: pass start = time.time() while(True): matches = positions(img, threshold=threshold) if(len(matches)==0): hast_timed_out = time.time()-start > timeout if(hast_timed_out): if not name is None: pass

            return False
        continue
    x,y,w,h = matches[0]
    pos_click_x = x+w/2
    pos_click_y = y+h/2
    moveToWithRandomness(pos_click_x,pos_click_y,1)
    pyautogui.click()
    return True

def printSreen(): with mss.mss() as sct: monitor = sct.monitors[0] sct_img = np.array(sct.grab(monitor)) return sct_img[:,:,:3]

def positions(target, threshold=th['default'],img = None): if img is None: img = printSreen() result = cv2.matchTemplate(img,target,cv2.TM_CCOEFF_NORMED) w = target.shape[1] h = target.shape[0] yloc, xloc = np.where(result >= threshold) rectangles = [] for (x, y) in zip(xloc, yloc): rectangles.append([int(x), int(y), int(w), int(h)]) rectangles.append([int(x), int(y), int(w), int(h)]) rectangles, weights = cv2.groupRectangles(rectangles, 1, 0.2) return rectangles

def processLogin(): dbg.console('Starting Login', 'INFO', 'ambos') sys.stdout.flush() loginSPG() time.sleep(2) playSPG()

def scroll(clickAndDragAmount): flagScroll = positions(images['spg-flag-scrool'], th['commom'])
if (len(flagScroll) == 0): return x,y,w,h = flagScroll[len(flagScroll)-2] moveToWithRandomness(x,y,1) pyautogui.dragRel(0,clickAndDragAmount,duration=0.5, button='left')

def loginSPG(): global login_attempts
if login_attempts > 3: dbg.console('Too many login attempts, refreshing', 'ERROR', 'ambos') login_attempts = 0 processLogin() return if clickBtn(images['connect-wallet'], name='connectWalletBtn', timeout = 10): dbg.console('Connect wallet button detected, logging in!', 'INFO', 'ambos') login_attempts = login_attempts + 1 if clickBtn(images['sign'], name='sign button', timeout=8): login_attempts = login_attempts + 1 return if not clickBtn(images['select-wallet-1-no-hover'], name='selectMetamaskBtn'): if clickBtn(images['select-wallet-1-hover'], name='selectMetamaskHoverBtn', threshold = th['commom'] ): pass else: pass if clickBtn(images['sign'], name='signBtn', timeout = 20): login_attempts = login_attempts + 1

def playSPG(): if clickBtn(images['play'], name='okPlay', timeout=8): dbg.console('played SPG','INFO', 'ambos')

def login(): if len(positions(images['connect-wallet'], th['commom'])) > 0: processLogin() return True else: return False

def confirm(): global cont_boss confirm_action = False if len(positions(images['lose'], th['commom'])) > 0 and cont_boss > 1: if clickBtn(images['confirm'], name='okBtn', timeout=1, threshold = th['commom']): dbg.console('Confirm encontrado','INFO', 'ambos') time.sleep(2) endFight()
confirm_action = True if len(positions(images['victory'], th['commom'])) > 0: if clickBtn(images['confirm-victory'], name='okVicBtn', timeout=2) or clickBtn(images['confirm-bf'], name='okVicBtn', timeout=2): dbg.console('Confirm victory encontrado','INFO', 'ambos') dbg.console('Boss ' + str(cont_boss) + " derrotado",'INFO', 'ambos') cont_boss = cont_boss + 1 confirm_action = True if st['boss_surrender'] != 0: if cont_boss == st['boss_surrender']: dbg.console("Surrender boss: " + str(st['boss_surrender']), 'INFO', 'ambos') time.sleep(3) clickBtn(images['spg-surrender']) time.sleep(1) clickBtn(images['confirm-victory'], name='okVicBtn', timeout=2) cont_boss = 1 if st['key_waves'] == True: if cont_boss == 9: time.sleep(30) dbg.console("Boss 9, refresh ships", 'DEBUG', 'ambos') clickBtn(images['ship']) if cont_boss == 14: time.sleep(30) dbg.console("Boss 14, refresh ships", 'DEBUG', 'ambos') clickBtn(images['ship']) if cont_boss == 19: time.sleep(30) dbg.console("Boss 19, refresh ships", 'DEBUG', 'ambos') clickBtn(images['ship']) return confirm_action

def removeSpaceships(): time.sleep(2)
while True: buttons = positions(images['spg-x'], threshold=th['hard']) buttonsNewOrder = [] if len(buttons) > 0: index = len(buttons) while index > 0: index -= 1 buttonsNewOrder.append(buttons[index]) for (x, y, w, h) in buttonsNewOrder: moveToWithRandomness(x+(w/2),y+(h/2),1) pyautogui.click() if len(buttons) == 0: break

def clickButtonsFight(): global ships_clicks offset_x = 50 offset_y = 30

if st['send_ships_full'] == True:
    green_bars = positions(images['ship-full'], th['green_bar'])
    not_working_green_bars = []
    for bar in green_bars:
        not_working_green_bars.append(bar)
    for (x, y, w, h) in not_working_green_bars:
        moveToWithRandomness(x+offset_x+(w/2),y+offset_y+(h/2),1)
        pyautogui.click()
        ships_clicks = ships_clicks + 1        
        if ships_clicks >= st['qtd_send_spaceships']:
            dbg.console('Finish Click ships', 'INFO', 'ambos')
            return -1
    return len(green_bars)
elif st['send_ships_full'] == False:
    buttons = positions(images['spg-go-fight'], th['go-fight'])
    for (x, y, w, h) in buttons:
        moveToWithRandomness(x+(w/2),y+(h/2),1)
        pyautogui.click()
        ships_clicks = ships_clicks + 1        
        if ships_clicks >= st['qtd_send_spaceships']:
            dbg.console('Finish Click ships', 'INFO', 'ambos')
            return -1
    return len(buttons)

def refreshPage(): clickBtn(images['close-chrome']) time.sleep(4) clickBtn(images['open-chrome']) time.sleep(4) clickBtn(images['refresh-page']) time.sleep(4)

def screen_close(): global cont_boss confirm_click = False if clickBtn(images['close'],timeout=1): dbg.console('Encontrou close', 'ERROR', 'ambos')
cont_boss = 1 confirm_click = True if clickBtn(images['bt-ok'], timeout=1): dbg.console('Encontrou ok', 'ERROR', 'ambos')
cont_boss = 1 confirm_click = True return confirm_click

def reloadSpacheship(): global cont_boss if len(positions(images['spg-base'], th['commom'])) > 0 and len(positions(images['fight-boss'], th['hard'])) > 0: clickBtn(images['spg-base'], name='closeBtn', timeout=1) time.sleep(3) clickBtn(images['ship'], name='closeBtn', timeout=1) time.sleep(3)
cont_boss = 1

def ships_15_15(): start = time.time() has_timed_out = False while(not has_timed_out): matches = positions(images['15-15-ships'], th['15-15-ships'])

    if(len(matches)==0):
        has_timed_out = time.time()-start > 3
        continue
    dbg.console('Encontrou 15-15 tela naves', 'DEBUG', 'ambos')
    return True
return False

def refreshSpaceships(qtd): global cont_boss global ships_clicks dbg.console('Refresh Spaceship to Fight', 'INFO', 'ambos') buttonsClicked = 1 go_to_boss = False cda = 100 aux_ships = 0

empty_scrolls_attempts = st['qtd_send_spaceships']
if ships_clicks > 0:
    dbg.console('Quantidade ja selecionada:' + str(ships_clicks), 'DEBUG', 'ambos')
    if ships_clicks == st['qtd_send_spaceships']:
        empty_scrolls_attempts = 0
        goToFight()
while(empty_scrolls_attempts >0):        
    aux_ships = ships_clicks
    if ships_15_15():
        go_to_boss = True
        break
    buttonsClicked = clickButtonsFight()        
    if buttonsClicked == 0:
        empty_scrolls_attempts = empty_scrolls_attempts - 1
        scroll(-cda)
    elif buttonsClicked == -1:
        empty_scrolls_attempts = 0   
    else:
        if buttonsClicked > 0:
            empty_scrolls_attempts = empty_scrolls_attempts + 1

    time.sleep(0.05)
    if aux_ships != ships_clicks:
        dbg.console('Spaceships sent to Fight: ' + str(ships_clicks), 'INFO', 'ambos')

if ships_clicks == st['qtd_send_spaceships'] or cont_boss > 1 or go_to_boss == True:
    empty_scrolls_attempts = 0
    goToFight()
else:
    reloadSpacheship()

def goToFight(): global ships_clicks global cont_boss ships_clicks = 0 clickBtn(images['fight-boss']) time.sleep(4) if clickBtn(images['confirm'], timeout = 4, threshold = th['commom']): cont_boss = 1

def endFight(): global cont_boss
cont_boss = 1 dbg.console("End fight", 'INFO', 'ambos') time.sleep(3) returnBase() time.sleep(15) if len(positions(images['spg-processing'], th['hard'])) > 0: time.sleep(40) if len(positions(images['fight-boss'], th['hard'])) > 0: if st['remove_ships'] == True or cont_boss == 9 or cont_boss == 14: removeSpaceships() time.sleep(1) refreshSpaceships(0) else: pass

def goToSpaceShips(): if clickBtn(images['ship']): global login_attempts login_attempts = 0

def returnBase(): goToSpaceShips()

def zero_ships(): if len(positions(images['spg-surrender'], th['commom']) ) > 0: start = time.time() has_timed_out = False while(not has_timed_out): matches = positions(images['0-15'], th['0-15']) if(len(matches)==0): has_timed_out = time.time()-start > 3 continue elif(len(matches)>0): clickBtn(images['ship']) return True return False

def main(): global images
global login_attempts login_attempts = 0 images = load_images()

print(str_in)        
time.sleep(5)
dbg.console('Bot Iniciado. Versao: ' + str(VERSAO_SCRIPT), 'INFO', 'ambos')
dbg.console('Qtd naves total: ' + str(st['empty_qtd_spaceships']), 'INFO', 'ambos')
dbg.console('Qtd naves enviar: ' + str(st['qtd_send_spaceships']), 'INFO', 'ambos')

time_start = {
"close" : 0,
"login" : 0,
"refresh_page": time.time(),
}
time_to_check = {
"close" : 5,
"login" : 1,
"refresh_page": st['refresh_page'],
}

while True:
    actual_time = time.time()
    action_found = False

    if actual_time - time_start["login"] > addRandomness(time_to_check['login'] * 1):
        sys.stdout.flush()
        time_start["login"] = actual_time
        if not login():
            if len(positions(images['fight-boss'], th['hard']))  > 0:
                if st['remove_ships'] == True or cont_boss == 9 or cont_boss == 14:
                    removeSpaceships()
                refreshSpaceships(0)
                action_found = True
        else:
            action_found = True     

    if confirm():
        action_found = True 
    if zero_ships():
        action_found = True       

    if actual_time - time_start["close"] > time_to_check['close']:
        time_start["close"] = actual_time
        if screen_close():
            action_found = True

    if action_found == False:
        dbg.console('Nenhuma acao encontrada', 'WARNING', 'ambos')
        if actual_time - time_start['refresh_page'] > time_to_check['refresh_page']:
            dbg.console('Atualização da Página', 'WARNING', 'ambos')
            time_start['refresh_page'] = actual_time
            refreshPage()
    else:
        time_start['refresh_page'] = actual_time

if name == 'main': main()

`

settings:

`---

Valores de configuração do bot

ship_settings:

Quantidade total de naves (total)

empty_qtd_spaceships: 90

# Quantas naves deseja entrar para o boss
qtd_send_spaceships: 25

# Se deseja dar surrender, alterar para o valor do boss (zero não faz)
boss_surrender: 0

# Envia somente naves 100% (True/False)
send_ships_full: False

# Se desejar que remova as naves antes de adicionar outras (True/False)
remove_ships: False 

# Volta para a spaceship nas waves 9, 14 e 19
key_waves: True

# Tempo de verificação se o jogo está travado e atualizar a pagina, configuração em segundos(300 = 5 min).
refresh_page: 60

Valor de confiança das comparações

threshold:

Valor padrão: 0.7

default: 0.7

# Valor padrão: 0.8
commom: 0.8

# Valor padrão 0.9
hard: 0.9

# Valor padrão: 0.8
select_wallet_buttons: 0.8

# Valor padrão: 0.9
go-fight: 0.9

# Valor padrão: 0.9
green_bar: 0.9

# Valor padrão 0.98
15-15-ships: 0.98

# Valor padrão 0.95
0-15: 0.8`

experimenta ai se quiser..