Autoit [SCRIPT] Détection du client D. et initialisation des cases

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#1
Hellow !

Je vais vous présenter une fonction que j'ai créée (et bordélique à souhait) qui sert à détecter la taille de la fenêtre de D., puis de la zone cliente (en gros, sans les grosses bandes noires), et enfin initialiser les cases.
Qu'est-ce qu'initialiser les cases? Eh bien, dans D., je sais (sans avoir compté, rassurez-vous) qu'il y a 546 cases.
Donc, j'initialise leur emplacement en pixel.

Si ça reste flou, alors laissez-moi vous expliquer le but. J'avais l'intention de faire un bot récolte.
Pour se faire, je crée un fichier qui porte le nom de la position d'une map (par exemple -29,-42.dat), et qui contient toutes les cases qui contiennent du blé (par exemple 256,265,254 etc).

J'initialise donc au lancement du bot la position des cases, ainsi que les cases qui leur sont proches.
Ainsi, je n'ai pas besoin de chercher la couleur d'un pixel. L'avantage est que je n'ai pas à trouver les 15000 couleurs différentes de chaque blé, trouver sa position, etc.
Bien sûr, il faudra certainement vérifier par la suite si à telle case donnée la ressource est encore présente, mais je pense que c'est déjà une belle avancée.

Vous aurez besoin pour utiliser cette fonction de FastFind.au3 et ses DLL, ainsi que de la fonction __AddArray() ci-jointe.

Premier fichier que j'ai nommé _detect_client.au3



Vous aurez aussi besoin d'un deuxième fichier nommé _cases.au3


Si vous voulez virer les ConsoleWrite faites donc, c'est surtout du débuguage. Et la fonction _write_feedback que j'ai volontairement commentée, c'est une fonction qui écrit dans un ListView les différentes actions, les évènements, et les colorise de manière à mieux se repérer (voilà pourquoi je n'ai pas utilisé de simple Edit).

Il faudra, avec l'intégration dans votre code, que vous liez les deux fichiers ensemble. Moi, j'ai fais de cette manière (à mettre dans le même ordre) dans un fichier d'initialisation :

Code:
#include "functions/_detect_client.au3"
#include "variables/_cases.au3"
Si vous voulez de plus amples explications, si vous ne comprenez pas une partie de code, ou si vous n'arrivez pas à l'intégrer à votre script, demandez-moi :).
Je posterai peut-être bientôt un bot complet...

Enjoy !

EDIT : Les fichiers sont maintenant hébergés pour éviter la censure du nom de mes variables, et donc un dysfonctionnement des fonctions.
EDIT 2 : Voici la fonction __ArrayAdd() modifiée qui sert à insérer dans un Array 2D :

Code:
Func __ArrayAdd(ByRef $avArray, $vValue, $NestArray = True)
    Local $iBoundArray0, $iBoundArray1, $iBoundArray2, $iBoundValue1

    If IsArray($avArray) = 0 Then Return SetError(1, 0, -1); $avArray is not an array

    $iBoundArray0 = UBound($avArray, 0); No. of dimesions in array
    If $iBoundArray0 > 2 Then Return SetError(1, 1, -1); $avArray is more than 2D

    $iBoundArray1 = UBound($avArray, 1); Size of array in first dimension
    If $iBoundArray0 = 2 Then $iBoundArray2 = UBound($avArray, 2); Size of array in second dimension

    If ($iBoundArray0 = 1) Or (IsArray($vValue) = 0) Or $NestArray Then
; If input array is 1D, or $vValue is not an array, or $NestArray = True (default) then save $vValue literally
        If $iBoundArray0 = 1 Then
    ; Add to 1D array
            ReDim $avArray[$iBoundArray1 + 1]
            $avArray[$iBoundArray1] = $vValue
        Else
    ; Add to 2D array at [n][0]
            ReDim $avArray[$iBoundArray1 + 1][$iBoundArray2]
            $avArray[$iBoundArray1][0] = $vValue
        EndIf
    Else
; If input array is 2D, and $vValue is an array, and $NestArray = False,
;   then $vValue is a 1D array of values to add as a new row.
        If UBound($vValue, 0) <> 1 Then Return SetError(1, 2, -1); $vValue array is not 1D
        $iBoundValue1 = UBound($vValue, 1)
        If $iBoundArray2 < $iBoundValue1 Then Return SetError(1, 3, -1); $vValue array has too many elements
        ReDim $avArray[$iBoundArray1 + 1][$iBoundArray2]
        For $n = 0 To $iBoundValue1 - 1
            $avArray[$iBoundArray1][$n] = $vValue[$n]
        Next
    EndIf

