Closed aazeazer71 closed 2 months ago
Désolé! Ca ne marche pas que si l'appli se lance aprés la chasse au trésor mb
Par contre, étant donné que j'ai eu le temps de jeter un oeil au script depuis, j'ai une petite question :
comment faire pour check si un packet est sniffé et porte un nom spécifique? par rapport à ton code bien entendu!
merci d'avance encore désolé pour le premier message
Salut, merci d'avoir trouvé le bug ! C'est quand même bizarre, le lancement de la chasse avant ou après Karrelage n'est pas censé affecter le fonctionnement. Il y'a peut être eu des changements au niveau leur sauvegarde de positions, je regarderai ça. Tu avais déjà lancé une chasse aux trésors sur ton client ?
Sinon pour gérer les packets, ça se fait par le nom de function. Toutes les classes qui héritent de DofusModule peuvent gérer les packets par leur nom en possédant une fonction du nom handle_NAME
(tu peux voir la fonction qui redirige ici). Par exemple, Treasure Hunter gère le packet "CurrentMapMessage" par la fonction handle_CurrentMapMessage
.
yes je vois merci beaucoup! j'ai réussi à créer 2 fonctions comme ça! Dernière question :
est-ce que tu pourrais m'expliquer ton code sur cette partie :
def click_next_step(self):
hunt_panel_position = load_dat("Berilia_ui_positions")[
"treasureHunt##pos##ctr_hunt##default"
]
panel_x, panel_y = (
hunt_panel_position["x"] + DOFUS_X_OFFSET,
hunt_panel_position["y"],
)
if self.current_step >= 0:
y_offset = self.current_step * 42 # Offset for each step
click_x, click_y = ( # Click on the next flag icon
panel_x * DOFUS_SCALING + 433,
panel_y * DOFUS_SCALING + 170 + y_offset,
)
click_position = on_screen_position((click_x, click_y))
ag.moveTo(click_position, duration=0.2)
ag.click()
elif self.current_step == -1:
click_x, click_y = ( # Click on the "next step" button
panel_x * DOFUS_SCALING + 412,
panel_y * DOFUS_SCALING + 170 + self.current_total_steps * 42,
)
click_position = on_screen_position((click_x, click_y))
ag.moveTo(click_position, duration=0.2)
ag.click()
et ça :
DOFUS_X_OFFSET = 270.2
DOFUS_SCALING = 1.404
Par exemple : mon panel de la chasse au trésor est en (0,788) en valeur absolue (récupéré via pyinput mouse) et ton script me renvoie : panel_x : -42.19999999999999 et panel_y : 568 donc 220 en différentiel de X et 42.2 en Y mais je comprends pas le DOFUS_SCALING...
Merci d'avance pour ton aide parce que j'arrive pas à mettre une valeur fixe (à la place de 412/433 et 170 ça décale progressivement à chaque valeur donc j'imagine que c'est la valeur de scaling que je dois changer, mais comment la trouver?
Aïe, c'était une tentative d'adaptation aux différentes résolutions. En gros le fichier Berilia_ui_positions.dat
est là où sont sauvegardées les positions de ton interface (le point en haut à gauche de chaque élément). De ce que j'ai pu tester, Ankama utilise un système cartésien qui ne correspond pas 1:1 à nos écrans. Le point tout en haut à gauche, qui correspond à (0, 0) via pyinput, correspond à (270.2, 0) dans la base de Dofus, et c'est de là que provient le DOFUS_X_OFFSET
. De plus, bouger un élément de 100 pixels sur notre écran ne va pas sauvegarder un shift de 100 dans le .dat
, mais un shift de 100 / 1.404 ~= 71.22, d'où le DOFUS_SCALING=1.404. Je pensais que ce système de scaling permettait de gérer les différentes résolutions d'écrans, mais du coup j'étais à côté de la plaque. Il doit y avoir une formule quelque part pour gérer tout ça, avec en plus la taille de la fenêtre du client. Probablement quelque part dans le DofusInvoker.swf, je devrais chercher un de ces quatre.
treasureHunt##pos##ctr_hunt##default
correspond à la position du panel de chasse au trésor.
Salut, j'ai essayé d'enlever "l'adaptation des résolutions" mais sans succès. Il faut malgré tout ajouter un offset ou un scaling quoi qu'il en soit. Connais-tu cette valeur ?
Non pas de progrès de mon côté, ça fait quelque temps que j'ai pas touché à cette partie. Si quelqu'un trouve la fonction de conversion entre positions internes de Dofus et positions sur écran utilisateur, je suis preneur
Hello,
j'ai un petit problème quand je veux lancer une chasse au trésor j'obtiens toujours le même problème :
ERROR:app:Exception on /load [POST] Traceback (most recent call last): File "C:\Users---\Desktop\Dofus Bot\src\modules\treasure_hunter.py", line 97, in setup_bot middle_banner = ui_positions["banner##pos##mainCtr##default"]