Closed diegomustafamarino closed 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?
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.
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.
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.
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.
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.
deu errado, vou ver o porque.
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
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.
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.
negativo revis todas as imagens funciona corretamnete oq n funciona eh o add +1 da funçao kkk
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.
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?
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?
vc usa qual resolução ?
1600x900 todos os assets forao refeitos para o funcionamento adequado a minha resolução.
1600x900 todos os assets forao refeitos para o funcionamento adequado a minha resolução.
certo...
vc modificou algo no comando ?
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.
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.
veja se você instalou todos os módulos tbm
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.
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
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?
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.
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.
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.
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.
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%
@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.
@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.
@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
@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!
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.
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)
Indo testar. Se der certo, já reposto o código para quem quiser.
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
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.
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.
.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"
pyautogui.PAUSE = 0.2
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 +++++++++++
Algumas configurações podem ser alteradas em settings.yaml
Ctrl + c finaliza o bot.
"""
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:
`---
ship_settings:
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
threshold:
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..
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.