; Return index of new last row in $avArray
    Return $iBoundArray1
EndFunc ;==>__ArrayAdd
 
A

Anonymous

Invité
#2
Re: [SCRIPT] Détection du client D. et initialisation des ca

je sais (sans avoir compté, rassurez-vous) qu'il y a 546 cases.
560 plus précisément ;)
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#3
Re: [SCRIPT] Détection du client D. et initialisation des ca

A mon avis on n'a pas compté les mêmes cases :). Je n'ai compté que les cases utilisables.
Tu dis 560, je dis 546. Ca fait 14 cases d'écart, soit une ligne. A mon avis, tu as compté une ligne alors qu'elle n'est pas utilisable :).

Tu l'as essayé sinon? Un retour à faire?
 
A

Anonymous

Invité
#4
Re: [SCRIPT] Détection du client D. et initialisation des ca

Non exactement 560 cellules (0 à 559).
Tu n'as comptés que les cases utilisables sauf que le nombre varie celon la map. Il faut lire les D2P pour connaitre les case utilisable de chaque map.
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#5
Re: [SCRIPT] Détection du client D. et initialisation des ca

Justement, je me demandais où se situent ces D2P? Trouvé les D2O, mais comment lire ces deux formats?
Et merci de me le préciser, je ne savais pas que ça variait ! (à part en intérieur et à Bonta/Brakmar)

Tous les tests effectués jusqu'à maintenant ont été concluants pourtant.

Si je pourrai accéder à ces D2O/D2P, je pourrais me baser sur des données correctes et non inventées, ça serait fun si je continue ce bot pixel !
 
A

Anonymous

Invité
#6
Re: [SCRIPT] Détection du client D. et initialisation des ca

