sikuli-driver team mailing list archive
-
sikuli-driver team
-
Mailing list archive
-
Message #28981
Re: [Question #255984]: HowTo Region.observe: onAppear handler ?
Question #255984 on Sikuli changed:
https://answers.launchpad.net/sikuli/+question/255984
den posted a new comment:
i think your code is godd and working but , i ve already the same probleme , in my code , it takes too much time to do the job .
i post here the entire code i ' ve done to optimize it and have a good result .
actually no errors but not working as it should .
voili ^^
#Settings.DelayAfterDrag = 0.01
#Settings.DelayBeforeDrop = 0.01
Settings.MoveMouseDelay = 0.01
#Settings.ObserveScanRate = 0.1
#Settings.WaitScanRate = 0.05
#setThrowException(True)
def myHandler (event) :
#if QueteValideeReg.exists("1413219985088.png"):
nb_quetes_tours_faites += 1
wait(1)
QueteValideeReg.click() # clicks what the exists before found
if exists(Pattern("1413716368262.png").similar(0.92)):
click() # clicks what the exists before found
if PrincipaleReg.exists("1413716480430.png"): # instance
PrincipaleReg.click("1413716513801.png")
event.stopObserver() # we have to stop observing, since it is started newly in the outer loop
AsnaDetectReg =Region(1395,242,492,689)
PrincipaleReg = Region(264,246,1038,661)
QueteValideeReg = Region(704,582,518,292)
QueteAPrendreReg = Region(1252,261,289,306)
QueteTourAPrendreReg = Region(619,603,341,114)
RegionAIncrement = Region(1059,847,153,102)
RegionSkills = Region(693,866,606,152)
#######################################################
# test de quetes
#######################################################
#click(Region(1282,326,124,44)) # on declenche la quete
#wait(1)
#############################
#######################################################
# test de quetes
#######################################################
nb_quete_a_faire = 100 # nombre de quetes totales de 1 a 200
nb_quetes_tours_faites = 0
activer_grande_boucle = 1 # 1 pour activer la boucle generale , autre pour arreter et tester des quetes separées
while nb_quetes_tours_faites != nb_quete_a_faire and activer_grande_boucle == 1 :
if QueteAPrendreReg.exists(Pattern("1413220289146.png").similar(0.40)):
try : QueteAPrendreReg.click(Pattern("1413220289146.png").similar(0.40))
except FindFailed : pass
while not QueteTourAPrendreReg.exists("1413220465870.png"):
wait(0.5) #on attend de prendre une nouvelle quete
if QueteTourAPrendreReg.exists("1413220465870.png"):
QueteTourAPrendreReg.click("1413220465870.png") # on prend la nouvelle quete
wait(0.5)
if QueteTourAPrendreReg.exists("1414411177236.png") :
QueteTourAPrendreReg.click("1414411177236.png")
else :
click(Region(1282,326,124,44)) # on declenche la quete
wait(1)
##########################################################################################################
# Quetes SANS delais d' attente
##########################################################################################################
if AsnaDetectReg.exists("1413716914077.png") :
# 1ere quete
if PrincipaleReg.exists ("1413819051767.png") : # raid solo
RaidReg = Region(283,252,1007,612)
lettre = ""
while lettre != "r" and lettre != "m" : # on cree une boucle pour forcer a taper les bonnes lettres et sortir de la boucle .
lettre = input("Tapez 'r' pour raid , 'm' pour manuel : ")
if lettre == "r" : # si l' utilisateur a tapé "R" , on lance le raid .
RaidReg.click("1414165702675.png")
mini_raid_reg = Region(463,378,631,461)
mini_raid_reg.click(Pattern("1414166762775.png").targetOffset(-70,-22))# passes partout decoché ( cochés par defaut ) .
wait(0.5)
mini_raid_reg.click("1414166856506.png")# debut de raid
wait(305)
mini_raid_reg.click("1414167189873.png") # fin de raid
elif lettre == "m" :
RaidReg.click("1413819186263.png")
if RaidReg.exists("1413819319813.png") : # si on a plus de vigueur on peut y aller les yeux fermés
RaidReg.click("1413819385296.png")
wait(2)
# passage en combat ou lancer le combat , MODE MANUEL FORCE ou PAS .
if RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
print(" on continue et on passe a l ' attaque ")
while RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
try :
RegionSkills.click(Pattern("1413728053229.png").targetOffset(-20,-20))
except FindFailed : pass
wait(1)
else :
click(Region(1282,326,124,44))
wait(2)
#if exists("1413853219927.png") : click("1413853084288.png")
# si on arrive a la fin de l ' I S sans avoir validé , on sort et on voit si il faut recommencer l ' instance solo .
# if exist () : # ecran pour recommencer
# click () # bouton sortir
#voir si besoin de recommencer apres etre sorti
#########################################################################################################
elif PrincipaleReg.exists(Pattern("1413562215209.png").similar(0.80)): # don de guilde
DonReg =Region(816,522,321,105)
i = 0
while not QueteValideeReg.exists("1413219985088.png") :
if i == 10 : break
wait(1)
DonReg.paste(Pattern("1413681430900.png").similar(0.95), "NUM1"+"NUM0"+"NUM0"+"NUM0"+"NUM0")
wait(2)
DonReg.click(Pattern("1413562624399.png").exact())
i += 1
#########################################################################################################
elif PrincipaleReg.exists(Pattern("1413563111758.png").similar(0.80)): # theme astral
i = 0
astral_clic_reg = Region(323,675,423,114)
while not QueteValideeReg.exists("1413219985088.png") :
if i == 3 : break
astral_clic_reg.click("1413563144605.png")
i += 1
click("1413853627859.png")
click(Region(1282,326,124,44))
nb_quetes_tours_faites += 1
wait(0.5)
click(Region(1282,326,124,44))
#########################################################################################################
elif PrincipaleReg.exists("1413563254918.png") : # frapper les souris
wait(3)
SourisReg =Region(559,440,491,289)
while not QueteValideeReg.exists("1413219985088.png"):
try : SourisReg.click(Pattern("1413565840146.png").similar(0.45).targetOffset(99,-24))
except FindFailed : pass
#########################################################################################################
elif PrincipaleReg.exists("1413569098460.png"): # recrutement de soldats
S_TypeReg = Region(1281,345,86,20)
SoldatsType = S_TypeReg.text() # on esai de recup le type des soldats par OCR
print (SoldatsType)
#########################################################################################################
elif PrincipaleReg.exists("1413718090188.png"): # incruster une gemme
pass
#########################################################################################################
elif PrincipaleReg.exists(Pattern("1413626133525.png").similar(0.90)): # renforcer un equipement
# region de selection des items a renforcer
ItemsSelectReg = Region(795,415,321,356)
# item diffrent de equipés
# item differents de pierre de chance
#########################################################################################################
elif PrincipaleReg.exists (Pattern("1413636254168.png").similar(0.60)) : # QTE
wait(2)
QTEReg =Region(451,492,607,71)
NewIcons = {} # On crée un dictionnaire vide je dois y mettre le type de fleche a actionner
# et la position de la fleche afin d' activer dans le bon ordre
def by_x(match):
return match.x
if QTEReg.exists(Pattern("1413631756825.png").similar(0.86)) :
iconsS = QTEReg.findAll(Pattern("1413631756825.png").similar(0.86))
Type = "s"
sorted_icons = sorted(iconsS, key=by_x)
for icon in sorted_icons:
NewIcons[by_x(icon)] = Type # On insère la position et le Type dans le dictionnaire
if QTEReg.exists(Pattern("1413631791575.png").similar(0.86)) :
iconsW = QTEReg.findAll(Pattern("1413631791575.png").similar(0.86))
Type = "w"
sorted_icons = sorted(iconsW, key=by_x)
for icon in sorted_icons:
NewIcons[by_x(icon)] = Type # On insère la position et le Type dans le dictionnaire
if QTEReg.exists(Pattern("1413631823938.png").similar(0.86)) :
iconsA = QTEReg.findAll(Pattern("1413631823938.png").similar(0.86))
Type = "a"
sorted_icons = sorted(iconsA, key=by_x)
for icon in sorted_icons:
NewIcons[by_x(icon)] = Type # On insère la position et le Type dans le dictionnaire
if QTEReg.exists(Pattern("1413631897921.png").similar(0.86)) :
iconsD = QTEReg.findAll(Pattern("1413631897921.png").similar(0.86))
Type = "d"
# sort the icons by their x coordinates and put them into a new variable sorted_icons
sorted_icons = sorted(iconsD, key=by_x)
for icon in sorted_icons:
NewIcons[by_x(icon)] = Type # On insère la position et le Type dans le dictionnaire
#for position , Type in NewIcons.items():
#print("La clé {} contient la valeur {}.".format(position, Type))
Liste = NewIcons.items()
ListeOrdonnee = sorted(Liste)
for elt , Type in ListeOrdonnee :
#print(elt,Type)
type(Type)
wait(0.2)
if QTEReg.exists("1413809446550.png") :
try : QTEReg.click("1413809446550.png")
except FindFailed : pass
elif QueteValideeReg.exists("1413219985088.png"):
continue
##########################################################################################################
# Quetes AVEC delais d' attente
##########################################################################################################
else :
XiaoReg = Region(902,170,298,254)
IrisSelectReg = Region(370,160,600,815)
PanSelectReg = Region(429,444,680,550)
AmaSelectReg = Region(370,160,600,815)
EveSelectReg = Region(479,88,408,376)
wait(3)
if not AsnaDetectReg.exists("1413716914077.png") : # si on est plus a coté de asna , on se deplace donc jusqu' a trouver un repere visuel
##########################################################################################################
# 1ere quete , multiple d' ailleurs
if exists ("1413625853554.png") or exists ("1413719195483.png") or exists ("1413744665684.png") or exists ("1413744829662.png") or XiaoReg.exists ("1413800649038.png") :
# cueillir des tulipes , cueillir des qumais , cueillir des saponaires , cueillir des bruyeres , cueillir des xiao
while not QueteValideeReg.exists("1413219985088.png"):
wait(1)
##########################################################################################################
elif PrincipaleReg.exists("1413562376940.png") : # porter une lettre
PrincipaleReg.click("1413562376940.png")
wait(1)
if PrincipaleReg.exists("1413562460598.png"):
PrincipaleReg.click("1413562460598.png")
##########################################################################################################
# Ames nivo 1 , 2 , 3 et 4
elif IrisSelectReg.exists ("1413628055144.png") : # ame nivo 1
click(Region(868,193,18,12)) # pour se depalcer au milieu des iris
wait(3)
print("iris : ame nivo 1 ")
combat = 0
while combat != 10 :
print("test clic iris")
try :
click("1409738373876.png")
wait(7)
except FindFailed : pass
try :
click("1413218116957.png")
wait(7)
except FindFailed : pass
try :
click("1413218150104.png")
wait(7)
except FindFailed : pass
# passage en combat du sylphe sur la map
if RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
print(" on continue et on passe a l ' attaque ")
combat += 1
while RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
try :
RegionSkills.click(Pattern("1413728053229.png").targetOffset(-20,-20))
wait(1)
except FindFailed : pass
else :
wait(2)
#click("1414161394251.png")
#click(Region(1275,316,158,15))
##########################################################################################################
elif PanSelectReg.exists ("1414160629143.png") : # ame nivo 2
print("pan : ame nivo 2 ")
click(Region(1123,195,246,36)) # pour se depalcer au milieu des iris
combat = 0
while combat != 10 :
print("test clic pan")
try :
click("1410261395349.png")
wait(7)
except FindFailed : pass
try :
click("1410874678469.png")
wait(7)
except FindFailed : pass
try :
click("1410875263953.png")
wait(7)
except FindFailed : pass
try :
click("1410875127288.png")
wait(7)
except FindFailed : pass
# passage en combat du sylphe sur la map
if RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
print(" on continue et on passe a l ' attaque ")
combat += 1
while RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
try :
RegionSkills.click(Pattern("1413728053229.png").targetOffset(-20,-20))
except FindFailed : pass
wait(1)
else :
wait(2)
#click("1414161394251.png")
#click(Region(1275,316,158,15))
##########################################################################################################
elif AmaSelectReg.exists ("1413729884774.png") : # ame nivo 3
click(Region(884,187,50,18)) # pour se depalcer au milieu des ama
wait(3)
print("ama : ame nivo 3 ")
combat = 0
while combat != 10 :
try :
click("1410265059956.png")
print("clic ama")
wait(7)
except FindFailed : pass
# passage en combat du sylphe sur la map
if RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
print(" on continue et on passe a l ' attaque ")
combat += 1
while RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
try :
RegionSkills.click(Pattern("1413728053229.png").targetOffset(-20,-20))
wait(1)
except FindFailed : pass
else :
wait(2)
#click("1414161394251.png")
#click(Region(1275,316,158,15))
##########################################################################################################
elif EveSelectReg.exists (Pattern("1413821772059.png").similar(0.58)) : # ame nivo 4
print("eve : ame nivo 4 ")
click(Region(868,193,18,12)) # pour se depalcer au milieu des eve
wait(3)
combat = 0
while combat != 10 :
try :
click("1409830797996-1.png")
wait(7)
except FindFailed : pass
try :
click("1410896896116.png")
wait(7)
except FindFailed : pass
try :
click("1410897336804.png")
wait(7)
except FindFailed : pass
# passage en combat du sylphe sur la map
if RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
print(" on continue et on passe a l ' attaque ")
combat += 1
while RegionAIncrement.exists(Pattern("1410792368702-1.png").similar(0.61)) :
try :
RegionSkills.click(Pattern("1413728053229.png").targetOffset(-20,-20))
wait(1)
except FindFailed : pass
else :
wait(2)
#click("1414161394251.png")
#click(Region(1275,316,158,15))
##########################################################################################################
# validation de la quete , ajout de un au compteur et on recommence au debut
QueteValideeReg.onAppear("1413219985088-2.png", myHandler)
observe(FOREVER) # here it waits for the image to appear
# here it continues after the handler did his job
print(nb_quetes_tours_faites)
continue
--
You received this question notification because you are a member of
Sikuli Drivers, which is an answer contact for Sikuli.