VB/VB.Net Utilisation des Zaapis

A

Anonymous

Invité
#1
Bonsoir à tous,
Je travaille actuellement sur un système d'utilisation de zaap/zaapis dans un bot Dofus.
Lorsque je reçoit le paquet 226, je prend la mapid (via un select case) et si elle correspond à la mapid que je veut, le bot utilise un téléporteur.
Le problème est que pour lancer le téléporteur, il faut d'abord se déplacer devant le téléporteur (cellid) pour ensuite utiliser le zaapi mais le paquet d'utilisation du zaapi
est lancé avant d'atteindre la cellid ce qui ne produit rien à l'arrivée devant le zaapi.
J'ai donc pensé à utiliser une fonction qui verifie que si on est pas dans la cellid x, il y a une pause mais la pause entraine une pause dans tout Dofus donc rien ne se passe, je suis obligé de relancer.

J'ai également un autre problème car mon bot pour se lancer doit recevoir le paquet 226 mais le problème est que le paquet 226 n'est recu que lors d'un déplacement donc le bot pour se lancer doit manuellement être déplacé dans une map et revenir sur la même pour ensuite s'actionner.

Voila, j'espère que je recevrai une aide et je vous remercie d'avance :)
 
A

Anonymous

Invité
#2
Je pense que tu as mal sniffe ton dofus.

Tu dois te deplacer jusqu'au zaapi, une fois a cote.
Envoyer le paquet 5001 qui permet d'utiliser un element.

Donc il faut que tu obtiennent l'id d'un zaapi, dans le 226, tu lis tout les element, si un des element qui a son typeid qui correspond a celui d'un zaapi. (je ne connais pas l'id des zaapi, regarde dans les d2p) a partir de la tu te deplace jusqu'au zaapi sachant que ta obtenu la cellid du zaapi dans le 226. Et tu envoi le 5001, tu dois envoyer le uid et id du zaapi'.
 
A

Anonymous

Invité
#3
Merci pour ta réponse.
Oui le problème c'est que qu'il lance la paquet du zaapi avant d'arriver à la cell à côté.
Comment je dois procéder pour qu'il ne lance le paquet qu'une fois arrivé devant le zaapi ?
 
A

Anonymous

Invité
#4
Eh bien, tu met un pause de ton bot. Mais pas de Thread.Sleep. Sa va tout couper.

Tien voilà un fonction qui met une pause sans tout stopper.
Cette fonction vien de toons, j'ai eu sa permission de publication.
Code:
Friend Sub pause(ByVal ms_to_wait As Long)
            Dim endwait As Double
            endwait = Environment.TickCount + ms_to_wait
            While Environment.TickCount < endwait
                System.Threading.Thread.Sleep(1)
                Application.DoEvents()
            End While
        End Sub

Donc tu envoi le paquet de déplacement.

Tu fait une pause, tant que tu n'a pas recu la réponse du serveur te confirmant que ton déplacement a été effectué.
Et la tu peux envoyer le paquet.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#5
Salut , il faut attendre la fin de deplacement donc le 952 envoyé par le client officiel
 
A

Anonymous

Invité
#6
Je te remercie :)
Et merci à toi Toons également.
Je teste ça et je vous met un retour.
 
A

Anonymous

Invité
#8
Pour l'instant, la fonction que tu m'as passé fait également buggué D2.
Je vais voir avec le paquet 952 mais il ne me semble que ce paquet est recensé car sur ma liste de paquets, il n'y a pas le 952.
Je vais quand même tester pour voir.
 
A

Anonymous

Invité
#10
Tout ce qui est mobile devient immobile, y compris mon personnage.
Quand j'essaye de me déplacer, impossible, et l'apparition d'un sablier qui touche en haut à gauche de Dofus.
 
A

Anonymous