Lire les d2p/d2o en Autoit -> :(
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#7
Re: [SCRIPT] Détection du client D. et initialisation des ca

En fait j'aimerai me mettre au VB.Net, mais... Je ne m'y connais pas du tout !
Est-il difficile à apprendre? Les structures des projets que j'ai vu jusqu'à maintenant étaient assez complexes.

Un super tuto VB.Net à me proposer peut-être?
Ou simplement une explication de la structure d'un d2p/d2o pour que je puisse adapter?

J'aime l'AutoIt, cette ambiance miteuse, débutante, mais aux énormes possibilités. En prog, la seule limite est notre imagination. Je n'aurai jamais pensé qu'un jour je saurai initialiser les cases de D. en fonction de la taille de la zone client, gérer les redimensionnements etc... Alors oui tout est possible, il faut juste la compréhension, et l'envie d'apprendre.

Je pense que de toutes manières, si quelqu'un n'a pas envie d'apprendre, il n'a rien à faire sur ce forum !

Alors, on m'aiguille? :)
 
A

Anonymous

Invité
#8
Re: [SCRIPT] Détection du client D. et initialisation des ca

Va apprendre les bases sur le site du zéro. Pas en socket tu vas rien comprendre. Télécharge Overedge.
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#9
Re: [SCRIPT] Détection du client D. et initialisation des ca

Oh, sur SdZ y'a des tutos VB.Net? Super !
Et je ne pensais pas qu'Overedge était encore d'actualité, merci !
 
A

Anonymous

Invité
#10
Re: [SCRIPT] Détection du client D. et initialisation des ca

Qu'est ce que tu appelels et d'actualité ?
Le parseur fonctionne.
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#11
Re: [SCRIPT] Détection du client D. et initialisation des ca

Chez moi non. Je reçois le packet 1, puis le 3, et... Plus rien !
J'ai mis à jour la version avec

Code:
Version_.initVersion(2, 4, 6, 58635, 1, 0)
Mais il bloque après le paquet 3
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#12
Re: [SCRIPT] Détection du client D. et initialisation des ca

Y a rien à recevoir après le paquet 3, il attend l'authentification.
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#13
Re: [SCRIPT] Détection du client D. et initialisation des ca

Oui et bien alors OverEdge n'envoie rien :D
 
Inscrit
31 Mars 2012
Messages
102
Reactions
0
#14
Re: [SCRIPT] Détection du client D. et initialisation des ca

Si il l'envois mais ce n'est plus a jour, de 1: le cryptage n'est plus a jour (RSA) et la clef n'est plus en string mais un tableaux de integer je croit! si tu veux de l'aide mp moi ;)
 
A

Anonymous

Invité
#15
Re: [SCRIPT] Détection du client D. et initialisation des ca

Exact.

Il y a un poste sur le cryptage partie VB.NET, et l'envoi du packet à changé. C'est plutot simple.
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#16
Re: [SCRIPT] Détection du client D. et initialisation des ca

Apparemment j'ai déjà tout ce qu'il faut pour le RSA dans le projet que j'ai récupéré.
Mais tu dis que l'envoi du packet a changé. Je peux avoir de plus amples informations?

Moi, j'ai :

Code:
     Case 3
           ID_Message = New Messages.Connection.HelloConnectMessage
           ID_Message.Deserialize(PacketData)
           ' Récupération de la clef
           Dim key = ID_Message.key
           ' Cryptage du pass
           Dim Account As String = NdC.Text
           Dim Password As String = MdP.Text
           Dim passe As String
           passe = RSA.cipherRsaString(key, MdP.Text)
           ' Création de la version
           Dim Version_ As New Types.Version.Version
           Version_.initVersion(2, 4, 6, 58635, 1, 0)
           Dim certificate As New List(Of TrustCertificate)

           ' Envoi du packet
           Dim Message As New Messages.Connection.IdentificationMessage
           Message.initIdentificationMessage(Version_, Account, Passe, certificate, True)
           Message.pack(_socket_Connexion) ' _socket_Connexion car on est en case 3 qui est entre 0 et 42 (inclus) , au dessus de 42 ca serait _socket_Jeu
 
A

Anonymous

Invité
#17
Re: [SCRIPT] Détection du client D. et initialisation des ca

Oui le RSA a l'air correct, je ne vois pas quoi te dire de plus, ce qui est a modifier est le identification message. Retraduit la class, ensuite dans la class traduite tu auras un initidentificationmessage qui correspond donc a la partie envoi du packet, tu trouvera dans le init ce qu'il y a a mettre a jour.
 
Inscrit
31 Mars 2012
Messages
102
Reactions
0
#18
Re: [SCRIPT] Détection du client D. et initialisation des ca

nan le RSA n'est pas correct, je répète ^^
le RSA n'est plus en string mais un tableau de integer donc il faut modifier ton Helloconnectmessage et peu-être le authentification message, je ne sais plus, je n'ai pas la source sur la main, je ne travaille pas sur over et
il faut essayer de comprendre par sois même pour continuer
car la je ne suis que au Pathfing et c'est loin d'être fini.

edit : si j'ai la source sous la main mais de mon bot donc quelque truc son faut :p
Je te donne exceptionnellement la classe pour que tu comprenne bien.
mais ne cois pas que je vais toute te le filer une par une ;)
la voilla et prends le RSA sur le poste comme la dit plus haut lolodu92

Code:
Imports System
Imports System.Collections.Generic

Public Class HelloConnectMessage
   Private Count As Integer
    Public Const ProtocolID As Integer = 3
    Public ProtocolName As String = "HelloConnectMessage"
    Private v_key As List(Of Integer) = New List(Of Integer)
    Private v_salt As String = String.Empty
       Public Sub Deserialize(ByVal reader As DataReader)
        Me.v_salt = reader.readString
        Me.Count = reader.readShort
        Dim i As Integer
        For i = 0 To Me.Count - 1
            Dim item As Byte = reader.readByte
            Me.v_key.Add(item)
        Next i
    End Sub

    Public Sub Serialize(ByVal writer As DataWriter)
        writer.Write(Me.v_salt)
        writer.Write(CShort(Me.v_key.Count))
        Dim num As Byte
        For Each num In Me.v_key
            writer.Write(num)
        Next
    End Sub
    Public Property key As List(Of Integer)
        Get
            Return Me.v_key
        End Get
        Set(ByVal value As List(Of Integer))
            Me.v_key = value
        End Set
    End Property
    Public Property salt As String
        Get
            Return Me.v_salt
        End Get
        Set(ByVal value As String)
            Me.v_salt = value
        End Set
    End Property
End Class
 

d4rkv4n

Contributeur
Inscrit
6 Mai 2012
Messages
129
Reactions
0
#19
Re: [SCRIPT] Détection du client D. et initialisation des ca

Ah oui ça doit venir de là...

Dans le fichier D. original j'ai :

