← Back to team overview

sikuli-driver team mailing list archive

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.