[Ex] Automatiser le lancement du jeu Starcraft BroodWar

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

[Ex] Automatiser le lancement du jeu Starcraft BroodWar

#1

Message par orax »

J'utilise ce script pour automatiser le lancement de BroodWar (version française), pour accéder à Battle.net et afficher la liste des parties en cours.
Il permet aussi d'afficher une "info bulle" (via la touche "PAUSE") avec la dernière carte accédée, créé et modifiée, ainsi que la mesure du temps de latence (un simple "ping" vers un site). En gros, cela vous permet de savoir si, lorsque vous rejoignez une partie, vous avez oui ou non la carte (ce qui évite de bloquer tout le monde).

Changez les "Global Const" si besoin, notamment le mot de passe ! (Concernant le mot de passe, s'il est écrit en clair dans le script, il semble possible de le récupérer même après compilation. Voir "Pas d'information confidentielle dans vos scripts" : http://www.autoitscript.fr/forum/viewto ... 92&start=0)

Code : Tout sélectionner

#include <File.au3>
#include <Array.au3>

Global Const $MOT_DE_PASSE = "ENTREZ_VOTRE_MOT_DE_PASSE"
Global Const $STARCRAFT_EXE = "C:\Program Files\Starcraft\StarCraft.exe"
Global Const $STARCRAFT_REPERTOIRE_CARTES = "C:\Program Files\Starcraft\maps\download\"
Global Const $STARCRAFT_TITRE_FENETRE = "Brood War"

Global $coord
Global $pause

Local $taille

HotKeySet("{PAUSE}", "pause")
HotKeySet("^!{ESC}", "termineScript")

Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 4)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)

; exécute le jeu
If Not WinExists($STARCRAFT_TITRE_FENETRE) Then
    Run($STARCRAFT_EXE)
    WinWait($STARCRAFT_TITRE_FENETRE, "")
    If Not WinActive($STARCRAFT_TITRE_FENETRE, "") Then WinActivate($STARCRAFT_TITRE_FENETRE, "")
    WinWaitActive($STARCRAFT_TITRE_FENETRE, "")
EndIf

; boucles pour automatiser le lancement jusqu'à l'affichage des parties en cours
While PixelChecksum(204, 165, 287, 204) <> 2616265089
    If Not WinExists($STARCRAFT_TITRE_FENETRE) Then Exit
    Sleep(100)
WEnd
Sleep(100)
Send("!m")

While PixelChecksum(204, 165, 287, 204) <> 3600808116
    If Not WinExists($STARCRAFT_TITRE_FENETRE) Then Exit
    Sleep(100)
WEnd
Sleep(100)
Send("!b")

While PixelChecksum(357, 42, 587, 279) <> 1190038825
    If Not WinExists($STARCRAFT_TITRE_FENETRE) Then Exit
    Sleep(100)
WEnd
Sleep(100)
Send("{ENTER}")

WinWait("classname=SDlgDialog", "Changer d'&email")
If Not WinExists($STARCRAFT_TITRE_FENETRE) Then Exit
Send($MOT_DE_PASSE)
Send("{ENTER}")
While WinActive("classname=SDlgDialog") <> 1
    Sleep(10)
WEnd
Sleep(750)
If Not WinExists($STARCRAFT_TITRE_FENETRE) Then Exit
Send("!r")

MouseMove(290, 150, 0)

; boucle tant que Stracraft n'est pas fermé
While 1
    Sleep(1000)
    If Not WinExists($STARCRAFT_TITRE_FENETRE) Then Exit
WEnd

; affiche une "info bulle" avec la dernière carte accédée, créé et modifiée,
; ainsi que la mesure du temps de latence ("ping" vers un site)
Func Principale()
    Local $FileList = _FileListToArray($STARCRAFT_REPERTOIRE_CARTES)
    Local $temp = $FileList[0] + 1
    
    Dim $FileList_fichier[$temp]
    Dim $FileList_date[$temp]
    Dim $FileList_date_c[$temp]
    Dim $FileList_date_m[$temp]
    
    For $i = 1 To $FileList[0]
        $t = FileGetTime($STARCRAFT_REPERTOIRE_CARTES & $FileList[$i], 2) ; date d'accès
        $t_2 = FileGetTime($STARCRAFT_REPERTOIRE_CARTES & $FileList[$i], 1) ; date de création
        $t_3 = FileGetTime($STARCRAFT_REPERTOIRE_CARTES & $FileList[$i], 0) ; date de modification
        
        $date = $t[0] & $t[1] & $t[2] & $t[3] & $t[4] & $t[5]
        $date_c = $t_2[0] & $t_2[1] & $t_2[2] & $t_2[3] & $t_2[4] & $t_2[5]
        $date_m = $t_3[0] & $t_3[1] & $t_3[2] & $t_3[3] & $t_3[4] & $t_3[5]
        
        $FileList_fichier[$i] = $FileList[$i]
        
        $FileList_date[$i] = $date
        $FileList_date_c[$i] = $date_c
        $FileList_date_m[$i] = $date_m
    Next
    
    $temp = _ArrayMaxIndex($FileList_date, 1, 1)
    $temp_2 = _ArrayMaxIndex($FileList_date_c, 1, 1)
    $temp_3 = _ArrayMaxIndex($FileList_date_m, 1, 1)

    $ping = Ping("yahoo.fr", 250) ; ping yahoo
    
    ToolTip("Accès" & @TAB & @TAB & $FileList_fichier[$temp] & @CRLF & _
            "Création" & @TAB & $FileList_fichier[$temp_2] & @CRLF & _
            "Modification" & @TAB & $FileList_fichier[$temp_3] & @CRLF & _
            "Ping" & @TAB & @TAB & $ping, 0, 0)
EndFunc   ;==>Principale

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

; met en pause le script
Func pause()
    $pause = Not $pause
    While $pause
        Call("Principale")
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause

; termine le script
Func termineScript()
    Exit
EndFunc   ;==>Terminate
Modifié en dernier par Tlem le sam. 28 mars 2009 00:32, modifié 1 fois.
Raison : Ajout balise code autoit
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Répondre