Code:
        private var _isInitialized:Boolean = false;
        public var version:Version;
        public var lang:String = "";
        public var login:String = "";
        public var credentials:Vector.<int>;
        public var serverId:int = 0;
        public var autoconnect:Boolean = false;
        public var useCertificate:Boolean = false;
        public var useLoginToken:Boolean = false;
        public static const protocolId:uint = 4;
Que dans l'autre :

Code:
 Private _isInitialized As Boolean = False
        Public version As Types.Version.Version
        Public login As String = ""
        Public password As String = ""
        Public certificate As New List(Of TrustCertificate)
        Public autoconnect As Boolean = False
        Public protocolId As UInteger = 4
        Public Function IdentificationMessage()
            Me.Version = New Version()

            Return Me
        End Function
On voit donc bien qu'il manque des variables... Rah, je voulais apprendre sur le terrain, ça va être dur comme ça ! :D

EDIT : @nico1705, le RSA me semble bon à ce que j'ai pu voir. J'ai même copié le PUBLIC_KEY officiel...

Voilà le fichier que j'ai :

Code:
Imports System.Security.Cryptography
Imports CSInteropKeys
Public Class RSA

    Shared PUBLIC_KEY As String = "-----BEGIN PUBLIC KEY-----\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApHRiGIhIJrNdUJkKGtWC\n" + "sSqIza+2gPsjGXhSoDTOcokq59Et8d8SzgF68RvAZXezPO8tnUhlyvaDem4QSFLV\n" + "PVAmSRcp47HW4lpp11WHBlDsEEXQTBkM8nDyqSgn8dMANvButRDt/44OKslrfqmV\n" + "7ANmZggZ2wXN0T6XWt3FVC66X8+E7rUMUOREQYCDq3zrX4dNYy3y21lyJZeXTkSd\n" + "AmijqIHrrwLPTA/wpWLCEaIJ9OAWjds8L6TqONXvnf3qOtI/QsrWv24lRjtmRSeR\n" + "eKFIPrk8QQbcd2h4VUi06fJZ2ydCx0pOwU33izN42pmZoCrgdCwghFm1i2feQa0M\n" + "vQIDAQAB\n" + "-----END PUBLIC KEY-----"
    Friend Shared Crypt As RSACryptoServiceProvider
    Friend Shared rsaParameter As RSAParameters
    Friend Shared KEY_HEADER As String = "-----BEGIN PUBLIC KEY-----"
    Friend Shared KEY_FOOTER As String = "-----END PUBLIC KEY-----"

    Public Shared Function cipherRsaString(ByVal key As String, ByVal password As String) As String
        'On encode la _key reçus dans HelloConnectMessage avec le mot de passe en Bytes.
        Dim Input() As Byte = System.Text.Encoding.UTF8.GetBytes(key + password)
        'On déclare un nouveau Service de cryptage RSA pour chiffrer et déchiffrer.
        Crypt = New RSACryptoServiceProvider

        'On convertit la PUBLIC_KEY en un tableau d'entiers de 8bits.
        Dim BinaryData() As Byte = GetPublicKey()

        'On utilise CSInteropKeys pour parser la clé et obtenir les informations du cryptage RSA.
        Dim KeyParser As New AsnKeyParser(BinaryData)
        rsaParameter = KeyParser.ParseRSAPublicKey()

        'On importe les paramètres dans notre service de cryptage.
        Crypt.ImportParameters(rsaParameter)

        'On encrypte La clé, avec le mot de passe, celon les paramètres de la public key.
        Dim Ouput() As Byte = Crypt.Encrypt(Input, False)

        'On convertit notre tableau de bytes en chaine de caractère, et on la renvoit en résultat de fonction.
        Return System.Convert.ToBase64String(Ouput)
    End Function

    'Fonction développée par Maxilia.
    Friend Shared Function GetPublicKey() As Byte()

        'On définie deux index pour lire la PublicKey
        Dim Index1 As Integer = KEY_HEADER.Length
        Dim Index2 As Integer = PUBLIC_KEY.IndexOf(KEY_FOOTER) - Index1

        'On obtient ici la PublicKey sans le header et le footer
        Dim Temp As String = PUBLIC_KEY.Substring(Index1, Index2)

        'On supprime les saut de ligne
        Temp = Temp.Replace("\n", "")

        'On convertie la Key en Byte et on la retourne.
        Return Convert.FromBase64String(Temp)

    End Function
End Class

Mais tu disais que ce n'était plus du String mais un tableau de Int. Là, je comprends pas. Où est-ce que je peux trouver ça? Pas de trace trouvée sur le forum pour l'instant malgré mes recherches =/.
 
Haut Bas