Invité
#12
Code:
Public Sub MapInfosReceived(ByVal sender As Object, ByVal e As IPacketTransition)

        If e.Id = 226 Then //Si id du paquet = 226
            Dim MapInfos As MapComplementaryInformationsDataMessage = e.Packet //Paquet dans une variable
            Dim MapId As Integer = MapInfos.MapId //MapActuelle

            Select Case MapId
                Case IdBank //Si banque
                    Account.Log("Utilisation du Zaapi !", LogType.INFO) //Message dans le bot
                    UseTeleporter(IdAtelier) //Teleporter à l'atelier

                Case IdAtelier //Si atelier
                    Account.Log("Utilisation du Zaapi !", LogType.INFO)
                    UseTeleporter(IdBank)//Teleporter à la banque
            End Select
        End If
    End Sub

Public Sub UseTeleporter(ByVal map As Integer) //Fonction pour utiliser teleporteur avec map en parametre
        Dim cellz As Integer
        For Each elem In Account.Game.Map.GetUsableElements // Recense les elements utilisables
            If elem.Element.ElementId = 449090 Then //Si l'element est un zaapi
                Account.Game.Map.MoveToCell(elem.CellId + 13) //Aller près du zaapi
                cellz = elem.CellId + 13
            End If
        Next
        
        Account.Game.Zaap.UseTeleporter(PhoenixAPI.Game.Zaap.TeleporterType.Zaapi) // Utilisation du zaapi
        Account.Game.Zaap.TeleportTo(map) // Choisir la map (en paramètre)
    End Sub
Voilà le code sachant que j'utilise une API d'un bot MITM.
 
A

Anonymous

Invité
#13
Met pause(500) entre

Code:
Dim cellz As Integer
        For Each elem In Account.Game.Map.GetUsableElements // Recense les elements utilisables
            If elem.Element.ElementId = 449090 Then //Si l'element est un zaapi
                Account.Game.Map.MoveToCell(elem.CellId + 13) //Aller près du zaapi
                cellz = elem.CellId + 13
            End If
        Next
et

Code:
Account.Game.Zaap.UseTeleporter(PhoenixAPI.Game.Zaap.TeleporterType.Zaapi) // Utilisation du zaapi
 
A

Anonymous

Invité
#14
Il ne se passe rien du tout puisque 500ms, c'est un peu trop court
Et bizarre quand je met par exemple 4000ms, il attend 4 secondes avant de faire le départ alors que j'ai mis le pause après le déplacement.
 
A

Anonymous

Invité
#15
Voilà, premier problème résolu grâce au paquet 952 :)
Néanmoins, mon bot pour se lancer doit recevoir le paquet 226 or ce paquet n'est reçu que quand on change de map.
Je voudrais donc savoir comment faire pour lancer le bot autrement sachant qu'il utilise le paquet 226 pour déterminer la cellid du zaapI.
Merci d'avance.
 
A

Anonymous

Invité
#16
Tu recoi le 226 lors de ta connexion aussi, si ce n'est pas le cas, montre nous tes logs. Ce souci est frequant, c'est l'oubli d'envoi d'un paquet.
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#17
Mais le soucis c'est qu'il utilise l'API d'un Bot donc dans se cas la si tu ne reçois pas le 226 quand tu te connecte, tu doit contacter le développer du bot.
Mais sa peut aussi venir a cause du chargement du plugin car si je me trompe pas tu peut charger le plugin que après la selection du personnage donc sa se pourrait le packet{226} passe avant que tu charge de ton plugin donc c'est normal que ton plugin de reçois pas de packet{226}.

Cordialement Tifoux.
 
A

Anonymous

Invité
#18
Mais dans l'API d'un plugin , le 226 est serializé dans une classe nan ?
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#19
Oui tous a fait il et sérializé dans une classe mais lui il voulais le recevoir.
 
A

Anonymous

Invité
#20
Autant recupnles donnees de la class. Sinon on peut rien faire. C'est l'api qui est code comme sa.
 
Haut Bas